Skip to content

Commit ba30392

Browse files
ilgonmicNina0295
authored andcommitted
[Wasm] Support regenerate unchanged modules flag on KGP
^KT-87066 fixed
1 parent 6307e73 commit ba30392

3 files changed

Lines changed: 56 additions & 1 deletion

File tree

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinWasmGradlePluginIT.kt

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle
77

88
import org.gradle.api.provider.Provider
99
import org.gradle.kotlin.dsl.withType
10-
import org.gradle.kotlin.dsl.withType
1110
import org.gradle.testkit.runner.BuildResult
1211
import org.gradle.util.GradleVersion
1312
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
@@ -207,6 +206,47 @@ class KotlinWasmGradlePluginIT : AbstractKotlinWasmGradlePluginIT() {
207206
}
208207
}
209208

209+
@OptIn(ExperimentalWasmDsl::class)
210+
@DisplayName("Check js target with per-module closed world incremental build with rerun tasks")
211+
@GradleTest
212+
fun jsTargetPerModuleClosedWorldWithRerunTasks(gradleVersion: GradleVersion) {
213+
project("new-mpp-wasm-js", gradleVersion) {
214+
buildGradleKts.modify {
215+
it.replace("<JsEngine>", "d8")
216+
}
217+
218+
buildScriptInjection {
219+
kotlinMultiplatform.wasmJs {
220+
binaries.executable().forEach {
221+
it.linkTask.configure {
222+
compilerOptions.freeCompilerArgs.add("-Xwasm-generate-closed-world-multimodule")
223+
}
224+
}
225+
}
226+
}
227+
228+
build(
229+
":compileDevelopmentExecutableKotlinWasmJs",
230+
) {
231+
assertTasksExecuted(":compileDevelopmentExecutableKotlinWasmJs")
232+
233+
assertFileInProjectExists("build/compileSync/wasmJs/main/developmentExecutable/kotlin/redefined-wasm-module-name.wasm")
234+
assertFileInProjectExists("build/compileSync/wasmJs/main/developmentExecutable/kotlin/kotlin-kotlin-stdlib.wasm")
235+
}
236+
237+
build(
238+
":compileDevelopmentExecutableKotlinWasmJs",
239+
*rerunTask(":compileDevelopmentExecutableKotlinWasmJs"),
240+
) {
241+
assertTasksExecuted(":compileDevelopmentExecutableKotlinWasmJs")
242+
243+
// Incremental build should not remove unchanged files
244+
assertFileInProjectExists("build/compileSync/wasmJs/main/developmentExecutable/kotlin/redefined-wasm-module-name.wasm")
245+
assertFileInProjectExists("build/compileSync/wasmJs/main/developmentExecutable/kotlin/kotlin-kotlin-stdlib.wasm")
246+
}
247+
}
248+
}
249+
210250
@OptIn(ExperimentalWasmDsl::class)
211251
@GradleTest
212252
@DisplayName("Diamond dependency: lib.wasm appears exactly once despite two dependency paths")

libraries/tools/kotlin-gradle-plugin/api/all/kotlin-gradle-plugin.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3076,6 +3076,7 @@ public final class org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilati
30763076

30773077
public abstract class org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink : org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile, org/jetbrains/kotlin/gradle/plugin/statistics/UsesBuildFusService {
30783078
public fun <init> (Lorg/gradle/api/Project;Lorg/jetbrains/kotlin/gradle/plugin/KotlinPlatformType;Lorg/gradle/api/model/ObjectFactory;Lorg/gradle/workers/WorkerExecutor;)V
3079+
public synthetic fun callCompilerAsync$kotlin_gradle_plugin_common (Lorg/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments;Lorg/gradle/work/InputChanges;Lorg/jetbrains/kotlin/gradle/tasks/TaskOutputsBackup;)V
30793080
protected fun cleanOutputsAndLocalState (Ljava/lang/String;)V
30803081
protected fun contributeAdditionalCompilerArguments (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilerArgumentsProducer$ContributeCompilerArgumentsContext;)V
30813082
public final fun getIncrementalJsIr ()Z

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.gradle.api.file.FileCollection
1111
import org.gradle.api.model.ObjectFactory
1212
import org.gradle.api.provider.Property
1313
import org.gradle.api.tasks.*
14+
import org.gradle.work.InputChanges
1415
import org.gradle.work.NormalizeLineEndings
1516
import org.gradle.workers.WorkerExecutor
1617
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
@@ -26,6 +27,7 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
2627
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
2728
import org.jetbrains.kotlin.gradle.tasks.K2MultiplatformStructure
2829
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
30+
import org.jetbrains.kotlin.gradle.tasks.TaskOutputsBackup
2931
import org.jetbrains.kotlin.gradle.utils.KotlinJsCompilerOptionsDefault
3032
import org.jetbrains.kotlin.platform.js.JsPlatforms
3133
import javax.inject.Inject
@@ -107,6 +109,18 @@ abstract class KotlinJsIrLink @Inject constructor(
107109

108110
override fun isIncrementalCompilationEnabled(): Boolean = false
109111

112+
override fun callCompilerAsync(
113+
args: K2JSCompilerArguments,
114+
inputChanges: InputChanges,
115+
taskOutputsBackup: TaskOutputsBackup?,
116+
) {
117+
if (!inputChanges.isIncremental && isWasmPlatform) {
118+
args.regenerateUnchangedModules = true
119+
}
120+
121+
super.callCompilerAsync(args, inputChanges, taskOutputsBackup)
122+
}
123+
110124
override fun contributeAdditionalCompilerArguments(context: ContributeCompilerArgumentsContext<K2JSCompilerArguments>) {
111125
context.primitive { args ->
112126
args.irProduceJs = true

0 commit comments

Comments
 (0)