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