[Gradle] Also configure JsIrLink tasks with target compiler options
This should synchronize options between JS compile and link tasks configured with target compiler options DSL. ^KT-61253 Fixed
This commit is contained in:
committed by
Space Team
parent
38e7bf6afa
commit
f866883871
+14
@@ -8,8 +8,11 @@ package org.jetbrains.kotlin.gradle.plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptionsHelper
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||
import org.jetbrains.kotlin.gradle.tasks.configuration.Kotlin2JsCompileConfig
|
||||
@@ -50,6 +53,17 @@ internal class KotlinJsIrSourceSetProcessor(
|
||||
it.libraries.from(project.filesProvider { compilation.runtimeDependencyFiles })
|
||||
}
|
||||
configAction.configureTask { task ->
|
||||
val targetCompilerOptions = (compilation.target as KotlinJsIrTarget).compilerOptions
|
||||
KotlinJsCompilerOptionsHelper.syncOptionsAsConvention(
|
||||
targetCompilerOptions,
|
||||
task.compilerOptions
|
||||
)
|
||||
|
||||
// Restoring already configured module name
|
||||
task.compilerOptions.moduleName.convention(
|
||||
project.provider { compilation.npmProject.name }
|
||||
)
|
||||
|
||||
task.modeProperty.set(binary.mode)
|
||||
task.dependsOn(kotlinTask)
|
||||
}
|
||||
|
||||
+1
-5
@@ -399,11 +399,7 @@ constructor(
|
||||
override val compilerOptions: KotlinJsCompilerOptions = project.objects
|
||||
.newInstance<KotlinJsCompilerOptionsDefault>()
|
||||
.apply {
|
||||
configureJsDefaultOptions()
|
||||
|
||||
if (platformType == KotlinPlatformType.wasm) {
|
||||
freeCompilerArgs.add(WASM_BACKEND)
|
||||
}
|
||||
configureJsDefaultOptions(platformType)
|
||||
|
||||
freeCompilerArgs.add(DISABLE_PRE_IR)
|
||||
}
|
||||
|
||||
+7
-16
@@ -85,21 +85,6 @@ open class KotlinJsIrTargetConfigurator :
|
||||
}
|
||||
}
|
||||
|
||||
override fun configureCompilations(target: KotlinJsIrTarget) {
|
||||
super.configureCompilations(target)
|
||||
|
||||
|
||||
target.compilations.all { compilation ->
|
||||
compilation.binaries
|
||||
.withType(JsIrBinary::class.java)
|
||||
.all { binary ->
|
||||
binary.linkTask.configure { linkTask ->
|
||||
linkTask.compilerOptions.configureJsDefaultOptions()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun defineConfigurationsForTarget(target: KotlinJsIrTarget) {
|
||||
super.defineConfigurationsForTarget(target)
|
||||
|
||||
@@ -118,10 +103,16 @@ open class KotlinJsIrTargetConfigurator :
|
||||
}
|
||||
|
||||
internal companion object {
|
||||
internal fun KotlinJsCompilerOptions.configureJsDefaultOptions() {
|
||||
internal fun KotlinJsCompilerOptions.configureJsDefaultOptions(
|
||||
platformType: KotlinPlatformType
|
||||
) {
|
||||
moduleKind.set(JsModuleKind.MODULE_UMD)
|
||||
sourceMap.set(true)
|
||||
sourceMapEmbedSources.set(JsSourceMapEmbedMode.SOURCE_MAP_SOURCE_CONTENT_NEVER)
|
||||
|
||||
if (platformType == KotlinPlatformType.wasm) {
|
||||
freeCompilerArgs.add(WASM_BACKEND)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
-1
@@ -9,6 +9,10 @@ import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner
|
||||
import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoBuildService
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.tcs
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||
import org.jetbrains.kotlin.gradle.targets.js.internal.LibraryFilterCachingService
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.*
|
||||
@@ -37,7 +41,16 @@ internal open class BaseKotlin2JsCompileConfig<TASK : Kotlin2JsCompile>(
|
||||
|
||||
configureAdditionalFreeCompilerArguments(task, compilation)
|
||||
|
||||
task.moduleName.set(task.compilerOptions.moduleName)
|
||||
val compilationTarget = compilation.tcs.compilation.target
|
||||
if (compilationTarget is KotlinJsTarget ||
|
||||
(compilationTarget is KotlinWithJavaTarget<*, *> && compilationTarget.platformType == KotlinPlatformType.js)
|
||||
) {
|
||||
// JS v1 which does not configure module name via target compiler options
|
||||
task.compilerOptions.moduleName.convention(compilation.moduleName)
|
||||
task.moduleName.set(providers.provider { compilation.moduleName })
|
||||
} else {
|
||||
task.moduleName.set(task.compilerOptions.moduleName)
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
task.outputFileProperty.value(
|
||||
|
||||
+40
@@ -371,6 +371,46 @@ class ProjectCompilerOptionsTests {
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testJsLinkTaskAreAlsoConfiguredWithOptionsFromDSL() {
|
||||
val project = buildProjectWithMPP()
|
||||
project.runLifecycleAwareTest {
|
||||
with(multiplatformExtension) {
|
||||
js {
|
||||
nodejs()
|
||||
binaries.library()
|
||||
compilerOptions {
|
||||
moduleName.set("my-custom-module")
|
||||
languageVersion.set(KotlinVersion.KOTLIN_1_8)
|
||||
apiVersion.set(KotlinVersion.KOTLIN_1_8)
|
||||
moduleKind.set(JsModuleKind.MODULE_PLAIN)
|
||||
freeCompilerArgs.addAll("-Xstrict-implicit-export-types", "-Xexplicit-api=warning")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val jsTasks = listOf(
|
||||
project.kotlinJsTask("compileKotlinJs"),
|
||||
project.kotlinJsTask("compileDevelopmentLibraryKotlinJs"),
|
||||
project.kotlinJsTask("compileProductionLibraryKotlinJs")
|
||||
)
|
||||
jsTasks.forEach { jsTask ->
|
||||
if (jsTask.name == "compileKotlinJs") {
|
||||
// JS IR has different module name from 'compileKotlinJs'
|
||||
assertEquals("my-custom-module", jsTask.compilerOptions.moduleName.orNull)
|
||||
}
|
||||
assertEquals(KotlinVersion.KOTLIN_1_8, jsTask.compilerOptions.languageVersion.orNull)
|
||||
assertEquals(KotlinVersion.KOTLIN_1_8, jsTask.compilerOptions.apiVersion.orNull)
|
||||
assertEquals(JsModuleKind.MODULE_PLAIN, jsTask.compilerOptions.moduleKind.orNull)
|
||||
assertTrue(
|
||||
jsTask.compilerOptions.freeCompilerArgs.get().containsAll(
|
||||
listOf("-Xstrict-implicit-export-types", "-Xexplicit-api=warning")
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun Project.kotlinNativeTask(name: String): KotlinCompilationTask<KotlinNativeCompilerOptions> = tasks
|
||||
.named<KotlinCompilationTask<KotlinNativeCompilerOptions>>(name)
|
||||
.get()
|
||||
|
||||
Reference in New Issue
Block a user