From f7e2572ccc0fc813b387858485ccba7b77e31c27 Mon Sep 17 00:00:00 2001 From: Pavel Punegov Date: Tue, 16 Nov 2021 14:06:54 +0300 Subject: [PATCH] [K/N][build] Add noPack option to Konan plugin Make plugin aware of -nopack compiler option to correctly set outputs without .klib suffix. --- kotlin-native/runtime/build.gradle.kts | 9 ++++++++- .../gradle/plugin/konan/KonanCompileConfig.kt | 1 + .../kotlin/gradle/plugin/konan/KonanSpecs.kt | 1 + .../gradle/plugin/konan/tasks/KonanCompileTask.kt | 14 +++++++++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/kotlin-native/runtime/build.gradle.kts b/kotlin-native/runtime/build.gradle.kts index 30884f07ebf..252e615acc9 100644 --- a/kotlin-native/runtime/build.gradle.kts +++ b/kotlin-native/runtime/build.gradle.kts @@ -404,14 +404,20 @@ val stdLibSrcDirs = interopSrcDirs + listOf( project(":kotlin-stdlib-common").file("../native-wasm/src/") ) -val args = listOf("-nopack", "-nostdlib", "-no-default-libs", "-no-endorsed-libs", /* -Werror (TODO: check) */) +val args = listOf(/* -Werror (TODO: check) */) lateinit var stdlibBuildTask: TaskProvider konanArtifacts { library("stdlib") { baseDir(project.buildDir.resolve("stdlib")) + enableMultiplatform(true) + noStdLib(true) + noPack(true) + noDefaultLibs(true) + noEndorsedLibs(true) + extraOpts(args + project.globalBuildArgs) extraOpts( "-module-name", "stdlib", @@ -421,6 +427,7 @@ konanArtifacts { "-opt-in=kotlin.native.internal.InternalForKotlinNative", "-opt-in=kotlin.native.SymbolNameIsDeprecated" ) + srcFiles(commonBuiltinsSrc) commonStdlibSrcDirs.forEach { commonSrcDir(it) } testAnnotationCommonSrcDir.forEach { commonSrcDir(it) } diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanCompileConfig.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanCompileConfig.kt index 291bb599d45..cd2e242f2c4 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanCompileConfig.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanCompileConfig.kt @@ -66,6 +66,7 @@ abstract class KonanCompileConfig(name: String, override fun enableDebug(flag: Boolean) = tasks().forEach { it.configure { enableDebug(flag) } } override fun noStdLib(flag: Boolean) = tasks().forEach { it.configure { noStdLib(flag) } } override fun noMain(flag: Boolean) = tasks().forEach { it.configure { noMain(flag) } } + override fun noPack(flag: Boolean) = tasks().forEach { it.configure { noPack(flag) } } override fun enableOptimizations(flag: Boolean) = tasks().forEach { it.configure { enableOptimizations(flag) } } override fun enableAssertions(flag: Boolean) = tasks().forEach { it.configure { enableAssertions(flag) } } diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanSpecs.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanSpecs.kt index ac16fe98a15..3111dbf5cc9 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanSpecs.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanSpecs.kt @@ -74,6 +74,7 @@ interface KonanCompileSpec: KonanBuildingSpec { fun enableDebug(flag: Boolean) fun noStdLib(flag: Boolean) fun noMain(flag: Boolean) + fun noPack(flag: Boolean) fun enableOptimizations(flag: Boolean) fun enableAssertions(flag: Boolean) diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompileTask.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompileTask.kt index ded09987282..8d7bf3c125d 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompileTask.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompileTask.kt @@ -82,6 +82,7 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec { @Input var noStdLib = false @Input var noMain = false + @Input var noPack: Boolean = false @Input var enableOptimizations = project.environmentVariables.enableOptimizations @Input var enableAssertions = false @@ -187,7 +188,7 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec { } /** Args passed to the compiler at both stages of the two-stage compilation and during the singe-stage compilation. */ - protected fun buildCommonArgs() = mutableListOf().apply { + protected open fun buildCommonArgs() = mutableListOf().apply { addArgs("-repo", libraries.repos.map { it.canonicalPath }) if (platformConfiguration.files.isNotEmpty()) { @@ -312,6 +313,10 @@ abstract class KonanCompileTask: KonanBuildingTask(), KonanCompileSpec { noMain = flag } + override fun noPack(flag: Boolean) { + noPack = flag + } + override fun enableOptimizations(flag: Boolean) { enableOptimizations = flag } @@ -386,6 +391,13 @@ open class KonanCompileFrameworkTask: KonanCompileNativeBinary() { } open class KonanCompileLibraryTask: KonanCompileTask() { + override val artifactSuffix: String + @Internal get() = if (!noPack) produce.suffix(konanTarget) else "" + + override fun buildCommonArgs() = super.buildCommonArgs().apply { + addKey("-nopack", noPack) + } + override val produce: CompilerOutputKind get() = CompilerOutputKind.LIBRARY override val enableTwoStageCompilation: Boolean = false }