From b9fc97b44f938637015530f59fd6678837851d06 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 23 Apr 2021 12:45:01 +0300 Subject: [PATCH] [Gradle, JS] Add arguments for building caches --- .../common/arguments/K2JSCompilerArguments.kt | 10 ++++++ compiler/testData/cli/js/jsExtraHelp.out | 2 ++ .../gradle/targets/js/ir/KotlinJsIrLink.kt | 32 +++++++------------ 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt index e86f9447da9..aaa8fcb277d 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt @@ -161,6 +161,16 @@ class K2JSCompilerArguments : CommonCompilerArguments() { ) var includes: String? by NullableStringFreezableVar(null) + @Argument( + value = "-Xcache-directories", + valueDescription = "", + description = "A path to cache directories" + ) + var cacheDirectories: String? by NullableStringFreezableVar(null) + + @Argument(value = "-Xir-build-cache", description = "Use compiler to build cache") + var irBuildCache: Boolean by FreezableVar(false) + @Argument( value = "-Xgenerate-dts", description = "Generate TypeScript declarations .d.ts file alongside JS file. Available in IR backend only." diff --git a/compiler/testData/cli/js/jsExtraHelp.out b/compiler/testData/cli/js/jsExtraHelp.out index b67972707fb..323f31aadbc 100644 --- a/compiler/testData/cli/js/jsExtraHelp.out +++ b/compiler/testData/cli/js/jsExtraHelp.out @@ -1,5 +1,6 @@ Usage: kotlinc-js where advanced options include: + -Xcache-directories= A path to cache directories -Xenable-js-scripting Enable experimental support of .kts files using K/JS (with -Xir only) -Xerror-tolerance-policy Set up error tolerance policy (NONE, SEMANTIC, SYNTAX, ALL) -Xfake-override-validator Enable IR fake override validator @@ -7,6 +8,7 @@ where advanced options include: -Xfriend-modules-disabled Disable internal declaration export -Xgenerate-dts Generate TypeScript declarations .d.ts file alongside JS file. Available in IR backend only. -Xinclude= A path to an intermediate library that should be processed in the same manner as source files. + -Xir-build-cache Use compiler to build cache -Xir-dce Perform experimental dead code elimination -Xir-dce-driven Perform a more experimental faster dead code elimination -Xir-dce-print-reachability-info diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt index 4b7ab471250..89280f9c763 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt @@ -112,11 +112,9 @@ abstract class KotlinJsIrLink @Inject constructor( allCacheDirectories ) - args.freeArgs += "-Xcache-directory=${ - cacheArgs.joinToString(File.pathSeparator) { - it.normalize().absolutePath - } - }" + args.cacheDirectories = cacheArgs.joinToString(File.pathSeparator) { + it.normalize().absolutePath + } } super.callCompilerAsync(args, sourceRoots, changedFiles) } @@ -235,10 +233,7 @@ internal class CacheBuilder( visitedFiles, compileClasspath.files, cacheDirectory, - (allCacheDirectories + associatedCaches).distinct(), - - - file.name + (allCacheDirectories + associatedCaches).distinct() ) allCacheDirectories.add(cacheDirectory) } @@ -278,9 +273,7 @@ internal class CacheBuilder( .flatMap { it.moduleArtifacts } .map { it.file }, cacheDirectory, - dependenciesCacheDirectories, - - library.name + dependenciesCacheDirectories ) } } @@ -290,10 +283,7 @@ internal class CacheBuilder( visitedFiles: MutableSet, dependencies: Collection, cacheDirectory: File, - dependenciesCacheDirectories: Collection, - - - jsName: String + dependenciesCacheDirectories: Collection ) { if (file in visitedFiles) return val compilerArgs = compilerArgsFactory() @@ -307,11 +297,11 @@ internal class CacheBuilder( visitedFiles.add(file) compilerArgs.includes = file.normalize().absolutePath - compilerArgs.outputFile = cacheDirectory.resolve("${jsName}.js").normalize().absolutePath - compilerArgs.freeArgs += "-Xcache-directory=${dependenciesCacheDirectories.joinToString(File.pathSeparator)}" - - // Change it for produce caches - compilerArgs.irProduceJs = true + compilerArgs.outputFile = cacheDirectory.normalize().absolutePath + if (dependenciesCacheDirectories.isNotEmpty()) { + compilerArgs.cacheDirectories = dependenciesCacheDirectories.joinToString(File.pathSeparator) + } + compilerArgs.irBuildCache = true compilerArgs.libraries = dependencies .filter { it.exists() && libraryFilter(it) }