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 31a6f6c0d51..d4c52066e3a 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 @@ -990,12 +990,13 @@ class NewMultiplatformIT : BaseGradleIT() { } } - // Check manual disabling bitcode embedding and custom command line args. + // Check manual disabling bitcode embedding, custom command line args and building a static framework. build("linkCustomReleaseFrameworkIos") { assertSuccessful() checkFrameworkCompilationCommandLine { assertTrue(it.contains("-linker-options -L.")) assertTrue(it.contains("-Xtime")) + assertTrue(it.contains("-Xstatic-framework")) assertFalse(it.contains("-Xembed-bitcode-marker")) assertFalse(it.contains("-Xembed-bitcode")) } 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 0d4924b97d1..f8687f5c274 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 @@ -73,6 +73,7 @@ kotlin { embedBitcode = 'DISABLE' linkerOpts = ['-L.'] freeCompilerArgs = ["-Xtime"] + isStatic = true } } } 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 ad4e925b7f8..93a4fc8934b 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 @@ -65,6 +65,7 @@ kotlin { embedBitcode("disable") linkerOpts = mutableListOf("-L.") freeCompilerArgs = mutableListOf("-Xtime") + isStatic = true } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/cocoapods/KotlinCocoapodsPlugin.kt index 3d651b0b0ab..114104071c6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/cocoapods/KotlinCocoapodsPlugin.kt @@ -102,8 +102,7 @@ open class KotlinCocoapodsPlugin: Plugin { private fun createDefaultFrameworks(kotlinExtension: KotlinMultiplatformExtension) { kotlinExtension.supportedTargets().all { target -> target.binaries.framework { - // TODO: Add in the framework DSL. - this.freeCompilerArgs.add("-Xstatic-framework") + isStatic = true } } } 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 b6237ada13e..b7c6ca9fcc0 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 @@ -234,6 +234,11 @@ class Framework( */ fun embedBitcode(mode: String) = embedBitcode(BitcodeEmbeddingMode.valueOf(mode.toUpperCase())) + /** + * Specifies if the framework is linked as a static library (false by default). + */ + var isStatic = false + enum class BitcodeEmbeddingMode { /** Don't embed LLVM IR bitcode. */ DISABLE, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinNativeTasks.kt index a0c4b794a0b..2fcaa0ab9eb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinNativeTasks.kt @@ -370,6 +370,10 @@ open class KotlinNativeLink : AbstractKotlinNativeCompile() { } } + @get:Input + val isStaticFramework: Boolean + get() = binary.let { it is Framework && it.isStatic } + @get:Input val embedBitcode: Framework.BitcodeEmbeddingMode get() = (binary as? Framework)?.embedBitcode ?: Framework.BitcodeEmbeddingMode.DISABLE @@ -392,6 +396,7 @@ open class KotlinNativeLink : AbstractKotlinNativeCompile() { exportLibraries.files.filterExternalKlibs(project).forEach { add("-Xexport-library=${it.absolutePath}") } + addKey("-Xstatic-framework", isStaticFramework) addAll(freeCompilerArgs) } }