Fix falsely skipped shared-native source sets in HMPP (KT-38746)
Issue #KT-38746 Fixed
This commit is contained in:
committed by
Sergey Igushkin
parent
a0400f59c2
commit
292563451c
+24
@@ -224,4 +224,28 @@ class KlibBasedMppIT : BaseGradleIT() {
|
|||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testAvoidSkippingSharedNativeSourceSetKt38746() = with(Project("hierarchical-all-native")) {
|
||||||
|
val targetNames = listOf(
|
||||||
|
// Try different alphabetical ordering of the targets to ensure that the behavior doesn't depend on it, as with 'first target'
|
||||||
|
listOf("a1", "a2", "a3"),
|
||||||
|
listOf("a3", "a1", "a2"),
|
||||||
|
listOf("a2", "a3", "a1"),
|
||||||
|
)
|
||||||
|
val targetParamNames = listOf("mingwTargetName", "linuxTargetName", "macosTargetName", "currentHostTargetName")
|
||||||
|
for (names in targetNames) {
|
||||||
|
val currentHostTargetName = when {
|
||||||
|
HostManager.hostIsMingw -> names[0]
|
||||||
|
HostManager.hostIsLinux -> names[1]
|
||||||
|
HostManager.hostIsMac -> names[2]
|
||||||
|
else -> error("unexpected host")
|
||||||
|
}
|
||||||
|
val params = targetParamNames.zip(names + currentHostTargetName) { k, v -> "-P$k=$v" }
|
||||||
|
build(":clean", ":compileCurrentHostAndLinuxKotlinMetadata", *params.toTypedArray()) {
|
||||||
|
assertSuccessful()
|
||||||
|
assertTasksExecuted(":compileCurrentHostAndLinuxKotlinMetadata", ":compileAllNativeKotlinMetadata")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("multiplatform")
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
val mingwTargetName: String by project
|
||||||
|
val linuxTargetName: String by project
|
||||||
|
val macosTargetName: String by project
|
||||||
|
val currentHostTargetName: String by project
|
||||||
|
|
||||||
|
val mingw = mingwX64(mingwTargetName) { }
|
||||||
|
val linux = linuxX64(linuxTargetName) { }
|
||||||
|
val macos = macosX64(macosTargetName) { }
|
||||||
|
val linuxArm = linuxArm64()
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
val allNative by creating {
|
||||||
|
dependsOn(getByName("commonMain"))
|
||||||
|
listOf(mingw, linux, macos).forEach {
|
||||||
|
it.compilations["main"].defaultSourceSet.dependsOn(this@creating)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val currentHostAndLinux by creating {
|
||||||
|
dependsOn(allNative)
|
||||||
|
}
|
||||||
|
|
||||||
|
configure(listOf(linuxArm, targets.getByName(currentHostTargetName))) {
|
||||||
|
compilations["main"].defaultSourceSet.dependsOn(currentHostAndLinux)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
kotlin.mpp.enableGranularSourceSetsMetadata=true
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
pluginManagement {
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
gradlePluginPortal()
|
||||||
|
}
|
||||||
|
val kotlin_version: String by settings
|
||||||
|
plugins {
|
||||||
|
kotlin("multiplatform").version(kotlin_version)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProject.name = "my-lib-foo"
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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 com.example.foo
|
||||||
|
|
||||||
|
expect fun foo(): String
|
||||||
|
|
||||||
|
fun fooCommon() = "foo"
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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 com.example.foo
|
||||||
|
|
||||||
|
actual fun foo(): String = "foo"
|
||||||
|
|
||||||
|
fun useFooCommon() = fooCommon()
|
||||||
+2
-1
@@ -102,7 +102,8 @@ class KotlinSharedNativeCompilation(override val target: KotlinMetadataTarget, v
|
|||||||
target,
|
target,
|
||||||
// TODO: this will end up as '-target' argument passed to K2Native, which is wrong.
|
// TODO: this will end up as '-target' argument passed to K2Native, which is wrong.
|
||||||
// Rewrite this when we'll compile native-shared source-sets against commonized platform libs
|
// Rewrite this when we'll compile native-shared source-sets against commonized platform libs
|
||||||
konanTargets.first(),
|
// We find any konan target that is enabled on the current host in order to pass the checks that avoid compiling the code otherwise.
|
||||||
|
konanTargets.find { it.enabledOnCurrentHost } ?: konanTargets.first(),
|
||||||
name
|
name
|
||||||
),
|
),
|
||||||
KotlinMetadataCompilation<KotlinCommonOptions> {
|
KotlinMetadataCompilation<KotlinCommonOptions> {
|
||||||
|
|||||||
Reference in New Issue
Block a user