[WASM] Implement gradle plugin run tasks for wasm
This commit is contained in:
+4
@@ -9,6 +9,7 @@ import org.gradle.api.file.RegularFileProperty
|
||||
import org.gradle.api.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import org.jetbrains.kotlin.gradle.utils.newFileProperty
|
||||
import javax.inject.Inject
|
||||
@@ -74,6 +75,9 @@ constructor(
|
||||
it.executable = d8.requireConfigured().executablePath.absolutePath
|
||||
it.dependsOn(d8.setupTaskProvider)
|
||||
it.dependsOn(compilation.compileKotlinTaskProvider)
|
||||
if (compilation.platformType == KotlinPlatformType.wasm) {
|
||||
it.d8Args.addWasmExperimentalArguments()
|
||||
}
|
||||
it.configuration()
|
||||
}
|
||||
}
|
||||
|
||||
+19
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmD8Dsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinWasmD8
|
||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -26,6 +28,23 @@ open class KotlinD8Ir @Inject constructor(target: KotlinJsIrTarget) :
|
||||
project.tasks.withType<D8Exec>().named(runTaskName).configure(body)
|
||||
}
|
||||
|
||||
override fun locateOrRegisterRunTask(binary: JsIrBinary, name: String) {
|
||||
if (project.locateTask<D8Exec>(name) != null) return
|
||||
|
||||
val runTaskHolder = D8Exec.create(binary.compilation, name) {
|
||||
group = taskGroupName
|
||||
inputFileProperty.set(
|
||||
project.layout.file(
|
||||
binary.linkSyncTask.map {
|
||||
it.destinationDir
|
||||
.resolve(binary.linkTask.get().outputFileProperty.get().name)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
target.runTask.dependsOn(runTaskHolder)
|
||||
}
|
||||
|
||||
override fun configureDefaultTestFramework(test: KotlinJsTest) {
|
||||
test.testFramework = KotlinWasmD8(test)
|
||||
}
|
||||
|
||||
+2
-23
@@ -7,9 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
|
||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
|
||||
abstract class KotlinJsIrSubTargetBase(target: KotlinJsIrTarget, classifier: String) :
|
||||
KotlinJsIrSubTarget(target, classifier) {
|
||||
@@ -30,6 +28,7 @@ abstract class KotlinJsIrSubTargetBase(target: KotlinJsIrTarget, classifier: Str
|
||||
binary.mode.name.toLowerCase(),
|
||||
RUN_TASK_NAME
|
||||
)
|
||||
|
||||
locateOrRegisterRunTask(binary, binaryRunName)
|
||||
|
||||
if (binary.mode == KotlinJsBinaryMode.DEVELOPMENT) {
|
||||
@@ -38,27 +37,7 @@ abstract class KotlinJsIrSubTargetBase(target: KotlinJsIrTarget, classifier: Str
|
||||
}
|
||||
}
|
||||
|
||||
private fun locateOrRegisterRunTask(
|
||||
binary: JsIrBinary,
|
||||
name: String
|
||||
) {
|
||||
val runTask = project.locateTask<NodeJsExec>(name)
|
||||
if (runTask == null) {
|
||||
val runTaskHolder = NodeJsExec.create(binary.compilation, name) {
|
||||
group = taskGroupName
|
||||
inputFileProperty.set(
|
||||
project.layout.file(
|
||||
binary.linkSyncTask.map {
|
||||
it.destinationDir
|
||||
.resolve(binary.linkTask.get().outputFileProperty.get().name)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
target.runTask.dependsOn(runTaskHolder)
|
||||
}
|
||||
}
|
||||
protected abstract fun locateOrRegisterRunTask(binary: JsIrBinary, name: String)
|
||||
|
||||
override fun configureBuild(compilation: KotlinJsIrCompilation) {
|
||||
compilation.binaries
|
||||
|
||||
+19
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinWasmNode
|
||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -27,6 +29,23 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
project.tasks.withType<NodeJsExec>().named(runTaskName).configure(body)
|
||||
}
|
||||
|
||||
override fun locateOrRegisterRunTask(binary: JsIrBinary, name: String) {
|
||||
if (project.locateTask<NodeJsExec>(name) != null) return
|
||||
|
||||
val runTaskHolder = NodeJsExec.create(binary.compilation, name) {
|
||||
group = taskGroupName
|
||||
inputFileProperty.set(
|
||||
project.layout.file(
|
||||
binary.linkSyncTask.map {
|
||||
it.destinationDir
|
||||
.resolve(binary.linkTask.get().outputFileProperty.get().name)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
target.runTask.dependsOn(runTaskHolder)
|
||||
}
|
||||
|
||||
override fun configureTestDependencies(test: KotlinJsTest) {
|
||||
test.dependsOn(nodeJs.npmInstallTaskProvider, nodeJs.nodeJsSetupTaskProvider)
|
||||
}
|
||||
|
||||
+6
-3
@@ -7,8 +7,10 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
||||
|
||||
import org.gradle.api.file.RegularFileProperty
|
||||
import org.gradle.api.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
@@ -99,9 +101,10 @@ constructor(
|
||||
it.executable = nodeJs.requireConfigured().nodeExecutable
|
||||
it.workingDir = npmProject.dir
|
||||
it.dependsOn(nodeJs.npmInstallTaskProvider)
|
||||
|
||||
it.dependsOn(nodeJs.npmInstallTaskProvider, compilation.compileKotlinTaskProvider)
|
||||
|
||||
it.dependsOn(compilation.compileKotlinTaskProvider)
|
||||
if (compilation.platformType == KotlinPlatformType.wasm) {
|
||||
it.nodeArgs.addWasmExperimentalArguments()
|
||||
}
|
||||
it.configuration()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -68,7 +68,7 @@ open class NpmProject(@Transient val compilation: KotlinJsCompilation) : Seriali
|
||||
get() = dir.resolve(DIST_FOLDER)
|
||||
|
||||
val main: String
|
||||
get() = "$DIST_FOLDER/$name$extension"
|
||||
get() = "$DIST_FOLDER${File.separator}$name$extension"
|
||||
|
||||
val externalsDirRoot by lazy {
|
||||
project.buildDir.resolve("externals").resolve(name)
|
||||
|
||||
+8
-8
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSetti
|
||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
|
||||
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.isTeamCity
|
||||
@@ -57,14 +58,13 @@ internal class KotlinWasmD8(private val kotlinJsTest: KotlinJsTest) : KotlinJsTe
|
||||
exclude = task.excludePatterns
|
||||
)
|
||||
|
||||
val args = mutableListOf(
|
||||
"--experimental-wasm-gc",
|
||||
"--experimental-wasm-eh",
|
||||
testRunnerFile.absolutePath,
|
||||
)
|
||||
|
||||
args.add("--")
|
||||
args.addAll(cliArgs.toList())
|
||||
val args = mutableListOf<String>()
|
||||
with(args) {
|
||||
addWasmExperimentalArguments()
|
||||
add(testRunnerFile.absolutePath)
|
||||
add("--")
|
||||
addAll(cliArgs.toList())
|
||||
}
|
||||
|
||||
return TCServiceMessagesTestExecutionSpec(
|
||||
forkOptions = forkOptions,
|
||||
|
||||
+2
-2
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSetti
|
||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.addWasmExperimentalArguments
|
||||
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
|
||||
import org.jetbrains.kotlin.gradle.targets.js.isTeamCity
|
||||
import org.jetbrains.kotlin.gradle.targets.js.writeWasmUnitTestRunner
|
||||
@@ -48,8 +49,7 @@ internal class KotlinWasmNode(private val kotlinJsTest: KotlinJsTest) : KotlinJs
|
||||
|
||||
val args = mutableListOf<String>()
|
||||
with(args) {
|
||||
add("--experimental-wasm-gc")
|
||||
add("--experimental-wasm-eh")
|
||||
addWasmExperimentalArguments()
|
||||
add(testRunnerFile.absolutePath)
|
||||
addAll(cliArgs.toList())
|
||||
}
|
||||
|
||||
+5
@@ -78,4 +78,9 @@ internal fun writeWasmUnitTestRunner(compiledFile: File): File {
|
||||
""".trimIndent()
|
||||
)
|
||||
return testRunnerFile
|
||||
}
|
||||
|
||||
internal fun MutableList<String>.addWasmExperimentalArguments() {
|
||||
add("--experimental-wasm-gc")
|
||||
add("--experimental-wasm-eh")
|
||||
}
|
||||
Reference in New Issue
Block a user