[Gradle][MPP] KotlinTargetHierarchyBuilderImpl: only build child groups if explicitly included
^KT-53570 Verification Pending
This commit is contained in:
committed by
Space Team
parent
487368d9df
commit
1823e0fad4
+48
-16
@@ -1029,31 +1029,60 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetE
|
|||||||
}
|
}
|
||||||
|
|
||||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder {
|
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder {
|
||||||
|
public abstract fun android ()V
|
||||||
|
public abstract fun androidNativeArm32 ()V
|
||||||
|
public abstract fun androidNativeArm64 ()V
|
||||||
|
public abstract fun androidNativeX64 ()V
|
||||||
|
public abstract fun androidNativeX86 ()V
|
||||||
|
public abstract fun anyAndroidNative ()V
|
||||||
|
public abstract fun anyApple ()V
|
||||||
|
public abstract fun anyIos ()V
|
||||||
|
public abstract fun anyJs ()V
|
||||||
|
public abstract fun anyLinux ()V
|
||||||
|
public abstract fun anyMacos ()V
|
||||||
|
public abstract fun anyMingw ()V
|
||||||
|
public abstract fun anyNative ()V
|
||||||
|
public abstract fun anyTvos ()V
|
||||||
|
public abstract fun anyWatchos ()V
|
||||||
public abstract fun common (Lkotlin/jvm/functions/Function1;)V
|
public abstract fun common (Lkotlin/jvm/functions/Function1;)V
|
||||||
public abstract fun getCompilation ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;
|
public abstract fun excludeCompilationIf (Lkotlin/jvm/functions/Function1;)V
|
||||||
public abstract fun getTarget ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTarget;
|
public abstract fun filterCompilations (Lkotlin/jvm/functions/Function1;)V
|
||||||
public abstract fun group (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
|
public abstract fun group (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
|
||||||
public abstract fun isAndroidJvm ()Z
|
public abstract fun includeCompilationIf (Lkotlin/jvm/functions/Function1;)V
|
||||||
public abstract fun isAndroidNative ()Z
|
public abstract fun iosArm32 ()V
|
||||||
public abstract fun isApple ()Z
|
public abstract fun iosArm64 ()V
|
||||||
public abstract fun isIos ()Z
|
public abstract fun iosSimulatorArm64 ()V
|
||||||
public abstract fun isJs ()Z
|
public abstract fun iosX64 ()V
|
||||||
public abstract fun isJsLegacy ()Z
|
public abstract fun jvm ()V
|
||||||
public abstract fun isJvm ()Z
|
public abstract fun linuxArm32Hfp ()V
|
||||||
public abstract fun isLinux ()Z
|
public abstract fun linuxArm64 ()V
|
||||||
public abstract fun isMacos ()Z
|
public abstract fun linuxMips32 ()V
|
||||||
public abstract fun isNative ()Z
|
public abstract fun linuxMipsel32 ()V
|
||||||
public abstract fun isTvos ()Z
|
public abstract fun linuxX64 ()V
|
||||||
public abstract fun isWatchos ()Z
|
public abstract fun macosArm64 ()V
|
||||||
public abstract fun isWindows ()Z
|
public abstract fun macosX64 ()V
|
||||||
|
public abstract fun mingwX64 ()V
|
||||||
|
public abstract fun mingwX86 ()V
|
||||||
|
public abstract fun tvosArm64 ()V
|
||||||
|
public abstract fun tvosSimulatorArm64 ()V
|
||||||
|
public abstract fun tvosX64 ()V
|
||||||
|
public abstract fun wasm32 ()V
|
||||||
|
public abstract fun watchosArm32 ()V
|
||||||
|
public abstract fun watchosArm64 ()V
|
||||||
|
public abstract fun watchosDeviceArm64 ()V
|
||||||
|
public abstract fun watchosSimulatorArm64 ()V
|
||||||
|
public abstract fun watchosX64 ()V
|
||||||
|
public abstract fun watchosX86 ()V
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$DefaultImpls {
|
public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$DefaultImpls {
|
||||||
public static fun common (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Lkotlin/jvm/functions/Function1;)V
|
public static fun common (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Lkotlin/jvm/functions/Function1;)V
|
||||||
|
public static fun filterCompilations (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Lkotlin/jvm/functions/Function1;)V
|
||||||
public static synthetic fun group$default (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
|
public static synthetic fun group$default (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor : kotlin/jvm/functions/Function1 {
|
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor {
|
||||||
|
public abstract fun describe (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;)V
|
||||||
public abstract fun extend (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor;
|
public abstract fun extend (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1094,6 +1123,9 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargets
|
|||||||
public abstract fun getPresets ()Lorg/gradle/api/NamedDomainObjectCollection;
|
public abstract fun getPresets ()Lorg/gradle/api/NamedDomainObjectCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract interface annotation class org/jetbrains/kotlin/gradle/plugin/KotlinTargetsDsl : java/lang/annotation/Annotation {
|
||||||
|
}
|
||||||
|
|
||||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTestRun : org/jetbrains/kotlin/gradle/plugin/KotlinExecution {
|
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTestRun : org/jetbrains/kotlin/gradle/plugin/KotlinExecution {
|
||||||
public abstract fun filter (Lgroovy/lang/Closure;)V
|
public abstract fun filter (Lgroovy/lang/Closure;)V
|
||||||
public abstract fun filter (Lkotlin/jvm/functions/Function1;)V
|
public abstract fun filter (Lkotlin/jvm/functions/Function1;)V
|
||||||
|
|||||||
+5
-2
@@ -11,8 +11,11 @@ interface KotlinTargetHierarchyBuilder {
|
|||||||
fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {})
|
fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {})
|
||||||
|
|
||||||
/* low-level APIs */
|
/* low-level APIs */
|
||||||
fun includeCompilation(predicate: (KotlinCompilation<*>) -> Boolean)
|
fun includeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean)
|
||||||
fun excludeCompilation(predicate: (KotlinCompilation<*>) -> Boolean)
|
fun excludeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean)
|
||||||
|
|
||||||
|
fun filterCompilations(predicate: (KotlinCompilation<*>) -> Boolean) =
|
||||||
|
excludeCompilationIf { !predicate(it) }
|
||||||
|
|
||||||
/* Convenient groups */
|
/* Convenient groups */
|
||||||
fun anyNative()
|
fun anyNative()
|
||||||
|
|||||||
+4
@@ -7,11 +7,15 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
|
import org.jetbrains.kotlin.tooling.core.withClosure
|
||||||
|
|
||||||
internal data class KotlinTargetHierarchy(
|
internal data class KotlinTargetHierarchy(
|
||||||
val node: Node, val children: Set<KotlinTargetHierarchy> = emptySet()
|
val node: Node, val children: Set<KotlinTargetHierarchy> = emptySet()
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
val childrenClosure: Set<KotlinTargetHierarchy> =
|
||||||
|
children.withClosure<KotlinTargetHierarchy> { it.children }
|
||||||
|
|
||||||
sealed class Node {
|
sealed class Node {
|
||||||
abstract fun sharedSourceSetName(compilation: KotlinCompilation<*>): String?
|
abstract fun sharedSourceSetName(compilation: KotlinCompilation<*>): String?
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -17,8 +17,8 @@ internal fun applyKotlinTargetHierarchy(
|
|||||||
targets
|
targets
|
||||||
.matching { target -> target.platformType != KotlinPlatformType.common }
|
.matching { target -> target.platformType != KotlinPlatformType.common }
|
||||||
.all { target ->
|
.all { target ->
|
||||||
target.compilations.all { compilation ->
|
target.compilations.all forCompilation@{ compilation ->
|
||||||
val hierarchy = hierarchyDescriptor.buildKotlinTargetHierarchy(compilation)
|
val hierarchy = hierarchyDescriptor.buildKotlinTargetHierarchy(compilation) ?: return@forCompilation
|
||||||
applyKotlinTargetHierarchy(hierarchy, compilation, sourceSets)
|
applyKotlinTargetHierarchy(hierarchy, compilation, sourceSets)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -52,4 +52,4 @@ private fun createSharedSourceSetOrNull(
|
|||||||
): KotlinSourceSet? {
|
): KotlinSourceSet? {
|
||||||
val sharedSourceSetName = node.sharedSourceSetName(compilation) ?: return null
|
val sharedSourceSetName = node.sharedSourceSetName(compilation) ?: return null
|
||||||
return sourceSets.maybeCreate(sharedSourceSetName)
|
return sourceSets.maybeCreate(sharedSourceSetName)
|
||||||
}
|
}
|
||||||
|
|||||||
+163
-167
@@ -18,8 +18,7 @@ import org.jetbrains.kotlin.konan.target.Family
|
|||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import org.jetbrains.kotlin.tooling.core.closure
|
import org.jetbrains.kotlin.tooling.core.closure
|
||||||
|
|
||||||
|
internal fun KotlinTargetHierarchyDescriptor.buildKotlinTargetHierarchy(compilation: KotlinCompilation<*>): KotlinTargetHierarchy? {
|
||||||
internal fun KotlinTargetHierarchyDescriptor.buildKotlinTargetHierarchy(compilation: KotlinCompilation<*>): KotlinTargetHierarchy {
|
|
||||||
val context = KotlinTargetHierarchyBuilderImplContext(compilation)
|
val context = KotlinTargetHierarchyBuilderImplContext(compilation)
|
||||||
describe(context.getOrCreateBuilder(KotlinTargetHierarchy.Node.Root))
|
describe(context.getOrCreateBuilder(KotlinTargetHierarchy.Node.Root))
|
||||||
return context.build(KotlinTargetHierarchy.Node.Root)
|
return context.build(KotlinTargetHierarchy.Node.Root)
|
||||||
@@ -27,15 +26,16 @@ internal fun KotlinTargetHierarchyDescriptor.buildKotlinTargetHierarchy(compilat
|
|||||||
|
|
||||||
private class KotlinTargetHierarchyBuilderImplContext(private val compilation: KotlinCompilation<*>) {
|
private class KotlinTargetHierarchyBuilderImplContext(private val compilation: KotlinCompilation<*>) {
|
||||||
private val builders = hashMapOf<KotlinTargetHierarchy.Node, KotlinTargetHierarchyBuilderImpl>()
|
private val builders = hashMapOf<KotlinTargetHierarchy.Node, KotlinTargetHierarchyBuilderImpl>()
|
||||||
private val builtValues = hashMapOf<KotlinTargetHierarchy.Node, KotlinTargetHierarchy>()
|
private val builtValues = hashMapOf<KotlinTargetHierarchy.Node, KotlinTargetHierarchy?>()
|
||||||
|
|
||||||
fun getOrCreateBuilder(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchyBuilderImpl = builders.getOrPut(node) {
|
fun getOrCreateBuilder(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchyBuilderImpl = builders.getOrPut(node) {
|
||||||
KotlinTargetHierarchyBuilderImpl(this, node)
|
KotlinTargetHierarchyBuilderImpl(this, node)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun build(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchy {
|
fun build(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchy? {
|
||||||
return builtValues.getOrPut(node) {
|
return builtValues.getOrPut(node) {
|
||||||
val builder = getOrCreateBuilder(node)
|
val builder = getOrCreateBuilder(node)
|
||||||
|
if (!builder.includes(compilation)) return@getOrPut null
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Keep the hierarchy 'deduplicated'.
|
Keep the hierarchy 'deduplicated'.
|
||||||
@@ -45,22 +45,12 @@ private class KotlinTargetHierarchyBuilderImplContext(private val compilation: K
|
|||||||
1) a -> b -> c
|
1) a -> b -> c
|
||||||
2) b -> c
|
2) b -> c
|
||||||
|
|
||||||
then we can remove the duplicated 'sub hierarchy' 2) and only return
|
then we can remove the duplicated 'sub hierarchy' 2) and only return 1) a -> b -> c
|
||||||
a -> b -> c
|
(Remove children that are also reachable by more specific paths)
|
||||||
|
*/
|
||||||
*/
|
val children = builder.children.mapNotNull { child -> build(child.node) }
|
||||||
val childrenNodes = builder.children.map { it.node } -
|
val directChildren = children.toSet() - children.flatMap { child -> child.childrenClosure }.toSet()
|
||||||
builder.children.flatMap { child -> child.childrenClosure }.map { it.node }.toSet()
|
KotlinTargetHierarchy(node, directChildren)
|
||||||
|
|
||||||
/*
|
|
||||||
Respect include & exclude predicates!
|
|
||||||
*/
|
|
||||||
val applicableChildrenNodes = childrenNodes.filter { node ->
|
|
||||||
val childrenBuilder = getOrCreateBuilder(node)
|
|
||||||
childrenBuilder.predicate?.invoke(compilation) ?: true
|
|
||||||
}
|
|
||||||
|
|
||||||
KotlinTargetHierarchy(node, applicableChildrenNodes.map(this::build).toSet())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -73,169 +63,175 @@ private class KotlinTargetHierarchyBuilderImpl(
|
|||||||
val children = mutableSetOf<KotlinTargetHierarchyBuilderImpl>()
|
val children = mutableSetOf<KotlinTargetHierarchyBuilderImpl>()
|
||||||
val childrenClosure get() = closure { it.children }
|
val childrenClosure get() = closure { it.children }
|
||||||
|
|
||||||
var predicate: ((KotlinCompilation<*>) -> Boolean)? = null
|
private var includePredicate: ((KotlinCompilation<*>) -> Boolean) = { false }
|
||||||
|
private var excludePredicate: ((KotlinCompilation<*>) -> Boolean) = { false }
|
||||||
|
|
||||||
override fun includeCompilation(predicate: (KotlinCompilation<*>) -> Boolean) {
|
override fun includeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) {
|
||||||
val previousPredicate = this.predicate
|
val previousIncludePredicate = this.includePredicate
|
||||||
if (previousPredicate == null) {
|
val previousExcludePredicate = this.excludePredicate
|
||||||
this.predicate = predicate
|
this.includePredicate = { previousIncludePredicate(it) || predicate(it) }
|
||||||
return
|
this.excludePredicate = { previousExcludePredicate(it) && !predicate(it) }
|
||||||
}
|
|
||||||
|
|
||||||
this.predicate = { previousPredicate(it) || predicate(it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun excludeCompilation(predicate: (KotlinCompilation<*>) -> Boolean) {
|
override fun excludeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) {
|
||||||
val previousPredicate = this.predicate
|
val previousIncludePredicate = this.includePredicate
|
||||||
if (previousPredicate == null) {
|
val previousExcludePredicate = this.excludePredicate
|
||||||
this.predicate = { !predicate(it) }
|
this.includePredicate = { previousIncludePredicate(it) && !predicate(it) }
|
||||||
return
|
this.excludePredicate = { previousExcludePredicate(it) || predicate(it) }
|
||||||
}
|
|
||||||
this.predicate = { previousPredicate(it) && !predicate(it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun includeTarget(crossinline predicate: (KotlinTarget) -> Boolean) = includeCompilation { predicate(it.target) }
|
fun includes(compilation: KotlinCompilation<*>): Boolean {
|
||||||
|
/* Return eagerly, when compilation is explicitly excluded */
|
||||||
|
if (excludePredicate(compilation)) return false
|
||||||
|
|
||||||
override fun anyNative() = includeTarget { it is KotlinNativeTarget }
|
/* Return eagerly, when compilation is explicitly included */
|
||||||
|
if (includePredicate(compilation)) return true
|
||||||
|
|
||||||
override fun anyApple() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family.isAppleFamily }
|
/* Find any child that includes this compilation */
|
||||||
|
return childrenClosure.any { child -> child.includes(compilation) }
|
||||||
override fun anyIos() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.IOS }
|
|
||||||
|
|
||||||
override fun anyWatchos() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.WATCHOS }
|
|
||||||
|
|
||||||
override fun anyMacos() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.OSX }
|
|
||||||
|
|
||||||
override fun anyTvos() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.TVOS }
|
|
||||||
|
|
||||||
override fun anyMingw() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.MINGW }
|
|
||||||
|
|
||||||
override fun anyLinux() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.LINUX }
|
|
||||||
|
|
||||||
override fun anyAndroidNative() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.ANDROID }
|
|
||||||
|
|
||||||
override fun anyJs() = includeTarget { it is KotlinJsTargetDsl }
|
|
||||||
|
|
||||||
override fun jvm() = includeTarget { it is KotlinJvmTarget }
|
|
||||||
|
|
||||||
override fun android() = includeTarget { it is KotlinAndroidTarget }
|
|
||||||
|
|
||||||
override fun androidNativeX64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X64
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun androidNativeX86() = includeTarget {
|
private inline fun includeTargetIf(crossinline predicate: (KotlinTarget) -> Boolean) = includeCompilationIf { predicate(it.target) }
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun androidNativeArm32() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun androidNativeArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun iosArm32() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM32
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun iosArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun iosX64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_X64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun iosSimulatorArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_SIMULATOR_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun watchosArm32() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM32
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun watchosArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun watchosX86() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X86
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun watchosX64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun watchosSimulatorArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_SIMULATOR_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun watchosDeviceArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_DEVICE_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun tvosArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun tvosX64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_X64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun tvosSimulatorArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_SIMULATOR_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun linuxX64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_X64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun mingwX86() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X86
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun mingwX64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun macosX64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_X64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun macosArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun linuxArm64() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM64
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun linuxArm32Hfp() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM32_HFP
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun linuxMips32() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPS32
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun linuxMipsel32() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPSEL32
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun wasm32() = includeTarget {
|
|
||||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WASM32
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit) {
|
override fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit) {
|
||||||
val node = KotlinTargetHierarchy.Node.Group(name)
|
val node = KotlinTargetHierarchy.Node.Group(name)
|
||||||
val child = context.getOrCreateBuilder(node)
|
val child = context.getOrCreateBuilder(node).also(build)
|
||||||
children.add(child)
|
children.add(child)
|
||||||
child.build()
|
|
||||||
checkCyclicHierarchy()
|
checkCyclicHierarchy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun anyNative() = includeTargetIf { it is KotlinNativeTarget }
|
||||||
|
|
||||||
|
override fun anyApple() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family.isAppleFamily }
|
||||||
|
|
||||||
|
override fun anyIos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.IOS }
|
||||||
|
|
||||||
|
override fun anyWatchos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.WATCHOS }
|
||||||
|
|
||||||
|
override fun anyMacos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.OSX }
|
||||||
|
|
||||||
|
override fun anyTvos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.TVOS }
|
||||||
|
|
||||||
|
override fun anyMingw() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.MINGW }
|
||||||
|
|
||||||
|
override fun anyLinux() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.LINUX }
|
||||||
|
|
||||||
|
override fun anyAndroidNative() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.ANDROID }
|
||||||
|
|
||||||
|
override fun anyJs() = includeTargetIf { it is KotlinJsTargetDsl }
|
||||||
|
|
||||||
|
override fun jvm() = includeTargetIf { it is KotlinJvmTarget }
|
||||||
|
|
||||||
|
override fun android() = includeTargetIf { it is KotlinAndroidTarget }
|
||||||
|
|
||||||
|
override fun androidNativeX64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun androidNativeX86() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun androidNativeArm32() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun androidNativeArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun iosArm32() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM32
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun iosArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun iosX64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_X64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun iosSimulatorArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_SIMULATOR_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun watchosArm32() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM32
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun watchosArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun watchosX86() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X86
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun watchosX64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun watchosSimulatorArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_SIMULATOR_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun watchosDeviceArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_DEVICE_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun tvosArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun tvosX64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_X64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun tvosSimulatorArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_SIMULATOR_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun linuxX64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_X64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun mingwX86() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X86
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun mingwX64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun macosX64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_X64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun macosArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun linuxArm64() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM64
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun linuxArm32Hfp() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM32_HFP
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun linuxMips32() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPS32
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun linuxMipsel32() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPSEL32
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun wasm32() = includeTargetIf {
|
||||||
|
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WASM32
|
||||||
|
}
|
||||||
|
|
||||||
override fun toString(): String {
|
override fun toString(): String {
|
||||||
return "KotlinTargetHierarchyBuilder($node)"
|
return "KotlinTargetHierarchyBuilder($node)"
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -10,11 +10,12 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isTest
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isTest
|
||||||
|
|
||||||
internal val naturalKotlinTargetHierarchy = KotlinTargetHierarchyDescriptor {
|
internal val naturalKotlinTargetHierarchy = KotlinTargetHierarchyDescriptor {
|
||||||
|
/* natural hierarchy is only applied to default 'main'/'test' compilations (by default) */
|
||||||
|
filterCompilations { compilation -> compilation.isMain() || compilation.isTest() }
|
||||||
|
|
||||||
common {
|
common {
|
||||||
group("native") {
|
group("native") {
|
||||||
anyNative()
|
anyNative()
|
||||||
/* natural hierarchy is only defined for main and test default compilations, by default */
|
|
||||||
excludeCompilation { compilation -> !(compilation.isMain() || compilation.isTest()) }
|
|
||||||
|
|
||||||
group("apple") {
|
group("apple") {
|
||||||
anyApple()
|
anyApple()
|
||||||
|
|||||||
+19
-13
@@ -14,9 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.KotlinTargetHierar
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.KotlinTargetHierarchy.Node
|
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.KotlinTargetHierarchy.Node
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.buildKotlinTargetHierarchy
|
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.buildKotlinTargetHierarchy
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.*
|
||||||
import kotlin.test.assertFailsWith
|
|
||||||
import kotlin.test.assertSame
|
|
||||||
|
|
||||||
class KotlinTargetHierarchyDescriptorTest {
|
class KotlinTargetHierarchyDescriptorTest {
|
||||||
|
|
||||||
@@ -27,8 +25,8 @@ class KotlinTargetHierarchyDescriptorTest {
|
|||||||
fun `test - simple descriptor`() {
|
fun `test - simple descriptor`() {
|
||||||
val descriptor = KotlinTargetHierarchyDescriptor {
|
val descriptor = KotlinTargetHierarchyDescriptor {
|
||||||
common {
|
common {
|
||||||
group("groupA") { includeCompilation { it.target.name == "a" } }
|
group("groupA") { includeCompilationIf { it.target.name == "a" } }
|
||||||
group("groupB") { includeCompilation { it.target.name == "b" } }
|
group("groupB") { includeCompilationIf { it.target.name == "b" } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,8 +52,8 @@ class KotlinTargetHierarchyDescriptorTest {
|
|||||||
descriptor.buildKotlinTargetHierarchy(targetB.compilations.main)
|
descriptor.buildKotlinTargetHierarchy(targetB.compilations.main)
|
||||||
)
|
)
|
||||||
|
|
||||||
assertEquals(
|
/* targetC is not mentioned in hierarchy description */
|
||||||
hierarchy { group("common") },
|
assertNull(
|
||||||
descriptor.buildKotlinTargetHierarchy(targetC.compilations.main)
|
descriptor.buildKotlinTargetHierarchy(targetC.compilations.main)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -64,7 +62,9 @@ class KotlinTargetHierarchyDescriptorTest {
|
|||||||
fun `test - extend`() {
|
fun `test - extend`() {
|
||||||
val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend {
|
val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend {
|
||||||
group("base") {
|
group("base") {
|
||||||
group("extension")
|
group("extension") {
|
||||||
|
includeCompilationIf { true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,9 @@ class KotlinTargetHierarchyDescriptorTest {
|
|||||||
val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend {
|
val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend {
|
||||||
group("newRoot") {
|
group("newRoot") {
|
||||||
group("base") {
|
group("base") {
|
||||||
group("extension")
|
group("extension") {
|
||||||
|
includeCompilationIf { true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,19 +110,23 @@ class KotlinTargetHierarchyDescriptorTest {
|
|||||||
.extend {
|
.extend {
|
||||||
group("newRoot1") {
|
group("newRoot1") {
|
||||||
group("base") {
|
group("base") {
|
||||||
group("extension1")
|
group("extension1") {
|
||||||
|
includeCompilationIf { true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.extend {
|
.extend {
|
||||||
group("newRoot2") {
|
group("newRoot2") {
|
||||||
group("base") {
|
group("base") {
|
||||||
group("extension2")
|
group("extension2") {
|
||||||
|
includeCompilationIf { true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val hierarchy = descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.main)
|
val hierarchy = assertNotNull(descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.main))
|
||||||
|
|
||||||
assertEquals(
|
assertEquals(
|
||||||
hierarchy {
|
hierarchy {
|
||||||
@@ -197,4 +203,4 @@ private class TestHierarchyBuilder(private val node: Node) {
|
|||||||
|
|
||||||
private fun hierarchy(build: TestHierarchyBuilder.() -> Unit): KotlinTargetHierarchy {
|
private fun hierarchy(build: TestHierarchyBuilder.() -> Unit): KotlinTargetHierarchy {
|
||||||
return TestHierarchyBuilder(Node.Root).also(build).build()
|
return TestHierarchyBuilder(Node.Root).also(build).build()
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-3
@@ -186,7 +186,13 @@ class KotlinTargetHierarchyDslTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin.apply {
|
kotlin.apply {
|
||||||
targetHierarchy.apply(descriptor) { group("base") { group("extension") } }
|
targetHierarchy.apply(descriptor) {
|
||||||
|
group("base") {
|
||||||
|
group("extension") {
|
||||||
|
linuxX64()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
linuxX64()
|
linuxX64()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +213,6 @@ class KotlinTargetHierarchyDslTest {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `test - hierarchy set - extend - with new root`() {
|
fun `test - hierarchy set - extend - with new root`() {
|
||||||
val descriptor = KotlinTargetHierarchyDescriptor {
|
val descriptor = KotlinTargetHierarchyDescriptor {
|
||||||
@@ -219,7 +224,11 @@ class KotlinTargetHierarchyDslTest {
|
|||||||
kotlin.apply {
|
kotlin.apply {
|
||||||
targetHierarchy.apply(descriptor) {
|
targetHierarchy.apply(descriptor) {
|
||||||
group("newRoot") {
|
group("newRoot") {
|
||||||
group("base") { group("extension") }
|
group("base") {
|
||||||
|
group("extension") {
|
||||||
|
linuxX64()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
linuxX64()
|
linuxX64()
|
||||||
|
|||||||
Reference in New Issue
Block a user