[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.file.RegularFile
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.TaskProvider
|
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.dsl.KotlinJsCompilerOptionsHelper
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.fileExtension
|
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.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
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.subtargets.createDefaultDistribution
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.configuration.KotlinJsIrLinkConfig
|
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.tasks.registerTask
|
||||||
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
@@ -60,11 +63,7 @@ sealed class JsIrBinary(
|
|||||||
project.registerTask<DefaultIncrementalSyncTask>(
|
project.registerTask<DefaultIncrementalSyncTask>(
|
||||||
linkSyncTaskName
|
linkSyncTaskName
|
||||||
) { task ->
|
) { task ->
|
||||||
task.from.from(
|
syncInputConfigure(task)
|
||||||
linkTask.flatMap { linkTask ->
|
|
||||||
linkTask.destinationDirectory
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
task.from.from(project.tasks.named(compilation.processResourcesTaskName))
|
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
|
// Wasi target doesn't have sync task
|
||||||
// need to extract wasm related binaries
|
// need to extract wasm related binaries
|
||||||
val linkSyncTask: TaskProvider<DefaultIncrementalSyncTask>
|
val linkSyncTask: TaskProvider<DefaultIncrementalSyncTask>
|
||||||
@@ -187,6 +194,15 @@ open class ExecutableWasm(
|
|||||||
name,
|
name,
|
||||||
mode
|
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 optimizeTaskName: String = optimizeTaskName()
|
||||||
|
|
||||||
val optimizeTask: TaskProvider<BinaryenExec> = BinaryenExec.create(compilation, 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 =
|
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.testing.internal.kotlinTestRegistry
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.gradle.utils.whenEvaluated
|
import org.jetbrains.kotlin.gradle.utils.whenEvaluated
|
||||||
import org.jetbrains.kotlin.gradle.utils.withType
|
|
||||||
|
|
||||||
abstract class KotlinJsIrSubTarget(
|
abstract class KotlinJsIrSubTarget(
|
||||||
val target: KotlinJsIrTarget,
|
val target: KotlinJsIrTarget,
|
||||||
@@ -59,11 +58,6 @@ abstract class KotlinJsIrSubTarget(
|
|||||||
val npmProject = it.npmProject
|
val npmProject = it.npmProject
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
it.compilerOptions.options.freeCompilerArgs.add("$PER_MODULE_OUTPUT_NAME=${npmProject.name}")
|
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(
|
internal inline fun <reified T : Task> registerSubTargetTask(
|
||||||
name: String,
|
name: String,
|
||||||
args: List<Any> = emptyList(),
|
args: List<Any> = emptyList(),
|
||||||
|
|||||||
Reference in New Issue
Block a user