diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/CachesAutoBuildTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/CachesAutoBuildTest.kt index de46d67ac60..33c7d3b0424 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/CachesAutoBuildTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/CachesAutoBuildTest.kt @@ -31,7 +31,7 @@ class CachesAutoBuildTest : AbstractNativeSimpleTest() { fun testSimple() { val rootDir = File("$TEST_SUITE_PATH/simple") val lib = compileToLibrary(rootDir.resolve("lib"), buildDir) - val main = compileToExecutable(rootDir.resolve("main"), autoCacheFrom = buildDir, lib) + val main = compileToExecutable(rootDir.resolve("main"), autoCacheFrom = buildDir, emptyList(), lib) assertTrue(main.executableFile.exists()) assertTrue(autoCacheDir.resolve(cacheFlavor).resolve("lib").exists()) @@ -43,21 +43,41 @@ class CachesAutoBuildTest : AbstractNativeSimpleTest() { val rootDir = File("$TEST_SUITE_PATH/dontCacheUserLib") val externalLib = compileToLibrary(rootDir.resolve("externalLib"), buildDir.resolve("external")) val userLib = compileToLibrary(rootDir.resolve("userLib"), buildDir.resolve("user"), externalLib) - val main = compileToExecutable(rootDir.resolve("main"), autoCacheFrom = buildDir.resolve("external"), externalLib, userLib) + val main = compileToExecutable( + rootDir.resolve("main"), + autoCacheFrom = buildDir.resolve("external"), emptyList(), + externalLib, userLib + ) assertTrue(main.executableFile.exists()) assertTrue(autoCacheDir.resolve(cacheFlavor).resolve("externalLib").exists()) assertFalse(autoCacheDir.resolve(cacheFlavor).resolve("userLib").exists()) } - private fun compileToExecutable(sourcesDir: File, autoCacheFrom: File, vararg dependencies: KLIB) = + @Test + @TestMetadata("cacheDirPrioritizesOverAutoCacheDir") + fun testCacheDirPrioritizesOverAutoCacheDir() { + val rootDir = File("$TEST_SUITE_PATH/simple") + val lib = compileToLibrary(rootDir.resolve("lib"), buildDir) + val cacheDir = buildDir.resolve("lib_cache") + cacheDir.mkdirs() + compileToStaticCache(lib, cacheDir) + val makePerFileCache = testRunSettings.get().makePerFileCaches + assertTrue(cacheDir.resolve("lib-${if (makePerFileCache) "per-file-cache" else "cache"}").exists()) + val main = compileToExecutable(rootDir.resolve("main"), autoCacheFrom = buildDir, listOf(cacheDir), lib) + + assertTrue(main.executableFile.exists()) + assertFalse(autoCacheDir.resolve(cacheFlavor).resolve("lib").exists()) + } + + private fun compileToExecutable(sourcesDir: File, autoCacheFrom: File, cacheDirectories: List, vararg dependencies: KLIB) = compileToExecutable( sourcesDir, freeCompilerArgs = TestCompilerArgs( listOf( "-Xauto-cache-from=${autoCacheFrom.absolutePath}", "-Xauto-cache-dir=${autoCacheDir.absolutePath}", - ) + ) + cacheDirectories.map { "-Xcache-directory=${it.absolutePath}" } ), *dependencies ).assertSuccess().resultingArtifact diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/NativeSimpleTestUtils.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/NativeSimpleTestUtils.kt index 1ee6dc0e7bd..fcddf682646 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/NativeSimpleTestUtils.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/NativeSimpleTestUtils.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.konan.blackboxtest.support.TestRunnerType import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.ExecutableCompilation import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.ExistingDependency import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.LibraryCompilation +import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.StaticCacheCompilation import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.TestCompilationArtifact import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.TestCompilationDependency import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.TestCompilationDependencyType @@ -71,6 +72,20 @@ internal fun AbstractNativeSimpleTest.compileToExecutable( internal fun AbstractNativeSimpleTest.compileToExecutable(testCase: TestCase, vararg dependencies: TestCompilationDependency<*>) = compileToExecutable(testCase, dependencies.asList()) +internal fun AbstractNativeSimpleTest.compileToStaticCache( + klib: TestCompilationArtifact.KLIB, + cacheDir: File, +): TestCompilationResult { + val compilation = StaticCacheCompilation( + settings = testRunSettings, + freeCompilerArgs = TestCompilerArgs.EMPTY, + StaticCacheCompilation.Options.Regular, + dependencies = listOf(klib.asLibraryDependency()), + expectedArtifact = TestCompilationArtifact.KLIBStaticCache(cacheDir, klib) + ) + return compilation.result +} + internal fun AbstractNativeSimpleTest.generateTestCaseWithSingleModule( moduleDir: File?, freeCompilerArgs: TestCompilerArgs = TestCompilerArgs.EMPTY