[Gradle, Wasm] Add run task for wasi
^KT-61973 fixed
This commit is contained in:
committed by
Space Team
parent
0d04b8783c
commit
df95a8ed6e
+12
@@ -44,6 +44,18 @@ class KotlinWasmGradlePluginIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DisplayName("Check wasi target run")
|
||||||
|
@GradleTest
|
||||||
|
fun wasiRun(gradleVersion: GradleVersion) {
|
||||||
|
project("new-mpp-wasm-wasi-test", gradleVersion) {
|
||||||
|
buildGradleKts.modify(::transformBuildScriptWithPluginsDsl)
|
||||||
|
|
||||||
|
build(":wasmWasiNodeRun") {
|
||||||
|
assertOutputContains("Hello from Wasi")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@DisplayName("Check wasi and js target")
|
@DisplayName("Check wasi and js target")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun wasiAndJsTarget(gradleVersion: GradleVersion) {
|
fun wasiAndJsTarget(gradleVersion: GradleVersion) {
|
||||||
|
|||||||
+1
@@ -34,6 +34,7 @@ kotlin {
|
|||||||
|
|
||||||
wasmWasi {
|
wasmWasi {
|
||||||
nodejs {}
|
nodejs {}
|
||||||
|
binaries.executable()
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
|
|||||||
+5
-1
@@ -1,3 +1,7 @@
|
|||||||
package my.pack.name
|
package my.pack.name
|
||||||
|
|
||||||
fun foo(): Int = 1
|
fun foo(): Int = 1
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
println("Hello from Wasi")
|
||||||
|
}
|
||||||
+13
-9
@@ -32,19 +32,20 @@ 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
|
||||||
|
|
||||||
val runTaskHolder = NodeJsExec.create(binary.compilation, name) {
|
val compilation = binary.compilation
|
||||||
|
val runTaskHolder = NodeJsExec.create(compilation, name) {
|
||||||
group = taskGroupName
|
group = taskGroupName
|
||||||
dependsOn(binary.linkSyncTask)
|
val inputFile = if ((compilation.target as KotlinJsIrTarget).wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||||
inputFileProperty.fileProvider(
|
dependsOn(binary.linkTask)
|
||||||
|
sourceMapStackTraces = false
|
||||||
|
binary.linkTask.flatMap { linkTask ->
|
||||||
|
linkTask.outputFileProperty
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
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 ->
|
||||||
@@ -52,6 +53,9 @@ abstract class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
inputFileProperty.fileProvider(
|
||||||
|
inputFile
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
target.runTask.dependsOn(runTaskHolder)
|
target.runTask.dependsOn(runTaskHolder)
|
||||||
|
|||||||
+11
-6
@@ -11,8 +11,10 @@ import org.gradle.work.DisableCachingByDefault
|
|||||||
import org.gradle.work.NormalizeLineEndings
|
import org.gradle.work.NormalizeLineEndings
|
||||||
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.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.ir.KotlinJsIrTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension
|
||||||
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
|
||||||
@@ -68,7 +70,7 @@ constructor(
|
|||||||
val newArgs = mutableListOf<String>()
|
val newArgs = mutableListOf<String>()
|
||||||
newArgs.addAll(nodeArgs)
|
newArgs.addAll(nodeArgs)
|
||||||
if (inputFileProperty.isPresent) {
|
if (inputFileProperty.isPresent) {
|
||||||
newArgs.add(inputFileProperty.asFile.get().canonicalPath)
|
newArgs.add(inputFileProperty.asFile.get().normalize().absolutePath)
|
||||||
}
|
}
|
||||||
args?.let { newArgs.addAll(it) }
|
args?.let { newArgs.addAll(it) }
|
||||||
args = newArgs
|
args = newArgs
|
||||||
@@ -106,11 +108,14 @@ constructor(
|
|||||||
) {
|
) {
|
||||||
it.nodeJs = nodeJs
|
it.nodeJs = nodeJs
|
||||||
it.executable = nodeJs.requireConfigured().nodeExecutable
|
it.executable = nodeJs.requireConfigured().nodeExecutable
|
||||||
it.workingDir = npmProject.dir
|
if ((compilation.target as? KotlinJsIrTarget)?.wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||||
it.dependsOn(
|
it.workingDir = npmProject.dir
|
||||||
nodeJsTaskProviders.npmInstallTaskProvider,
|
it.dependsOn(
|
||||||
nodeJsTaskProviders.storeYarnLockTaskProvider,
|
nodeJsTaskProviders.npmInstallTaskProvider,
|
||||||
)
|
nodeJsTaskProviders.storeYarnLockTaskProvider,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
it.dependsOn(nodeJsTaskProviders.nodeJsSetupTaskProvider)
|
||||||
it.dependsOn(compilation.compileKotlinTaskProvider)
|
it.dependsOn(compilation.compileKotlinTaskProvider)
|
||||||
if (compilation.platformType == KotlinPlatformType.wasm) {
|
if (compilation.platformType == KotlinPlatformType.wasm) {
|
||||||
it.nodeArgs.addWasmExperimentalArguments()
|
it.nodeArgs.addWasmExperimentalArguments()
|
||||||
|
|||||||
Reference in New Issue
Block a user