[Gradle, JS] Use associated compilation's caches
This commit is contained in:
+44
-17
@@ -102,12 +102,21 @@ abstract class KotlinJsIrLink @Inject constructor(
|
|||||||
val visitedDependencies = mutableSetOf<ResolvedDependency>()
|
val visitedDependencies = mutableSetOf<ResolvedDependency>()
|
||||||
val visitedFiles = mutableSetOf<File>()
|
val visitedFiles = mutableSetOf<File>()
|
||||||
val visitedCompilations = mutableSetOf<KotlinCompilation<*>>()
|
val visitedCompilations = mutableSetOf<KotlinCompilation<*>>()
|
||||||
|
val allCacheDirectories = mutableSetOf<File>()
|
||||||
|
|
||||||
val cacheArgs = visitAssociated(compilation, visitedDependencies, visitedFiles, visitedCompilations).distinct()
|
val cacheArgs = visitAssociated(
|
||||||
|
compilation,
|
||||||
|
visitedDependencies,
|
||||||
|
visitedFiles,
|
||||||
|
visitedCompilations,
|
||||||
|
allCacheDirectories
|
||||||
|
)
|
||||||
|
|
||||||
args.freeArgs += "-Xcache-directory=${cacheArgs.joinToString(File.pathSeparator) {
|
args.freeArgs += "-Xcache-directory=${
|
||||||
it.normalize().absolutePath
|
cacheArgs.joinToString(File.pathSeparator) {
|
||||||
}}"
|
it.normalize().absolutePath
|
||||||
|
}
|
||||||
|
}"
|
||||||
}
|
}
|
||||||
super.callCompilerAsync(args, sourceRoots, changedFiles)
|
super.callCompilerAsync(args, sourceRoots, changedFiles)
|
||||||
}
|
}
|
||||||
@@ -116,13 +125,22 @@ abstract class KotlinJsIrLink @Inject constructor(
|
|||||||
associated: KotlinCompilation<*>,
|
associated: KotlinCompilation<*>,
|
||||||
visitedDependencies: MutableSet<ResolvedDependency>,
|
visitedDependencies: MutableSet<ResolvedDependency>,
|
||||||
visitedFiles: MutableSet<File>,
|
visitedFiles: MutableSet<File>,
|
||||||
visitedCompilations: MutableSet<KotlinCompilation<*>>
|
visitedCompilations: MutableSet<KotlinCompilation<*>>,
|
||||||
|
visitedCacheDirectories: MutableSet<File>
|
||||||
): List<File> {
|
): List<File> {
|
||||||
if (associated in visitedCompilations) return emptyList()
|
if (associated in visitedCompilations) return emptyList()
|
||||||
visitedCompilations.add(associated)
|
visitedCompilations.add(associated)
|
||||||
|
|
||||||
val prevRes = associated.associateWith
|
val prevRes = associated.associateWith
|
||||||
.flatMap { visitAssociated(it, visitedDependencies, visitedFiles, visitedCompilations) }
|
.flatMap { compilation ->
|
||||||
|
visitAssociated(
|
||||||
|
compilation,
|
||||||
|
visitedDependencies,
|
||||||
|
visitedFiles,
|
||||||
|
visitedCompilations,
|
||||||
|
visitedCacheDirectories
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return prevRes + CacheBuilder(
|
return prevRes + CacheBuilder(
|
||||||
buildDir,
|
buildDir,
|
||||||
@@ -137,8 +155,12 @@ abstract class KotlinJsIrLink @Inject constructor(
|
|||||||
objects.fileCollection(),
|
objects.fileCollection(),
|
||||||
reportingSettings,
|
reportingSettings,
|
||||||
visitedDependencies,
|
visitedDependencies,
|
||||||
visitedFiles
|
visitedFiles,
|
||||||
).buildCompilerArgs()
|
prevRes
|
||||||
|
)
|
||||||
|
.buildCompilerArgs()
|
||||||
|
.filter { it !in visitedCacheDirectories }
|
||||||
|
.also { visitedCacheDirectories.addAll(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupCompilerArgs(args: K2JSCompilerArguments, defaultsOnly: Boolean, ignoreClasspathResolutionErrors: Boolean) {
|
override fun setupCompilerArgs(args: K2JSCompilerArguments, defaultsOnly: Boolean, ignoreClasspathResolutionErrors: Boolean) {
|
||||||
@@ -173,8 +195,8 @@ internal class CacheBuilder(
|
|||||||
private val outputFiles: FileCollection,
|
private val outputFiles: FileCollection,
|
||||||
private val reportingSettings: ReportingSettings,
|
private val reportingSettings: ReportingSettings,
|
||||||
private val visitedDependencies: MutableSet<ResolvedDependency>,
|
private val visitedDependencies: MutableSet<ResolvedDependency>,
|
||||||
private val visitedFiles: MutableSet<File>
|
private val visitedFiles: MutableSet<File>,
|
||||||
|
private val associatedCaches: List<File>
|
||||||
) {
|
) {
|
||||||
val rootCacheDirectory by lazy {
|
val rootCacheDirectory by lazy {
|
||||||
buildDir.resolve("klib/cache")
|
buildDir.resolve("klib/cache")
|
||||||
@@ -183,6 +205,7 @@ internal class CacheBuilder(
|
|||||||
fun buildCompilerArgs(): List<File> {
|
fun buildCompilerArgs(): List<File> {
|
||||||
|
|
||||||
val allCacheDirectories = mutableListOf<File>()
|
val allCacheDirectories = mutableListOf<File>()
|
||||||
|
val visitedDependenciesForCache = mutableSetOf<ResolvedDependency>()
|
||||||
|
|
||||||
compileClasspath.resolvedConfiguration.firstLevelModuleDependencies
|
compileClasspath.resolvedConfiguration.firstLevelModuleDependencies
|
||||||
.forEach { dependency ->
|
.forEach { dependency ->
|
||||||
@@ -191,13 +214,17 @@ internal class CacheBuilder(
|
|||||||
visitedDependencies,
|
visitedDependencies,
|
||||||
visitedFiles
|
visitedFiles
|
||||||
)
|
)
|
||||||
(listOf(dependency) + getAllDependencies(dependency))
|
if (dependency !in visitedDependenciesForCache) {
|
||||||
.forEach {
|
(listOf(dependency) + getAllDependencies(dependency))
|
||||||
val cacheDirectory = getCacheDirectory(rootCacheDirectory, it)
|
.filter { it !in visitedDependenciesForCache }
|
||||||
if (cacheDirectory.exists()) {
|
.forEach { dependencyForCache ->
|
||||||
allCacheDirectories.add(cacheDirectory)
|
visitedDependenciesForCache.add(dependencyForCache)
|
||||||
|
val cacheDirectory = getCacheDirectory(rootCacheDirectory, dependencyForCache)
|
||||||
|
if (cacheDirectory.exists()) {
|
||||||
|
allCacheDirectories.add(cacheDirectory)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
additionalForResolve?.files?.forEach { file ->
|
additionalForResolve?.files?.forEach { file ->
|
||||||
@@ -208,7 +235,7 @@ internal class CacheBuilder(
|
|||||||
visitedFiles,
|
visitedFiles,
|
||||||
compileClasspath.files,
|
compileClasspath.files,
|
||||||
cacheDirectory,
|
cacheDirectory,
|
||||||
allCacheDirectories,
|
(allCacheDirectories + associatedCaches).distinct(),
|
||||||
|
|
||||||
|
|
||||||
file.name
|
file.name
|
||||||
|
|||||||
Reference in New Issue
Block a user