[Gradle, JS] Add arguments for building caches

This commit is contained in:
Ilya Goncharov
2021-04-23 12:45:01 +03:00
parent c23376f040
commit b9fc97b44f
3 changed files with 23 additions and 21 deletions
@@ -161,6 +161,16 @@ class K2JSCompilerArguments : CommonCompilerArguments() {
)
var includes: String? by NullableStringFreezableVar(null)
@Argument(
value = "-Xcache-directories",
valueDescription = "<path>",
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."
+2
View File
@@ -1,5 +1,6 @@
Usage: kotlinc-js <options> <source files>
where advanced options include:
-Xcache-directories=<path> 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=<path> 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
@@ -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<File>,
dependencies: Collection<File>,
cacheDirectory: File,
dependenciesCacheDirectories: Collection<File>,
jsName: String
dependenciesCacheDirectories: Collection<File>
) {
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) }