diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt index b5f36979ed8..07bfbea7e88 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt @@ -71,6 +71,13 @@ sealed class NativeBinary( linkerOpts.addAll(options) } + var binaryOptions: MutableMap = mutableMapOf() + + fun binaryOption(name: String, value: String) { + // TODO: report if $name is unknown? + binaryOptions[name] = value + } + /** Additional arguments passed to the Kotlin/Native compiler. */ var freeCompilerArgs: List get() = linkTask.kotlinOptions.freeCompilerArgs 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 aee68c3ecb4..76ee28dcb5a 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 @@ -585,6 +585,19 @@ constructor( val linkerOpts: List @Input get() = binary.linkerOpts + val binaryOptions: Map + @Input get() = binary.binaryOptions + + val projectWideBinaryOptions: Map + @Input get() = project.properties.mapNotNull { (name, value) -> + val prefix = KOTLIN_NATIVE_BINARY_OPTION_PREFIX + if (name.startsWith(prefix) && value is String) { + name.removePrefix(prefix) to value + } else { + null + } + }.toMap() + val processTests: Boolean @Input get() = binary is TestExecutable @@ -628,6 +641,9 @@ constructor( linkerOpts.forEach { addArg("-linker-option", it) } + (projectWideBinaryOptions + binaryOptions).forEach { (name, value) -> + add("-Xbinary=$name=$value") + } exportLibraries.files.filterKlibsPassedToCompiler().forEach { add("-Xexport-library=${it.absolutePath}") } @@ -689,6 +705,10 @@ constructor( validatedExportedLibraries() super.compile() } + + private companion object { + const val KOTLIN_NATIVE_BINARY_OPTION_PREFIX = "kotlin.native.binary." + } } private class ExternalDependenciesBuilder(