support WASM in KotlinTargetHierarchyBuilder

This commit is contained in:
Oleg Yukhnevich
2023-03-05 21:48:33 +03:00
committed by Sebastian Sellmair
parent 91fb16110f
commit b240b8452a
3 changed files with 71 additions and 2 deletions
@@ -28,9 +28,10 @@ interface KotlinTargetHierarchyBuilder {
fun withMingw()
fun withLinux()
fun withAndroidNative()
fun withJs()
/* Actual targets */
fun withJs()
fun withWasm()
fun withJvm()
fun withAndroid()
fun withAndroidNativeX64()
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
import org.jetbrains.kotlin.konan.target.DEPRECATED_TARGET_MESSAGE
import org.jetbrains.kotlin.konan.target.Family
@@ -117,7 +119,9 @@ private class KotlinTargetHierarchyBuilderImpl(
override fun withAndroidNative() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.ANDROID }
override fun withJs() = addTargets { it is KotlinJsTargetDsl }
/** Don't check for instance of [KotlinJsTargetDsl] or [KotlinWasmTargetDsl] because they are implemented by single target [KotlinJsIrTarget] */
override fun withJs() = addTargets { it.platformType == KotlinPlatformType.js }
override fun withWasm() = addTargets { it.platformType == KotlinPlatformType.wasm }
override fun withJvm() = addTargets {
it is KotlinJvmTarget ||
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.buildKotlinTargetHierarchy
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.naturalKotlinTargetHierarchy
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.util.*
import kotlin.test.*
@@ -319,6 +320,69 @@ class KotlinTargetHierarchyDslTest {
)
}
@Test
fun `test - hierarchy js and wasm`() {
kotlin.targetHierarchy.custom {
common {
group("web") {
withJs()
withWasm()
}
}
}
@OptIn(ExperimentalWasmDsl::class)
kotlin.wasm()
kotlin.js()
assertEquals(
stringSetOf("webMain", "jsMain", "wasmMain"),
kotlin.dependingSourceSetNames("commonMain")
)
assertEquals(
stringSetOf("jsMain", "wasmMain"),
kotlin.dependingSourceSetNames("webMain")
)
}
@Test
fun `test - hierarchy js and wasm split`() {
kotlin.targetHierarchy.custom {
common {
group("jsAndJvm") {
withJs()
withJvm()
}
group("wasmAndLinux") {
withWasm()
withLinuxX64()
}
}
}
@OptIn(ExperimentalWasmDsl::class)
kotlin.wasm()
kotlin.js()
kotlin.jvm()
kotlin.linuxX64()
assertEquals(
stringSetOf("jsAndJvmMain", "wasmAndLinuxMain", "jvmMain", "linuxX64Main", "jsMain", "wasmMain"),
kotlin.dependingSourceSetNames("commonMain")
)
assertEquals(
stringSetOf("jsMain", "jvmMain"),
kotlin.dependingSourceSetNames("jsAndJvmMain")
)
assertEquals(
stringSetOf("wasmMain", "linuxX64Main"),
kotlin.dependingSourceSetNames("wasmAndLinuxMain")
)
}
@Test
fun `test - hierarchy set - extend - with new root`() {
val descriptor = KotlinTargetHierarchyDescriptor {