diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt index 23bd3c875fd..d58d4766eb1 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt @@ -147,17 +147,21 @@ class GeneralNativeIT : BaseGradleIT() { val sharedSuffix = CompilerOutputKind.DYNAMIC.suffix(HostManager.host) val sharedPaths = listOf( "build/bin/host/debugShared/$sharedPrefix$baseName$sharedSuffix", + "build/bin/host/releaseShared/$sharedPrefix$baseName$sharedSuffix", ) val staticPrefix = CompilerOutputKind.STATIC.prefix(HostManager.host) val staticSuffix = CompilerOutputKind.STATIC.suffix(HostManager.host) val staticPaths = listOf( "build/bin/host/debugStatic/$staticPrefix$baseName$staticSuffix", + "build/bin/host/releaseStatic/$staticPrefix$baseName$staticSuffix", ) val headerPaths = listOf( "build/bin/host/debugShared/$sharedPrefix${baseName}_api.h", "build/bin/host/debugStatic/$staticPrefix${baseName}_api.h", + "build/bin/host/releaseShared/$sharedPrefix${baseName}_api.h", + "build/bin/host/releaseStatic/$staticPrefix${baseName}_api.h", ) val klibPrefix = CompilerOutputKind.LIBRARY.prefix(HostManager.host) @@ -167,6 +171,8 @@ class GeneralNativeIT : BaseGradleIT() { val linkTasks = listOf( ":linkDebugSharedHost", ":linkDebugStaticHost", + ":linkReleaseSharedHost", + ":linkReleaseStaticHost", ) val klibTask = ":compileKotlinHost" @@ -201,10 +207,6 @@ class GeneralNativeIT : BaseGradleIT() { assertTasksExecuted(linkTasks[0]) } - // Check that plugin doesn't allow exporting dependencies not added in the API configuration. - gradleBuildScript().modify { - it.replace("api(project(\":exported\"))", "") - } build(":assemble") { assertFailed() val failureMsg = "Following dependencies exported in the debugShared binary " + @@ -214,35 +216,52 @@ class GeneralNativeIT : BaseGradleIT() { } @Test - fun testCanProduceNativeFrameworks() = with(transformNativeTestProjectWithPluginDsl("frameworks", directoryPrefix = "native-binaries")) { + fun testCanProduceNativeFrameworks() = with( + transformNativeTestProjectWithPluginDsl("frameworks", directoryPrefix = "native-binaries") + ) { Assume.assumeTrue(HostManager.hostIsMac) + data class BinaryMeta(val name: String, val isStatic: Boolean = false) + val baseName = "main" val frameworkPrefix = CompilerOutputKind.FRAMEWORK.prefix(HostManager.host) val frameworkSuffix = CompilerOutputKind.FRAMEWORK.suffix(HostManager.host) - val frameworkPaths = listOf( - "build/bin/ios/mainDebugFramework/$frameworkPrefix$baseName$frameworkSuffix.dSYM", - "build/bin/ios/mainDebugFramework/$frameworkPrefix$baseName$frameworkSuffix", - "build/bin/ios/mainReleaseFramework/$frameworkPrefix$baseName$frameworkSuffix", - "build/bin/iosSim/mainDebugFramework/$frameworkPrefix$baseName$frameworkSuffix.dSYM", - "build/bin/iosSim/mainDebugFramework/$frameworkPrefix$baseName$frameworkSuffix", - "build/bin/iosSim/mainReleaseFramework/$frameworkPrefix$baseName$frameworkSuffix", + val targets = listOf("ios", "iosSim") + val binaries = mapOf( + "ios" to listOf(BinaryMeta("main"), BinaryMeta("custom", true)), + "iosSim" to listOf(BinaryMeta("main")) ) + val frameworkPaths = targets.flatMap { target -> + binaries.getValue(target).flatMap { + val list = listOf( + "build/bin/$target/${it.name}DebugFramework/$frameworkPrefix${it.name}$frameworkSuffix", + "build/bin/$target/${it.name}ReleaseFramework/$frameworkPrefix${it.name}$frameworkSuffix", + ) + if (it.isStatic) { + list + } else { + list + "build/bin/$target/${it.name}DebugFramework/$frameworkPrefix${it.name}$frameworkSuffix.dSYM" + } + } + } - val headerPaths = listOf( - "build/bin/ios/mainDebugFramework/$frameworkPrefix$baseName$frameworkSuffix/headers/$baseName.h", - "build/bin/ios/mainReleaseFramework/$frameworkPrefix$baseName$frameworkSuffix/headers/$baseName.h", - "build/bin/iosSim/mainDebugFramework/$frameworkPrefix$baseName$frameworkSuffix/headers/$baseName.h", - "build/bin/iosSim/mainReleaseFramework/$frameworkPrefix$baseName$frameworkSuffix/headers/$baseName.h", - ) + val headerPaths = targets.flatMap { target -> + binaries.getValue(target).flatMap { + listOf( + "build/bin/$target/${it.name}DebugFramework/$frameworkPrefix${it.name}$frameworkSuffix/headers/${it.name}.h", + "build/bin/$target/${it.name}ReleaseFramework/$frameworkPrefix${it.name}$frameworkSuffix/headers/${it.name}.h", + ) + } + } - val frameworkTasks = listOf( - ":linkMainDebugFrameworkIos", - ":linkMainReleaseFrameworkIos", - ":linkCustomDebugFrameworkIos", - ":linkMainDebugFrameworkIosSim", - ":linkMainReleaseFrameworkIosSim", - ) + val frameworkTasks = targets.flatMap { target -> + binaries.getValue(target).flatMap { + listOf( + ":link${it.name.capitalize()}DebugFramework${target.capitalize()}", + ":link${it.name.capitalize()}ReleaseFramework${target.capitalize()}", + ) + } + } // Check building // Check dependency exporting and bitcode embedding in frameworks. @@ -263,6 +282,7 @@ class GeneralNativeIT : BaseGradleIT() { assertTrue(it.contains("-Xembed-bitcode-marker")) assertTrue(it.contains("-g")) } + // Check that bitcode can be disabled by setting custom compiler options checkNativeCommandLineFor(":linkCustomDebugFrameworkIos") { assertTrue(it.contains("-linker-option -L.")) assertTrue(it.contains("-Xtime")) @@ -325,10 +345,7 @@ class GeneralNativeIT : BaseGradleIT() { val binaries = mutableListOf( "debugExecutable" to "native-binary", "releaseExecutable" to "native-binary", - "fooDebugExecutable" to "foo", - "fooReleaseExecutable" to "foo", - "barReleaseExecutable" to "bar", - "bazReleaseExecutable" to "my-baz", + "bazDebugExecutable" to "my-baz", ) val linkTasks = binaries.map { (name, _) -> "link${name.capitalize()}Host" } val outputFiles = binaries.map { (name, fileBaseName) -> @@ -341,10 +358,7 @@ class GeneralNativeIT : BaseGradleIT() { val runTasks = listOf( "runDebugExecutable", "runReleaseExecutable", - "runFooDebugExecutable", - "runFooReleaseExecutable", - "runBarReleaseExecutable", - "runBazReleaseExecutable", + "runBazDebugExecutable", ).map { it + "Host" }.toMutableList() // Check building @@ -371,7 +385,7 @@ class GeneralNativeIT : BaseGradleIT() { assertTrue(output.contains(".main")) } - build("runBazReleaseExecutableHost") { + build("runBazDebugExecutableHost") { assertSuccessful() assertTrue(output.contains("foo.main")) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/executables/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/executables/build.gradle.kts index ba16ca2e15e..7f7866a4ac9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/executables/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/executables/build.gradle.kts @@ -16,12 +16,10 @@ kotlin { ("host") { binaries { - executable() // Executable with default name. - executable("foo") // Custom binary name. - executable("bar", listOf(RELEASE)) // Custom build types. + executable() // Executable with default name. // Configure a binary. - executable("baz") { + executable("baz", listOf(DEBUG)) { // Rename an output binary: baz.kexe -> my-baz.kexe. baseName = "my-baz" // Use a custom entry point. diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/frameworks/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/frameworks/build.gradle.kts index 4d8e65cbf56..207f06cd23b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/frameworks/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/frameworks/build.gradle.kts @@ -17,10 +17,10 @@ kotlin { iosArm64("ios") { binaries { - framework("main", listOf(RELEASE, DEBUG)) { + framework("main") { export(project(":exported")) } - framework("custom", listOf(DEBUG)) { + framework("custom") { embedBitcode("disable") linkerOpts = mutableListOf("-L.") freeCompilerArgs = mutableListOf("-Xtime") @@ -30,11 +30,8 @@ kotlin { } iosX64("iosSim") { - compilations["main"].defaultSourceSet { - dependsOn(sourceSets["iosMain"]) - } binaries { - framework("main", listOf(RELEASE, DEBUG)) { + framework("main") { export(project(":exported")) } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/frameworks/src/iosMain/kotlin/main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/frameworks/src/commonMain/kotlin/main.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/frameworks/src/iosMain/kotlin/main.kt rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/frameworks/src/commonMain/kotlin/main.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/libraries/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/libraries/build.gradle.kts index 0a666c85a26..334e2c4daaa 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/libraries/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-binaries/libraries/build.gradle.kts @@ -17,10 +17,10 @@ kotlin { ("host") { binaries { - sharedLib(listOf(DEBUG)) { + sharedLib() { export(project(":exported")) } - staticLib(listOf(DEBUG)) { + staticLib() { export(project(":exported")) } }