[Gradle] Enable hierarchical commonization by default
This commit is contained in:
Vendored
+1
@@ -1,2 +1,3 @@
|
||||
kotlin.mpp.enableGranularSourceSetsMetadata=true
|
||||
kotlin.native.enableDependencyPropagation=false
|
||||
kotlin.mpp.enableHierarchicalCommonization=false
|
||||
|
||||
+1
-16
@@ -12,6 +12,7 @@ import org.gradle.api.internal.project.ProjectInternal
|
||||
import org.gradle.api.plugins.ExtraPropertiesExtension
|
||||
import org.gradle.testfixtures.ProjectBuilder
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
|
||||
@@ -114,41 +115,25 @@ class CInteropCommonizerTaskTest {
|
||||
|
||||
project.evaluate()
|
||||
|
||||
/*
|
||||
//https://youtrack.jetbrains.com/issue/KT-39324
|
||||
assertEquals(
|
||||
CInteropCommonizationParameters(
|
||||
SharedCommonizerTarget(CommonizerTarget(IOS_X64, IOS_ARM64), CommonizerTarget(MACOS_X64), CommonizerTarget(LINUX_X64)),
|
||||
setOf(linuxInterop, macosInterop, iosX64Interop, iosArm64Interop)
|
||||
), task.getCommonizationParameters(sharedNativeCompilation(nativeMain))
|
||||
)
|
||||
*/
|
||||
assertNull(
|
||||
task.getCommonizationParameters(sharedNativeCompilation(nativeMain))
|
||||
)
|
||||
|
||||
/*
|
||||
//https://youtrack.jetbrains.com/issue/KT-39324
|
||||
assertEquals(
|
||||
CInteropCommonizationParameters(
|
||||
SharedCommonizerTarget(CommonizerTarget(IOS_X64, IOS_ARM64), CommonizerTarget(MACOS_X64), CommonizerTarget(LINUX_X64)),
|
||||
setOf(linuxInterop, macosInterop, iosX64Interop, iosArm64Interop)
|
||||
), task.getCommonizationParameters(sharedNativeCompilation(iosMain))
|
||||
)
|
||||
*/
|
||||
assertEquals(
|
||||
CInteropCommonizationParameters(CommonizerTarget(IOS_X64, IOS_ARM64), setOf(iosX64Interop, iosArm64Interop)),
|
||||
task.getCommonizationParameters(sharedNativeCompilation(iosMain))
|
||||
)
|
||||
|
||||
/*
|
||||
//https://youtrack.jetbrains.com/issue/KT-39324
|
||||
assertTrue(
|
||||
task.getCommonizationParameters(sharedNativeCompilation(iosMain))!! in
|
||||
task.getCommonizationParameters(sharedNativeCompilation(nativeMain))!!,
|
||||
"Expected CInteropCommonizerTarget of iosMain to be fully contained in nativeMain"
|
||||
)
|
||||
*/
|
||||
}
|
||||
|
||||
private fun sharedNativeCompilation(sourceSet: KotlinSourceSet): KotlinSharedNativeCompilation {
|
||||
|
||||
+1
-1
@@ -228,7 +228,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
* Enables experimental commonization of 'higher level' shared native source sets
|
||||
*/
|
||||
val enableHierarchicalCommonization: Boolean
|
||||
get() = booleanProperty("kotlin.mpp.enableHierarchicalCommonization") ?: false
|
||||
get() = booleanProperty("kotlin.mpp.enableHierarchicalCommonization") ?: true
|
||||
|
||||
/**
|
||||
* Dependencies caching strategy for all targets that support caches.
|
||||
|
||||
+1
-2
@@ -48,7 +48,6 @@ internal open class CInteropCommonizerTask : AbstractCInteropCommonizerTask() {
|
||||
internal var cinterops = setOf<CInteropGist>()
|
||||
private set
|
||||
|
||||
|
||||
@OutputDirectories
|
||||
fun getAllOutputDirectories(): Set<File> {
|
||||
return getCommonizationParameters().map { outputDirectory(it) }.toSet()
|
||||
@@ -101,7 +100,7 @@ internal open class CInteropCommonizerTask : AbstractCInteropCommonizerTask() {
|
||||
}
|
||||
|
||||
private fun nativeDistributionDependencies(parameters: CInteropCommonizationParameters): Set<CommonizerDependency> {
|
||||
val task = project.commonizeNativeDistributionHierarchicalTask?.get() ?: return emptySet()
|
||||
val task = project.commonizeNativeDistributionHierarchicallyTask?.get() ?: return emptySet()
|
||||
|
||||
val rootTarget = task.rootCommonizerTargets
|
||||
.firstOrNull { rootTarget -> parameters.commonizerTarget in rootTarget } ?: return emptySet()
|
||||
|
||||
+16
-12
@@ -49,7 +49,8 @@ internal val Project.commonizeCInteropTask: TaskProvider<CInteropCommonizerTask>
|
||||
"commonizeCInterop",
|
||||
invokeWhenRegistered = {
|
||||
commonizeTask.dependsOn(this)
|
||||
commonizeNativeDistributionHierarchicalTask?.let(this::dependsOn) ?: dependsOn(commonizeNativeDistributionTask)
|
||||
commonizeNativeDistributionHierarchicallyTask?.let(this::dependsOn)
|
||||
commonizeNativeDistributionTask?.let(this::dependsOn)
|
||||
},
|
||||
configureTask = {
|
||||
group = "interop"
|
||||
@@ -76,21 +77,24 @@ internal val Project.copyCommonizeCInteropForIdeTask: TaskProvider<CopyCommonize
|
||||
return null
|
||||
}
|
||||
|
||||
internal val Project.commonizeNativeDistributionTask: TaskProvider<NativeDistributionCommonizerTask>
|
||||
get() = locateOrRegisterTask(
|
||||
"commonizeNativeDistribution",
|
||||
invokeWhenRegistered = { commonizeTask.dependsOn(this) },
|
||||
configureTask = {
|
||||
group = "interop"
|
||||
description = "Invokes the commonizer on the platform libraries provided by the Kotlin/Native distribution"
|
||||
}
|
||||
)
|
||||
internal val Project.commonizeNativeDistributionTask: TaskProvider<NativeDistributionCommonizerTask>?
|
||||
get() {
|
||||
if (isHierarchicalCommonizationEnabled) return null
|
||||
return locateOrRegisterTask(
|
||||
"commonizeNativeDistribution",
|
||||
invokeWhenRegistered = { commonizeTask.dependsOn(this) },
|
||||
configureTask = {
|
||||
group = "interop"
|
||||
description = "Invokes the commonizer on the platform libraries provided by the Kotlin/Native distribution"
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
internal val Project.commonizeNativeDistributionHierarchicalTask: TaskProvider<HierarchicalNativeDistributionCommonizerTask>?
|
||||
internal val Project.commonizeNativeDistributionHierarchicallyTask: TaskProvider<HierarchicalNativeDistributionCommonizerTask>?
|
||||
get() {
|
||||
if (!isHierarchicalCommonizationEnabled) return null
|
||||
return locateOrRegisterTask(
|
||||
"commonizeNativeDistributionHierarchically",
|
||||
"commonizeNativeDistribution",
|
||||
invokeWhenRegistered = { commonizeTask.dependsOn(this) },
|
||||
configureTask = {
|
||||
group = "interop"
|
||||
|
||||
+15
-8
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSou
|
||||
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||
|
||||
internal fun Project.setUpHierarchicalKotlinNativePlatformDependencies() {
|
||||
val task = commonizeNativeDistributionHierarchicalTask?.get() ?: return
|
||||
val task = commonizeNativeDistributionHierarchicallyTask?.get() ?: return
|
||||
val kotlin = multiplatformExtensionOrNull ?: return
|
||||
kotlin.sourceSets.forEach { sourceSet ->
|
||||
val target = getCommonizerTarget(sourceSet) ?: return@forEach
|
||||
@@ -31,15 +31,22 @@ private fun HierarchicalNativeDistributionCommonizerTask.dependenciesFor(target:
|
||||
val targetOutputDirectory = HierarchicalCommonizerOutputLayout.getTargetDirectory(getRootOutputDirectory(rootTarget), target)
|
||||
val targetDependencies = project.filesProvider { targetOutputDirectory.listFiles().orEmpty().toList() }.builtBy(this)
|
||||
|
||||
if (target is LeafCommonizerTarget) {
|
||||
val expectTarget = rootTarget.withAllAncestors()
|
||||
.firstOrNull { (it as? SharedCommonizerTarget)?.targets?.contains(target) == true }
|
||||
?: return targetDependencies
|
||||
/*
|
||||
LeafCommonizerTargets will still analyze against 'new' 'commonized' platform dependencies.
|
||||
This means, that some parts of the API might get lifted to the direct parent dependency.
|
||||
*/
|
||||
val necessaryParentTargetDependencies: FileCollection = rootTarget.takeIf { target is LeafCommonizerTarget }
|
||||
?.findParentOf(target)
|
||||
?.let { parentTarget -> dependenciesFor(parentTarget) }
|
||||
?: project.files()
|
||||
|
||||
return targetDependencies + dependenciesFor(expectTarget)
|
||||
}
|
||||
return targetDependencies + necessaryParentTargetDependencies
|
||||
}
|
||||
|
||||
return targetDependencies
|
||||
private fun CommonizerTarget.findParentOf(target: CommonizerTarget): CommonizerTarget? {
|
||||
return withAllAncestors()
|
||||
.filterIsInstance<SharedCommonizerTarget>()
|
||||
.firstOrNull { target in it.targets }
|
||||
}
|
||||
|
||||
private fun Project.addDependencies(sourceSet: KotlinSourceSet, libraries: FileCollection) {
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@ private class NativePlatformDependencyResolver(val project: Project, val kotlinV
|
||||
check(!alreadyResolved)
|
||||
alreadyResolved = true
|
||||
|
||||
project.commonizeNativeDistributionTask.configure { commonizerTask ->
|
||||
project.commonizeNativeDistributionTask?.configure { commonizerTask ->
|
||||
commonizerTask.targetGroups = dependencies.keys.filterIsInstance<CommonizedCommon>().map { it.targets }.toSet()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user