[Gradle, Wasm] Add wasmWasi target, replace wasm target onto wasmJs
KT-60654
This commit is contained in:
committed by
Space Team
parent
a65953a7fb
commit
b9e5b8a087
@@ -13,8 +13,9 @@ val commonMainSources by task<Sync> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
@OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class)
|
@OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class)
|
||||||
wasm {
|
wasm("wasm") {
|
||||||
nodejs()
|
nodejs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,8 +78,9 @@ val commonTestSources by task<Sync> {
|
|||||||
D8RootPlugin.apply(rootProject).version = v8Version
|
D8RootPlugin.apply(rootProject).version = v8Version
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
@OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class)
|
@OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class)
|
||||||
wasm {
|
wasm("wasm") {
|
||||||
d8()
|
d8()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle
|
||||||
|
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.google.gson.JsonNull
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import org.gradle.testkit.runner.BuildResult
|
||||||
|
import org.gradle.util.GradleVersion
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.fromSrcPackageJson
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.STORE_YARN_LOCK_NAME
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.UPGRADE_YARN_LOCK
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.YARN_LOCK_MISMATCH_MESSAGE
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.USING_JS_IR_BACKEND_MESSAGE
|
||||||
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
|
import org.jetbrains.kotlin.gradle.testbase.TestVersions.Gradle.G_7_6
|
||||||
|
import org.jetbrains.kotlin.gradle.util.modify
|
||||||
|
import org.junit.jupiter.api.DisplayName
|
||||||
|
import org.junit.jupiter.api.condition.DisabledIf
|
||||||
|
import java.nio.file.Files
|
||||||
|
import java.util.zip.ZipFile
|
||||||
|
import kotlin.io.path.*
|
||||||
|
import kotlin.streams.toList
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
@MppGradlePluginTests
|
||||||
|
class KotlinWasmGradlePluginIT : KGPBaseTest() {
|
||||||
|
|
||||||
|
@DisplayName("Check wasi target")
|
||||||
|
@GradleTest
|
||||||
|
fun wasiTarget(gradleVersion: GradleVersion) {
|
||||||
|
project("new-mpp-wasm-wasi-test", gradleVersion) {
|
||||||
|
buildGradleKts.modify(::transformBuildScriptWithPluginsDsl)
|
||||||
|
|
||||||
|
buildAndFail(":wasmWasiTest") {
|
||||||
|
assertTasksExecuted(":compileKotlinWasmWasi")
|
||||||
|
assertTasksFailed(":wasmWasiNodeTest")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
-8
@@ -1426,7 +1426,7 @@ open class NewMultiplatformIT : BaseGradleIT() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val expectedDefaultSourceSets = listOf(
|
val expectedDefaultSourceSets = listOf(
|
||||||
"jvm6", "nodeJs", "mingw64", "linux64", "macos64", "wasm"
|
"jvm6", "nodeJs", "mingw64", "linux64", "macos64", "wasmJs"
|
||||||
).flatMapTo(mutableSetOf()) { target ->
|
).flatMapTo(mutableSetOf()) { target ->
|
||||||
listOf("main", "test").map { compilation ->
|
listOf("main", "test").map { compilation ->
|
||||||
Triple(
|
Triple(
|
||||||
@@ -1805,7 +1805,7 @@ open class NewMultiplatformIT : BaseGradleIT() {
|
|||||||
build("build") {
|
build("build") {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTasksExecuted(":compileKotlinJs")
|
assertTasksExecuted(":compileKotlinJs")
|
||||||
assertTasksExecuted(":compileKotlinWasm")
|
assertTasksExecuted(":compileKotlinWasmJs")
|
||||||
|
|
||||||
val outputPrefix = "build/js/packages/"
|
val outputPrefix = "build/js/packages/"
|
||||||
|
|
||||||
@@ -1827,17 +1827,17 @@ open class NewMultiplatformIT : BaseGradleIT() {
|
|||||||
.replace("<JsEngine>", engine)
|
.replace("<JsEngine>", engine)
|
||||||
.replace("<ApplyBinaryen>", if (useBinaryen) "applyBinaryen()" else "")
|
.replace("<ApplyBinaryen>", if (useBinaryen) "applyBinaryen()" else "")
|
||||||
}
|
}
|
||||||
build(":wasm${name}Test") {
|
build(":wasmJs${name}Test") {
|
||||||
assertTasksExecuted(":compileKotlinWasm")
|
assertTasksExecuted(":compileKotlinWasmJs")
|
||||||
if (useBinaryen) {
|
if (useBinaryen) {
|
||||||
assertTasksExecuted(":compileTestDevelopmentExecutableKotlinWasmOptimize")
|
assertTasksExecuted(":compileTestDevelopmentExecutableKotlinWasmJsOptimize")
|
||||||
} else {
|
} else {
|
||||||
assertTasksNotExecuted(":compileTestDevelopmentExecutableKotlinWasmOptimize")
|
assertTasksNotExecuted(":compileTestDevelopmentExecutableKotlinWasmJsOptimize")
|
||||||
}
|
}
|
||||||
assertTasksFailed(":wasm${name}Test")
|
assertTasksFailed(":wasmJs${name}Test")
|
||||||
assertTestResults(
|
assertTestResults(
|
||||||
"testProject/new-mpp-wasm-test/TEST-${engine}.xml",
|
"testProject/new-mpp-wasm-test/TEST-${engine}.xml",
|
||||||
"wasm${name}Test"
|
"wasmJs${name}Test"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -23,7 +23,7 @@ class WasmConfigurationCacheIT : KGPBaseTest() {
|
|||||||
assertSimpleConfigurationCacheScenarioWorks(
|
assertSimpleConfigurationCacheScenarioWorks(
|
||||||
"assemble",
|
"assemble",
|
||||||
buildOptions = defaultBuildOptions,
|
buildOptions = defaultBuildOptions,
|
||||||
executedTaskNames = listOf(":compileKotlinWasm")
|
executedTaskNames = listOf(":compileKotlinWasmJs")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -33,10 +33,10 @@ class WasmConfigurationCacheIT : KGPBaseTest() {
|
|||||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_7_6)
|
@GradleTestVersions(minVersion = TestVersions.Gradle.G_7_6)
|
||||||
fun testD8Run(gradleVersion: GradleVersion) {
|
fun testD8Run(gradleVersion: GradleVersion) {
|
||||||
project("wasm-d8-simple-project", gradleVersion) {
|
project("wasm-d8-simple-project", gradleVersion) {
|
||||||
build("wasmD8Run", buildOptions = buildOptions) {
|
build("wasmJsD8Run", buildOptions = buildOptions) {
|
||||||
assertTasksExecuted(":wasmD8Run")
|
assertTasksExecuted(":wasmJsD8Run")
|
||||||
assertOutputContains(
|
assertOutputContains(
|
||||||
"Calculating task graph as no configuration cache is available for tasks: wasmD8Run"
|
"Calculating task graph as no configuration cache is available for tasks: wasmJsD8Run"
|
||||||
)
|
)
|
||||||
|
|
||||||
assertConfigurationCacheStored()
|
assertConfigurationCacheStored()
|
||||||
@@ -45,8 +45,8 @@ class WasmConfigurationCacheIT : KGPBaseTest() {
|
|||||||
build("clean", buildOptions = buildOptions)
|
build("clean", buildOptions = buildOptions)
|
||||||
|
|
||||||
// Then run a build where tasks states are deserialized to check that they work correctly in this mode
|
// Then run a build where tasks states are deserialized to check that they work correctly in this mode
|
||||||
build("wasmD8Run", buildOptions = buildOptions) {
|
build("wasmJsD8Run", buildOptions = buildOptions) {
|
||||||
assertTasksExecuted(":wasmD8Run")
|
assertTasksExecuted(":wasmJsD8Run")
|
||||||
assertConfigurationCacheReused()
|
assertConfigurationCacheReused()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -155,10 +155,10 @@ class TryK2IT : KGPBaseTest() {
|
|||||||
assertCompilerArgument(":compileKotlinJs", "-language-version 2.0")
|
assertCompilerArgument(":compileKotlinJs", "-language-version 2.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
build(":compileKotlinWasm") {
|
build(":compileKotlinWasmJs") {
|
||||||
assertTasksExecuted(":compileKotlinWasm")
|
assertTasksExecuted(":compileKotlinWasmJs")
|
||||||
|
|
||||||
assertCompilerArgument(":compileKotlinWasm", "-language-version 2.0")
|
assertCompilerArgument(":compileKotlinWasmJs", "-language-version 2.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
build(":compileKotlinLinuxX64") {
|
build(":compileKotlinLinuxX64") {
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ kotlin {
|
|||||||
}
|
}
|
||||||
val linux64 = linuxX64("linux64")
|
val linux64 = linuxX64("linux64")
|
||||||
|
|
||||||
wasm {
|
wasmJs {
|
||||||
}
|
}
|
||||||
|
|
||||||
configure(listOf(linux64)) {
|
configure(listOf(linux64)) {
|
||||||
|
|||||||
+1
-1
@@ -52,7 +52,7 @@ kotlin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wasm()
|
wasmJs()
|
||||||
|
|
||||||
targets {
|
targets {
|
||||||
fromPreset(presets.jvm, 'jvm6') {
|
fromPreset(presets.jvm, 'jvm6') {
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ kotlin {
|
|||||||
// Check the new preset functions:
|
// Check the new preset functions:
|
||||||
jvm('jvm6') { }
|
jvm('jvm6') { }
|
||||||
js('nodeJs')
|
js('nodeJs')
|
||||||
wasm()
|
wasmJs()
|
||||||
targetFromPreset(presets.jvm, 'jvm6') { println targetName } // access existing target
|
targetFromPreset(presets.jvm, 'jvm6') { println targetName } // access existing target
|
||||||
|
|
||||||
targets {
|
targets {
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ kotlin {
|
|||||||
} else null
|
} else null
|
||||||
linuxX64("linux64")
|
linuxX64("linux64")
|
||||||
if (shouldBeJs)
|
if (shouldBeJs)
|
||||||
wasm()
|
wasmJs()
|
||||||
|
|
||||||
targets.all {
|
targets.all {
|
||||||
mavenPublication(Action<MavenPublication> {
|
mavenPublication(Action<MavenPublication> {
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ kotlin {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wasm()
|
wasmJs()
|
||||||
}
|
}
|
||||||
targetFromPreset(presets.jvm, 'jvm6') { println targetName } // access existing target
|
targetFromPreset(presets.jvm, 'jvm6') { println targetName } // access existing target
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ kotlin {
|
|||||||
jvm()
|
jvm()
|
||||||
js()
|
js()
|
||||||
linuxX64()
|
linuxX64()
|
||||||
wasm()
|
wasmJs()
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
val commonMain by getting {
|
val commonMain by getting {
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
wasm {
|
wasmJs {
|
||||||
moduleName = "redefined-wasm-module-name"
|
moduleName = "redefined-wasm-module-name"
|
||||||
d8 {
|
d8 {
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -2,13 +2,13 @@
|
|||||||
<results>
|
<results>
|
||||||
<testsuite name="my.pack.name.WasmTest" tests="3" skipped="1" failures="2" errors="0" timestamp="..." hostname="..." time="...">
|
<testsuite name="my.pack.name.WasmTest" tests="3" skipped="1" failures="2" errors="0" timestamp="..." hostname="..." time="...">
|
||||||
<properties />
|
<properties />
|
||||||
<testcase name="test1[wasm, d8]" classname="my.pack.name.WasmTest" time="...">
|
<testcase name="test1[wasmJs, d8]" classname="my.pack.name.WasmTest" time="...">
|
||||||
<failure message="..." type="AssertionError">...</failure>
|
<failure message="..." type="AssertionError">...</failure>
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase name="test2[wasm, d8]" classname="my.pack.name.WasmTest" time="...">
|
<testcase name="test2[wasmJs, d8]" classname="my.pack.name.WasmTest" time="...">
|
||||||
<skipped />
|
<skipped />
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase name="test3[wasm, d8]" classname="my.pack.name.WasmTest" time="...">
|
<testcase name="test3[wasmJs, d8]" classname="my.pack.name.WasmTest" time="...">
|
||||||
<failure message="..." type="AssertionError">...</failure>
|
<failure message="..." type="AssertionError">...</failure>
|
||||||
</testcase>
|
</testcase>
|
||||||
<system-out />
|
<system-out />
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
</testsuite>
|
</testsuite>
|
||||||
<testsuite name="my.pack.name.WasmTest.InnerIgnored" tests="3" skipped="3" failures="0" errors="0" timestamp="..." hostname="..." time="...">
|
<testsuite name="my.pack.name.WasmTest.InnerIgnored" tests="3" skipped="3" failures="0" errors="0" timestamp="..." hostname="..." time="...">
|
||||||
<properties />
|
<properties />
|
||||||
<testcase name="test4[wasm, d8]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
<testcase name="test4[wasmJs, d8]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
||||||
<skipped />
|
<skipped />
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase name="test5[wasm, d8]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
<testcase name="test5[wasmJs, d8]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
||||||
<skipped />
|
<skipped />
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase name="test6[wasm, d8]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
<testcase name="test6[wasmJs, d8]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
||||||
<skipped />
|
<skipped />
|
||||||
</testcase>
|
</testcase>
|
||||||
<system-out />
|
<system-out />
|
||||||
|
|||||||
+6
-6
@@ -2,13 +2,13 @@
|
|||||||
<results>
|
<results>
|
||||||
<testsuite name="my.pack.name.WasmTest" tests="3" skipped="1" failures="2" errors="0" timestamp="..." hostname="..." time="...">
|
<testsuite name="my.pack.name.WasmTest" tests="3" skipped="1" failures="2" errors="0" timestamp="..." hostname="..." time="...">
|
||||||
<properties />
|
<properties />
|
||||||
<testcase name="test1[wasm, node]" classname="my.pack.name.WasmTest" time="...">
|
<testcase name="test1[wasmJs, node]" classname="my.pack.name.WasmTest" time="...">
|
||||||
<failure message="..." type="AssertionError">...</failure>
|
<failure message="..." type="AssertionError">...</failure>
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase name="test2[wasm, node]" classname="my.pack.name.WasmTest" time="...">
|
<testcase name="test2[wasmJs, node]" classname="my.pack.name.WasmTest" time="...">
|
||||||
<skipped />
|
<skipped />
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase name="test3[wasm, node]" classname="my.pack.name.WasmTest" time="...">
|
<testcase name="test3[wasmJs, node]" classname="my.pack.name.WasmTest" time="...">
|
||||||
<failure message="..." type="AssertionError">...</failure>
|
<failure message="..." type="AssertionError">...</failure>
|
||||||
</testcase>
|
</testcase>
|
||||||
<system-out />
|
<system-out />
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
</testsuite>
|
</testsuite>
|
||||||
<testsuite name="my.pack.name.WasmTest.InnerIgnored" tests="3" skipped="3" failures="0" errors="0" timestamp="..." hostname="..." time="...">
|
<testsuite name="my.pack.name.WasmTest.InnerIgnored" tests="3" skipped="3" failures="0" errors="0" timestamp="..." hostname="..." time="...">
|
||||||
<properties />
|
<properties />
|
||||||
<testcase name="test4[wasm, node]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
<testcase name="test4[wasmJs, node]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
||||||
<skipped />
|
<skipped />
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase name="test5[wasm, node]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
<testcase name="test5[wasmJs, node]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
||||||
<skipped />
|
<skipped />
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase name="test6[wasm, node]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
<testcase name="test6[wasmJs, node]" classname="my.pack.name.WasmTest.InnerIgnored" time="...">
|
||||||
<skipped />
|
<skipped />
|
||||||
</testcase>
|
</testcase>
|
||||||
<system-out />
|
<system-out />
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ tasks.named<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask>("kotli
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
wasm {
|
wasmJs {
|
||||||
<JsEngine> {
|
<JsEngine> {
|
||||||
testTask {
|
testTask {
|
||||||
filter.apply {
|
filter.apply {
|
||||||
|
|||||||
+44
@@ -0,0 +1,44 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("multiplatform").version("<pluginMarkerVersion>")
|
||||||
|
}
|
||||||
|
|
||||||
|
with(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.apply(rootProject)) {
|
||||||
|
nodeVersion = "20.2.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
with(org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin.apply(rootProject)) {
|
||||||
|
// Test that we can set the version and it is a String.
|
||||||
|
// But use the default version since update this place every time anyway.
|
||||||
|
version = (version as String)
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects.forEach {
|
||||||
|
it.tasks.withType<org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask>().configureEach {
|
||||||
|
args.add("--ignore-engines")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask>("kotlinStoreYarnLock") {
|
||||||
|
//A little hacky way to make yarn results
|
||||||
|
inputFile.fileValue(projectDir.resolve("yarnLockStub"))
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
|
||||||
|
wasmWasi {
|
||||||
|
nodejs {}
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
commonTest {
|
||||||
|
dependencies {
|
||||||
|
implementation("org.jetbrains.kotlin:kotlin-test")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
kotlin.tests.individualTaskReports=true
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package my.pack.name
|
||||||
|
|
||||||
|
fun foo(): Int = 2
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
package my.pack.name
|
||||||
|
|
||||||
|
import kotlin.test.Ignore
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class WasmTest {
|
||||||
|
@Test
|
||||||
|
fun test1() = assertEquals(foo(), 1)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
fun test2() = assertEquals(foo(), 2)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun test3() = assertEquals(foo(), 3)
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
class InnerIgnored {
|
||||||
|
@Test
|
||||||
|
fun test4() = assertEquals(foo(), 1)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
fun test5() = assertEquals(foo(), 2)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun test6() = assertEquals(foo(), 3)
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -8,7 +8,7 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
wasm {
|
wasmJs {
|
||||||
binaries.executable()
|
binaries.executable()
|
||||||
d8 {
|
d8 {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -188,16 +188,26 @@ public abstract class org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtensi
|
|||||||
public fun tvosX64 (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTargetWithSimulatorTests;
|
public fun tvosX64 (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTargetWithSimulatorTests;
|
||||||
public fun tvosX64 (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTargetWithSimulatorTests;
|
public fun tvosX64 (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTargetWithSimulatorTests;
|
||||||
public fun tvosX64 (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTargetWithSimulatorTests;
|
public fun tvosX64 (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTargetWithSimulatorTests;
|
||||||
public fun wasm ()Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public fun wasm ()Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public fun wasm (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public fun wasm (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public fun wasm (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public fun wasm (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public fun wasm (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public fun wasm (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public fun wasm (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public fun wasm (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public fun wasm32 ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
public fun wasm32 ()Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
||||||
public fun wasm32 (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
public fun wasm32 (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
||||||
public fun wasm32 (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
public fun wasm32 (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
||||||
public fun wasm32 (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
public fun wasm32 (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
||||||
public fun wasm32 (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
public fun wasm32 (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinNativeTarget;
|
||||||
|
public fun wasmJs ()Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public fun wasmJs (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public fun wasmJs (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public fun wasmJs (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public fun wasmJs (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public fun wasmWasi ()Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public fun wasmWasi (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmWasiTargetDsl;
|
||||||
|
public fun wasmWasi (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmWasiTargetDsl;
|
||||||
|
public fun wasmWasi (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmWasiTargetDsl;
|
||||||
|
public fun wasmWasi (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmWasiTargetDsl;
|
||||||
public fun watchos ()V
|
public fun watchos ()V
|
||||||
public fun watchos (Ljava/lang/String;)V
|
public fun watchos (Ljava/lang/String;)V
|
||||||
public fun watchos (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
|
public fun watchos (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
|
||||||
@@ -459,11 +469,21 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinTargetCont
|
|||||||
}
|
}
|
||||||
|
|
||||||
public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithWasmPresetFunctions : org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions {
|
public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithWasmPresetFunctions : org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions {
|
||||||
public abstract fun wasm ()Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public abstract fun wasm ()Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public abstract fun wasm (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public abstract fun wasm (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public abstract fun wasm (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public abstract fun wasm (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public abstract fun wasm (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public abstract fun wasm (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
public abstract fun wasm (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl;
|
public abstract fun wasm (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public abstract fun wasmJs ()Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public abstract fun wasmJs (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public abstract fun wasmJs (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public abstract fun wasmJs (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public abstract fun wasmJs (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public abstract fun wasmWasi ()Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmJsTargetDsl;
|
||||||
|
public abstract fun wasmWasi (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmWasiTargetDsl;
|
||||||
|
public abstract fun wasmWasi (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmWasiTargetDsl;
|
||||||
|
public abstract fun wasmWasi (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmWasiTargetDsl;
|
||||||
|
public abstract fun wasmWasi (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/targets/js/dsl/KotlinWasmWasiTargetDsl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract interface class org/jetbrains/kotlin/gradle/dsl/TargetsFromPresetExtension : org/gradle/api/NamedDomainObjectCollection {
|
public abstract interface class org/jetbrains/kotlin/gradle/dsl/TargetsFromPresetExtension : org/gradle/api/NamedDomainObjectCollection {
|
||||||
|
|||||||
+58
-11
@@ -7,33 +7,80 @@ package org.jetbrains.kotlin.gradle.dsl
|
|||||||
|
|
||||||
import org.gradle.api.Action
|
import org.gradle.api.Action
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmJsTargetDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmTargetDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmWasiTargetDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinWasmTargetPreset
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinWasmTargetPreset
|
||||||
|
|
||||||
@KotlinGradlePluginDsl
|
@KotlinGradlePluginDsl
|
||||||
interface KotlinTargetContainerWithWasmPresetFunctions : KotlinTargetContainerWithPresetFunctions {
|
interface KotlinTargetContainerWithWasmPresetFunctions : KotlinTargetContainerWithPresetFunctions {
|
||||||
@ExperimentalWasmDsl
|
@ExperimentalWasmDsl
|
||||||
fun wasm(
|
fun wasmJs(
|
||||||
name: String = "wasm",
|
name: String = "wasmJs",
|
||||||
configure: KotlinWasmTargetDsl.() -> Unit = { }
|
configure: KotlinWasmJsTargetDsl.() -> Unit = { },
|
||||||
): KotlinJsTargetDsl =
|
): KotlinWasmJsTargetDsl =
|
||||||
configureOrCreate(
|
configureOrCreate(
|
||||||
name,
|
name,
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
presets.getByName("wasm") as KotlinWasmTargetPreset,
|
presets.getByName("wasmJs") as KotlinWasmTargetPreset,
|
||||||
configure
|
configure
|
||||||
)
|
)
|
||||||
|
|
||||||
@ExperimentalWasmDsl
|
@ExperimentalWasmDsl
|
||||||
fun wasm() = wasm("wasm") { }
|
fun wasmJs() = wasmJs("wasmJs") { }
|
||||||
|
|
||||||
@ExperimentalWasmDsl
|
@ExperimentalWasmDsl
|
||||||
fun wasm(name: String) = wasm(name) { }
|
fun wasmJs(name: String) = wasmJs(name) { }
|
||||||
|
|
||||||
@ExperimentalWasmDsl
|
@ExperimentalWasmDsl
|
||||||
fun wasm(name: String, configure: Action<KotlinWasmTargetDsl>) = wasm(name) { configure.execute(this) }
|
fun wasmJs(name: String, configure: Action<KotlinWasmJsTargetDsl>) = wasmJs(name) { configure.execute(this) }
|
||||||
|
|
||||||
@ExperimentalWasmDsl
|
@ExperimentalWasmDsl
|
||||||
fun wasm(configure: Action<KotlinWasmTargetDsl>) = wasm { configure.execute(this) }
|
fun wasmJs(configure: Action<KotlinWasmJsTargetDsl>) = wasmJs { configure.execute(this) }
|
||||||
|
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasmWasi(
|
||||||
|
name: String = "wasmWasi",
|
||||||
|
configure: KotlinWasmWasiTargetDsl.() -> Unit = { },
|
||||||
|
): KotlinWasmWasiTargetDsl =
|
||||||
|
configureOrCreate(
|
||||||
|
name,
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
presets.getByName("wasmWasi") as KotlinWasmTargetPreset,
|
||||||
|
configure
|
||||||
|
)
|
||||||
|
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasmWasi() = wasmJs("wasmWasi") { }
|
||||||
|
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasmWasi(name: String) = wasmWasi(name) { }
|
||||||
|
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasmWasi(name: String, configure: Action<KotlinWasmWasiTargetDsl>) = wasmWasi(name) { configure.execute(this) }
|
||||||
|
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasmWasi(configure: Action<KotlinWasmWasiTargetDsl>) = wasmWasi { configure.execute(this) }
|
||||||
|
|
||||||
|
@Deprecated("Use wasmJs instead", replaceWith = ReplaceWith("wasmJs(name, configure)"))
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasm(
|
||||||
|
name: String = "wasmJs",
|
||||||
|
configure: KotlinWasmJsTargetDsl.() -> Unit = { },
|
||||||
|
): KotlinWasmJsTargetDsl = wasmJs(name, configure)
|
||||||
|
|
||||||
|
@Deprecated("Use wasmJs instead", replaceWith = ReplaceWith("wasmJs()"))
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasm() = wasmJs()
|
||||||
|
|
||||||
|
@Deprecated("Use wasmJs instead", replaceWith = ReplaceWith("wasmJs(name)"))
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasm(name: String) = wasmJs(name)
|
||||||
|
|
||||||
|
@Deprecated("Use wasmJs instead", replaceWith = ReplaceWith("wasmJs(name, configure)"))
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasm(name: String, configure: Action<KotlinWasmJsTargetDsl>) = wasmJs(name, configure)
|
||||||
|
|
||||||
|
@Deprecated("Use wasmJs instead", replaceWith = ReplaceWith("wasmJs(configure)"))
|
||||||
|
@ExperimentalWasmDsl
|
||||||
|
fun wasm(configure: Action<KotlinWasmJsTargetDsl>) = wasmJs(configure)
|
||||||
}
|
}
|
||||||
+6
-7
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetAttribute
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.toAttribute
|
||||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
@@ -314,6 +315,10 @@ abstract class KotlinOnlyTargetConfigurator<KotlinCompilationType : KotlinCompil
|
|||||||
it.from(target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME).output.allOutputs)
|
it.from(target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME).output.allOutputs)
|
||||||
it.isPreserveFileTimestamps = false
|
it.isPreserveFileTimestamps = false
|
||||||
it.isReproducibleFileOrder = true
|
it.isReproducibleFileOrder = true
|
||||||
|
|
||||||
|
target.disambiguationClassifier?.let { classifier ->
|
||||||
|
it.archiveAppendix.set(classifier.toLowerCaseAsciiOnly())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,12 +329,6 @@ abstract class KotlinOnlyTargetConfigurator<KotlinCompilationType : KotlinCompil
|
|||||||
|
|
||||||
val task = createArchiveTasks(target)
|
val task = createArchiveTasks(target)
|
||||||
|
|
||||||
target.disambiguationClassifier?.let { classifier ->
|
|
||||||
task.configure { taskInstance ->
|
|
||||||
taskInstance.archiveAppendix.set(classifier.toLowerCaseAsciiOnly())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Workaround: adding the artifact during configuration seems to interfere with the Java plugin, which results into missing
|
// Workaround: adding the artifact during configuration seems to interfere with the Java plugin, which results into missing
|
||||||
// task dependency 'assemble -> jar' if the Java plugin is applied after this steps
|
// task dependency 'assemble -> jar' if the Java plugin is applied after this steps
|
||||||
project.afterEvaluate {
|
project.afterEvaluate {
|
||||||
@@ -440,7 +439,7 @@ fun Configuration.usesPlatformOf(target: KotlinTarget): Configuration {
|
|||||||
if (target.platformType == KotlinPlatformType.js) {
|
if (target.platformType == KotlinPlatformType.js) {
|
||||||
attributes.attribute(KotlinJsCompilerAttribute.jsCompilerAttribute, KotlinJsCompilerAttribute.ir)
|
attributes.attribute(KotlinJsCompilerAttribute.jsCompilerAttribute, KotlinJsCompilerAttribute.ir)
|
||||||
} else {
|
} else {
|
||||||
attributes.attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, KotlinWasmTargetAttribute.js)
|
attributes.attribute(KotlinWasmTargetAttribute.wasmTargetAttribute, target.wasmTargetType!!.toAttribute())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.awaitPlatformCompilations
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||||
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
|
import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinWasmTargetPreset
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinWasmTargetPreset
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.createFatFrameworks
|
import org.jetbrains.kotlin.gradle.targets.native.createFatFrameworks
|
||||||
@@ -136,7 +137,8 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
|
|||||||
irPreset = KotlinJsIrTargetPreset(project).apply { mixedMode = true }
|
irPreset = KotlinJsIrTargetPreset(project).apply { mixedMode = true }
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
add(KotlinWasmTargetPreset(project))
|
add(KotlinWasmTargetPreset(project, KotlinWasmTargetType.JS))
|
||||||
|
add(KotlinWasmTargetPreset(project, KotlinWasmTargetType.WASI))
|
||||||
add(project.objects.newInstance(KotlinAndroidTargetPreset::class.java, project))
|
add(project.objects.newInstance(KotlinAndroidTargetPreset::class.java, project))
|
||||||
add(KotlinJvmWithJavaTargetPreset(project))
|
add(KotlinJvmWithJavaTargetPreset(project))
|
||||||
|
|
||||||
|
|||||||
+5
-3
@@ -12,12 +12,14 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
interface HasBinaries<out T : DomainObjectSet<*>> {
|
||||||
|
val binaries: T
|
||||||
|
}
|
||||||
|
|
||||||
abstract class KotlinTargetWithBinaries<T : KotlinCompilation<*>, out R : DomainObjectSet<*>> @Inject constructor(
|
abstract class KotlinTargetWithBinaries<T : KotlinCompilation<*>, out R : DomainObjectSet<*>> @Inject constructor(
|
||||||
project: Project,
|
project: Project,
|
||||||
platformType: KotlinPlatformType
|
platformType: KotlinPlatformType
|
||||||
) : KotlinOnlyTarget<T>(project, platformType) {
|
) : KotlinOnlyTarget<T>(project, platformType), HasBinaries<R> {
|
||||||
abstract val binaries: R
|
|
||||||
|
|
||||||
fun binaries(configure: R.() -> Unit) {
|
fun binaries(configure: R.() -> Unit) {
|
||||||
binaries.configure()
|
binaries.configure()
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -12,7 +12,8 @@ import java.io.Serializable
|
|||||||
// For Gradle attributes
|
// For Gradle attributes
|
||||||
@Suppress("EnumEntryName")
|
@Suppress("EnumEntryName")
|
||||||
enum class KotlinWasmTargetAttribute : Named, Serializable {
|
enum class KotlinWasmTargetAttribute : Named, Serializable {
|
||||||
js, wasi;
|
wasi,
|
||||||
|
js;
|
||||||
|
|
||||||
override fun getName(): String =
|
override fun getName(): String =
|
||||||
name
|
name
|
||||||
|
|||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.targets.js
|
||||||
|
|
||||||
|
enum class KotlinWasmTargetType {
|
||||||
|
WASI,
|
||||||
|
JS;
|
||||||
|
}
|
||||||
|
|
||||||
|
fun KotlinWasmTargetType.toAttribute(): KotlinWasmTargetAttribute {
|
||||||
|
return when(this) {
|
||||||
|
KotlinWasmTargetType.WASI -> KotlinWasmTargetAttribute.wasi
|
||||||
|
KotlinWasmTargetType.JS -> KotlinWasmTargetAttribute.js
|
||||||
|
}
|
||||||
|
}
|
||||||
+11
-9
@@ -33,7 +33,7 @@ interface KotlinJsSubTargetContainerDsl : KotlinTarget {
|
|||||||
fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit)
|
fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface KotlinJsTargetDsl : KotlinTarget {
|
interface KotlinJsTargetDsl : KotlinTarget, KotlinTargetWithNodeJsDsl {
|
||||||
var moduleName: String?
|
var moduleName: String?
|
||||||
|
|
||||||
fun browser() = browser { }
|
fun browser() = browser { }
|
||||||
@@ -44,14 +44,6 @@ interface KotlinJsTargetDsl : KotlinTarget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun nodejs() = nodejs { }
|
|
||||||
fun nodejs(body: KotlinJsNodeDsl.() -> Unit)
|
|
||||||
fun nodejs(fn: Action<KotlinJsNodeDsl>) {
|
|
||||||
nodejs {
|
|
||||||
fn.execute(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun useCommonJs()
|
fun useCommonJs()
|
||||||
fun useEsModules()
|
fun useEsModules()
|
||||||
|
|
||||||
@@ -74,6 +66,16 @@ interface KotlinJsTargetDsl : KotlinTarget {
|
|||||||
override val compilations: NamedDomainObjectContainer<out KotlinJsCompilation>
|
override val compilations: NamedDomainObjectContainer<out KotlinJsCompilation>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface KotlinTargetWithNodeJsDsl {
|
||||||
|
fun nodejs() = nodejs { }
|
||||||
|
fun nodejs(body: KotlinJsNodeDsl.() -> Unit)
|
||||||
|
fun nodejs(fn: Action<KotlinJsNodeDsl>) {
|
||||||
|
nodejs {
|
||||||
|
fn.execute(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface KotlinJsSubTargetDsl {
|
interface KotlinJsSubTargetDsl {
|
||||||
@ExperimentalDistributionDsl
|
@ExperimentalDistributionDsl
|
||||||
fun distribution(body: Action<Distribution>)
|
fun distribution(body: Action<Distribution>)
|
||||||
|
|||||||
+43
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.targets.js.dsl
|
||||||
|
|
||||||
|
import org.gradle.api.Action
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.d8.D8Exec
|
||||||
|
|
||||||
|
interface KotlinWasmSubTargetContainerDsl : KotlinTarget {
|
||||||
|
val d8: KotlinWasmD8Dsl
|
||||||
|
|
||||||
|
val isD8Configured: Boolean
|
||||||
|
|
||||||
|
fun whenD8Configured(body: KotlinWasmD8Dsl.() -> Unit)
|
||||||
|
|
||||||
|
fun whenBinaryenApplied(body: (BinaryenExec.() -> Unit) -> Unit)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface KotlinWasmJsTargetDsl : KotlinWasmTargetDsl, KotlinJsTargetDsl {
|
||||||
|
fun d8() = d8 { }
|
||||||
|
fun d8(body: KotlinWasmD8Dsl.() -> Unit)
|
||||||
|
fun d8(fn: Action<KotlinWasmD8Dsl>) {
|
||||||
|
d8 {
|
||||||
|
fn.execute(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun applyBinaryen() = applyBinaryen { }
|
||||||
|
fun applyBinaryen(body: BinaryenExec.() -> Unit)
|
||||||
|
fun applyBinaryen(fn: Action<BinaryenExec>) {
|
||||||
|
applyBinaryen {
|
||||||
|
fn.execute(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface KotlinWasmD8Dsl : KotlinJsSubTargetDsl {
|
||||||
|
fun runTask(body: D8Exec.() -> Unit)
|
||||||
|
}
|
||||||
+3
-33
@@ -5,39 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.dsl
|
package org.jetbrains.kotlin.gradle.targets.js.dsl
|
||||||
|
|
||||||
import org.gradle.api.Action
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.d8.D8Exec
|
|
||||||
|
|
||||||
interface KotlinWasmSubTargetContainerDsl : KotlinTarget {
|
interface KotlinWasmTargetDsl : KotlinTarget {
|
||||||
val d8: KotlinWasmD8Dsl
|
val wasmTargetType: KotlinWasmTargetType?
|
||||||
|
|
||||||
val isD8Configured: Boolean
|
|
||||||
|
|
||||||
fun whenD8Configured(body: KotlinWasmD8Dsl.() -> Unit)
|
|
||||||
|
|
||||||
fun whenBinaryenApplied(body: (BinaryenExec.() -> Unit) -> Unit)
|
|
||||||
}
|
|
||||||
|
|
||||||
interface KotlinWasmTargetDsl : KotlinJsTargetDsl {
|
|
||||||
fun d8() = d8 { }
|
|
||||||
fun d8(body: KotlinWasmD8Dsl.() -> Unit)
|
|
||||||
fun d8(fn: Action<KotlinWasmD8Dsl>) {
|
|
||||||
d8 {
|
|
||||||
fn.execute(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun applyBinaryen() = applyBinaryen { }
|
|
||||||
fun applyBinaryen(body: BinaryenExec.() -> Unit)
|
|
||||||
fun applyBinaryen(fn: Action<BinaryenExec>) {
|
|
||||||
applyBinaryen {
|
|
||||||
fn.execute(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interface KotlinWasmD8Dsl : KotlinJsSubTargetDsl {
|
|
||||||
fun runTask(body: D8Exec.() -> Unit)
|
|
||||||
}
|
}
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.targets.js.dsl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.HasBinaries
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer
|
||||||
|
|
||||||
|
interface KotlinWasmWasiTargetDsl :
|
||||||
|
KotlinWasmTargetDsl,
|
||||||
|
KotlinTargetWithNodeJsDsl,
|
||||||
|
HasBinaries<KotlinJsBinaryContainer>
|
||||||
+1
@@ -29,3 +29,4 @@ internal const val PER_MODULE = "-Xir-per-module"
|
|||||||
internal const val PER_MODULE_OUTPUT_NAME = "-Xir-per-module-output-name"
|
internal const val PER_MODULE_OUTPUT_NAME = "-Xir-per-module-output-name"
|
||||||
|
|
||||||
internal const val WASM_BACKEND = "-Xwasm"
|
internal const val WASM_BACKEND = "-Xwasm"
|
||||||
|
internal const val WASM_WASI_MODE = "-Xwasm-wasi-mode"
|
||||||
|
|||||||
+15
-6
@@ -5,16 +5,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationFriendPathsResolver
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationFriendPathsResolver
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsIrCompilationSourceSetsContainerFactory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationPreConfigure
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsKotlinCompilationDependencyConfigurationsFactory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinJsCompilerOptionsFactory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.sourcesJarTask
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
|
|
||||||
class KotlinJsIrCompilationFactory internal constructor(
|
class KotlinJsIrCompilationFactory internal constructor(
|
||||||
override val target: KotlinOnlyTarget<KotlinJsIrCompilation>
|
override val target: KotlinOnlyTarget<KotlinJsIrCompilation>,
|
||||||
) : KotlinCompilationFactory<KotlinJsIrCompilation> {
|
) : KotlinCompilationFactory<KotlinJsIrCompilation> {
|
||||||
override val itemClass: Class<KotlinJsIrCompilation>
|
override val itemClass: Class<KotlinJsIrCompilation>
|
||||||
get() = KotlinJsIrCompilation::class.java
|
get() = KotlinJsIrCompilation::class.java
|
||||||
@@ -27,7 +29,14 @@ class KotlinJsIrCompilationFactory internal constructor(
|
|||||||
}
|
}
|
||||||
),
|
),
|
||||||
compilationSourceSetsContainerFactory = JsIrCompilationSourceSetsContainerFactory,
|
compilationSourceSetsContainerFactory = JsIrCompilationSourceSetsContainerFactory,
|
||||||
compilationDependencyConfigurationsFactory = JsKotlinCompilationDependencyConfigurationsFactory
|
compilationDependencyConfigurationsFactory = JsKotlinCompilationDependencyConfigurationsFactory,
|
||||||
|
preConfigureAction = DefaultKotlinCompilationPreConfigure + { compilation ->
|
||||||
|
if (compilation.platformType == KotlinPlatformType.wasm && compilation.isMain()) {
|
||||||
|
val artifactNameAppendix = (compilation.target as KotlinJsIrTarget).wasmDecamelizedDefaultNameOrNull()
|
||||||
|
?: compilation.target.targetName.toLowerCaseAsciiOnly()
|
||||||
|
sourcesJarTask(compilation, compilation.target.targetName, artifactNameAppendix)
|
||||||
|
}
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun create(name: String): KotlinJsIrCompilation = target.project.objects.newInstance(
|
override fun create(name: String): KotlinJsIrCompilation = target.project.objects.newInstance(
|
||||||
|
|||||||
+14
-4
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||||
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDistributionDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDistributionDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
@@ -33,7 +34,7 @@ import org.jetbrains.kotlin.gradle.utils.newFileProperty
|
|||||||
|
|
||||||
abstract class KotlinJsIrSubTarget(
|
abstract class KotlinJsIrSubTarget(
|
||||||
val target: KotlinJsIrTarget,
|
val target: KotlinJsIrTarget,
|
||||||
private val disambiguationClassifier: String
|
private val disambiguationClassifier: String,
|
||||||
) : KotlinJsSubTargetDsl {
|
) : KotlinJsSubTargetDsl {
|
||||||
val project get() = target.project
|
val project get() = target.project
|
||||||
|
|
||||||
@@ -121,8 +122,8 @@ abstract class KotlinJsIrSubTarget(
|
|||||||
KotlinJsBinaryMode.DEVELOPMENT
|
KotlinJsBinaryMode.DEVELOPMENT
|
||||||
).single()
|
).single()
|
||||||
|
|
||||||
testJs.dependsOn(binary.linkSyncTask)
|
val inputFileProperty = if (target.wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||||
testJs.inputFileProperty.fileProvider(
|
testJs.dependsOn(binary.linkSyncTask)
|
||||||
binary.linkSyncTask.flatMap { linkSyncTask ->
|
binary.linkSyncTask.flatMap { linkSyncTask ->
|
||||||
binary.linkTask.flatMap { linkTask ->
|
binary.linkTask.flatMap { linkTask ->
|
||||||
linkTask.outputFileProperty.map { file ->
|
linkTask.outputFileProperty.map { file ->
|
||||||
@@ -130,6 +131,15 @@ abstract class KotlinJsIrSubTarget(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
testJs.dependsOn(binary.linkTask)
|
||||||
|
binary.linkTask.flatMap { linkTask ->
|
||||||
|
linkTask.outputFileProperty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testJs.inputFileProperty.fileProvider(
|
||||||
|
inputFileProperty
|
||||||
)
|
)
|
||||||
|
|
||||||
configureTestDependencies(testJs)
|
configureTestDependencies(testJs)
|
||||||
@@ -238,7 +248,7 @@ abstract class KotlinJsIrSubTarget(
|
|||||||
internal inline fun <reified T : Task> registerSubTargetTask(
|
internal inline fun <reified T : Task> registerSubTargetTask(
|
||||||
name: String,
|
name: String,
|
||||||
args: List<Any> = emptyList(),
|
args: List<Any> = emptyList(),
|
||||||
noinline body: (T) -> (Unit)
|
noinline body: (T) -> (Unit),
|
||||||
): TaskProvider<T> =
|
): TaskProvider<T> =
|
||||||
project.registerTask(name, args) {
|
project.registerTask(name, args) {
|
||||||
it.group = taskGroupName
|
it.group = taskGroupName
|
||||||
|
|||||||
+66
-6
@@ -10,24 +10,32 @@ import org.gradle.api.Project
|
|||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix
|
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultKotlinUsageContext
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetWithBinaries
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsageContext
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.JsAggregatingExecutionSource
|
import org.jetbrains.kotlin.gradle.targets.js.JsAggregatingExecutionSource
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.*
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.*
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.decamelize
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.gradle.utils.setProperty
|
import org.jetbrains.kotlin.gradle.utils.setProperty
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
abstract class KotlinJsIrTarget
|
abstract class KotlinJsIrTarget
|
||||||
@@ -35,14 +43,16 @@ abstract class KotlinJsIrTarget
|
|||||||
constructor(
|
constructor(
|
||||||
project: Project,
|
project: Project,
|
||||||
platformType: KotlinPlatformType,
|
platformType: KotlinPlatformType,
|
||||||
internal val mixedMode: Boolean
|
internal val mixedMode: Boolean,
|
||||||
) :
|
) :
|
||||||
KotlinTargetWithBinaries<KotlinJsIrCompilation, KotlinJsBinaryContainer>(project, platformType),
|
KotlinTargetWithBinaries<KotlinJsIrCompilation, KotlinJsBinaryContainer>(project, platformType),
|
||||||
KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>,
|
KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>,
|
||||||
KotlinJsTargetDsl,
|
KotlinJsTargetDsl,
|
||||||
KotlinWasmTargetDsl,
|
KotlinWasmJsTargetDsl,
|
||||||
|
KotlinWasmWasiTargetDsl,
|
||||||
KotlinJsSubTargetContainerDsl,
|
KotlinJsSubTargetContainerDsl,
|
||||||
KotlinWasmSubTargetContainerDsl {
|
KotlinWasmSubTargetContainerDsl {
|
||||||
|
|
||||||
private val propertiesProvider = PropertiesProvider(project)
|
private val propertiesProvider = PropertiesProvider(project)
|
||||||
override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsReportAggregatingTestRun>
|
override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsReportAggregatingTestRun>
|
||||||
internal set
|
internal set
|
||||||
@@ -50,6 +60,9 @@ constructor(
|
|||||||
open var isMpp: Boolean? = null
|
open var isMpp: Boolean? = null
|
||||||
internal set
|
internal set
|
||||||
|
|
||||||
|
override var wasmTargetType: KotlinWasmTargetType? = null
|
||||||
|
internal set
|
||||||
|
|
||||||
var legacyTarget: KotlinJsTarget? = null
|
var legacyTarget: KotlinJsTarget? = null
|
||||||
internal set
|
internal set
|
||||||
|
|
||||||
@@ -61,6 +74,38 @@ constructor(
|
|||||||
field = value
|
field = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val kotlinComponents: Set<KotlinTargetComponent> by lazy {
|
||||||
|
val mainCompilation = compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)
|
||||||
|
val usageContexts = createUsageContexts(mainCompilation).toMutableSet()
|
||||||
|
|
||||||
|
val componentName =
|
||||||
|
if (project.kotlinExtension is KotlinMultiplatformExtension)
|
||||||
|
targetName
|
||||||
|
else PRIMARY_SINGLE_COMPONENT_NAME
|
||||||
|
|
||||||
|
usageContexts.addIfNotNull(
|
||||||
|
createSourcesJarAndUsageContextIfPublishable(
|
||||||
|
producingCompilation = mainCompilation,
|
||||||
|
componentName = componentName,
|
||||||
|
artifactNameAppendix = wasmDecamelizedDefaultNameOrNull() ?: dashSeparatedName(targetName.toLowerCaseAsciiOnly())
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
val result = createKotlinVariant(componentName, mainCompilation, usageContexts)
|
||||||
|
|
||||||
|
setOf(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createKotlinVariant(
|
||||||
|
componentName: String,
|
||||||
|
compilation: KotlinCompilation<*>,
|
||||||
|
usageContexts: Set<DefaultKotlinUsageContext>,
|
||||||
|
): KotlinVariant {
|
||||||
|
return super.createKotlinVariant(componentName, compilation, usageContexts).apply {
|
||||||
|
artifactTargetName = wasmDecamelizedDefaultNameOrNull() ?: componentName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun createUsageContexts(producingCompilation: KotlinCompilation<*>): Set<DefaultKotlinUsageContext> {
|
override fun createUsageContexts(producingCompilation: KotlinCompilation<*>): Set<DefaultKotlinUsageContext> {
|
||||||
val usageContexts = super.createUsageContexts(producingCompilation)
|
val usageContexts = super.createUsageContexts(producingCompilation)
|
||||||
|
|
||||||
@@ -211,7 +256,11 @@ constructor(
|
|||||||
|
|
||||||
//node.js
|
//node.js
|
||||||
private val nodejsLazyDelegate = lazy {
|
private val nodejsLazyDelegate = lazy {
|
||||||
commonLazy
|
if (wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||||
|
commonLazy
|
||||||
|
} else {
|
||||||
|
NodeJsRootPlugin.apply(project.rootProject)
|
||||||
|
}
|
||||||
project.objects.newInstance(KotlinNodeJsIr::class.java, this).also {
|
project.objects.newInstance(KotlinNodeJsIr::class.java, this).also {
|
||||||
it.configureSubTarget()
|
it.configureSubTarget()
|
||||||
nodejsConfiguredHandlers.forEach { handler ->
|
nodejsConfiguredHandlers.forEach { handler ->
|
||||||
@@ -341,3 +390,14 @@ constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun KotlinJsIrTarget.wasmDecamelizedDefaultNameOrNull(): String? = if (platformType == KotlinPlatformType.wasm) {
|
||||||
|
val defaultWasmTargetName = wasmTargetType?.let {
|
||||||
|
KotlinWasmTargetPreset.WASM_PRESET_NAME + it.name.toLowerCaseAsciiOnly().capitalizeAsciiOnly()
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultWasmTargetName
|
||||||
|
?.takeIf {
|
||||||
|
targetName == defaultWasmTargetName
|
||||||
|
}?.decamelize()
|
||||||
|
} else null
|
||||||
|
|||||||
+12
-1
@@ -13,13 +13,16 @@ import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.JsSourceMapEmbedMode
|
import org.jetbrains.kotlin.gradle.dsl.JsSourceMapEmbedMode
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.internal.BasePluginConfiguration
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.libsDirectory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.libsDirectory
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.sourcesJarTask
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
||||||
import org.jetbrains.kotlin.gradle.testing.testTaskName
|
import org.jetbrains.kotlin.gradle.testing.testTaskName
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.decamelize
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
|
|
||||||
open class KotlinJsIrTargetConfigurator :
|
open class KotlinJsIrTargetConfigurator :
|
||||||
KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget>(true),
|
KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget>(true),
|
||||||
@@ -73,6 +76,14 @@ open class KotlinJsIrTargetConfigurator :
|
|||||||
configure {
|
configure {
|
||||||
it.archiveExtension.set(KLIB_TYPE)
|
it.archiveExtension.set(KLIB_TYPE)
|
||||||
it.destinationDirectory.set(libsDirectory)
|
it.destinationDirectory.set(libsDirectory)
|
||||||
|
|
||||||
|
if (target.platformType == KotlinPlatformType.wasm) {
|
||||||
|
if (target.wasmDecamelizedDefaultNameOrNull() != null) {
|
||||||
|
target.disambiguationClassifier?.let { classifier ->
|
||||||
|
it.archiveAppendix.set(classifier.decamelize())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-5
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
|
|||||||
|
|
||||||
import org.gradle.api.Action
|
import org.gradle.api.Action
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension
|
||||||
@@ -31,6 +32,12 @@ abstract class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
project.tasks.withType<NodeJsExec>().named(runTaskName).configure(body)
|
project.tasks.withType<NodeJsExec>().named(runTaskName).configure(body)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun configureRun(compilation: KotlinJsIrCompilation) {
|
||||||
|
if (target.wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||||
|
super.configureRun(compilation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun locateOrRegisterRunTask(binary: JsIrBinary, name: String) {
|
override fun locateOrRegisterRunTask(binary: JsIrBinary, name: String) {
|
||||||
if (project.locateTask<NodeJsExec>(name) != null) return
|
if (project.locateTask<NodeJsExec>(name) != null) return
|
||||||
|
|
||||||
@@ -51,11 +58,13 @@ abstract class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun configureTestDependencies(test: KotlinJsTest) {
|
override fun configureTestDependencies(test: KotlinJsTest) {
|
||||||
test.dependsOn(
|
if (target.wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||||
nodeJsTaskProviders.npmInstallTaskProvider,
|
test.dependsOn(
|
||||||
nodeJsTaskProviders.storeYarnLockTaskProvider,
|
nodeJsTaskProviders.npmInstallTaskProvider,
|
||||||
nodeJsTaskProviders.nodeJsSetupTaskProvider
|
nodeJsTaskProviders.storeYarnLockTaskProvider,
|
||||||
)
|
nodeJsTaskProviders.nodeJsSetupTaskProvider
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configureDefaultTestFramework(test: KotlinJsTest) {
|
override fun configureDefaultTestFramework(test: KotlinJsTest) {
|
||||||
|
|||||||
+7
-3
@@ -8,13 +8,16 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi
|
import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
|
|
||||||
@DeprecatedTargetPresetApi
|
@DeprecatedTargetPresetApi
|
||||||
class KotlinWasmTargetPreset(
|
class KotlinWasmTargetPreset(
|
||||||
project: Project,
|
project: Project,
|
||||||
|
private val targetType: KotlinWasmTargetType
|
||||||
) : KotlinOnlyTargetPreset<KotlinJsIrTarget, KotlinJsIrCompilation>(project) {
|
) : KotlinOnlyTargetPreset<KotlinJsIrTarget, KotlinJsIrCompilation>(project) {
|
||||||
override val platformType: KotlinPlatformType = KotlinPlatformType.wasm
|
override val platformType: KotlinPlatformType = KotlinPlatformType.wasm
|
||||||
|
|
||||||
@@ -25,6 +28,7 @@ class KotlinWasmTargetPreset(
|
|||||||
|
|
||||||
val irTarget = project.objects.newInstance(KotlinJsIrTarget::class.java, project, KotlinPlatformType.wasm, false)
|
val irTarget = project.objects.newInstance(KotlinJsIrTarget::class.java, project, KotlinPlatformType.wasm, false)
|
||||||
irTarget.isMpp = true
|
irTarget.isMpp = true
|
||||||
|
irTarget.wasmTargetType = targetType
|
||||||
|
|
||||||
return irTarget
|
return irTarget
|
||||||
}
|
}
|
||||||
@@ -32,7 +36,7 @@ class KotlinWasmTargetPreset(
|
|||||||
override fun createKotlinTargetConfigurator(): AbstractKotlinTargetConfigurator<KotlinJsIrTarget> =
|
override fun createKotlinTargetConfigurator(): AbstractKotlinTargetConfigurator<KotlinJsIrTarget> =
|
||||||
KotlinJsIrTargetConfigurator()
|
KotlinJsIrTargetConfigurator()
|
||||||
|
|
||||||
override fun getName(): String = WASM_PRESET_NAME
|
override fun getName(): String = WASM_PRESET_NAME + targetType.name.toLowerCaseAsciiOnly().capitalizeAsciiOnly()
|
||||||
|
|
||||||
public override fun createCompilationFactory(
|
public override fun createCompilationFactory(
|
||||||
forTarget: KotlinJsIrTarget
|
forTarget: KotlinJsIrTarget
|
||||||
@@ -40,6 +44,6 @@ class KotlinWasmTargetPreset(
|
|||||||
KotlinJsIrCompilationFactory(forTarget)
|
KotlinJsIrCompilationFactory(forTarget)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val WASM_PRESET_NAME = "wasm"
|
internal const val WASM_PRESET_NAME = "wasm"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-3
@@ -37,8 +37,10 @@ open class NpmProject(@Transient val compilation: KotlinJsCompilation) : Seriali
|
|||||||
buildNpmProjectName()
|
buildNpmProjectName()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transient
|
@delegate:Transient
|
||||||
val nodeJs = project.rootProject.kotlinNodeJsExtension
|
val nodeJs by lazy {
|
||||||
|
project.rootProject.kotlinNodeJsExtension
|
||||||
|
}
|
||||||
|
|
||||||
val dir: File by lazy {
|
val dir: File by lazy {
|
||||||
nodeJs.projectPackagesDir.resolve(name)
|
nodeJs.projectPackagesDir.resolve(name)
|
||||||
@@ -75,7 +77,9 @@ open class NpmProject(@Transient val compilation: KotlinJsCompilation) : Seriali
|
|||||||
val publicPackageJsonTaskName: String
|
val publicPackageJsonTaskName: String
|
||||||
get() = compilation.disambiguateName(PublicPackageJsonTask.NAME)
|
get() = compilation.disambiguateName(PublicPackageJsonTask.NAME)
|
||||||
|
|
||||||
internal val modules = NpmProjectModules(dir)
|
internal val modules by lazy {
|
||||||
|
NpmProjectModules(dir)
|
||||||
|
}
|
||||||
|
|
||||||
private val nodeExecutable by lazy {
|
private val nodeExecutable by lazy {
|
||||||
nodeJs.requireConfigured().nodeExecutable
|
nodeJs.requireConfigured().nodeExecutable
|
||||||
|
|||||||
+1
-3
@@ -42,8 +42,6 @@ constructor(
|
|||||||
|
|
||||||
private val nodeExecutable by project.provider { nodeJs.requireConfigured().nodeExecutable }
|
private val nodeExecutable by project.provider { nodeJs.requireConfigured().nodeExecutable }
|
||||||
|
|
||||||
private val npmProjectDir by project.provider { compilation.npmProject.dir }
|
|
||||||
|
|
||||||
@Input
|
@Input
|
||||||
var environment = mutableMapOf<String, String>()
|
var environment = mutableMapOf<String, String>()
|
||||||
|
|
||||||
@@ -159,7 +157,7 @@ constructor(
|
|||||||
|
|
||||||
override fun createTestExecutionSpec(): TCServiceMessagesTestExecutionSpec {
|
override fun createTestExecutionSpec(): TCServiceMessagesTestExecutionSpec {
|
||||||
val forkOptions = DefaultProcessForkOptions(fileResolver)
|
val forkOptions = DefaultProcessForkOptions(fileResolver)
|
||||||
forkOptions.workingDir = npmProjectDir
|
forkOptions.workingDir = testFramework!!.workingDir.toFile()
|
||||||
forkOptions.executable = nodeExecutable
|
forkOptions.executable = nodeExecutable
|
||||||
|
|
||||||
environment.forEach { (key, value) ->
|
environment.forEach { (key, value) ->
|
||||||
|
|||||||
+3
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.testing
|
|||||||
import org.gradle.process.ProcessForkOptions
|
import org.gradle.process.ProcessForkOptions
|
||||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
interface KotlinJsTestFramework : RequiresNpmDependencies {
|
interface KotlinJsTestFramework : RequiresNpmDependencies {
|
||||||
val settingsState: String
|
val settingsState: String
|
||||||
@@ -18,4 +19,6 @@ interface KotlinJsTestFramework : RequiresNpmDependencies {
|
|||||||
nodeJsArgs: MutableList<String>,
|
nodeJsArgs: MutableList<String>,
|
||||||
debug: Boolean
|
debug: Boolean
|
||||||
): TCServiceMessagesTestExecutionSpec
|
): TCServiceMessagesTestExecutionSpec
|
||||||
|
|
||||||
|
val workingDir: Path
|
||||||
}
|
}
|
||||||
+6
@@ -15,9 +15,11 @@ import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
|
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
|
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
|
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
|
||||||
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
|
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
|
||||||
import org.jetbrains.kotlin.gradle.utils.getValue
|
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
internal class KotlinWasmD8(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework {
|
internal class KotlinWasmD8(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework {
|
||||||
override val settingsState: String = "KotlinWasmD8"
|
override val settingsState: String = "KotlinWasmD8"
|
||||||
@@ -29,6 +31,10 @@ internal class KotlinWasmD8(private val kotlinJsTest: KotlinJsTest) : KotlinJsTe
|
|||||||
private val d8 = D8RootPlugin.apply(project.rootProject)
|
private val d8 = D8RootPlugin.apply(project.rootProject)
|
||||||
private val d8Executable by project.provider { d8.requireConfigured().executablePath }
|
private val d8Executable by project.provider { d8.requireConfigured().executablePath }
|
||||||
private val isTeamCity = project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
|
private val isTeamCity = project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
|
||||||
|
private val npmProjectDir by project.provider { compilation.npmProject.dir }
|
||||||
|
|
||||||
|
override val workingDir: Path
|
||||||
|
get() = npmProjectDir.toPath()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
kotlinJsTest.doNotTrackStateCompat("Should always re-run for WASM")
|
kotlinJsTest.doNotTrackStateCompat("Should always re-run for WASM")
|
||||||
|
|||||||
+23
@@ -5,16 +5,22 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.testing
|
package org.jetbrains.kotlin.gradle.targets.js.testing
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.gradle.process.ProcessForkOptions
|
import org.gradle.process.ProcessForkOptions
|
||||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSettings
|
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSettings
|
||||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
||||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutor
|
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutor
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
|
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
|
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
|
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
|
||||||
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
|
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
internal class KotlinWasmNode(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework {
|
internal class KotlinWasmNode(private val kotlinJsTest: KotlinJsTest) : KotlinJsTestFramework {
|
||||||
override val settingsState: String = "KotlinWasmNode"
|
override val settingsState: String = "KotlinWasmNode"
|
||||||
@@ -22,6 +28,23 @@ internal class KotlinWasmNode(private val kotlinJsTest: KotlinJsTest) : KotlinJs
|
|||||||
override val compilation: KotlinJsCompilation = kotlinJsTest.compilation
|
override val compilation: KotlinJsCompilation = kotlinJsTest.compilation
|
||||||
private val isTeamCity = compilation.target.project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
|
private val isTeamCity = compilation.target.project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
private val target: KotlinJsIrTarget = compilation.target as KotlinJsIrTarget
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
private val project: Project = target.project
|
||||||
|
|
||||||
|
private val npmProjectDir by project.provider { compilation.npmProject.dir }
|
||||||
|
|
||||||
|
private val wasmTargetType: KotlinWasmTargetType? = target.wasmTargetType
|
||||||
|
|
||||||
|
override val workingDir: Path
|
||||||
|
get() = if (wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||||
|
npmProjectDir.toPath()
|
||||||
|
} else {
|
||||||
|
kotlinJsTest.inputFileProperty.get().asFile.toPath().parent
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
kotlinJsTest.doNotTrackStateCompat("Should always re-run for WASM")
|
kotlinJsTest.doNotTrackStateCompat("Should always re-run for WASM")
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -36,10 +36,12 @@ import org.jetbrains.kotlin.gradle.targets.js.testing.*
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
|
||||||
import org.jetbrains.kotlin.gradle.utils.appendLine
|
import org.jetbrains.kotlin.gradle.utils.appendLine
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||||
import org.jetbrains.kotlin.gradle.utils.property
|
import org.jetbrains.kotlin.gradle.utils.property
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
class KotlinKarma(
|
class KotlinKarma(
|
||||||
@Transient override val compilation: KotlinJsCompilation,
|
@Transient override val compilation: KotlinJsCompilation,
|
||||||
@@ -70,9 +72,14 @@ class KotlinKarma(
|
|||||||
}
|
}
|
||||||
private val isTeamCity = project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
|
private val isTeamCity = project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
|
||||||
|
|
||||||
|
private val npmProjectDir by project.provider { npmProject.dir }
|
||||||
|
|
||||||
override val requiredNpmDependencies: Set<RequiredKotlinJsDependency>
|
override val requiredNpmDependencies: Set<RequiredKotlinJsDependency>
|
||||||
get() = requiredDependencies + webpackConfig.getRequiredDependencies(versions)
|
get() = requiredDependencies + webpackConfig.getRequiredDependencies(versions)
|
||||||
|
|
||||||
|
override val workingDir: Path
|
||||||
|
get() = npmProjectDir.toPath()
|
||||||
|
|
||||||
override fun getPath() = "$basePath:kotlinKarma"
|
override fun getPath() = "$basePath:kotlinKarma"
|
||||||
|
|
||||||
override val settingsState: String
|
override val settingsState: String
|
||||||
|
|||||||
+6
@@ -20,6 +20,8 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinTestRunnerCliArgs
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinTestRunnerCliArgs
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, private val basePath: String) :
|
class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, private val basePath: String) :
|
||||||
KotlinJsTestFramework {
|
KotlinJsTestFramework {
|
||||||
@@ -28,6 +30,10 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv
|
|||||||
private val npmProject = compilation.npmProject
|
private val npmProject = compilation.npmProject
|
||||||
private val versions = project.rootProject.kotlinNodeJsExtension.versions
|
private val versions = project.rootProject.kotlinNodeJsExtension.versions
|
||||||
private val isTeamCity = project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
|
private val isTeamCity = project.providers.gradleProperty(TCServiceMessagesTestExecutor.TC_PROJECT_PROPERTY)
|
||||||
|
private val npmProjectDir by project.provider { npmProject.dir }
|
||||||
|
|
||||||
|
override val workingDir: Path
|
||||||
|
get() = npmProjectDir.toPath()
|
||||||
|
|
||||||
override val settingsState: String
|
override val settingsState: String
|
||||||
get() = "mocha"
|
get() = "mocha"
|
||||||
|
|||||||
+5
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.gradle.tasks.registerTask
|
|||||||
import org.jetbrains.kotlin.gradle.utils.*
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||||
import org.jetbrains.kotlin.tooling.core.extrasLazyProperty
|
import org.jetbrains.kotlin.tooling.core.extrasLazyProperty
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
|
|
||||||
internal const val COMMON_MAIN_ELEMENTS_CONFIGURATION_NAME = "commonMainMetadataElements"
|
internal const val COMMON_MAIN_ELEMENTS_CONFIGURATION_NAME = "commonMainMetadataElements"
|
||||||
|
|
||||||
@@ -152,6 +153,10 @@ class KotlinMetadataTargetConfigurator :
|
|||||||
if (target.project.isCompatibilityMetadataVariantEnabled) {
|
if (target.project.isCompatibilityMetadataVariantEnabled) {
|
||||||
allMetadataJar.archiveClassifier.set("all")
|
allMetadataJar.archiveClassifier.set("all")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
target.disambiguationClassifier?.let { classifier ->
|
||||||
|
allMetadataJar.archiveAppendix.set(classifier.toLowerCaseAsciiOnly())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target.project.isCompatibilityMetadataVariantEnabled) {
|
if (target.project.isCompatibilityMetadataVariantEnabled) {
|
||||||
|
|||||||
+10
@@ -6,6 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks.configuration
|
package org.jetbrains.kotlin.gradle.tasks.configuration
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.internal.LibraryFilterCachingService
|
import org.jetbrains.kotlin.gradle.targets.js.internal.LibraryFilterCachingService
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.*
|
import org.jetbrains.kotlin.gradle.targets.js.ir.*
|
||||||
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
||||||
@@ -103,5 +105,13 @@ internal open class BaseKotlin2JsCompileConfig<TASK : Kotlin2JsCompile>(
|
|||||||
add("$KLIB_MODULE_NAME=${project.klibModuleName(baseName)}")
|
add("$KLIB_MODULE_NAME=${project.klibModuleName(baseName)}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (compilation.platformType == KotlinPlatformType.wasm) {
|
||||||
|
add(WASM_BACKEND)
|
||||||
|
val wasmTargetType = ((compilation.origin as KotlinJsIrCompilation).target as KotlinJsIrTarget).wasmTargetType!!
|
||||||
|
if (wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||||
|
add(WASM_WASI_MODE)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+5
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.tasks.configuration
|
|||||||
import org.gradle.api.InvalidUserDataException
|
import org.gradle.api.InvalidUserDataException
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.*
|
import org.jetbrains.kotlin.gradle.targets.js.ir.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||||
@@ -98,6 +99,10 @@ internal open class KotlinJsIrLinkConfig(
|
|||||||
|
|
||||||
if (compilation.platformType == KotlinPlatformType.wasm) {
|
if (compilation.platformType == KotlinPlatformType.wasm) {
|
||||||
add(WASM_BACKEND)
|
add(WASM_BACKEND)
|
||||||
|
val wasmTargetType = ((compilation.origin as KotlinJsIrCompilation).target as KotlinJsIrTarget).wasmTargetType!!
|
||||||
|
if (wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||||
|
add(WASM_WASI_MODE)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+7
-7
@@ -37,13 +37,13 @@ class WasmDependencyResolutionSmokeTest {
|
|||||||
producer.multiplatformExtension.apply {
|
producer.multiplatformExtension.apply {
|
||||||
jvm()
|
jvm()
|
||||||
js(IR) { browser() }
|
js(IR) { browser() }
|
||||||
wasm()
|
wasmJs()
|
||||||
}
|
}
|
||||||
|
|
||||||
consumer.multiplatformExtension.apply {
|
consumer.multiplatformExtension.apply {
|
||||||
jvm()
|
jvm()
|
||||||
js(IR) { browser() }
|
js(IR) { browser() }
|
||||||
wasm()
|
wasmJs()
|
||||||
|
|
||||||
sourceSets.commonMain.dependencies {
|
sourceSets.commonMain.dependencies {
|
||||||
implementation(producer)
|
implementation(producer)
|
||||||
@@ -59,17 +59,17 @@ class WasmDependencyResolutionSmokeTest {
|
|||||||
binaryCoordinates(Regex(".*stdlib-common.*"))
|
binaryCoordinates(Regex(".*stdlib-common.*"))
|
||||||
)
|
)
|
||||||
|
|
||||||
consumer.kotlinIdeMultiplatformImport.resolveDependencies("wasmMain").assertMatches(
|
consumer.kotlinIdeMultiplatformImport.resolveDependencies("wasmJsMain").assertMatches(
|
||||||
dependsOnDependency(":consumer/commonMain"),
|
dependsOnDependency(":consumer/commonMain"),
|
||||||
projectArtifactDependency(type = Regular, ":producer", FilePathRegex(".*/producer-wasm.klib")),
|
projectArtifactDependency(type = Regular, ":producer", FilePathRegex(".*/producer-wasm-js.klib")),
|
||||||
binaryCoordinates(Regex(".*stdlib-wasm.*"))
|
binaryCoordinates(Regex(".*stdlib-wasm.*"))
|
||||||
)
|
)
|
||||||
|
|
||||||
consumer.kotlinIdeMultiplatformImport.resolveDependencies("wasmTest").assertMatches(
|
consumer.kotlinIdeMultiplatformImport.resolveDependencies("wasmJsTest").assertMatches(
|
||||||
friendSourceDependency(":consumer/commonMain"),
|
friendSourceDependency(":consumer/commonMain"),
|
||||||
friendSourceDependency(":consumer/wasmMain"),
|
friendSourceDependency(":consumer/wasmJsMain"),
|
||||||
dependsOnDependency(":consumer/commonTest"),
|
dependsOnDependency(":consumer/commonTest"),
|
||||||
projectArtifactDependency(type = Regular, ":producer", FilePathRegex(".*/producer-wasm.klib")),
|
projectArtifactDependency(type = Regular, ":producer", FilePathRegex(".*/producer-wasm-js.klib")),
|
||||||
binaryCoordinates(Regex(".*stdlib-wasm.*"))
|
binaryCoordinates(Regex(".*stdlib-wasm.*"))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -163,7 +163,7 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
|
|||||||
js("nodeJs", KotlinJsCompilerType.IR) { attributes { attribute(jsAttribute, "nodeJs") } }
|
js("nodeJs", KotlinJsCompilerType.IR) { attributes { attribute(jsAttribute, "nodeJs") } }
|
||||||
js("browser", KotlinJsCompilerType.IR) { attributes { attribute(jsAttribute, "browser") } }
|
js("browser", KotlinJsCompilerType.IR) { attributes { attribute(jsAttribute, "browser") } }
|
||||||
@OptIn(ExperimentalWasmDsl::class)
|
@OptIn(ExperimentalWasmDsl::class)
|
||||||
wasm()
|
wasmJs()
|
||||||
|
|
||||||
val allJs = sourceSets.create("allJs")
|
val allJs = sourceSets.create("allJs")
|
||||||
targets.getByName("nodeJs").compilations.getByName("main").defaultSourceSet.dependsOn(allJs)
|
targets.getByName("nodeJs").compilations.getByName("main").defaultSourceSet.dependsOn(allJs)
|
||||||
@@ -187,7 +187,7 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
|
|||||||
|
|
||||||
// WASM
|
// WASM
|
||||||
val actualWasmConfigurations = targetSpecificConfigurationsToCheck
|
val actualWasmConfigurations = targetSpecificConfigurationsToCheck
|
||||||
.map { project.configurations.getByName("wasm$it") }
|
.map { project.configurations.getByName("wasmJs$it") }
|
||||||
.filter { it.attributes.contains(KotlinJsCompilerAttribute.jsCompilerAttribute) }
|
.filter { it.attributes.contains(KotlinJsCompilerAttribute.jsCompilerAttribute) }
|
||||||
|
|
||||||
assertEquals(
|
assertEquals(
|
||||||
|
|||||||
+4
-4
@@ -324,7 +324,7 @@ class KotlinHierarchyDslTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin.wasm()
|
kotlin.wasmJs()
|
||||||
kotlin.js()
|
kotlin.js()
|
||||||
|
|
||||||
assertEquals(
|
assertEquals(
|
||||||
@@ -333,7 +333,7 @@ class KotlinHierarchyDslTest {
|
|||||||
)
|
)
|
||||||
|
|
||||||
assertEquals(
|
assertEquals(
|
||||||
stringSetOf("jsMain", "wasmMain"),
|
stringSetOf("jsMain", "wasmJsMain"),
|
||||||
kotlin.dependingSourceSetNames("webMain")
|
kotlin.dependingSourceSetNames("webMain")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -353,7 +353,7 @@ class KotlinHierarchyDslTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin.wasm()
|
kotlin.wasmJs()
|
||||||
kotlin.js()
|
kotlin.js()
|
||||||
kotlin.jvm()
|
kotlin.jvm()
|
||||||
kotlin.linuxX64()
|
kotlin.linuxX64()
|
||||||
@@ -369,7 +369,7 @@ class KotlinHierarchyDslTest {
|
|||||||
)
|
)
|
||||||
|
|
||||||
assertEquals(
|
assertEquals(
|
||||||
stringSetOf("wasmMain", "linuxX64Main"),
|
stringSetOf("wasmJsMain", "linuxX64Main"),
|
||||||
kotlin.dependingSourceSetNames("wasmAndLinuxMain")
|
kotlin.dependingSourceSetNames("wasmAndLinuxMain")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user