diff --git a/build.gradle.kts b/build.gradle.kts
index ffa0439f0c8..eaf73ecc5fb 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -325,7 +325,8 @@ extra["compilerArtifactsForIde"] = listOfNotNull(
":plugins:parcelize:parcelize-runtime",
":kotlin-stdlib-common",
":kotlin-stdlib",
- ":kotlin-stdlib-wasm",
+ ":kotlin-stdlib-wasm-js",
+ ":kotlin-stdlib-wasm-wasi",
":kotlin-test",
":kotlin-daemon",
":kotlin-compiler",
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index ea6af4ca315..1b95c1feacd 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -56,7 +56,8 @@
-
+
+
diff --git a/libraries/kotlin.test/build.gradle.kts b/libraries/kotlin.test/build.gradle.kts
index 947f4591e9e..453843e45fa 100644
--- a/libraries/kotlin.test/build.gradle.kts
+++ b/libraries/kotlin.test/build.gradle.kts
@@ -321,7 +321,7 @@ val (wasmApi, wasmRuntime) = listOf("api", "runtime").map { usage ->
wasmRuntime.extendsFrom(wasmApi)
dependencies {
- wasmApi(project(":kotlin-stdlib-wasm"))
+ wasmApi(project(":kotlin-stdlib-wasm-js"))
}
artifacts {
diff --git a/libraries/kotlin.test/wasm/build.gradle.kts b/libraries/kotlin.test/wasm/build.gradle.kts
index 0975de6bbd6..1b70134f08c 100644
--- a/libraries/kotlin.test/wasm/build.gradle.kts
+++ b/libraries/kotlin.test/wasm/build.gradle.kts
@@ -20,18 +20,19 @@ kotlin {
}
sourceSets {
- named("commonMain") {
+ named("commonMain") {
dependencies {
- api(project(":kotlin-stdlib-wasm"))
+ api(project(":kotlin-stdlib-wasm-js"))
}
kotlin.srcDir(commonMainSources.get().destinationDir)
}
named("wasmMain") {
dependencies {
- api(project(":kotlin-stdlib-wasm"))
+ api(project(":kotlin-stdlib-wasm-js"))
}
- kotlin.srcDir("$rootDir/libraries/kotlin.test/wasm/src")
+ kotlin.srcDirs("$rootDir/libraries/kotlin.test/wasm/src")
+ kotlin.srcDirs("$rootDir/libraries/kotlin.test/wasm/js/main/kotlin/kotlin/test")
}
}
}
@@ -40,12 +41,13 @@ tasks.withType>().configureEach {
kotlinOptions.freeCompilerArgs += listOf(
"-Xallow-kotlin-package",
"-opt-in=kotlin.ExperimentalMultiplatform",
- "-opt-in=kotlin.contracts.ExperimentalContracts"
+ "-opt-in=kotlin.contracts.ExperimentalContracts",
+ "-Xwasm-target=wasm-js"
)
}
-tasks.named("compileKotlinWasm") {
- (this as KotlinCompile<*>).kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin-test"
+tasks.named("compileKotlinWasm", KotlinCompile::class.java) {
+ kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin-test"
dependsOn(commonMainSources)
}
diff --git a/libraries/stdlib/wasm/build.gradle.kts b/libraries/stdlib/wasm/build.gradle.kts
deleted file mode 100644
index c9b85b0ee1e..00000000000
--- a/libraries/stdlib/wasm/build.gradle.kts
+++ /dev/null
@@ -1,207 +0,0 @@
-import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
-import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
-import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
-import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin
-import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink
-
-plugins {
- `maven-publish`
- kotlin("multiplatform")
-}
-
-description = "Kotlin Standard Library for experimental WebAssembly platform"
-
-val unimplementedNativeBuiltIns =
- (file("$rootDir/core/builtins/native/kotlin/").list().toSortedSet() - file("$rootDir/libraries/stdlib/wasm/builtins/kotlin/").list())
- .map { "core/builtins/native/kotlin/$it" }
-
-
-
-val builtInsSources by task {
- val sources = listOf(
- "core/builtins/src/kotlin/"
- ) + unimplementedNativeBuiltIns
-
- val excluded = listOf(
- // JS-specific optimized version of emptyArray() already defined
- "ArrayIntrinsics.kt",
- // Included with K/N collections
- "Collections.kt", "Iterator.kt", "Iterators.kt"
- )
-
- sources.forEach { path ->
- from("$rootDir/$path") {
- into(path.dropLastWhile { it != '/' })
- excluded.forEach {
- exclude(it)
- }
- }
- }
-
- into("$buildDir/builtInsSources")
-}
-
-val commonMainSources by task {
- val sources = listOf(
- "libraries/stdlib/common/src/",
- "libraries/stdlib/src/kotlin/",
- "libraries/stdlib/unsigned/"
- )
-
- sources.forEach { path ->
- from("$rootDir/$path") {
- into(path.dropLastWhile { it != '/' })
- }
- }
-
- into("$buildDir/commonMainSources")
-
- dependsOn(":prepare:build.version:writeStdlibVersion")
-}
-
-val commonTestSources by task {
- val sources = listOf(
- "libraries/stdlib/test/",
- "libraries/stdlib/common/test/"
- )
-
- sources.forEach { path ->
- from("$rootDir/$path") {
- into(path.dropLastWhile { it != '/' })
- // exclusions due to KT-51647
- exclude("generated/minmax")
- exclude("collections/MapTest.kt")
- }
- }
-
- into("$buildDir/commonTestSources")
-}
-
-D8RootPlugin.apply(rootProject).version = v8Version
-
-kotlin {
- @Suppress("DEPRECATION")
- @OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class)
- wasm("wasm") {
- nodejs()
- }
-
- fun KotlinSourceSet.addWasmMainDirs() {
- kotlin.srcDirs("builtins", "internal", "runtime", "src", "stubs")
- kotlin.srcDirs("$rootDir/libraries/stdlib/native-wasm/src")
- kotlin.srcDirs(files(builtInsSources.map { it.destinationDir }))
- }
-
- sourceSets {
- named("wasmMain") {
- addWasmMainDirs()
-// kotlin.srcDirs("js/builtins/kotlin", "js/internal", "js/src/kotlin", "js/src/kotlinx", "js/src/org.w3c")
- kotlin.srcDirs("wasi/builtins/kotlin", "wasi/internal", "wasi/src/kotlin", "wasi/src/kotlinx")
- }
-
- named("commonMain") {
- kotlin.srcDirs(files(commonMainSources.map { it.destinationDir }))
- }
-
- named("commonTest") {
- dependencies {
- api(project(":kotlin-test:kotlin-test-wasm"))
- }
- kotlin.srcDir(files(commonTestSources.map { it.destinationDir }))
- }
-
- named("wasmTest") {
- dependencies {
- api(project(":kotlin-test:kotlin-test-wasm"))
- }
- kotlin.srcDir("$rootDir/libraries/stdlib/wasm/test/")
- kotlin.srcDir("$rootDir/libraries/stdlib/native-wasm/test/")
- }
- }
-}
-
-tasks.named("compileKotlinWasm", KotlinCompile::class) {
- // TODO: enable explicit API mode
- kotlinOptions.allWarningsAsErrors = true
-}
-
-tasks.named("compileTestKotlinWasm", KotlinCompile::class) {
- // TODO: fix all warnings, enable and -Werror
- kotlinOptions.suppressWarnings = true
-}
-
-tasks.withType>().configureEach {
- kotlinOptions.freeCompilerArgs += listOf(
- "-Xallow-kotlin-package",
- "-opt-in=kotlin.ExperimentalMultiplatform",
- "-opt-in=kotlin.contracts.ExperimentalContracts",
- "-opt-in=kotlin.RequiresOptIn",
- "-opt-in=kotlin.ExperimentalUnsignedTypes",
- "-opt-in=kotlin.ExperimentalStdlibApi",
- "-opt-in=kotlin.io.encoding.ExperimentalEncodingApi",
- )
-}
-
-tasks.named("compileKotlinWasm") {
- (this as KotlinCompile<*>).kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin"
- dependsOn(commonMainSources)
- dependsOn(builtInsSources)
-}
-
-val compileTestKotlinWasm by tasks.existing(KotlinCompile::class) {
- val sources: FileCollection = kotlin.sourceSets["commonTest"].kotlin
- doFirst {
- // Note: common test sources are copied to the actual source directory by commonMainSources task,
- // so can't do this at configuration time:
- kotlinOptions.freeCompilerArgs += listOf("-Xcommon-sources=${sources.joinToString(",")}")
- }
-}
-
-val compileTestDevelopmentExecutableKotlinWasm = tasks.named("compileTestDevelopmentExecutableKotlinWasm") {
- (this as KotlinCompile<*>).kotlinOptions.freeCompilerArgs += listOf("-Xwasm-enable-array-range-checks")
-}
-
-val runtimeElements by configurations.creating {
- attributes {
- attributes.attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.js)
- }
-}
-
-val apiElements by configurations.creating {
- attributes {
- attributes.attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.js)
- }
-}
-
-publish(sbom = false) {
- pom.packaging = "klib"
- artifact(tasks.named("wasmJar")) {
- extension = "klib"
- }
-}
-configureSbom(
- gradleConfigurations = setOf(runtimeElements.name)
-)
-
-afterEvaluate {
- // cleanup default publications
- // TODO: remove after mpp plugin allows avoiding their creation at all, KT-29273
- publishing {
- publications.removeAll { it.name != "Main" }
- }
-
- tasks.withType {
- if (publication.name != "Main") this.enabled = false
- }
-
- tasks.named("publish") {
- doFirst {
- publishing.publications {
- if (singleOrNull()?.name != "Main") {
- throw GradleException("kotlin-stdlib-wasm should have only one publication, found $size: ${joinToString { it.name }}")
- }
- }
- }
- }
-}
-
diff --git a/libraries/stdlib/wasm/js/build.gradle.kts b/libraries/stdlib/wasm/js/build.gradle.kts
new file mode 100644
index 00000000000..a48bd502153
--- /dev/null
+++ b/libraries/stdlib/wasm/js/build.gradle.kts
@@ -0,0 +1,47 @@
+import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin
+import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
+
+plugins {
+ `maven-publish`
+ kotlin("multiplatform")
+}
+
+description = "Kotlin Standard Library for experimental WebAssembly JS platform"
+
+D8RootPlugin.apply(rootProject).version = v8Version
+
+val targetDependentSources = listOf("builtins/kotlin", "internal", "src/kotlin", "src/kotlinx", "src/org.w3c").map {
+ "$rootDir/libraries/stdlib/wasm/js/$it"
+}
+
+configureWasmStdLib(
+ wasmTargetParameter = "wasm-js",
+ wasmTargetAttribute = KotlinWasmTargetAttribute.js,
+ targetDependentSources = targetDependentSources,
+ targetDependentTestSources = listOf("$rootDir/libraries/stdlib/wasm/testJs/"),
+ kotlinTestDependencyName = ":kotlin-test:kotlin-test-wasm-js"
+) { extensionBody ->
+ kotlin(extensionBody)
+}
+
+afterEvaluate {
+ // cleanup default publications
+ // TODO: remove after mpp plugin allows avoiding their creation at all, KT-29273
+ publishing {
+ publications.removeAll { it.name != "Main" }
+ }
+
+ tasks.withType {
+ if (publication.name != "Main") this.enabled = false
+ }
+
+ tasks.named("publish") {
+ doFirst {
+ publishing.publications {
+ if (singleOrNull()?.name != "Main") {
+ throw GradleException("kotlin-stdlib-wasm should have only one publication, found $size: ${joinToString { it.name }}")
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/libraries/stdlib/wasm/wasi/build.gradle.kts b/libraries/stdlib/wasm/wasi/build.gradle.kts
new file mode 100644
index 00000000000..fcfa004333e
--- /dev/null
+++ b/libraries/stdlib/wasm/wasi/build.gradle.kts
@@ -0,0 +1,47 @@
+import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin
+import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
+
+plugins {
+ `maven-publish`
+ kotlin("multiplatform")
+}
+
+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"
+}
+
+configureWasmStdLib(
+ wasmTargetParameter = "wasm-wasi",
+ wasmTargetAttribute = KotlinWasmTargetAttribute.wasi,
+ targetDependentSources = targetDependentSources,
+ targetDependentTestSources = emptyList(),
+ kotlinTestDependencyName = ":kotlin-test:kotlin-test-wasm-wasi"
+) { extensionBody ->
+ kotlin(extensionBody)
+}
+
+afterEvaluate {
+ // cleanup default publications
+ // TODO: remove after mpp plugin allows avoiding their creation at all, KT-29273
+ publishing {
+ publications.removeAll { it.name != "Main" }
+ }
+
+ tasks.withType {
+ if (publication.name != "Main") this.enabled = false
+ }
+
+ tasks.named("publish") {
+ doFirst {
+ publishing.publications {
+ if (singleOrNull()?.name != "Main") {
+ throw GradleException("kotlin-stdlib-wasm should have only one publication, found $size: ${joinToString { it.name }}")
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/stdlibDependencyManagement.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/stdlibDependencyManagement.kt
index 1488f372078..30afcc698ff 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/stdlibDependencyManagement.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/stdlibDependencyManagement.kt
@@ -31,7 +31,7 @@ internal const val KOTLIN_STDLIB_MODULE_NAME = "kotlin-stdlib"
internal const val KOTLIN_STDLIB_JDK7_MODULE_NAME = "kotlin-stdlib-jdk7"
internal const val KOTLIN_STDLIB_JDK8_MODULE_NAME = "kotlin-stdlib-jdk8"
internal const val KOTLIN_STDLIB_JS_MODULE_NAME = "kotlin-stdlib-js"
-internal const val KOTLIN_STDLIB_WASM_MODULE_NAME = "kotlin-stdlib-wasm"
+internal const val KOTLIN_STDLIB_WASM_MODULE_NAME = "kotlin-stdlib-wasm-js"
internal const val KOTLIN_ANDROID_JVM_STDLIB_MODULE_NAME = KOTLIN_STDLIB_MODULE_NAME
internal fun Project.configureStdlibDefaultDependency(
diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm/kotlin-stdlib-wasm.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm-js/kotlin-stdlib-wasm-js.pom
similarity index 90%
rename from repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm/kotlin-stdlib-wasm.pom
rename to repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm-js/kotlin-stdlib-wasm-js.pom
index 9cc29c8fbe1..96692bef0ed 100644
--- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm/kotlin-stdlib-wasm.pom
+++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm-js/kotlin-stdlib-wasm-js.pom
@@ -3,11 +3,11 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
org.jetbrains.kotlin
- kotlin-stdlib-wasm
+ kotlin-stdlib-wasm-js
ArtifactsTest.version
klib
- Kotlin Stdlib Wasm
- Kotlin Standard Library for experimental WebAssembly platform
+ Kotlin Stdlib Wasm Js
+ Kotlin Standard Library for experimental WebAssembly JS platform
https://kotlinlang.org/
diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm-wasi/kotlin-stdlib-wasm-wasi.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm-wasi/kotlin-stdlib-wasm-wasi.pom
new file mode 100644
index 00000000000..2bff4ba58fa
--- /dev/null
+++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-stdlib-wasm-wasi/kotlin-stdlib-wasm-wasi.pom
@@ -0,0 +1,30 @@
+
+
+ 4.0.0
+ org.jetbrains.kotlin
+ kotlin-stdlib-wasm-wasi
+ ArtifactsTest.version
+ klib
+ Kotlin Stdlib Wasm Wasi
+ Kotlin Standard Library for experimental WebAssembly WASI platform
+ 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
+
+
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/tasks.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/tasks.kt
index 23d5e5ec64f..6b6c6952ec1 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/tasks.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/tasks.kt
@@ -64,7 +64,8 @@ val kotlinGradlePluginAndItsRequired = arrayOf(
":kotlin-stdlib",
":kotlin-stdlib-jdk7",
":kotlin-stdlib-jdk8",
- ":kotlin-stdlib-wasm",
+ ":kotlin-stdlib-wasm-js",
+ ":kotlin-stdlib-wasm-wasi",
":examples:annotation-processor-example",
":kotlin-assignment-compiler-plugin.embeddable",
":kotlin-allopen-compiler-plugin.embeddable",
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/wasm/wasmStdLib.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/wasm/wasmStdLib.kt
new file mode 100644
index 00000000000..4bb6fa1454f
--- /dev/null
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/wasm/wasmStdLib.kt
@@ -0,0 +1,178 @@
+/*
+ * 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.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
+import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink
+
+private fun Project.createBuiltInsSources() = tasks.register("builtInsSources", Sync::class.java) {
+ val unimplementedNativeBuiltIns =
+ (file("$rootDir/core/builtins/native/kotlin/").list().toSortedSet() - file("$rootDir/libraries/stdlib/wasm/builtins/kotlin/").list())
+ .map { "core/builtins/native/kotlin/$it" }
+
+ val sources = listOf(
+ "core/builtins/src/kotlin/"
+ ) + unimplementedNativeBuiltIns
+
+ val excluded = listOf(
+ // JS-specific optimized version of emptyArray() already defined
+ "ArrayIntrinsics.kt",
+ // Included with K/N collections
+ "Collections.kt", "Iterator.kt", "Iterators.kt"
+ )
+
+ sources.forEach { path ->
+ from("$rootDir/$path") {
+ into(path.dropLastWhile { it != '/' })
+ excluded.forEach {
+ exclude(it)
+ }
+ }
+ }
+
+ into("$buildDir/builtInsSources")
+}
+
+private fun Project.createCommonMainSources() = tasks.register("commonMainSources", Sync::class.java) {
+ val sources = listOf(
+ "libraries/stdlib/common/src/",
+ "libraries/stdlib/src/kotlin/",
+ "libraries/stdlib/unsigned/",
+ "libraries/stdlib/wasm/builtins/",
+ "libraries/stdlib/wasm/internal/",
+ "libraries/stdlib/wasm/runtime/",
+ "libraries/stdlib/wasm/src/",
+ "libraries/stdlib/wasm/stubs/",
+ "libraries/stdlib/native-wasm/src/",
+ )
+
+ sources.forEach { path ->
+ from("$rootDir/$path") {
+ into(path.dropLastWhile { it != '/' })
+ }
+ }
+
+ into("$buildDir/commonMainSources")
+
+ dependsOn(":prepare:build.version:writeStdlibVersion")
+}
+
+private fun Project.createCommonTestSources() = tasks.register("commonTestSources", Sync::class.java) {
+ val sources = listOf(
+ "libraries/stdlib/test/",
+ "libraries/stdlib/common/test/",
+ "libraries/stdlib/wasm/test/",
+ "libraries/stdlib/native-wasm/test/",
+ )
+
+ sources.forEach { path ->
+ from("$rootDir/$path") {
+ into(path.dropLastWhile { it != '/' })
+ // exclusions due to KT-51647
+ exclude("generated/minmax")
+ exclude("collections/MapTest.kt")
+ }
+ }
+
+ into("$buildDir/commonTestSources")
+}
+
+fun Project.configureWasmStdLib(
+ wasmTargetParameter: String,
+ wasmTargetAttribute: KotlinWasmTargetAttribute,
+ targetDependentSources: List,
+ targetDependentTestSources: List,
+ kotlinTestDependencyName: String,
+ withKotlinMPP: (KotlinMultiplatformExtension.() -> Unit) -> Unit
+) {
+
+ val builtInsSources = createBuiltInsSources()
+ val commonMainSources = createCommonMainSources()
+ val commonTestSources = createCommonTestSources()
+
+ withKotlinMPP {
+ @Suppress("DEPRECATION")
+ @OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class)
+ wasm("wasm") {
+ nodejs()
+ attributes {
+ attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, wasmTargetAttribute)
+ }
+ }
+
+ sourceSets.named("commonMain") {
+ kotlin.srcDirs(files(commonMainSources.map { it.destinationDir }))
+ kotlin.srcDirs(files(builtInsSources.map { it.destinationDir }))
+ }
+
+ sourceSets.named("wasmMain") {
+ kotlin.srcDirs(targetDependentSources)
+ }
+
+ sourceSets.named("commonTest") {
+ dependencies {
+ api(project(kotlinTestDependencyName))
+ }
+ kotlin.srcDir(files(commonTestSources.map { it.destinationDir }))
+ }
+
+ sourceSets.named("wasmTest") {
+ dependencies {
+ api(project(kotlinTestDependencyName))
+ }
+ kotlin.srcDirs(targetDependentTestSources)
+ }
+ }
+
+ tasks.named("compileKotlinWasm", KotlinCompile::class.java) {
+ // TODO: enable explicit API mode
+ kotlinOptions.allWarningsAsErrors = true
+ kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin"
+ dependsOn(commonMainSources)
+ dependsOn(builtInsSources)
+ }
+
+ tasks.named("compileTestKotlinWasm", KotlinCompile::class.java) {
+ // TODO: fix all warnings, enable and -Werror
+ kotlinOptions.suppressWarnings = true
+ }
+
+ tasks.withType>().configureEach {
+ kotlinOptions.freeCompilerArgs += listOf(
+ "-Xallow-kotlin-package",
+ "-opt-in=kotlin.ExperimentalMultiplatform",
+ "-opt-in=kotlin.contracts.ExperimentalContracts",
+ "-opt-in=kotlin.RequiresOptIn",
+ "-opt-in=kotlin.ExperimentalUnsignedTypes",
+ "-opt-in=kotlin.ExperimentalStdlibApi",
+ "-opt-in=kotlin.io.encoding.ExperimentalEncodingApi",
+ "-opt-in=kotlin.wasm.unsafe.UnsafeWasmMemoryApi",
+ "-Xwasm-target=$wasmTargetParameter"
+ )
+ }
+
+ tasks.named("compileTestDevelopmentExecutableKotlinWasm", KotlinJsIrLink::class.java) {
+ kotlinOptions.freeCompilerArgs += listOf("-Xwasm-enable-array-range-checks")
+ }
+
+ val runtimeElements = configurations.create("runtimeElements") { }
+
+ configurations.create("apiElements") { }
+
+ publish(sbom = false) {
+ pom.packaging = "klib"
+ artifact(tasks.named("wasmJar")) {
+ extension = "klib"
+ }
+ }
+
+ configureSbom(
+ gradleConfigurations = setOf(runtimeElements.name)
+ )
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 1346f3dfd7d..8cf9f4f926e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -584,7 +584,8 @@ if (buildProperties.inJpsBuildIdeaSync) {
":kotlin-stdlib",
":kotlin-dom-api-compat",
":kotlin-stdlib-js-ir-minimal-for-test",
- ":kotlin-stdlib-wasm",
+ ":kotlin-stdlib-wasm-js",
+ ":kotlin-stdlib-wasm-wasi",
":kotlin-stdlib-jdk7",
":kotlin-stdlib-jdk8",
":kotlin-stdlib:samples",
@@ -609,7 +610,8 @@ if (buildProperties.inJpsBuildIdeaSync) {
if (!stdlibMpp) project(':kotlin-stdlib-js').projectDir = "$rootDir/libraries/stdlib/js-v1" as File
if (!stdlibMpp) project(':kotlin-stdlib-js-ir').projectDir = "$rootDir/libraries/stdlib/js-ir" as File
project(':kotlin-dom-api-compat').projectDir = "$rootDir/libraries/kotlin-dom-api-compat" as File
- project(':kotlin-stdlib-wasm').projectDir = "$rootDir/libraries/stdlib/wasm" as File
+ project(':kotlin-stdlib-wasm-js').projectDir = "$rootDir/libraries/stdlib/wasm/js" as File
+ project(':kotlin-stdlib-wasm-wasi').projectDir = "$rootDir/libraries/stdlib/wasm/wasi" as File
project(':kotlin-stdlib-js-ir-minimal-for-test').projectDir = "$rootDir/libraries/stdlib/js-ir-minimal-for-test" as File
project(':kotlin-stdlib-jdk7').projectDir = "$rootDir/libraries/stdlib/jdk7" as File
project(':kotlin-stdlib-jdk8').projectDir = "$rootDir/libraries/stdlib/jdk8" as File
diff --git a/wasm/wasm.tests/build.gradle.kts b/wasm/wasm.tests/build.gradle.kts
index 71448df82f0..8fb8ccd3a6d 100644
--- a/wasm/wasm.tests/build.gradle.kts
+++ b/wasm/wasm.tests/build.gradle.kts
@@ -87,8 +87,8 @@ sourceSets {
}
fun Test.setupWasmStdlib() {
- dependsOn(":kotlin-stdlib-wasm:compileKotlinWasm")
- systemProperty("kotlin.wasm.stdlib.path", "libraries/stdlib/wasm/build/classes/kotlin/wasm/main")
+ 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")
}