[Gradle, Wasm] Fix compileSync input for production binary
^KT-66228 fixed ^KT-66159 fixed
This commit is contained in:
committed by
Space Team
parent
77b3f415a5
commit
0ce7bdc837
+27
-5
@@ -10,10 +10,12 @@ import org.gradle.api.file.Directory
|
||||
import org.gradle.api.file.RegularFile
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptionsHelper
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.fileExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||
@@ -23,6 +25,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.createDefaultDistribution
|
||||
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.configuration.KotlinJsIrLinkConfig
|
||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
@@ -60,11 +63,7 @@ sealed class JsIrBinary(
|
||||
project.registerTask<DefaultIncrementalSyncTask>(
|
||||
linkSyncTaskName
|
||||
) { task ->
|
||||
task.from.from(
|
||||
linkTask.flatMap { linkTask ->
|
||||
linkTask.destinationDirectory
|
||||
}
|
||||
)
|
||||
syncInputConfigure(task)
|
||||
|
||||
task.from.from(project.tasks.named(compilation.processResourcesTaskName))
|
||||
|
||||
@@ -72,6 +71,14 @@ sealed class JsIrBinary(
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun syncInputConfigure(syncTask: DefaultIncrementalSyncTask) {
|
||||
syncTask.from.from(
|
||||
linkTask.flatMap { linkTask ->
|
||||
linkTask.destinationDirectory
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
// Wasi target doesn't have sync task
|
||||
// need to extract wasm related binaries
|
||||
val linkSyncTask: TaskProvider<DefaultIncrementalSyncTask>
|
||||
@@ -187,6 +194,15 @@ open class ExecutableWasm(
|
||||
name,
|
||||
mode
|
||||
) {
|
||||
override fun syncInputConfigure(syncTask: DefaultIncrementalSyncTask) {
|
||||
if (compilation.isMain() && mode == KotlinJsBinaryMode.PRODUCTION) {
|
||||
syncTask.from.from(optimizeTask.flatMap { it.outputFileProperty.map { it.asFile.parentFile } })
|
||||
syncTask.dependsOn(optimizeTask)
|
||||
} else {
|
||||
super.syncInputConfigure(syncTask)
|
||||
}
|
||||
}
|
||||
|
||||
val optimizeTaskName: String = optimizeTaskName()
|
||||
|
||||
val optimizeTask: TaskProvider<BinaryenExec> = BinaryenExec.create(compilation, optimizeTaskName) {
|
||||
@@ -227,6 +243,12 @@ open class ExecutableWasm(
|
||||
}
|
||||
}
|
||||
}
|
||||
}.also { binaryenExec ->
|
||||
if (compilation.isMain() && mode == KotlinJsBinaryMode.PRODUCTION) {
|
||||
if (target.wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||
project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(binaryenExec)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun optimizeTaskName(): String =
|
||||
|
||||
-21
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import org.jetbrains.kotlin.gradle.utils.whenEvaluated
|
||||
import org.jetbrains.kotlin.gradle.utils.withType
|
||||
|
||||
abstract class KotlinJsIrSubTarget(
|
||||
val target: KotlinJsIrTarget,
|
||||
@@ -59,11 +58,6 @@ abstract class KotlinJsIrSubTarget(
|
||||
val npmProject = it.npmProject
|
||||
@Suppress("DEPRECATION")
|
||||
it.compilerOptions.options.freeCompilerArgs.add("$PER_MODULE_OUTPUT_NAME=${npmProject.name}")
|
||||
it.binaries
|
||||
.withType<ExecutableWasm>()
|
||||
.configureEach { binary ->
|
||||
configureBinaryen(binary)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,21 +223,6 @@ abstract class KotlinJsIrSubTarget(
|
||||
}
|
||||
}
|
||||
|
||||
private fun configureBinaryen(binary: ExecutableWasm) {
|
||||
val binaryenExec = binary.optimizeTask
|
||||
if (binary.compilation.isMain() && binary.mode == KotlinJsBinaryMode.PRODUCTION) {
|
||||
if (target.wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||
|
||||
project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(binaryenExec)
|
||||
} else {
|
||||
binary.linkSyncTask.configure {
|
||||
it.from.setFrom(binaryenExec.flatMap { it.outputFileProperty.map { it.asFile.parentFile } })
|
||||
it.dependsOn(binaryenExec)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal inline fun <reified T : Task> registerSubTargetTask(
|
||||
name: String,
|
||||
args: List<Any> = emptyList(),
|
||||
|
||||
Reference in New Issue
Block a user