diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/compilation/TestCompilation.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/compilation/TestCompilation.kt
index b05c2b43005..e2fea061b74 100644
--- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/compilation/TestCompilation.kt
+++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/compilation/TestCompilation.kt
@@ -45,11 +45,13 @@ internal abstract class BasicCompilation(
private val compilerOutputInterceptor: CompilerOutputInterceptor,
protected val freeCompilerArgs: TestCompilerArgs,
protected val compilerPlugins: CompilerPlugins,
+ protected val cacheMode: CacheMode,
protected val dependencies: CategorizedDependencies,
protected val expectedArtifact: A
) : TestCompilation() {
protected abstract val sourceModules: Collection
protected abstract val binaryOptions: Map
+ protected open val tryPassSystemCacheDirectory: Boolean = true
// Runs the compiler and memorizes the result on property access.
final override val result: TestCompilationResult by lazy {
@@ -75,7 +77,25 @@ internal abstract class BasicCompilation(
}
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() {
when (this@BasicCompilation) {
@@ -174,7 +194,7 @@ internal abstract class SourceBasedCompilation(
private val gcScheduler: GCScheduler,
private val allocator: Allocator,
private val pipelineType: PipelineType,
- private val cacheMode: CacheMode,
+ cacheMode: CacheMode,
freeCompilerArgs: TestCompilerArgs,
compilerPlugins: CompilerPlugins,
override val sourceModules: Collection,
@@ -188,6 +208,7 @@ internal abstract class SourceBasedCompilation(
compilerOutputInterceptor = compilerOutputInterceptor,
freeCompilerArgs = freeCompilerArgs,
compilerPlugins = compilerPlugins,
+ cacheMode = cacheMode,
dependencies = dependencies,
expectedArtifact = expectedArtifact
) {
@@ -206,9 +227,7 @@ internal abstract class SourceBasedCompilation(
add("-friend-modules", friends.joinToString(File.pathSeparator) { friend -> friend.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
- cacheMode.staticCacheForDistributionLibrariesRootDir
- ?.let { cacheRootDir -> add("-Xcache-directory=$cacheRootDir") }
+ super.applyDependencies(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 args = swiftExtraOpts + sources.map { it.absolutePath } + listOf(
"-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", buildDir.absolutePath,
"-F", buildDir.absolutePath,
@@ -476,7 +496,7 @@ internal class ExecutableCompilation(
private val extras: Extras,
dependencies: Iterable>,
expectedArtifact: Executable,
- val tryPassSystemCacheDirectory: Boolean = true,
+ override val tryPassSystemCacheDirectory: Boolean = true,
) : SourceBasedCompilation(
targets = settings.get(),
home = settings.get(),
@@ -496,7 +516,6 @@ internal class ExecutableCompilation(
dependencies = CategorizedDependencies(dependencies),
expectedArtifact = expectedArtifact
) {
- private val cacheMode: CacheMode = settings.get()
override val binaryOptions = BinaryOptions.RuntimeAssertionsMode.chooseFor(cacheMode, optimizationMode, freeCompilerArgs.assertionsMode)
private val partialLinkageConfig: UsedPartialLinkageConfig = settings.get()
@@ -532,10 +551,6 @@ internal class ExecutableCompilation(
override fun applyDependencies(argsBuilder: ArgsBuilder): Unit = with(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() {
@@ -593,6 +608,7 @@ internal class StaticCacheCompilation(
compilerOutputInterceptor = settings.get(),
freeCompilerArgs = freeCompilerArgs,
compilerPlugins = settings.get(),
+ cacheMode = settings.get(),
dependencies = CategorizedDependencies(dependencies),
expectedArtifact = expectedArtifact
) {
@@ -604,11 +620,6 @@ internal class StaticCacheCompilation(
override val sourceModules get() = emptyList()
override val binaryOptions get() = BinaryOptions.RuntimeAssertionsMode.forUseWithCache
- private val cacheRootDir: File = run {
- val cacheMode = settings.get()
- cacheMode.staticCacheForDistributionLibrariesRootDir ?: fail { "No cache root directory found for cache mode $cacheMode" }
- }
-
private val makePerFileCache: Boolean = makePerFileCacheOverride ?: settings.get().makePerFileCaches
private val partialLinkageConfig: UsedPartialLinkageConfig = settings.get()
@@ -630,7 +641,6 @@ internal class StaticCacheCompilation(
add(
"-Xadd-cache=${dependencies.libraryToCache.path}",
"-Xcache-directory=${expectedArtifact.cacheDir.path}",
- "-Xcache-directory=$cacheRootDir"
)
if (makePerFileCache)
add("-Xmake-per-file-cache")
@@ -644,7 +654,7 @@ internal class StaticCacheCompilation(
add("-friend-modules", friends.joinToString(File.pathSeparator) { friend -> friend.path })
}
addFlattened(dependencies.cachedLibraries) { (_, library) -> listOf("-l", library.path) }
- add(dependencies.uniqueCacheDirs) { libraryCacheDir -> "-Xcache-directory=${libraryCacheDir.path}" }
+ super.applyDependencies(argsBuilder)
}
override fun postCompileCheck() {