diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index ea2093fd1d9..c96ec7eda15 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.HostManager import org.junit.Assert +import org.junit.Ignore import org.junit.Test import java.util.jar.JarFile import java.util.zip.ZipFile @@ -1037,6 +1038,9 @@ class NewMultiplatformIT : BaseGradleIT() { assertTrue(it.contains("-Xtime")) // Check that kotlinOptions of the compilation don't affect the binary. assertFalse(it.contains("-verbose")) + // Check that free args are still propagated to the binary (unlike other kotlinOptions, see KT-33717). + // TODO: Reverse this check when the args are fully separated. + assertTrue(it.contains("-nowarn")) } assertTrue(output.contains("tests.foo")) } @@ -1141,6 +1145,9 @@ class NewMultiplatformIT : BaseGradleIT() { } } + // We propagate compilation args to link tasks for now (see KT-33717). + // TODO: Reenable the test when the args are separated. + @Ignore @Test fun testNativeFreeArgsWarning() = with(transformProjectWithPluginsDsl("kotlin-dsl", gradleVersion, "new-mpp-native-binaries")) { gradleBuildScript().appendText( diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/groovy-dsl/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/groovy-dsl/build.gradle index d2c24e9ada6..777ea9ed6c8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/groovy-dsl/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/groovy-dsl/build.gradle @@ -37,7 +37,8 @@ kotlin { mingwX64("mingw64") configure([macos64, linux64, mingw64]) { - compilations.main.kotlinOptions.verbose = true + compilations.all { kotlinOptions.verbose = true } + compilations.test.kotlinOptions.freeCompilerArgs += "-nowarn" binaries { executable() // Executable with default name. diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/kotlin-dsl/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/kotlin-dsl/build.gradle.kts index 108e034de68..d30d90837bc 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/kotlin-dsl/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/kotlin-dsl/build.gradle.kts @@ -27,7 +27,8 @@ kotlin { val windows = mingwX64("mingw64") configure(listOf(macos, linux, windows)) { - compilations["main"].kotlinOptions.verbose = true + compilations.all { kotlinOptions.verbose = true } + compilations["test"].kotlinOptions.freeCompilerArgs += "-nowarn" binaries { executable() // Executable with default name. diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt index e08f6fbd2a3..aee2ea7b6c6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt @@ -24,8 +24,9 @@ class KotlinNativeCompilationFactory( if (name == KotlinCompilation.TEST_COMPILATION_NAME) { friendCompilationName = KotlinCompilation.MAIN_COMPILATION_NAME } - project.whenEvaluated { - CompilationFreeArgsValidator.validate(this@apply) - } + // TODO: Validate compilation free args using the [CompilationFreeArgsValidator] + // when the compilation and the link args are separated (see KT-33717). + // Note: such validation should be done in the whenEvaluate block because + // a user can change args during project configuration. } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 67aefdf37b4..20586991eee 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -121,15 +121,15 @@ abstract class AbstractKotlinNativeCompile : Abstra val target: String @Input get() = compilation.target.konanTarget.name - val additionalCompilerOptions: Collection - @Input get() = kotlinOptions.freeCompilerArgs - // region Compiler options. @get:Internal abstract val kotlinOptions: T abstract fun kotlinOptions(fn: T.() -> Unit) abstract fun kotlinOptions(fn: Closure<*>) + @get:Input + abstract val additionalCompilerOptions: Collection + @get:Internal val languageSettings: LanguageSettingsBuilder? get() = project.kotlinExtension.sourceSets.findByName(compilation.defaultSourceSetName)?.languageSettings @@ -310,6 +310,10 @@ open class KotlinNativeCompile : AbstractKotlinNativeCompile + get() = kotlinOptions.freeCompilerArgs + override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions() override fun kotlinOptions(fn: KotlinCommonOptions.() -> Unit) { @@ -412,6 +416,11 @@ open class KotlinNativeLink : AbstractKotlinNativeCompile = listOf() } + // We propagate compilation free args to the link task for now (see KT-33717). + @get:Input + override val additionalCompilerOptions: Collection + get() = kotlinOptions.freeCompilerArgs + compilation.kotlinOptions.freeCompilerArgs + override val kotlinOptions: KotlinCommonToolOptions = NativeLinkOptions() override fun kotlinOptions(fn: KotlinCommonToolOptions.() -> Unit) {