diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt index 000f55c937d..c93f4218266 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt @@ -566,6 +566,23 @@ class CommonizerIT : BaseGradleIT() { } } + @Test + fun `test KT-48138 commonizing c-interops when nativeTest and nativeMain have different targets`() { + with(Project("commonize-kt-48138-nativeMain-nativeTest-different-targets")) { + reportSourceSetCommonizerDependencies(this) { + val nativeMain = getCommonizerDependencies("nativeMain") + nativeMain.onlyCInterops().assertDependencyFilesMatches(".*cinterop-dummy") + nativeMain.onlyNativeDistribution().assertNotEmpty() + nativeMain.assertTargetOnAllDependencies(CommonizerTarget(LINUX_X64, LINUX_ARM64, LINUX_ARM32_HFP)) + + val nativeTest = getCommonizerDependencies("nativeTest") + nativeTest.onlyNativeDistribution().assertNotEmpty() + nativeTest.onlyCInterops().assertDependencyFilesMatches(".*cinterop-dummy") + nativeTest.assertTargetOnAllDependencies(CommonizerTarget(LINUX_X64, LINUX_ARM64)) + } + } + } + private fun preparedProject(name: String): Project { return Project(name).apply { setupWorkingDir() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/build.gradle.kts new file mode 100644 index 00000000000..1f63b36a24e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/build.gradle.kts @@ -0,0 +1,53 @@ +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget + +operator fun KotlinSourceSet.invoke(builder: SourceSetHierarchyBuilder.() -> Unit): KotlinSourceSet { + SourceSetHierarchyBuilder(this).builder() + return this +} + +class SourceSetHierarchyBuilder(private val node: KotlinSourceSet) { + operator fun KotlinSourceSet.unaryMinus() = this.dependsOn(node) +} + +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() +} + +kotlin { + linuxX64() + linuxArm64() + linuxArm32Hfp() + + val commonMain by sourceSets.getting + val nativeMain by sourceSets.creating + val linuxX64Main by sourceSets.getting + val linuxArm64Main by sourceSets.getting + val linuxArm32HfpMain by sourceSets.getting + + nativeMain.dependsOn(commonMain) + linuxX64Main.dependsOn(nativeMain) + linuxArm64Main.dependsOn(nativeMain) + linuxArm32HfpMain.dependsOn(nativeMain) + + val commonTest by sourceSets.getting + val nativeTest by sourceSets.creating + val linuxX64Test by sourceSets.getting + val linuxArm64Test by sourceSets.getting + + nativeTest.dependsOn(commonTest) + linuxX64Test.dependsOn(nativeTest) + linuxArm64Test.dependsOn(nativeTest) + /* NOTE: linuxArm32HfpTest does not depend on nativeTest */ + + targets.withType().forEach { target -> + target.compilations.getByName("main").cinterops.create("dummy") { + headers("libs/dummy.h") + } + } +} + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/gradle.properties new file mode 100644 index 00000000000..bd508beeabe --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/gradle.properties @@ -0,0 +1,5 @@ +kotlin.mpp.enableGranularSourceSetsMetadata=true +kotlin.native.enableDependencyPropagation=false +kotlin.mpp.enableCInteropCommonization=true +kotlin.mpp.enableCompatibilityMetadataVariant=false +kotlin.mpp.enableIntransitiveMetadataConfiguration=true diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/libs/dummy.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/libs/dummy.h new file mode 100644 index 00000000000..446d16af68a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/libs/dummy.h @@ -0,0 +1 @@ +void dummyFunction(); diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/settings.gradle.kts new file mode 100644 index 00000000000..ecdece6ecfe --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/settings.gradle.kts @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + } + val kotlin_version: String by settings + plugins { + kotlin("multiplatform").version(kotlin_version) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/src/nativeInterop/cinterop/dummy.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-48138-nativeMain-nativeTest-different-targets/src/nativeInterop/cinterop/dummy.def new file mode 100644 index 00000000000..e69de29bb2d