diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/PlatformLibrariesGenerator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/PlatformLibrariesGenerator.kt index 62b46bfa230..6dac2960d61 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/PlatformLibrariesGenerator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/PlatformLibrariesGenerator.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.tasks.CacheBuilder import org.jetbrains.kotlin.gradle.tasks.addArg import org.jetbrains.kotlin.gradle.utils.lifecycleWithDuration +import org.jetbrains.kotlin.gradle.utils.listFilesOrEmpty import org.jetbrains.kotlin.konan.library.KONAN_PLATFORM_LIBS_NAME_PREFIX import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget @@ -73,9 +74,8 @@ internal class PlatformLibrariesGenerator(val project: Project, val konanTarget: val cacheDirectory = CacheBuilder.getRootCacheDirectory( File(project.konanHome), konanTarget, true, project.konanCacheKind ) - val presentCacheFiles = cacheDirectory.listFiles().orEmpty().map { it.name }.toSet() return presentDefs.toPlatformLibNames().all { - CacheBuilder.getCacheFileName(it, project.konanCacheKind, konanTarget) in presentCacheFiles + cacheDirectory.resolve(CacheBuilder.getCacheFileName(it, project.konanCacheKind)).listFilesOrEmpty().isNotEmpty() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 405fc499c37..68876b15901 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder import org.jetbrains.kotlin.gradle.targets.native.internal.isAllowCommonizer import org.jetbrains.kotlin.gradle.utils.getValue import org.jetbrains.kotlin.gradle.utils.klibModuleName +import org.jetbrains.kotlin.gradle.utils.listFilesOrEmpty import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER import org.jetbrains.kotlin.konan.properties.saveToFile import org.jetbrains.kotlin.konan.target.CompilerOutputKind @@ -727,7 +728,7 @@ internal class CacheBuilder(val project: Project, val binary: NativeBinary) { dfs(library) for (library in sortedLibraries) { - if (File(cacheDirectory, library.uniqueName.cachedName).exists()) + if (File(cacheDirectory, library.uniqueName.cachedName).listFilesOrEmpty().isNotEmpty()) continue project.logger.info("Compiling ${library.uniqueName} to cache") val args = mutableListOf( @@ -762,14 +763,14 @@ internal class CacheBuilder(val project: Project, val binary: NativeBinary) { } private val String.cachedName - get() = getCacheFileName(this, konanCacheKind, compilation.konanTarget) + get() = getCacheFileName(this, konanCacheKind) private fun ensureCompilerProvidedLibPrecached(platformLibName: String, platformLibs: Map, visitedLibs: MutableSet) { if (platformLibName in visitedLibs) return visitedLibs += platformLibName val platformLib = platformLibs[platformLibName] ?: error("$platformLibName is not found in platform libs") - if (File(rootCacheDirectory, platformLibName.cachedName).exists()) + if (File(rootCacheDirectory, platformLibName.cachedName).listFilesOrEmpty().isNotEmpty()) return val unresolvedDependencies = resolveSingleFileKlib( KFile(platformLib.absolutePath), @@ -835,9 +836,9 @@ internal class CacheBuilder(val project: Project, val binary: NativeBinary) { return konanHome.resolve("klib/cache/$optionsAwareCacheName") } - internal fun getCacheFileName(baseName: String, cacheKind: NativeCacheKind, konanTarget: KonanTarget): String = + internal fun getCacheFileName(baseName: String, cacheKind: NativeCacheKind): String = cacheKind.outputKind?.let { - "${it.prefix(konanTarget)}${baseName}-cache${it.suffix(konanTarget)}" + "${baseName}-cache" } ?: error("No output for kind $cacheKind") internal fun cacheWorksFor(target: KonanTarget) = diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/fileUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/fileUtils.kt index bdeabfad53e..06bb7469272 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/fileUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/fileUtils.kt @@ -45,4 +45,6 @@ internal fun File.isParentOf(childCandidate: File, strict: Boolean = false): Boo } internal fun File.canonicalPathWithoutExtension(): String = - canonicalPath.substringBeforeLast(".") \ No newline at end of file + canonicalPath.substringBeforeLast(".") + +internal fun File.listFilesOrEmpty() = (if (exists()) listFiles() else null).orEmpty() \ No newline at end of file