[Gradle] Add integration test project 'commonizeMultipleCInteropsWithTests'
Implemented `test multiple cinterops with test source sets and compilations` This test will assert source set dependencies and shared native compilations. ^KT-47775 ^KT-47053
This commit is contained in:
committed by
Space
parent
4ae51e1d02
commit
db10732d6c
@@ -24,6 +24,7 @@ dependencies {
|
|||||||
testImplementation(project(":kotlin-sam-with-receiver"))
|
testImplementation(project(":kotlin-sam-with-receiver"))
|
||||||
testImplementation(project(":kotlin-test:kotlin-test-jvm"))
|
testImplementation(project(":kotlin-test:kotlin-test-jvm"))
|
||||||
testImplementation(project(":native:kotlin-native-utils"))
|
testImplementation(project(":native:kotlin-native-utils"))
|
||||||
|
testImplementation(project(":native:kotlin-klib-commonizer-api"))
|
||||||
|
|
||||||
testImplementation(projectRuntimeJar(":kotlin-compiler-embeddable"))
|
testImplementation(projectRuntimeJar(":kotlin-compiler-embeddable"))
|
||||||
testImplementation(intellijCoreDep()) { includeJars("jdom") }
|
testImplementation(intellijCoreDep()) { includeJars("jdom") }
|
||||||
|
|||||||
+142
@@ -5,9 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle
|
package org.jetbrains.kotlin.gradle
|
||||||
|
|
||||||
|
import org.gradle.api.logging.LogLevel.INFO
|
||||||
import org.gradle.internal.os.OperatingSystem
|
import org.gradle.internal.os.OperatingSystem
|
||||||
|
import org.jetbrains.kotlin.commonizer.CommonizerTarget
|
||||||
import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX
|
import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX
|
||||||
|
import org.jetbrains.kotlin.gradle.util.reportSourceSetCommonizerDependencies
|
||||||
import org.jetbrains.kotlin.incremental.testingUtils.assertEqualDirectories
|
import org.jetbrains.kotlin.incremental.testingUtils.assertEqualDirectories
|
||||||
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
|
import org.jetbrains.kotlin.konan.target.KonanTarget.*
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertFalse
|
import kotlin.test.assertFalse
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
@@ -349,6 +354,143 @@ class CommonizerIT : BaseGradleIT() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test multiple cinterops with test source sets and compilations`() {
|
||||||
|
with(Project("commonizeMultipleCInteropsWithTests", minLogLevel = INFO)) {
|
||||||
|
|
||||||
|
val isUnix = HostManager.hostIsMac || HostManager.hostIsLinux
|
||||||
|
val isMac = HostManager.hostIsMac
|
||||||
|
val isWindows = HostManager.hostIsMingw
|
||||||
|
|
||||||
|
reportSourceSetCommonizerDependencies(this) {
|
||||||
|
getCommonizerDependencies("nativeMain").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper".takeIf { isUnix })
|
||||||
|
assertTargetOnAllDependencies(
|
||||||
|
CommonizerTarget(IOS_X64, IOS_ARM64, LINUX_X64, LINUX_ARM64, MACOS_X64, MINGW_X64, MINGW_X86)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("nativeTest").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper".takeIf { isUnix }, ".*nativeTestHelper")
|
||||||
|
assertTargetOnAllDependencies(
|
||||||
|
CommonizerTarget(IOS_X64, IOS_ARM64, LINUX_X64, LINUX_ARM64, MACOS_X64, MINGW_X64, MINGW_X86)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUnix) {
|
||||||
|
getCommonizerDependencies("unixMain").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(IOS_X64, IOS_ARM64, LINUX_X64, LINUX_ARM64, MACOS_X64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("unixTest").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper", ".*nativeTestHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(IOS_X64, IOS_ARM64, LINUX_X64, LINUX_ARM64, MACOS_X64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("linuxMain").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(LINUX_X64, LINUX_ARM64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("linuxTest").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper", ".*nativeTestHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(LINUX_X64, LINUX_ARM64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("linuxX64Main").assertEmpty()
|
||||||
|
getCommonizerDependencies("linuxArm64Main").assertEmpty()
|
||||||
|
getCommonizerDependencies("linuxX64Test").assertEmpty()
|
||||||
|
getCommonizerDependencies("linuxArm64Test").assertEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isMac) {
|
||||||
|
getCommonizerDependencies("appleMain").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper", ".*appleHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(IOS_X64, IOS_ARM64, MACOS_X64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("appleTest").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper", ".*appleHelper", ".*nativeTestHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(IOS_X64, IOS_ARM64, MACOS_X64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("iosMain").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*unixHelper", ".*appleHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(IOS_X64, IOS_ARM64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("iosTest").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(
|
||||||
|
".*nativeHelper", ".*unixHelper", ".*appleHelper", ".*nativeTestHelper", ".*iosTestHelper"
|
||||||
|
)
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(IOS_X64, IOS_ARM64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("macosMain").assertEmpty()
|
||||||
|
getCommonizerDependencies("macosTest").assertEmpty()
|
||||||
|
getCommonizerDependencies("iosX64Main").assertEmpty()
|
||||||
|
getCommonizerDependencies("iosX64Test").assertEmpty()
|
||||||
|
getCommonizerDependencies("iosArm64Main").assertEmpty()
|
||||||
|
getCommonizerDependencies("iosArm64Test").assertEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isWindows) {
|
||||||
|
getCommonizerDependencies("windowsMain").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*windowsHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(MINGW_X86, MINGW_X64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("windowsTest").onlyCInterops().apply {
|
||||||
|
assertDependencyFilesMatches(".*nativeHelper", ".*windowsHelper", ".*nativeTestHelper")
|
||||||
|
assertTargetOnAllDependencies(CommonizerTarget(MINGW_X86, MINGW_X64))
|
||||||
|
}
|
||||||
|
|
||||||
|
getCommonizerDependencies("windowsX64Main").assertEmpty()
|
||||||
|
getCommonizerDependencies("windowsX64Test").assertEmpty()
|
||||||
|
getCommonizerDependencies("windowsX86Main").assertEmpty()
|
||||||
|
getCommonizerDependencies("windowsX86Test").assertEmpty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
build(":assemble") {
|
||||||
|
assertSuccessful()
|
||||||
|
assertTasksUpToDate(":commonizeNativeDistribution")
|
||||||
|
assertTasksUpToDate(":commonizeCInterop")
|
||||||
|
}
|
||||||
|
|
||||||
|
build(":compileNativeMainKotlinMetadata") {
|
||||||
|
assertSuccessful()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUnix) {
|
||||||
|
build(":compileUnixMainKotlinMetadata") {
|
||||||
|
assertSuccessful()
|
||||||
|
}
|
||||||
|
|
||||||
|
build(":compileLinuxMainKotlinMetadata") {
|
||||||
|
assertSuccessful()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isMac) {
|
||||||
|
build(":compileAppleMainKotlinMetadata") {
|
||||||
|
assertSuccessful()
|
||||||
|
}
|
||||||
|
|
||||||
|
build(":compileIosMainKotlinMetadata") {
|
||||||
|
assertSuccessful()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isWindows) {
|
||||||
|
build(":compileWindowsMainKotlinMetadata") {
|
||||||
|
assertSuccessful()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `test KT-47641 commonizing c-interops does not depend on any source compilation`() {
|
fun `test KT-47641 commonizing c-interops does not depend on any source compilation`() {
|
||||||
with(Project("commonize-kt-47641-cinterops-compilation-dependency")) {
|
with(Project("commonize-kt-47641-cinterops-compilation-dependency")) {
|
||||||
|
|||||||
+154
@@ -0,0 +1,154 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.util
|
||||||
|
|
||||||
|
import org.intellij.lang.annotations.Language
|
||||||
|
import org.intellij.lang.annotations.RegExp
|
||||||
|
import org.jetbrains.kotlin.commonizer.CommonizerTarget
|
||||||
|
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||||
|
import org.jetbrains.kotlin.commonizer.parseCommonizerTargetOrNull
|
||||||
|
import org.jetbrains.kotlin.commonizer.util.transitiveClosure
|
||||||
|
import org.jetbrains.kotlin.gradle.BaseGradleIT
|
||||||
|
import java.io.File
|
||||||
|
import javax.annotation.RegEx
|
||||||
|
import kotlin.test.fail
|
||||||
|
|
||||||
|
data class SourceSetCommonizerDependency(
|
||||||
|
val sourceSetName: String,
|
||||||
|
val target: CommonizerTarget,
|
||||||
|
val file: File
|
||||||
|
)
|
||||||
|
|
||||||
|
data class SourceSetCommonizerDependencies(
|
||||||
|
val sourceSetName: String,
|
||||||
|
val dependencies: Set<SourceSetCommonizerDependency>
|
||||||
|
) {
|
||||||
|
|
||||||
|
fun onlyCInterops(): SourceSetCommonizerDependencies {
|
||||||
|
return SourceSetCommonizerDependencies(
|
||||||
|
sourceSetName,
|
||||||
|
dependencies.filter { dependency ->
|
||||||
|
/* Cinterop dependencies are located in the project's '.gradle' directory */
|
||||||
|
dependency.file.allParents.any { parentFile -> parentFile.name == ".gradle" }
|
||||||
|
}.toSet()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun assertTargetOnAllDependencies(target: CommonizerTarget) {
|
||||||
|
dependencies.forEach { dependency ->
|
||||||
|
if (dependency.target != target) {
|
||||||
|
fail("$sourceSetName: Expected target $target but found dependency with target ${dependency.target}\n$dependency")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun assertEmpty() {
|
||||||
|
if (dependencies.isNotEmpty()) {
|
||||||
|
fail("$sourceSetName: Expected no dependencies in set. Found $dependencies")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun assertDependencyFilesMatches(@Language("RegExp") @RegEx @RegExp vararg fileMatchers: String?) {
|
||||||
|
assertDependencyFilesMatches(fileMatchers.filterNotNull().map(::Regex).toSet())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun assertDependencyFilesMatches(vararg fileMatchers: Regex?) {
|
||||||
|
assertDependencyFilesMatches(fileMatchers.filterNotNull().toSet())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun assertDependencyFilesMatches(fileMatchers: Set<Regex>) {
|
||||||
|
val unmatchedDependencies = dependencies.filter { dependency ->
|
||||||
|
fileMatchers.none { matcher -> dependency.file.absolutePath.matches(matcher) }
|
||||||
|
}
|
||||||
|
|
||||||
|
val unmatchedMatchers = fileMatchers.filter { matcher ->
|
||||||
|
dependencies.none { dependency -> dependency.file.absolutePath.matches(matcher) }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unmatchedDependencies.isNotEmpty() || unmatchedMatchers.isNotEmpty()) {
|
||||||
|
fail(buildString {
|
||||||
|
appendLine("$sourceSetName: Set of commonizer dependencies does not match given 'fileMatchers'")
|
||||||
|
if (unmatchedDependencies.isNotEmpty()) {
|
||||||
|
appendLine("Unmatched dependencies: $unmatchedDependencies")
|
||||||
|
}
|
||||||
|
if (unmatchedMatchers.isNotEmpty()) {
|
||||||
|
appendLine("Unmatched fileMatchers: $unmatchedMatchers")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun interface WithSourceSetCommonizerDependencies {
|
||||||
|
fun getCommonizerDependencies(sourceSetName: String): SourceSetCommonizerDependencies
|
||||||
|
}
|
||||||
|
|
||||||
|
fun BaseGradleIT.reportSourceSetCommonizerDependencies(
|
||||||
|
project: BaseGradleIT.Project,
|
||||||
|
test: WithSourceSetCommonizerDependencies.() -> Unit
|
||||||
|
) = with(project) {
|
||||||
|
|
||||||
|
if (!projectDir.exists()) {
|
||||||
|
setupWorkingDir()
|
||||||
|
}
|
||||||
|
|
||||||
|
gradleBuildScript().apply {
|
||||||
|
appendText("\n\n")
|
||||||
|
appendText(taskSourceCode)
|
||||||
|
appendText("\n\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
build(
|
||||||
|
":reportCommonizerSourceSetDependencies",
|
||||||
|
options = defaultBuildOptions().copy(forceOutputToStdout = true)
|
||||||
|
) {
|
||||||
|
assertSuccessful()
|
||||||
|
|
||||||
|
val dependencyReports = output.lineSequence().filter { line -> line.contains("SourceSetCommonizerDependencyReport") }.toList()
|
||||||
|
|
||||||
|
val withSourceSetCommonizerDependencies = WithSourceSetCommonizerDependencies { sourceSetName ->
|
||||||
|
val reportMarker = "Report[$sourceSetName]"
|
||||||
|
|
||||||
|
val reportForSourceSet = dependencyReports.firstOrNull { line -> line.contains(reportMarker) }
|
||||||
|
?: fail("Missing dependency report for $sourceSetName")
|
||||||
|
|
||||||
|
val files = reportForSourceSet.split(reportMarker, limit = 2).last().split("|#+#|").map(::File)
|
||||||
|
val dependencies = files.mapNotNull { file ->
|
||||||
|
val allParents = file.allParents
|
||||||
|
if (allParents.any { it.name == "commonized" } || allParents.any { it.name == "commonizer" }) {
|
||||||
|
val target = parseCommonizerTargetOrNull(file.parentFile.name) as? SharedCommonizerTarget ?: return@mapNotNull null
|
||||||
|
SourceSetCommonizerDependency(sourceSetName, target, file)
|
||||||
|
} else null
|
||||||
|
}
|
||||||
|
SourceSetCommonizerDependencies(sourceSetName, dependencies.toSet())
|
||||||
|
}
|
||||||
|
|
||||||
|
withSourceSetCommonizerDependencies.test()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val File.allParents: Set<File> get() = transitiveClosure(this) { listOfNotNull(parentFile) }
|
||||||
|
|
||||||
|
private const val dollar = "\$"
|
||||||
|
|
||||||
|
private val taskSourceCode = """
|
||||||
|
tasks.register("reportCommonizerSourceSetDependencies") {
|
||||||
|
kotlin.sourceSets.withType(DefaultKotlinSourceSet::class).all {
|
||||||
|
inputs.files(configurations.getByName(intransitiveMetadataConfigurationName))
|
||||||
|
}
|
||||||
|
|
||||||
|
doLast {
|
||||||
|
kotlin.sourceSets.filterIsInstance<DefaultKotlinSourceSet>().forEach { sourceSet ->
|
||||||
|
val configuration = configurations.getByName(sourceSet.intransitiveMetadataConfigurationName)
|
||||||
|
val dependencies = configuration.files
|
||||||
|
|
||||||
|
logger.quiet(
|
||||||
|
"SourceSetCommonizerDependencyReport[$dollar{sourceSet.name}]$dollar{dependencies.joinToString("|#+#|")}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
+143
@@ -0,0 +1,143 @@
|
|||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||||
|
import org.jetbrains.kotlin.konan.target.Family.*
|
||||||
|
|
||||||
|
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()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
jvm()
|
||||||
|
|
||||||
|
linuxX64()
|
||||||
|
linuxArm64()
|
||||||
|
|
||||||
|
macosX64("macos")
|
||||||
|
ios()
|
||||||
|
|
||||||
|
mingwX64("windowsX64")
|
||||||
|
mingwX86("windowsX86")
|
||||||
|
|
||||||
|
val commonMain by sourceSets.getting
|
||||||
|
val commonTest by sourceSets.getting
|
||||||
|
val jvmMain by sourceSets.getting
|
||||||
|
val nativeMain by sourceSets.creating
|
||||||
|
val nativeTest by sourceSets.creating
|
||||||
|
val unixMain by sourceSets.creating
|
||||||
|
val unixTest by sourceSets.creating
|
||||||
|
val linuxMain by sourceSets.creating
|
||||||
|
val linuxTest by sourceSets.creating
|
||||||
|
val linuxX64Main by sourceSets.getting
|
||||||
|
val linuxX64Test by sourceSets.getting
|
||||||
|
val linuxArm64Main by sourceSets.getting
|
||||||
|
val linuxArm64Test by sourceSets.getting
|
||||||
|
val appleMain by sourceSets.creating
|
||||||
|
val appleTest by sourceSets.creating
|
||||||
|
val macosMain by sourceSets.getting
|
||||||
|
val macosTest by sourceSets.getting
|
||||||
|
val iosMain by sourceSets.getting
|
||||||
|
val iosTest by sourceSets.getting
|
||||||
|
val windowsMain by sourceSets.creating
|
||||||
|
val windowsTest by sourceSets.creating
|
||||||
|
val windowsX64Main by sourceSets.getting
|
||||||
|
val windowsX64Test by sourceSets.getting
|
||||||
|
val windowsX86Main by sourceSets.getting
|
||||||
|
val windowsX86Test by sourceSets.getting
|
||||||
|
|
||||||
|
commonMain {
|
||||||
|
-jvmMain
|
||||||
|
-nativeMain {
|
||||||
|
-unixMain {
|
||||||
|
-appleMain {
|
||||||
|
-iosMain
|
||||||
|
-macosMain
|
||||||
|
}
|
||||||
|
-linuxMain {
|
||||||
|
-linuxArm64Main
|
||||||
|
-linuxX64Main
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-windowsMain {
|
||||||
|
-windowsX64Main
|
||||||
|
-windowsX86Main
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commonTest {
|
||||||
|
-nativeTest {
|
||||||
|
-unixTest {
|
||||||
|
-appleTest {
|
||||||
|
-iosTest
|
||||||
|
-macosTest
|
||||||
|
}
|
||||||
|
-linuxTest {
|
||||||
|
-linuxArm64Test
|
||||||
|
-linuxX64Test
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-windowsTest {
|
||||||
|
-windowsX64Test
|
||||||
|
-windowsX86Test
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (properties["testSourceSetsDependingOnMain"] == "true") {
|
||||||
|
logger.quiet("testSourceSetsDependingOnMain is set")
|
||||||
|
nativeTest.dependsOn(nativeMain)
|
||||||
|
unixTest.dependsOn(unixMain)
|
||||||
|
appleTest.dependsOn(appleMain)
|
||||||
|
linuxTest.dependsOn(linuxMain)
|
||||||
|
windowsTest.dependsOn(windowsMain)
|
||||||
|
}
|
||||||
|
|
||||||
|
targets.withType<KotlinNativeTarget>().forEach { target ->
|
||||||
|
target.compilations.getByName("main").cinterops.create("nativeHelper") {
|
||||||
|
headers(file("libs/nativeHelper.h"))
|
||||||
|
}
|
||||||
|
|
||||||
|
target.compilations.getByName("test").cinterops.create("nativeTestHelper") {
|
||||||
|
headers(file("libs/nativeTestHelper.h"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target.konanTarget.family.isAppleFamily || target.konanTarget.family == LINUX) {
|
||||||
|
target.compilations.getByName("main").cinterops.create("unixHelper") {
|
||||||
|
headers(file("libs/unixHelper.h"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target.konanTarget.family.isAppleFamily) {
|
||||||
|
target.compilations.getByName("main").cinterops.create("appleHelper") {
|
||||||
|
headers(file("libs/appleHelper.h"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target.konanTarget.family == IOS) {
|
||||||
|
target.compilations.getByName("test").cinterops.create("iosTestHelper") {
|
||||||
|
headers(file("libs/iosTestHelper.h"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target.konanTarget.family == MINGW) {
|
||||||
|
target.compilations.getByName("main").cinterops.create("windowsHelper") {
|
||||||
|
headers(file("libs/windowsHelper.h"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
kotlin.mpp.enableGranularSourceSetsMetadata=true
|
||||||
|
kotlin.native.enableDependencyPropagation=false
|
||||||
|
kotlin.mpp.enableCInteropCommonization=true
|
||||||
|
kotlin.mpp.enableIntransitiveMetadataConfiguration=true
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
void appleHelper();
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
void iosTestHelper();
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
void nativeHelper();
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
void nativeTestHelper();
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
void unixHelper();
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
void windowsHelper();
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
pluginManagement {
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
gradlePluginPortal()
|
||||||
|
}
|
||||||
|
val kotlin_version: String by settings
|
||||||
|
plugins {
|
||||||
|
kotlin("multiplatform").version(kotlin_version)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import appleHelper.appleHelper
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
import unixHelper.unixHelper
|
||||||
|
|
||||||
|
object AppleMain {
|
||||||
|
val native = nativeHelper()
|
||||||
|
val unix = unixHelper()
|
||||||
|
val apple = appleHelper()
|
||||||
|
}
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
class CommonMain {
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import appleHelper.appleHelper
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
import unixHelper.unixHelper
|
||||||
|
|
||||||
|
object IosMain {
|
||||||
|
val native = nativeHelper()
|
||||||
|
val unix = unixHelper()
|
||||||
|
val apple = appleHelper()
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
import unixHelper.unixHelper
|
||||||
|
|
||||||
|
object LinuxArm64Main {
|
||||||
|
val native = nativeHelper()
|
||||||
|
val unix = unixHelper()
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
import unixHelper.unixHelper
|
||||||
|
|
||||||
|
object LinuxMain {
|
||||||
|
val native = nativeHelper()
|
||||||
|
val unix = unixHelper()
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
import unixHelper.unixHelper
|
||||||
|
|
||||||
|
object LinuxX64Main {
|
||||||
|
val native = nativeHelper()
|
||||||
|
val unix = unixHelper()
|
||||||
|
}
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import appleHelper.appleHelper
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
import unixHelper.unixHelper
|
||||||
|
|
||||||
|
|
||||||
|
object MacosMain {
|
||||||
|
val native = nativeHelper()
|
||||||
|
val unix = unixHelper()
|
||||||
|
val apple = appleHelper()
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
|
||||||
|
object NativeMain {
|
||||||
|
val native = nativeHelper()
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
import unixHelper.unixHelper
|
||||||
|
|
||||||
|
|
||||||
|
object UnixMain {
|
||||||
|
val native = nativeHelper()
|
||||||
|
val unix = unixHelper()
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
import nativeHelper.nativeHelper
|
||||||
|
import windowsHelper.windowsHelper
|
||||||
|
|
||||||
|
object WindowsMain {
|
||||||
|
val native = nativeHelper()
|
||||||
|
val windows = windowsHelper()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user