From ce3ed527052e9fa9c7e19fca7fe2df366b581f14 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Fri, 8 Sep 2017 13:41:08 +0300 Subject: [PATCH] [build]: platform lib build added distPlatformLibs - command build and install klibs in dist --- build.gradle | 45 +++++++++++++++++++ klib/platform.gradle | 31 +++++++++++++ .../kotlin/konan/target/KonanTarget.kt | 19 ++++++++ 3 files changed, 95 insertions(+) create mode 100644 klib/platform.gradle diff --git a/build.gradle b/build.gradle index adb45f6a4ea..d8fb604233e 100644 --- a/build.gradle +++ b/build.gradle @@ -264,6 +264,51 @@ targetList.each { target -> } } } + + targetDefFiles(target).forEach{ + defFile -> + def taskName = defFileToTaskName(target, defFile) + def suffix = null + if (new PlatformInfo().isWindows()) + suffix = 'bat' + task(taskName, type:GradleBuild) { + dependsOn ':tools:kotlin-native-gradle-plugin:jar' + tasks = ['clean', 'compileKonan', 'klibInstall'] + buildFile project('klib').file('platform.gradle') + dir project(':klib').projectDir + startParameter.projectProperties = [ + 'kotlin_version' : kotlin_version, + 'name' : defToLibName(defFile), + 'defFile' : defFile.absolutePath, + 'konan.home' : project.file('dist'), + 'target' : target, + 'suffix' : suffix + ] + } + } +} + +private ArrayList targetDefFiles(String target) { + def platform = targetToPlatform(target) + project(':klib').file("src/platform/$platform").listFiles().findAll { it.name.endsWith(".def") } +} + +private String targetToPlatform(String target) { + new TargetManager(target).target.platform.name().toLowerCase() +} + +private String defFileToTaskName(String target, File defFile) { + def libname = defToLibName(defFile) + return "$target-$libname".toString() +} + +private String defToLibName(File defFile) { + defFile.name.split('\\.').dropRight(1).join('.') +} + +task distPlatformLibs { + def target = TargetManager.host.name().toLowerCase() + dependsOn targetDefFiles(target).collect {defFileToTaskName(target, it)} } task dist { diff --git a/klib/platform.gradle b/klib/platform.gradle new file mode 100644 index 00000000000..9898324ae5f --- /dev/null +++ b/klib/platform.gradle @@ -0,0 +1,31 @@ +apply plugin: 'konan' + +buildscript { + dependencies { + classpath files(project.file('../tools/kotlin-native-gradle-plugin/build/libs').listFiles().findAll { + it.name.endsWith('.jar') + }.collect().first().absolutePath) + } +} + +def taskName = "${gradle.startParameter.projectProperties['name']}" + +konanInterop { + "$taskName" { + defFile gradle.startParameter.projectProperties.defFile + pkg gradle.startParameter.projectProperties.name + target gradle.startParameter.projectProperties.target + } +} + +def suffix = gradle.startParameter.projectProperties['suffix'] +def klibProgram = suffix?"${gradle.startParameter.projectProperties['konan.home']}/bin/klib.$suffix" : "${gradle.startParameter.projectProperties['konan.home']}/bin/klib" + +task klibInstall(type:Exec) { + dependsOn compileKonan + commandLine klibProgram, + 'install', + project.file("build/konan/interopCompiledStubs/${taskName}InteropStubs/${taskName}InteropStubs.klib"), + '-repository', + gradle.startParameter.projectProperties['konan.home'] +} \ No newline at end of file diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt index f6bda9606e8..9ae98e3af05 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt @@ -16,6 +16,14 @@ package org.jetbrains.kotlin.konan.target +enum class Platform { + OSX, + LINUX, + WINDOWS, + ANDROID, + WASM +} + enum class KonanTarget(val targetSuffix: String, val programSuffix: String, var enabled: Boolean = false) { ANDROID_ARM32("android_arm32", "so"), ANDROID_ARM64("android_arm64", "so"), @@ -28,6 +36,17 @@ enum class KonanTarget(val targetSuffix: String, val programSuffix: String, var WASM32("wasm32", "wasm"); val userName get() = name.toLowerCase() + val platform get() = when (this) { + ANDROID_ARM32 -> Platform.ANDROID + ANDROID_ARM64 -> Platform.ANDROID + IPHONE -> Platform.OSX + IPHONE_SIM -> Platform.OSX + MACBOOK -> Platform.OSX + RASPBERRYPI -> Platform.LINUX + LINUX -> Platform.LINUX + MINGW -> Platform.WINDOWS + WASM32 -> Platform.WASM + } } fun hostTargetSuffix(host: KonanTarget, target: KonanTarget) =