[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")
|
||||
@GradleTest
|
||||
fun wasiAndJsTarget(gradleVersion: GradleVersion) {
|
||||
|
||||
+1
@@ -34,6 +34,7 @@ kotlin {
|
||||
|
||||
wasmWasi {
|
||||
nodejs {}
|
||||
binaries.executable()
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
||||
+5
-1
@@ -1,3 +1,7 @@
|
||||
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)
|
||||
}
|
||||
|
||||
override fun configureRun(compilation: KotlinJsIrCompilation) {
|
||||
if (target.wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||
super.configureRun(compilation)
|
||||
}
|
||||
}
|
||||
|
||||
override fun locateOrRegisterRunTask(binary: JsIrBinary, name: String) {
|
||||
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
|
||||
dependsOn(binary.linkSyncTask)
|
||||
inputFileProperty.fileProvider(
|
||||
val inputFile = if ((compilation.target as KotlinJsIrTarget).wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||
dependsOn(binary.linkTask)
|
||||
sourceMapStackTraces = false
|
||||
binary.linkTask.flatMap { linkTask ->
|
||||
linkTask.outputFileProperty
|
||||
}
|
||||
} else {
|
||||
dependsOn(binary.linkSyncTask)
|
||||
binary.linkSyncTask.flatMap { linkSyncTask ->
|
||||
binary.linkTask.flatMap { linkTask ->
|
||||
linkTask.outputFileProperty.map { file ->
|
||||
@@ -52,6 +53,9 @@ abstract class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
inputFileProperty.fileProvider(
|
||||
inputFile
|
||||
)
|
||||
}
|
||||
target.runTask.dependsOn(runTaskHolder)
|
||||
|
||||
+11
-6
@@ -11,8 +11,10 @@ import org.gradle.work.DisableCachingByDefault
|
||||
import org.gradle.work.NormalizeLineEndings
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
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.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.npm.RequiresNpmDependencies
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
@@ -68,7 +70,7 @@ constructor(
|
||||
val newArgs = mutableListOf<String>()
|
||||
newArgs.addAll(nodeArgs)
|
||||
if (inputFileProperty.isPresent) {
|
||||
newArgs.add(inputFileProperty.asFile.get().canonicalPath)
|
||||
newArgs.add(inputFileProperty.asFile.get().normalize().absolutePath)
|
||||
}
|
||||
args?.let { newArgs.addAll(it) }
|
||||
args = newArgs
|
||||
@@ -106,11 +108,14 @@ constructor(
|
||||
) {
|
||||
it.nodeJs = nodeJs
|
||||
it.executable = nodeJs.requireConfigured().nodeExecutable
|
||||
it.workingDir = npmProject.dir
|
||||
it.dependsOn(
|
||||
nodeJsTaskProviders.npmInstallTaskProvider,
|
||||
nodeJsTaskProviders.storeYarnLockTaskProvider,
|
||||
)
|
||||
if ((compilation.target as? KotlinJsIrTarget)?.wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||
it.workingDir = npmProject.dir
|
||||
it.dependsOn(
|
||||
nodeJsTaskProviders.npmInstallTaskProvider,
|
||||
nodeJsTaskProviders.storeYarnLockTaskProvider,
|
||||
)
|
||||
}
|
||||
it.dependsOn(nodeJsTaskProviders.nodeJsSetupTaskProvider)
|
||||
it.dependsOn(compilation.compileKotlinTaskProvider)
|
||||
if (compilation.platformType == KotlinPlatformType.wasm) {
|
||||
it.nodeArgs.addWasmExperimentalArguments()
|
||||
|
||||
Reference in New Issue
Block a user