diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 1b95c1feacd..ec822cb27d0 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -65,7 +65,8 @@
-
+
+
diff --git a/libraries/kotlin.test/build.gradle.kts b/libraries/kotlin.test/build.gradle.kts
index 453843e45fa..8cbf805e4cd 100644
--- a/libraries/kotlin.test/build.gradle.kts
+++ b/libraries/kotlin.test/build.gradle.kts
@@ -5,6 +5,7 @@ import plugins.configureKotlinPomAttributes
import groovy.util.Node
import groovy.util.NodeList
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
+import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
plugins {
id("org.jetbrains.kotlin.multiplatform") apply false
@@ -63,6 +64,7 @@ val wasmApiVariant by configurations.creating {
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
+ attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.js)
}
}
val wasmRuntimeVariant by configurations.creating {
@@ -71,10 +73,31 @@ val wasmRuntimeVariant by configurations.creating {
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-runtime"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
+ attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.js)
}
extendsFrom(wasmApiVariant)
}
+val wasmWasiApiVariant by configurations.creating {
+ isCanBeConsumed = false
+ isCanBeResolved = true
+ attributes {
+ attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api"))
+ attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
+ attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.wasi)
+ }
+}
+val wasmWasiRuntimeVariant by configurations.creating {
+ isCanBeConsumed = false
+ isCanBeResolved = true
+ attributes {
+ attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-runtime"))
+ attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
+ attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.wasi)
+ }
+ extendsFrom(wasmWasiApiVariant)
+}
+
val nativeApiVariant by configurations.creating {
isCanBeConsumed = false
isCanBeResolved = true
@@ -113,7 +136,8 @@ val kotlinTestJvmSources by configurations.creating {
dependencies {
jvmApi(project(":kotlin-stdlib"))
jsApiVariant("$group:kotlin-test-js:$version")
- wasmApiVariant("$group:kotlin-test-wasm:$version")
+ wasmApiVariant("$group:kotlin-test-wasm-js:$version")
+ wasmWasiApiVariant("$group:kotlin-test-wasm-wasi:$version")
commonVariant(project(":kotlin-test:kotlin-test-common"))
commonVariant(project(":kotlin-test:kotlin-test-annotations-common"))
kotlinTestCommonSources(project(":kotlin-test:kotlin-test-common"))
@@ -163,6 +187,8 @@ val rootComponent = componentFactory.adhoc("root").apply {
addVariantsFromConfiguration(jsRuntimeVariant) { mapToOptional() }
addVariantsFromConfiguration(wasmApiVariant) { mapToOptional() }
addVariantsFromConfiguration(wasmRuntimeVariant) { mapToOptional() }
+ addVariantsFromConfiguration(wasmWasiApiVariant) { mapToOptional() }
+ addVariantsFromConfiguration(wasmWasiRuntimeVariant) { mapToOptional() }
addVariantsFromConfiguration(nativeApiVariant) { mapToOptional() }
addVariantsFromConfiguration(commonVariant) { mapToOptional() }
}
@@ -308,37 +334,68 @@ val jsComponent = componentFactory.adhoc("js").apply {
}
}
-val (wasmApi, wasmRuntime) = listOf("api", "runtime").map { usage ->
- configurations.create("wasm${usage.capitalize()}") {
+val (wasmJsApi, wasmJsRuntime) = listOf("api", "runtime").map { usage ->
+ configurations.create("wasmJs${usage.capitalize()}") {
isCanBeConsumed = true
isCanBeResolved = true
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-$usage"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
+ attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.js)
}
}
}
-wasmRuntime.extendsFrom(wasmApi)
+wasmJsRuntime.extendsFrom(wasmJsApi)
+
+val (wasmWasiApi, wasmWasiRuntime) = listOf("api", "runtime").map { usage ->
+ configurations.create("wasmWasi${usage.capitalize()}") {
+ isCanBeConsumed = true
+ isCanBeResolved = true
+ attributes {
+ attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-$usage"))
+ attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
+ attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.wasi)
+ }
+ }
+}
+wasmWasiRuntime.extendsFrom(wasmWasiApi)
dependencies {
- wasmApi(project(":kotlin-stdlib-wasm-js"))
+ wasmJsApi(project(":kotlin-stdlib-wasm-js"))
+ wasmWasiApi(project(":kotlin-stdlib-wasm-wasi"))
}
artifacts {
- val wasmKlib = tasks.getByPath(":kotlin-test:kotlin-test-wasm:wasmJar")
- add(wasmApi.name, wasmKlib) {
+ val wasmKlib = tasks.getByPath(":kotlin-test:kotlin-test-wasm-js:wasmJar")
+ add(wasmJsApi.name, wasmKlib) {
extension = "klib"
}
- add(wasmRuntime.name, wasmKlib) {
+ add(wasmJsRuntime.name, wasmKlib) {
+ extension = "klib"
+ }
+ val wasmWasiKlib = tasks.getByPath(":kotlin-test:kotlin-test-wasm-wasi:wasmJar")
+ add(wasmWasiApi.name, wasmWasiKlib) {
+ extension = "klib"
+ }
+ add(wasmWasiRuntime.name, wasmWasiKlib) {
extension = "klib"
}
}
-val wasmComponent = componentFactory.adhoc("wasm").apply {
- addVariantsFromConfiguration(wasmApi) {
+val wasmComponent = componentFactory.adhoc("wasmJs").apply {
+ addVariantsFromConfiguration(wasmJsApi) {
mapToMavenScope("compile")
}
- addVariantsFromConfiguration(wasmRuntime) {
+ addVariantsFromConfiguration(wasmJsRuntime) {
+ mapToMavenScope("runtime")
+ }
+}
+
+val wasmWasiComponent = componentFactory.adhoc("wasmWasi").apply {
+ addVariantsFromConfiguration(wasmWasiApi) {
+ mapToMavenScope("compile")
+ }
+ addVariantsFromConfiguration(wasmWasiRuntime) {
mapToMavenScope("runtime")
}
}
@@ -430,16 +487,27 @@ publishing {
"Js", "kotlin-test-js",
setOf(jsRuntime.name, commonVariant.name), kotlinTestJsPublication
)
- val kotlinTestWasmPublication = register("wasm", MavenPublication::class) {
- artifactId = "kotlin-test-wasm"
+ val kotlinTestWasmJsPublication = register("wasmJs", MavenPublication::class) {
+ artifactId = "kotlin-test-wasm-js"
from(wasmComponent)
- artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm:sourcesJar") as Jar)
- artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm:emptyJavadocJar") as Jar)
- configureKotlinPomAttributes(project, "Kotlin Test for WASM", packaging = "klib")
+ artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm-js:sourcesJar") as Jar)
+ artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm-js:emptyJavadocJar") as Jar)
+ configureKotlinPomAttributes(project, "Kotlin Test for Wasm JS", packaging = "klib")
}
configureSbom(
- "Wasm", "kotlin-test-wasm",
- setOf(wasmRuntime.name, commonVariant.name), kotlinTestWasmPublication
+ "WasmJs", "kotlin-test-wasm-js",
+ setOf(wasmJsRuntime.name, commonVariant.name), kotlinTestWasmJsPublication
+ )
+ val kotlinTestWasmWasiPublication = register("wasmWasi", MavenPublication::class) {
+ artifactId = "kotlin-test-wasm-wasi"
+ from(wasmWasiComponent)
+ artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm-wasi:sourcesJar") as Jar)
+ artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm-wasi:emptyJavadocJar") as Jar)
+ configureKotlinPomAttributes(project, "Kotlin Test for Wasm WASI", packaging = "klib")
+ }
+ configureSbom(
+ "WasmWasi", "kotlin-test-wasm-wasi",
+ setOf(wasmWasiRuntime.name, commonVariant.name), kotlinTestWasmWasiPublication
)
val kotlinTestCommonPublication = register("common", MavenPublication::class) {
artifactId = "kotlin-test-common"
diff --git a/libraries/kotlin.test/wasm/build.gradle.kts b/libraries/kotlin.test/wasm/build.gradle.kts
deleted file mode 100644
index 1b70134f08c..00000000000
--- a/libraries/kotlin.test/wasm/build.gradle.kts
+++ /dev/null
@@ -1,63 +0,0 @@
-import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
-
-plugins {
- kotlin("multiplatform")
-}
-
-val commonMainSources by task {
- from(
- "$rootDir/libraries/kotlin.test/common/src",
- "$rootDir/libraries/kotlin.test/annotations-common/src"
- )
- into("$buildDir/commonMainSources")
-}
-
-kotlin {
- @Suppress("DEPRECATION")
- @OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class)
- wasm("wasm") {
- nodejs()
- }
-
- sourceSets {
- named("commonMain") {
- dependencies {
- api(project(":kotlin-stdlib-wasm-js"))
- }
- kotlin.srcDir(commonMainSources.get().destinationDir)
- }
-
- named("wasmMain") {
- dependencies {
- api(project(":kotlin-stdlib-wasm-js"))
- }
- kotlin.srcDirs("$rootDir/libraries/kotlin.test/wasm/src")
- kotlin.srcDirs("$rootDir/libraries/kotlin.test/wasm/js/main/kotlin/kotlin/test")
- }
- }
-}
-
-tasks.withType>().configureEach {
- kotlinOptions.freeCompilerArgs += listOf(
- "-Xallow-kotlin-package",
- "-opt-in=kotlin.ExperimentalMultiplatform",
- "-opt-in=kotlin.contracts.ExperimentalContracts",
- "-Xwasm-target=wasm-js"
- )
-}
-
-tasks.named("compileKotlinWasm", KotlinCompile::class.java) {
- kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin-test"
- dependsOn(commonMainSources)
-}
-
-tasks.register("sourcesJar") {
- dependsOn(commonMainSources)
- archiveClassifier.set("sources")
- from(kotlin.sourceSets["commonMain"].kotlin)
- from(kotlin.sourceSets["wasmMain"].kotlin)
-}
-
-tasks.register("emptyJavadocJar") {
- archiveClassifier.set("javadoc")
-}
diff --git a/libraries/kotlin.test/wasm/js/build.gradle.kts b/libraries/kotlin.test/wasm/js/build.gradle.kts
new file mode 100644
index 00000000000..0fff8cf6e70
--- /dev/null
+++ b/libraries/kotlin.test/wasm/js/build.gradle.kts
@@ -0,0 +1,14 @@
+import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
+
+plugins {
+ kotlin("multiplatform")
+}
+
+configureWasmKotlinTest(
+ wasmTargetParameter = "wasm-js",
+ wasmTargetAttribute = KotlinWasmTargetAttribute.js,
+ targetSourceDir = "$rootDir/libraries/kotlin.test/wasm/js/src",
+ stdDependencyName = ":kotlin-stdlib-wasm-js"
+) { extensionBody ->
+ kotlin(extensionBody)
+}
\ No newline at end of file
diff --git a/libraries/kotlin.test/wasm/wasi/build.gradle.kts b/libraries/kotlin.test/wasm/wasi/build.gradle.kts
new file mode 100644
index 00000000000..cc8a9d0d798
--- /dev/null
+++ b/libraries/kotlin.test/wasm/wasi/build.gradle.kts
@@ -0,0 +1,14 @@
+import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
+
+plugins {
+ kotlin("multiplatform")
+}
+
+configureWasmKotlinTest(
+ wasmTargetParameter = "wasm-wasi",
+ wasmTargetAttribute = KotlinWasmTargetAttribute.wasi,
+ targetSourceDir = "$rootDir/libraries/kotlin.test/wasm/wasi/src",
+ stdDependencyName = ":kotlin-stdlib-wasm-wasi"
+) { extensionBody ->
+ kotlin(extensionBody)
+}
\ No newline at end of file
diff --git a/libraries/stdlib/wasm/wasi/build.gradle.kts b/libraries/stdlib/wasm/wasi/build.gradle.kts
index fcfa004333e..570e5022d4e 100644
--- a/libraries/stdlib/wasm/wasi/build.gradle.kts
+++ b/libraries/stdlib/wasm/wasi/build.gradle.kts
@@ -8,8 +8,6 @@ plugins {
description = "Kotlin Standard Library for experimental WebAssembly WASI platform"
-D8RootPlugin.apply(rootProject).version = v8Version
-
val targetDependentSources = listOf("builtins/kotlin", "src/kotlin", "src/kotlinx").map {
"$rootDir/libraries/stdlib/wasm/wasi/$it"
}
diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm/kotlin-test-wasm.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-js/kotlin-test-wasm-js.pom
similarity index 89%
rename from repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm/kotlin-test-wasm.pom
rename to repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-js/kotlin-test-wasm-js.pom
index 37f860a0452..9a5cb0a8932 100644
--- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm/kotlin-test-wasm.pom
+++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-js/kotlin-test-wasm-js.pom
@@ -8,11 +8,11 @@
4.0.0
org.jetbrains.kotlin
- kotlin-test-wasm
+ kotlin-test-wasm-js
ArtifactsTest.version
klib
- Kotlin Test Wasm
- Kotlin Test for WASM
+ Kotlin Test Wasm Js
+ Kotlin Test for Wasm JS
https://kotlinlang.org/
@@ -35,9 +35,9 @@
org.jetbrains.kotlin
- kotlin-stdlib-wasm
+ kotlin-stdlib-wasm-js
ArtifactsTest.version
compile
-
+
\ No newline at end of file
diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-wasi/kotlin-test-wasm-wasi.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-wasi/kotlin-test-wasm-wasi.pom
new file mode 100644
index 00000000000..372dc7940ed
--- /dev/null
+++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-wasi/kotlin-test-wasm-wasi.pom
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+ 4.0.0
+ org.jetbrains.kotlin
+ kotlin-test-wasm-wasi
+ ArtifactsTest.version
+ klib
+ Kotlin Test Wasm Wasi
+ Kotlin Test for Wasm WASI
+ https://kotlinlang.org/
+
+
+ The Apache License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+
+
+
+
+ Kotlin Team
+ JetBrains
+ https://www.jetbrains.com
+
+
+
+ scm:git:https://github.com/JetBrains/kotlin.git
+ scm:git:https://github.com/JetBrains/kotlin.git
+ https://github.com/JetBrains/kotlin
+
+
+
+ org.jetbrains.kotlin
+ kotlin-stdlib-wasm-wasi
+ ArtifactsTest.version
+ compile
+
+
+
\ No newline at end of file
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/wasm/wasmKotlinTest.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/wasm/wasmKotlinTest.kt
new file mode 100644
index 00000000000..3b95830fc4f
--- /dev/null
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/wasm/wasmKotlinTest.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+import org.gradle.api.Project
+import org.gradle.api.tasks.Sync
+import org.gradle.api.tasks.bundling.Jar
+import org.gradle.kotlin.dsl.get
+import org.gradle.kotlin.dsl.register
+import org.gradle.kotlin.dsl.withType
+import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
+import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
+import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
+
+private fun Project.createCommonMainSources() = tasks.register("commonMainSources", Sync::class.java) {
+ from(
+ "$rootDir/libraries/kotlin.test/common/src",
+ "$rootDir/libraries/kotlin.test/annotations-common/src",
+ "$rootDir/libraries/kotlin.test/wasm/src"
+ )
+ into("$buildDir/commonMainSources")
+}
+
+fun Project.configureWasmKotlinTest(
+ wasmTargetParameter: String,
+ wasmTargetAttribute: KotlinWasmTargetAttribute,
+ targetSourceDir: String,
+ stdDependencyName: String,
+ withKotlinMPP: (KotlinMultiplatformExtension.() -> Unit) -> Unit
+) {
+ val commonMainSources = createCommonMainSources()
+
+ withKotlinMPP {
+ @Suppress("DEPRECATION")
+ @OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class)
+ wasm("wasm") {
+ nodejs()
+ attributes {
+ attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, wasmTargetAttribute)
+ }
+ }
+
+ sourceSets {
+ sourceSets.named("commonMain") {
+ dependencies {
+ api(project(stdDependencyName))
+ }
+ kotlin.srcDir(commonMainSources.get().destinationDir)
+ }
+
+ sourceSets.named("wasmMain") {
+ dependencies {
+ api(project(stdDependencyName))
+ }
+ kotlin.srcDir(targetSourceDir)
+ }
+ }
+
+ tasks.register("sourcesJar") {
+ dependsOn(commonMainSources)
+ archiveClassifier.set("sources")
+ from(sourceSets["commonMain"].kotlin)
+ from(sourceSets["wasmMain"].kotlin)
+ }
+ }
+
+ tasks.withType>().configureEach {
+ kotlinOptions.freeCompilerArgs += listOf(
+ "-Xallow-kotlin-package",
+ "-opt-in=kotlin.ExperimentalMultiplatform",
+ "-opt-in=kotlin.contracts.ExperimentalContracts",
+ "-Xwasm-target=$wasmTargetParameter"
+ )
+ }
+
+ tasks.named("compileKotlinWasm", KotlinCompile::class.java) {
+ kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin-test"
+ dependsOn(commonMainSources)
+ }
+
+ tasks.register("emptyJavadocJar") {
+ archiveClassifier.set("javadoc")
+ }
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 8cf9f4f926e..0da25b355a7 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -599,7 +599,8 @@ if (buildProperties.inJpsBuildIdeaSync) {
":kotlin-test:kotlin-test-js-ir",
":kotlin-test:kotlin-test-js:kotlin-test-js-it",
":kotlin-test:kotlin-test-js-ir:kotlin-test-js-ir-it",
- ":kotlin-test:kotlin-test-wasm",
+ ":kotlin-test:kotlin-test-wasm-js",
+ ":kotlin-test:kotlin-test-wasm-wasi",
":native:native.tests"
if (!stdlibMpp) include ":kotlin-stdlib-js", ":kotlin-stdlib-js-ir"
@@ -628,7 +629,8 @@ if (buildProperties.inJpsBuildIdeaSync) {
project(':kotlin-test:kotlin-test-js-ir').projectDir = "$rootDir/libraries/kotlin.test/js-ir" as File
project(':kotlin-test:kotlin-test-js:kotlin-test-js-it').projectDir = "$rootDir/libraries/kotlin.test/js/it" as File
project(':kotlin-test:kotlin-test-js-ir:kotlin-test-js-ir-it').projectDir = "$rootDir/libraries/kotlin.test/js-ir/it" as File
- project(':kotlin-test:kotlin-test-wasm').projectDir = "$rootDir/libraries/kotlin.test/wasm" as File
+ project(':kotlin-test:kotlin-test-wasm-js').projectDir = "$rootDir/libraries/kotlin.test/wasm/js" as File
+ project(':kotlin-test:kotlin-test-wasm-wasi').projectDir = "$rootDir/libraries/kotlin.test/wasm/wasi" as File
project(':native:native.tests').projectDir = "$rootDir/native/native.tests" as File
}
include ":compiler:android-tests"
diff --git a/wasm/wasm.tests/build.gradle.kts b/wasm/wasm.tests/build.gradle.kts
index 8fb8ccd3a6d..80c9c70372e 100644
--- a/wasm/wasm.tests/build.gradle.kts
+++ b/wasm/wasm.tests/build.gradle.kts
@@ -89,8 +89,8 @@ sourceSets {
fun Test.setupWasmStdlib() {
dependsOn(":kotlin-stdlib-wasm-js:compileKotlinWasm")
systemProperty("kotlin.wasm.stdlib.path", "libraries/stdlib/wasm/js/build/classes/kotlin/wasm/main")
- dependsOn(":kotlin-test:kotlin-test-wasm:compileKotlinWasm")
- systemProperty("kotlin.wasm.kotlin.test.path", "libraries/kotlin.test/wasm/build/classes/kotlin/wasm/main")
+ dependsOn(":kotlin-test:kotlin-test-wasm-js:compileKotlinWasm")
+ systemProperty("kotlin.wasm.kotlin.test.path", "libraries/kotlin.test/wasm/js/build/classes/kotlin/wasm/main")
}
fun Test.setupGradlePropertiesForwarding() {