[K/N][Tests] Move "-Xcache-directory" flag generation to BasicCompilation

^KT-61259
This commit is contained in:
Vladimir Sukharev
2024-01-31 14:03:23 +01:00
committed by Space Team
parent 8ce8441409
commit c72443e4be
@@ -45,11 +45,13 @@ internal abstract class BasicCompilation<A : TestCompilationArtifact>(
private val compilerOutputInterceptor: CompilerOutputInterceptor, private val compilerOutputInterceptor: CompilerOutputInterceptor,
protected val freeCompilerArgs: TestCompilerArgs, protected val freeCompilerArgs: TestCompilerArgs,
protected val compilerPlugins: CompilerPlugins, protected val compilerPlugins: CompilerPlugins,
protected val cacheMode: CacheMode,
protected val dependencies: CategorizedDependencies, protected val dependencies: CategorizedDependencies,
protected val expectedArtifact: A protected val expectedArtifact: A
) : TestCompilation<A>() { ) : TestCompilation<A>() {
protected abstract val sourceModules: Collection<TestModule> protected abstract val sourceModules: Collection<TestModule>
protected abstract val binaryOptions: Map<String, String> protected abstract val binaryOptions: Map<String, String>
protected open val tryPassSystemCacheDirectory: Boolean = true
// Runs the compiler and memorizes the result on property access. // Runs the compiler and memorizes the result on property access.
final override val result: TestCompilationResult<out A> by lazy { final override val result: TestCompilationResult<out A> by lazy {
@@ -75,7 +77,25 @@ internal abstract class BasicCompilation<A : TestCompilationArtifact>(
} }
protected abstract fun applySpecificArgs(argsBuilder: ArgsBuilder) protected abstract fun applySpecificArgs(argsBuilder: ArgsBuilder)
protected abstract fun applyDependencies(argsBuilder: ArgsBuilder) protected open fun applyDependencies(argsBuilder: ArgsBuilder) = with(argsBuilder) {
if (this@BasicCompilation !is LibraryCompilation) {
// To use static caches, `-Xcache-directory=` option must be provided for backend, similar to ``
// This is so-known 2nd compilation stage, which can also be a result of a split, which happens in driver.
// (The split: "source to binary" is splitted to "source to klib"+"klib to binary" )
// Now three subclasses of SourceBasedCompilation use backend, and need the option,
// but not LibraryCompilation(which uses only frontend, thus can be used only as 1st compilation stage).
// For LibraryCompilation any backend-related options are useless.
// All this would "soon" change, when 1-stage testing would be stopped, and SourceBasedCompilation would have only one subclass:
// LibraryCompilation. Three others (Executable, ObjCFramework, BinaryLibrary) would go to separate hierarchy: KLibBasedCompilation.
if (tryPassSystemCacheDirectory) {
add("-Xcache-directory=${
cacheMode.staticCacheForDistributionLibrariesRootDir?.absolutePath
?: fail { "No cache root directory found for cache mode $cacheMode" }
}")
}
add(dependencies.uniqueCacheDirs) { libraryCacheDir -> "-Xcache-directory=${libraryCacheDir.path}" }
}
}
private fun ArgsBuilder.applyFreeArgs() { private fun ArgsBuilder.applyFreeArgs() {
when (this@BasicCompilation) { when (this@BasicCompilation) {
@@ -174,7 +194,7 @@ internal abstract class SourceBasedCompilation<A : TestCompilationArtifact>(
private val gcScheduler: GCScheduler, private val gcScheduler: GCScheduler,
private val allocator: Allocator, private val allocator: Allocator,
private val pipelineType: PipelineType, private val pipelineType: PipelineType,
private val cacheMode: CacheMode, cacheMode: CacheMode,
freeCompilerArgs: TestCompilerArgs, freeCompilerArgs: TestCompilerArgs,
compilerPlugins: CompilerPlugins, compilerPlugins: CompilerPlugins,
override val sourceModules: Collection<TestModule>, override val sourceModules: Collection<TestModule>,
@@ -188,6 +208,7 @@ internal abstract class SourceBasedCompilation<A : TestCompilationArtifact>(
compilerOutputInterceptor = compilerOutputInterceptor, compilerOutputInterceptor = compilerOutputInterceptor,
freeCompilerArgs = freeCompilerArgs, freeCompilerArgs = freeCompilerArgs,
compilerPlugins = compilerPlugins, compilerPlugins = compilerPlugins,
cacheMode = cacheMode,
dependencies = dependencies, dependencies = dependencies,
expectedArtifact = expectedArtifact expectedArtifact = expectedArtifact
) { ) {
@@ -206,9 +227,7 @@ internal abstract class SourceBasedCompilation<A : TestCompilationArtifact>(
add("-friend-modules", friends.joinToString(File.pathSeparator) { friend -> friend.path }) add("-friend-modules", friends.joinToString(File.pathSeparator) { friend -> friend.path })
} }
add(dependencies.includedLibraries) { include -> "-Xinclude=${include.path}" } add(dependencies.includedLibraries) { include -> "-Xinclude=${include.path}" }
// static caches of distlibs should be used, like in old testinfra. Relates to KT-65289 for ObjC frameworks super.applyDependencies(argsBuilder)
cacheMode.staticCacheForDistributionLibrariesRootDir
?.let { cacheRootDir -> add("-Xcache-directory=$cacheRootDir") }
} }
private fun applyK2MPPArgs(argsBuilder: ArgsBuilder): Unit = with(argsBuilder) { private fun applyK2MPPArgs(argsBuilder: ArgsBuilder): Unit = with(argsBuilder) {
@@ -431,7 +450,8 @@ internal class SwiftCompilation(
val swiftTarget = configs.targetTriple.withOSVersion(configs.osVersionMin).toString() val swiftTarget = configs.targetTriple.withOSVersion(configs.osVersionMin).toString()
val args = swiftExtraOpts + sources.map { it.absolutePath } + listOf( val args = swiftExtraOpts + sources.map { it.absolutePath } + listOf(
"-sdk", configs.absoluteTargetSysRoot, "-target", swiftTarget, "-sdk", configs.absoluteTargetSysRoot, "-target", swiftTarget,
"-g", "-o", expectedArtifact.executableFile.absolutePath, "-o", expectedArtifact.executableFile.absolutePath,
"-g", // TODO https://youtrack.jetbrains.com/issue/KT-65436/K-N-ObjCExport-tests-use-various-optimization-flags-for-swiftc
"-Xlinker", "-rpath", "-Xlinker", "@executable_path/Frameworks", "-Xlinker", "-rpath", "-Xlinker", "@executable_path/Frameworks",
"-Xlinker", "-rpath", "-Xlinker", buildDir.absolutePath, "-Xlinker", "-rpath", "-Xlinker", buildDir.absolutePath,
"-F", buildDir.absolutePath, "-F", buildDir.absolutePath,
@@ -476,7 +496,7 @@ internal class ExecutableCompilation(
private val extras: Extras, private val extras: Extras,
dependencies: Iterable<TestCompilationDependency<*>>, dependencies: Iterable<TestCompilationDependency<*>>,
expectedArtifact: Executable, expectedArtifact: Executable,
val tryPassSystemCacheDirectory: Boolean = true, override val tryPassSystemCacheDirectory: Boolean = true,
) : SourceBasedCompilation<Executable>( ) : SourceBasedCompilation<Executable>(
targets = settings.get(), targets = settings.get(),
home = settings.get(), home = settings.get(),
@@ -496,7 +516,6 @@ internal class ExecutableCompilation(
dependencies = CategorizedDependencies(dependencies), dependencies = CategorizedDependencies(dependencies),
expectedArtifact = expectedArtifact expectedArtifact = expectedArtifact
) { ) {
private val cacheMode: CacheMode = settings.get()
override val binaryOptions = BinaryOptions.RuntimeAssertionsMode.chooseFor(cacheMode, optimizationMode, freeCompilerArgs.assertionsMode) override val binaryOptions = BinaryOptions.RuntimeAssertionsMode.chooseFor(cacheMode, optimizationMode, freeCompilerArgs.assertionsMode)
private val partialLinkageConfig: UsedPartialLinkageConfig = settings.get() private val partialLinkageConfig: UsedPartialLinkageConfig = settings.get()
@@ -532,10 +551,6 @@ internal class ExecutableCompilation(
override fun applyDependencies(argsBuilder: ArgsBuilder): Unit = with(argsBuilder) { override fun applyDependencies(argsBuilder: ArgsBuilder): Unit = with(argsBuilder) {
super.applyDependencies(argsBuilder) super.applyDependencies(argsBuilder)
cacheMode.staticCacheForDistributionLibrariesRootDir
?.takeIf { tryPassSystemCacheDirectory }
?.let { cacheRootDir -> add("-Xcache-directory=$cacheRootDir") }
add(dependencies.uniqueCacheDirs) { libraryCacheDir -> "-Xcache-directory=${libraryCacheDir.path}" }
} }
override fun postCompileCheck() { override fun postCompileCheck() {
@@ -593,6 +608,7 @@ internal class StaticCacheCompilation(
compilerOutputInterceptor = settings.get(), compilerOutputInterceptor = settings.get(),
freeCompilerArgs = freeCompilerArgs, freeCompilerArgs = freeCompilerArgs,
compilerPlugins = settings.get(), compilerPlugins = settings.get(),
cacheMode = settings.get(),
dependencies = CategorizedDependencies(dependencies), dependencies = CategorizedDependencies(dependencies),
expectedArtifact = expectedArtifact expectedArtifact = expectedArtifact
) { ) {
@@ -604,11 +620,6 @@ internal class StaticCacheCompilation(
override val sourceModules get() = emptyList<TestModule>() override val sourceModules get() = emptyList<TestModule>()
override val binaryOptions get() = BinaryOptions.RuntimeAssertionsMode.forUseWithCache override val binaryOptions get() = BinaryOptions.RuntimeAssertionsMode.forUseWithCache
private val cacheRootDir: File = run {
val cacheMode = settings.get<CacheMode>()
cacheMode.staticCacheForDistributionLibrariesRootDir ?: fail { "No cache root directory found for cache mode $cacheMode" }
}
private val makePerFileCache: Boolean = makePerFileCacheOverride ?: settings.get<CacheMode>().makePerFileCaches private val makePerFileCache: Boolean = makePerFileCacheOverride ?: settings.get<CacheMode>().makePerFileCaches
private val partialLinkageConfig: UsedPartialLinkageConfig = settings.get() private val partialLinkageConfig: UsedPartialLinkageConfig = settings.get()
@@ -630,7 +641,6 @@ internal class StaticCacheCompilation(
add( add(
"-Xadd-cache=${dependencies.libraryToCache.path}", "-Xadd-cache=${dependencies.libraryToCache.path}",
"-Xcache-directory=${expectedArtifact.cacheDir.path}", "-Xcache-directory=${expectedArtifact.cacheDir.path}",
"-Xcache-directory=$cacheRootDir"
) )
if (makePerFileCache) if (makePerFileCache)
add("-Xmake-per-file-cache") add("-Xmake-per-file-cache")
@@ -644,7 +654,7 @@ internal class StaticCacheCompilation(
add("-friend-modules", friends.joinToString(File.pathSeparator) { friend -> friend.path }) add("-friend-modules", friends.joinToString(File.pathSeparator) { friend -> friend.path })
} }
addFlattened(dependencies.cachedLibraries) { (_, library) -> listOf("-l", library.path) } addFlattened(dependencies.cachedLibraries) { (_, library) -> listOf("-l", library.path) }
add(dependencies.uniqueCacheDirs) { libraryCacheDir -> "-Xcache-directory=${libraryCacheDir.path}" } super.applyDependencies(argsBuilder)
} }
override fun postCompileCheck() { override fun postCompileCheck() {