[Gradle] Mark "main" metadata compilation as non-klib in all cases
Metadata compilation with name "main" isn't used in Hierarchical Multiplatform. It used to compile commonMain source set to legacy metadata artifacts. With Hierarchical MPP common source sets start to compile to klib metadata.
This commit is contained in:
committed by
Space Team
parent
f01c8de216
commit
d820ddc27d
+3
-2
@@ -69,11 +69,12 @@ class KotlinMetadataTargetConfigurator :
|
||||
KotlinBuildStatsService.getInstance()?.report(BooleanMetrics.ENABLED_HMPP, true)
|
||||
|
||||
target.compilations.withType(KotlinCommonCompilation::class.java).getByName(KotlinCompilation.MAIN_COMPILATION_NAME).run {
|
||||
// Force the default 'main' compilation to produce *.kotlin_metadata regardless of the klib feature flag.
|
||||
forceCompilationToKotlinMetadata = true
|
||||
|
||||
// Capture it here to use in onlyIf spec. Direct usage causes serialization of target attempt when configuration cache is enabled
|
||||
val isCompatibilityMetadataVariantEnabled = target.project.isCompatibilityMetadataVariantEnabled
|
||||
if (isCompatibilityMetadataVariantEnabled) {
|
||||
// Force the default 'main' compilation to produce *.kotlin_metadata regardless of the klib feature flag.
|
||||
forceCompilationToKotlinMetadata = true
|
||||
// Add directly dependsOn sources for Legacy Compatibility Metadata variant
|
||||
// it isn't necessary for KLib compilations
|
||||
// see [KotlinCompilationSourceSetInclusion.AddSourcesWithoutDependsOnClosure]
|
||||
|
||||
+25
@@ -11,10 +11,12 @@ import org.gradle.api.NamedDomainObjectContainer
|
||||
import org.jetbrains.kotlin.gradle.dsl.metadataTarget
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCommonCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.awaitMetadataCompilationsCreated
|
||||
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||
import org.jetbrains.kotlin.gradle.util.runLifecycleAwareTest
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.fail
|
||||
|
||||
class KotlinMetadataTargetCompilationsTest {
|
||||
@@ -55,6 +57,29 @@ class KotlinMetadataTargetCompilationsTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - metadata compilations - isKlibCompilation`() {
|
||||
val project = buildProjectWithMPP()
|
||||
val kotlin = project.multiplatformExtension
|
||||
kotlin.jvm()
|
||||
kotlin.linuxX64()
|
||||
kotlin.linuxArm64()
|
||||
|
||||
project.runLifecycleAwareTest {
|
||||
val target = kotlin.metadataTarget
|
||||
val metadataCompilations = target.awaitMetadataCompilationsCreated() // returns common + shared native
|
||||
.filterIsInstance<KotlinCommonCompilation>()
|
||||
.associate { it.name to it.isKlibCompilation }
|
||||
|
||||
val expectedCommonMetadataCompilations = mapOf(
|
||||
"main" to false,
|
||||
"commonMain" to true
|
||||
)
|
||||
|
||||
assertEquals(expectedCommonMetadataCompilations, metadataCompilations)
|
||||
}
|
||||
}
|
||||
|
||||
private fun NamedDomainObjectContainer<KotlinCompilation<*>>.assertExists(name: String) {
|
||||
if (name !in names) fail("Missing '$name' compilation")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user