From a8fee4d4bb8a46f652356847d4102481ab84fa8f Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Mon, 30 Jan 2023 15:24:12 +0100 Subject: [PATCH] Don't override compilation freeCompilerArgs in link task Calling '.addAll()' was replacing convention value leading for inability to add/modify Kotlin/Native link task freeCompilerArgs via KotlinCompilation.options.freeCompilerArgs. For now convention was replaced by normal value. ^KT-56280 Fixed --- .../gradle/native/KotlinNativeLinkIT.kt | 47 +++++++++++++++++++ .../native/KotlinNativeTargetConfigurator.kt | 7 ++- .../targets/native/tasks/KotlinNativeLink.kt | 3 -- 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeLinkIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeLinkIT.kt index a716b52272cf0..21f688a3658fc 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeLinkIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeLinkIT.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.native import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* import org.junit.jupiter.api.DisplayName +import kotlin.io.path.appendText @DisplayName("KotlinNativeLink task tests") @NativeGradlePluginTests @@ -20,4 +21,50 @@ internal class KotlinNativeLinkIT : KGPBaseTest() { build("tasks") } } + + @DisplayName("KT-56280: should propagate freeCompilerArgs from compilation") + @GradleTest + fun shouldUseCompilationFreeCompilerArgs(gradleVersion: GradleVersion) { + nativeProject("native-link-simple", gradleVersion) { + buildGradle.appendText( + """ + | + |kotlin { + | targets.named("host").configure { + | binaries.executable() + | } + | + | targets.withType(org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget.class) { + | compilations.main.kotlinOptions { + | freeCompilerArgs += ["-e", "main"] + | } + | } + |} + """.trimMargin() + ) + + build("linkReleaseExecutableHost") { + val linkTaskOutput = output + .substringAfter("Task :linkReleaseExecutableHost") + .substringBefore("Task :linkHost") + assert(linkTaskOutput.isNotEmpty()) { + "Could not get :linkReleaseExecutableHost task output!" + } + + val args = linkTaskOutput + .substringAfterLast("Transformed arguments = [") + .substringBefore("]") + .lines() + .map { it.trim() } + assert( + args.isNotEmpty() && + args.contains("-e") && + args.contains("main") + ) { + printBuildOutput() + "Link task arguments does not contain '-e main'!" + } + } + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 85499d6e0e421..86f299a030df9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -70,9 +70,8 @@ open class KotlinNativeTargetConfigurator : AbstractKotl val konanPropertiesBuildService = KonanPropertiesBuildService.registerIfAbsent(project.gradle) it.konanPropertiesService.set(konanPropertiesBuildService) it.usesService(konanPropertiesBuildService) - it.toolOptions.freeCompilerArgs.convention( - compilationCompilerOptions.options.freeCompilerArgs - ) + it.toolOptions.freeCompilerArgs.value(compilationCompilerOptions.options.freeCompilerArgs) + it.toolOptions.freeCompilerArgs.addAll(providers.provider { PropertiesProvider(project).nativeLinkArgs }) } @@ -90,7 +89,7 @@ open class KotlinNativeTargetConfigurator : AbstractKotl tasks.named(binary.linkTaskName, KotlinNativeLink::class.java).configure { // We propagate compilation free args to the link task for now (see KT-33717). val defaultLanguageSettings = binary.compilation.languageSettings as? DefaultLanguageSettingsBuilder - if (defaultLanguageSettings != null) { + if (defaultLanguageSettings != null && defaultLanguageSettings.freeCompilerArgs.isNotEmpty()) { it.toolOptions.freeCompilerArgs.addAll( defaultLanguageSettings.freeCompilerArgs ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt index dfae5385d569b..6616f3a28b7f1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt @@ -57,9 +57,6 @@ constructor( final override val toolOptions: KotlinCommonCompilerToolOptions = objectFactory .newInstance() - .apply { - freeCompilerArgs.addAll(PropertiesProvider(project).nativeLinkArgs) - } init { @Suppress("DEPRECATION")