[Gradle, JS] outputName -> moduleName

This commit is contained in:
Ilya Goncharov
2022-09-19 17:55:56 +02:00
committed by teamcity
parent 55731f27a4
commit cab79d950f
16 changed files with 53 additions and 34 deletions
@@ -16,6 +16,10 @@ class K2JSCompilerArguments : CommonCompilerArguments() {
@JvmStatic private val serialVersionUID = 0L @JvmStatic private val serialVersionUID = 0L
} }
@GradleOption(
value = DefaultValues.StringNullDefault::class,
gradleInputType = GradleInputTypes.INTERNAL // handled by task 'outputFileProperty'
)
@GradleDeprecatedOption( @GradleDeprecatedOption(
message = "Only for legacy backend. For IR backend please use task.destinationDirectory and moduleName", message = "Only for legacy backend. For IR backend please use task.destinationDirectory and moduleName",
level = DeprecationLevel.WARNING, level = DeprecationLevel.WARNING,
@@ -27,8 +31,12 @@ class K2JSCompilerArguments : CommonCompilerArguments() {
@Argument(value = "-Xir-output-dir", valueDescription = "<directory>", description = "Destination for generated files") @Argument(value = "-Xir-output-dir", valueDescription = "<directory>", description = "Destination for generated files")
var outputDir: String? by NullableStringFreezableVar(null) var outputDir: String? by NullableStringFreezableVar(null)
@Argument(value = "-Xir-output-name", description = "Base name of generated files") @GradleOption(
var outputName: String? by NullableStringFreezableVar(null) value = DefaultValues.StringNullDefault::class,
gradleInputType = GradleInputTypes.INPUT
)
@Argument(value = "-Xir-module-name", description = "Base name of generated files")
var moduleName: String? by NullableStringFreezableVar(null)
@GradleOption( @GradleOption(
value = DefaultValues.BooleanTrueDefault::class, value = DefaultValues.BooleanTrueDefault::class,
@@ -185,7 +193,7 @@ class K2JSCompilerArguments : CommonCompilerArguments() {
var irOnly: Boolean by FreezableVar(false) var irOnly: Boolean by FreezableVar(false)
@Argument( @Argument(
value = "-Xir-module-name", value = "-Xir-klib-module-name",
valueDescription = "<name>", valueDescription = "<name>",
description = "Specify a compilation module name for IR backend" description = "Specify a compilation module name for IR backend"
) )
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.cli.js package org.jetbrains.kotlin.cli.js
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
import org.jetbrains.kotlin.backend.common.CompilationException import org.jetbrains.kotlin.backend.common.CompilationException
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
@@ -48,14 +47,12 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
import org.jetbrains.kotlin.js.config.* import org.jetbrains.kotlin.js.config.*
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.utils.KotlinPaths import org.jetbrains.kotlin.utils.KotlinPaths
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull
import org.jetbrains.kotlin.utils.join import org.jetbrains.kotlin.utils.join
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
@@ -239,7 +236,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
if (!checkKotlinPackageUsage(environmentForJS.configuration, sourcesFiles)) return ExitCode.COMPILATION_ERROR if (!checkKotlinPackageUsage(environmentForJS.configuration, sourcesFiles)) return ExitCode.COMPILATION_ERROR
val outputDirPath = arguments.outputDir val outputDirPath = arguments.outputDir
val outputName = arguments.outputName val outputName = arguments.moduleName
if (outputDirPath == null) { if (outputDirPath == null) {
messageCollector.report(ERROR, "IR: Specify output dir via -Xir-output-dir", null) messageCollector.report(ERROR, "IR: Specify output dir via -Xir-output-dir", null)
return ExitCode.COMPILATION_ERROR return ExitCode.COMPILATION_ERROR
@@ -2,7 +2,6 @@ package org.jetbrains.kotlin.incremental
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
import org.jetbrains.kotlin.incremental.testingUtils.BuildLogFinder import org.jetbrains.kotlin.incremental.testingUtils.BuildLogFinder
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import java.io.File import java.io.File
abstract class AbstractIncrementalJsKlibCompilerRunnerTest : AbstractIncrementalJsCompilerRunnerTest() { abstract class AbstractIncrementalJsKlibCompilerRunnerTest : AbstractIncrementalJsCompilerRunnerTest() {
@@ -10,7 +9,7 @@ abstract class AbstractIncrementalJsKlibCompilerRunnerTest : AbstractIncremental
K2JSCompilerArguments().apply { K2JSCompilerArguments().apply {
libraries = "build/js-ir-runtime/full-runtime.klib" libraries = "build/js-ir-runtime/full-runtime.klib"
outputDir = destinationDir.path outputDir = destinationDir.path
outputName = testDir.name moduleName = testDir.name
outputFile = null outputFile = null
sourceMap = false sourceMap = false
irProduceKlibDir = false irProduceKlibDir = false
@@ -20,7 +20,7 @@ abstract class AbstractIncrementalMultiModuleJsKlibCompilerRunnerTest :
K2JSCompilerArguments().apply { K2JSCompilerArguments().apply {
libraries = STDLIB_DEPENDENCY libraries = STDLIB_DEPENDENCY
outputDir = destinationDir.path outputDir = destinationDir.path
outputName = testDir.name moduleName = testDir.name
sourceMap = false sourceMap = false
irProduceKlibDir = false irProduceKlibDir = false
irProduceKlibFile = true irProduceKlibFile = true
@@ -83,7 +83,7 @@ abstract class AbstractIncrementalMultiModuleJsKlibCompilerRunnerTest :
libraries = sb.toString() libraries = sb.toString()
outputDir = outFile.parentFile.path outputDir = outFile.parentFile.path
outputName = outFile.nameWithoutExtension moduleName = outFile.nameWithoutExtension
} }
companion object { companion object {
@@ -107,7 +107,7 @@ abstract class AbstractJsKlibLookupTrackerTest : AbstractJsLookupTrackerTest() {
args.irProduceKlibDir = true args.irProduceKlibDir = true
args.irOnly = true args.irOnly = true
args.outputDir = outDir.normalize().absolutePath args.outputDir = outDir.normalize().absolutePath
args.outputName = "out" args.moduleName = "out"
} }
} }
@@ -54,7 +54,7 @@ abstract class AbstractJsKlibBinaryCompatibilityTest : AbstractKlibBinaryCompati
freeArgs = createFiles(module.versionFiles(version)) freeArgs = createFiles(module.versionFiles(version))
libraries = module.dependenciesToLibrariesArg(version = version) libraries = module.dependenciesToLibrariesArg(version = version)
outputDir = workingDir.normalize().absolutePath outputDir = workingDir.normalize().absolutePath
outputName = module.name(version) moduleName = module.name(version)
irProduceKlibFile = true irProduceKlibFile = true
irOnly = true irOnly = true
irModuleName = module.name irModuleName = module.name
@@ -69,7 +69,7 @@ abstract class AbstractJsKlibBinaryCompatibilityTest : AbstractKlibBinaryCompati
freeArgs = createFiles(module.files) + runnerFunctionFile() freeArgs = createFiles(module.files) + runnerFunctionFile()
libraries = module.dependenciesToLibrariesArg(version = 2) libraries = module.dependenciesToLibrariesArg(version = 2)
outputDir = workingDir.normalize().absolutePath outputDir = workingDir.normalize().absolutePath
outputName = module.name moduleName = module.name
irProduceJs = true irProduceJs = true
irOnly = true irOnly = true
irModuleName = module.name irModuleName = module.name
@@ -37,6 +37,14 @@ interface CompilerJsOptions : org.jetbrains.kotlin.gradle.dsl.CompilerCommonOpti
@get:org.gradle.api.tasks.Input @get:org.gradle.api.tasks.Input
val moduleKind: org.gradle.api.provider.Property<org.jetbrains.kotlin.gradle.dsl.JsModuleKind> val moduleKind: org.gradle.api.provider.Property<org.jetbrains.kotlin.gradle.dsl.JsModuleKind>
/**
* Base name of generated files
* Default value: null
*/
@get:org.gradle.api.tasks.Optional
@get:org.gradle.api.tasks.Input
val moduleName: org.gradle.api.provider.Property<kotlin.String>
/** /**
* Don't automatically include the default Kotlin/JS stdlib into compilation dependencies * Don't automatically include the default Kotlin/JS stdlib into compilation dependencies
* Default value: true * Default value: true
@@ -48,12 +56,9 @@ interface CompilerJsOptions : org.jetbrains.kotlin.gradle.dsl.CompilerCommonOpti
* Destination *.js file for the compilation result * Destination *.js file for the compilation result
* Default value: null * Default value: null
*/ */
@Deprecated(message = "Use task 'outputFileProperty' to specify location", level = DeprecationLevel.WARNING) @Deprecated(message = "Only for legacy backend. For IR backend please use task.destinationDirectory and moduleName", level = DeprecationLevel.WARNING)
@get:org.gradle.api.tasks.Internal @get:org.gradle.api.tasks.Internal
val outputFile: org.gradle.api.provider.Property<kotlin.String?> val outputFile: org.gradle.api.provider.Property<kotlin.String>
@get:org.gradle.api.tasks.Input
val outputName: org.gradle.api.provider.Property<kotlin.String>
/** /**
* Generate source map * Generate source map
@@ -51,6 +51,14 @@ interface KotlinJsOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
get() = options.moduleKind.get().moduleKindKotlinOption get() = options.moduleKind.get().moduleKindKotlinOption
set(value) = options.moduleKind.set(value.moduleKindCompilerOption) set(value) = options.moduleKind.set(value.moduleKindCompilerOption)
/**
* Base name of generated files
* Default value: null
*/
var moduleName: kotlin.String?
get() = options.moduleName.orNull
set(value) = options.moduleName.set(value)
/** /**
* Don't automatically include the default Kotlin/JS stdlib into compilation dependencies * Don't automatically include the default Kotlin/JS stdlib into compilation dependencies
* Default value: true * Default value: true
@@ -21,11 +21,14 @@ internal abstract class CompilerJsOptionsDefault @javax.inject.Inject constructo
override val moduleKind: org.gradle.api.provider.Property<org.jetbrains.kotlin.gradle.dsl.JsModuleKind> = override val moduleKind: org.gradle.api.provider.Property<org.jetbrains.kotlin.gradle.dsl.JsModuleKind> =
objectFactory.property(org.jetbrains.kotlin.gradle.dsl.JsModuleKind::class.java).convention(org.jetbrains.kotlin.gradle.dsl.JsModuleKind.MODULE_PLAIN) objectFactory.property(org.jetbrains.kotlin.gradle.dsl.JsModuleKind::class.java).convention(org.jetbrains.kotlin.gradle.dsl.JsModuleKind.MODULE_PLAIN)
override val moduleName: org.gradle.api.provider.Property<kotlin.String> =
objectFactory.property(kotlin.String::class.java)
override val noStdlib: org.gradle.api.provider.Property<kotlin.Boolean> = override val noStdlib: org.gradle.api.provider.Property<kotlin.Boolean> =
objectFactory.property(kotlin.Boolean::class.java).convention(true) objectFactory.property(kotlin.Boolean::class.java).convention(true)
@Deprecated(message = "Use task 'outputFileProperty' to specify location", level = DeprecationLevel.WARNING) @Deprecated(message = "Only for legacy backend. For IR backend please use task.destinationDirectory and moduleName", level = DeprecationLevel.WARNING)
override val outputFile: org.gradle.api.provider.Property<kotlin.String?> = override val outputFile: org.gradle.api.provider.Property<kotlin.String> =
objectFactory.property(kotlin.String::class.java) objectFactory.property(kotlin.String::class.java)
override val sourceMap: org.gradle.api.provider.Property<kotlin.Boolean> = override val sourceMap: org.gradle.api.provider.Property<kotlin.Boolean> =
@@ -49,6 +52,7 @@ internal abstract class CompilerJsOptionsDefault @javax.inject.Inject constructo
args.main = main.get().mode args.main = main.get().mode
args.metaInfo = metaInfo.get() args.metaInfo = metaInfo.get()
args.moduleKind = moduleKind.get().kind args.moduleKind = moduleKind.get().kind
args.moduleName = moduleName.orNull
args.noStdlib = noStdlib.get() args.noStdlib = noStdlib.get()
args.outputFile = outputFile.orNull args.outputFile = outputFile.orNull
args.sourceMap = sourceMap.get() args.sourceMap = sourceMap.get()
@@ -64,6 +68,7 @@ internal abstract class CompilerJsOptionsDefault @javax.inject.Inject constructo
args.main = org.jetbrains.kotlin.gradle.dsl.JsMainFunctionExecutionMode.CALL.mode args.main = org.jetbrains.kotlin.gradle.dsl.JsMainFunctionExecutionMode.CALL.mode
args.metaInfo = true args.metaInfo = true
args.moduleKind = org.jetbrains.kotlin.gradle.dsl.JsModuleKind.MODULE_PLAIN.kind args.moduleKind = org.jetbrains.kotlin.gradle.dsl.JsModuleKind.MODULE_PLAIN.kind
args.moduleName = null
args.noStdlib = true args.noStdlib = true
args.outputFile = null args.outputFile = null
args.sourceMap = false args.sourceMap = false
@@ -22,7 +22,7 @@ internal const val PRODUCE_ZIPPED_KLIB = "-Xir-produce-klib-file"
internal const val MINIMIZED_MEMBER_NAMES = "-Xir-minimized-member-names" internal const val MINIMIZED_MEMBER_NAMES = "-Xir-minimized-member-names"
internal const val MODULE_NAME = "-Xir-module-name" internal const val KLIB_MODULE_NAME = "-Xir-klib-module-name"
internal const val PER_MODULE = "-Xir-per-module" internal const val PER_MODULE = "-Xir-per-module"
internal const val PER_MODULE_OUTPUT_NAME = "-Xir-per-module-output-name" internal const val PER_MODULE_OUTPUT_NAME = "-Xir-per-module-output-name"
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.gradle.targets.js.ir package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.file.RegularFile
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Copy import org.gradle.api.tasks.Copy
import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.language.base.plugins.LifecycleBasePlugin
@@ -207,7 +206,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
) { task -> ) { task ->
val entryFileProvider = binary.linkSyncTask.zip(binary.linkTask) { sync, link -> val entryFileProvider = binary.linkSyncTask.zip(binary.linkTask) { sync, link ->
sync.destinationDir sync.destinationDir
.resolve(link.compilerOptions.outputName.get() + ".js") .resolve(link.compilerOptions.moduleName.get() + ".js")
} }
task.description = "build webpack ${mode.name.toLowerCase()} bundle" task.description = "build webpack ${mode.name.toLowerCase()} bundle"
@@ -43,7 +43,7 @@ constructor(
val linkTask = binary.linkTask val linkTask = binary.linkTask
val compiledWasmFile = linkTask.map { link -> val compiledWasmFile = linkTask.map { link ->
link.destinationDirectory.asFile.get().resolve(link.compilerOptions.outputName.get() + ".wasm") link.destinationDirectory.asFile.get().resolve(link.compilerOptions.moduleName.get() + ".wasm")
} }
//TODO This is temporary solution that overrides compiled files that triggers recompile and reoptimize wasm every time (when binaryen is enabled) //TODO This is temporary solution that overrides compiled files that triggers recompile and reoptimize wasm every time (when binaryen is enabled)
@@ -136,7 +136,7 @@ abstract class KotlinJsIrSubTarget(
else -> error("Only JS and WASM supported for KotlinJsTest") else -> error("Only JS and WASM supported for KotlinJsTest")
} }
binary.linkTask binary.linkTask
.flatMap { linkTask -> linkTask.compilerOptions.outputName } .flatMap { linkTask -> linkTask.compilerOptions.moduleName }
.map { outputName -> .map { outputName ->
copyTask.destinationDir copyTask.destinationDir
.resolve(outputName + extension) .resolve(outputName + extension)
@@ -1011,10 +1011,10 @@ abstract class Kotlin2JsCompile @Inject constructor(
if (outputFilePath != null) { if (outputFilePath != null) {
val outputFile = File(outputFilePath) val outputFile = File(outputFilePath)
args.outputDir = (if (outputFile.extension == "") outputFile else outputFile.parentFile).normalize().absolutePath args.outputDir = (if (outputFile.extension == "") outputFile else outputFile.parentFile).normalize().absolutePath
args.outputName = outputFile.nameWithoutExtension args.moduleName = outputFile.nameWithoutExtension
} else { } else {
args.outputDir = destinationDirectory.get().asFile.normalize().absolutePath args.outputDir = destinationDirectory.get().asFile.normalize().absolutePath
args.outputName = compilerOptions.outputName.get() args.moduleName = compilerOptions.moduleName.get()
} }
} else { } else {
args.outputFile = outputFileProperty.get().absoluteFile.normalize().absolutePath args.outputFile = outputFileProperty.get().absoluteFile.normalize().absolutePath
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.gradle.tasks.configuration package org.jetbrains.kotlin.gradle.tasks.configuration
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.isMainCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.isMainCompilationData
import org.jetbrains.kotlin.gradle.targets.js.ir.* import org.jetbrains.kotlin.gradle.targets.js.ir.*
@@ -14,7 +13,6 @@ import org.jetbrains.kotlin.gradle.targets.js.ir.PRODUCE_UNZIPPED_KLIB
import org.jetbrains.kotlin.gradle.targets.js.ir.PRODUCE_ZIPPED_KLIB import org.jetbrains.kotlin.gradle.targets.js.ir.PRODUCE_ZIPPED_KLIB
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.jetbrains.kotlin.gradle.utils.klibModuleName import org.jetbrains.kotlin.gradle.utils.klibModuleName
import java.io.File
internal typealias Kotlin2JsCompileConfig = BaseKotlin2JsCompileConfig<Kotlin2JsCompile> internal typealias Kotlin2JsCompileConfig = BaseKotlin2JsCompileConfig<Kotlin2JsCompile>
@@ -34,14 +32,14 @@ internal open class BaseKotlin2JsCompileConfig<TASK : Kotlin2JsCompile>(
configureAdditionalFreeCompilerArguments(task, compilation) configureAdditionalFreeCompilerArguments(task, compilation)
task.compilerOptions.outputName.convention( task.compilerOptions.moduleName.convention(
compilation.ownModuleName compilation.ownModuleName
) )
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
task.outputFileProperty.value( task.outputFileProperty.value(
task.destinationDirectory.flatMap { dir -> task.destinationDirectory.flatMap { dir ->
task.compilerOptions.outputName.map { name -> task.compilerOptions.moduleName.map { name ->
dir.file(name).asFile dir.file(name).asFile
} }
} }
@@ -84,7 +82,7 @@ internal open class BaseKotlin2JsCompileConfig<TASK : Kotlin2JsCompile>(
} else { } else {
"${project.name}_${compilation.compilationPurpose}" "${project.name}_${compilation.compilationPurpose}"
} }
add("$MODULE_NAME=${project.klibModuleName(baseName)}") add("$KLIB_MODULE_NAME=${project.klibModuleName(baseName)}")
} }
} }
} }
@@ -43,7 +43,7 @@ internal open class KotlinJsIrLinkConfig(
.map { it.dir(binary.name) } .map { it.dir(binary.name) }
.map { it.dir(NpmProject.DIST_FOLDER) } .map { it.dir(NpmProject.DIST_FOLDER) }
) )
task.compilerOptions.outputName.convention(project.provider { compilation.npmProject.name }) task.compilerOptions.moduleName.convention(project.provider { compilation.npmProject.name })
} }
} }