diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt index 495027e36ad..6e0d34feaa6 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt @@ -19,7 +19,9 @@ import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.binaryCoordinates import org.jetbrains.kotlin.gradle.testbase.* import org.jetbrains.kotlin.gradle.util.kotlinNativeDistributionDependencies import org.jetbrains.kotlin.gradle.util.resolveIdeDependencies +import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget.* +import org.junit.AssumptionViolatedException import org.junit.jupiter.api.DisplayName import java.nio.ByteBuffer import java.util.* @@ -91,11 +93,6 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() { @GradleTest fun testCinterops(gradleVersion: GradleVersion) { - fun Iterable.cinteropDependencies() = - this.filterIsInstance().filter { - it.klibExtra?.isInterop == true && !it.isNativeStdlib && !it.isNativeDistribution - } - project(projectName = "cinteropImport", gradleVersion = gradleVersion) { build(":dep-with-cinterop:publishAllPublicationsToBuildRepository") @@ -245,4 +242,24 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() { } } } + + @GradleTest + fun `test cinterops - commonized interop name should include targets unsupported on host`(gradleVersion: GradleVersion) { + if (HostManager.hostIsMac) { + throw AssumptionViolatedException("Host shouldn't support ios target") + } + + project("cinterop-ios", gradleVersion) { + resolveIdeDependencies { dependencies -> + dependencies["commonMain"].cinteropDependencies().assertMatches( + binaryCoordinates(Regex("""a:cinterop-ios-cinterop-myinterop.*\(ios_x64, linux_x64\)""")) + ) + } + } + } + + private fun Iterable.cinteropDependencies() = + this.filterIsInstance().filter { + it.klibExtra?.isInterop == true && !it.isNativeStdlib && !it.isNativeDistribution + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/build.gradle.kts new file mode 100644 index 00000000000..90ef24f0302 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() + mavenCentral() +} + + +group = "a" +version = "1.0" + +kotlin { + iosX64 { + compilations.getByName("main") { + cinterops { + create("myinterop") { + headers("libs/include/myinterop.h") + } + } + } + } + linuxX64 { + compilations.getByName("main") { + cinterops { + create("myinterop") { + headers("libs/include/myinterop.h") + } + } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/gradle.properties new file mode 100644 index 00000000000..03c47ff38df --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/gradle.properties @@ -0,0 +1,2 @@ +kotlin.mpp.enableCInteropCommonization=true +kotlin.mpp.import.enableKgpDependencyResolution=true diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/libs/include/myinterop.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/libs/include/myinterop.h new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/settings.gradle.kts new file mode 100644 index 00000000000..c2f8f3a8c48 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "cinterop-ios" diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/src/nativeInterop/cinterop/myinterop.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-ios/src/nativeInterop/cinterop/myinterop.def new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-withIosTarget/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-withIosTarget/build.gradle.kts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/resolveCinteropDependency.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/resolveCinteropDependency.kt index e5935a7568a..318b74cb688 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/resolveCinteropDependency.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/resolveCinteropDependency.kt @@ -38,6 +38,7 @@ private fun Project.createCinteropLibraryDependency(libraryFile: java.io.File): } val (group, module) = cinteropGroupAndModule(library) + val libraryTargets = library.commonizerNativeTargets ?: library.nativeTargets return IdeaKotlinResolvedBinaryDependency( binaryType = IdeaKotlinBinaryDependency.KOTLIN_COMPILE_BINARY_TYPE, @@ -46,7 +47,7 @@ private fun Project.createCinteropLibraryDependency(libraryFile: java.io.File): group = group, module = module, version = null, // TODO (kirpichenkov): if/when used for published cinterops, should be set up correctly - sourceSetName = library.nativeTargets.singleOrNull() ?: library.nativeTargets.joinToString(prefix = "(", postfix = ")") + sourceSetName = libraryTargets.singleOrNull() ?: libraryTargets.joinToString(prefix = "(", postfix = ")") ), ).apply { klibExtra = KlibExtra(library)