diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt index bb6a2d9ead4..26664ae5f10 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt @@ -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( 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 @@ -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.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 = diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index c8a345aa483..ce26792afc6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -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() - .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 registerSubTargetTask( name: String, args: List = emptyList(),