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() {