From 1b95040934dbcac40c91611e551e2f02b818b8b8 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Fri, 20 Dec 2019 15:12:00 +0300 Subject: [PATCH] [kotlin-native-plugin] Two fixes: * Added property to select the cache kind (none, dynamic, static) * Fixed the check if the cache needs to be rebuilt --- .../compilerRunner/KotlinNativeToolRunner.kt | 5 ++-- .../gradle/dsl/KotlinProjectExtension.kt | 17 +++++++++--- .../kotlin/gradle/plugin/KotlinProperties.kt | 7 ++--- .../targets/native/tasks/KotlinNativeTasks.kt | 26 ++++++++++++------- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt index 5a573c169b8..a4c8b215da8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt @@ -20,6 +20,7 @@ import org.gradle.api.Named import org.gradle.api.Project import org.gradle.api.file.FileCollection import org.jetbrains.kotlin.cli.common.messages.MessageRenderer +import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_HOME import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader @@ -51,8 +52,8 @@ internal val Project.konanVersion: CompilerVersion internal val Project.disableKonanDaemon: Boolean get() = PropertiesProvider(this).nativeDisableCompilerDaemon == true -internal val Project.disableKonanCache: Boolean - get() = PropertiesProvider(this).nativeDisableCompilerCache == true +internal val Project.konanCacheKind: NativeCacheKind + get() = PropertiesProvider(this).nativeCacheKind internal interface KonanToolRunner : Named { val mainClass: String diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index 0328054ff99..83f8eca316c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -24,11 +24,9 @@ import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget +import org.jetbrains.kotlin.konan.target.CompilerOutputKind import kotlin.reflect.KClass private const val KOTLIN_PROJECT_EXTENSION_NAME = "kotlin" @@ -129,3 +127,14 @@ enum class Coroutines { Coroutines.values().firstOrNull { it.name.equals(argument, ignoreCase = true) } } } + +enum class NativeCacheKind(val produce: String?, val outputKind: CompilerOutputKind?) { + NONE(null, null), + DYNAMIC("dynamic_cache", CompilerOutputKind.DYNAMIC_CACHE), + STATIC("static_cache", CompilerOutputKind.STATIC_CACHE); + + companion object { + fun byCompilerArgument(argument: String): NativeCacheKind? = + NativeCacheKind.values().firstOrNull { it.name.equals(argument, ignoreCase = true) } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index e093d6c5b47..92ba9d675c3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Project import org.jetbrains.kotlin.gradle.dsl.Coroutines +import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile @@ -147,10 +148,10 @@ internal class PropertiesProvider private constructor(private val project: Proje get() = booleanProperty("kotlin.native.disableCompilerDaemon") /** - * Forbids dependencies precompilation to dynamic/static libraries. + * Dependencies caching strategy. The default is static. */ - val nativeDisableCompilerCache: Boolean? - get() = booleanProperty("kotlin.native.disableCompilerCache") + val nativeCacheKind: NativeCacheKind + get() = property("kotlin.native.cacheKind")?.let { NativeCacheKind.byCompilerArgument(it) } ?: NativeCacheKind.STATIC /** * Generate kotlin/js external declarations from all .d.ts files found in npm modules 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 1ff8afdc818..c051d0427e7 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 @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.compilerRunner.konanVersion import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonToolOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName import org.jetbrains.kotlin.gradle.plugin.mpp.* @@ -426,8 +427,8 @@ open class KotlinNativeLink : AbstractKotlinNativeCompile, visitedLibs: MutableSet) { if (platformLibName in visitedLibs) return visitedLibs += platformLibName val platformLib = platformLibs[platformLibName] ?: error("$platformLibName is not found in platform libs") - if (File(rootCacheDirectory, System.mapLibraryName("$platformLibName-cache")).exists()) + if (File(rootCacheDirectory, platformLibName.cachedName).exists()) return for (dependency in createKotlinLibrary(org.jetbrains.kotlin.konan.file.File(platformLib.absolutePath)).unresolvedDependencies) ensureCompilerProvidedLibPrecached(dependency.path, platformLibs, visitedLibs) project.logger.info("Compiling $platformLibName (${visitedLibs.size}/${platformLibs.size}) to cache") val args = mutableListOf( - "-p", "static_cache", + "-p", konanCacheKind.produce!!, "-target", target ) if (debuggable) @@ -787,7 +795,7 @@ class CacheBuilder(val project: Project, val binary: NativeBinary) { } fun buildCompilerArgs(): List = mutableListOf().apply { - if (!disableKonanCache && !optimized && compilation.konanTarget.family.isAppleFamily) { + if (konanCacheKind != NativeCacheKind.NONE && !optimized && compilation.konanTarget.family.isAppleFamily) { rootCacheDirectory.mkdirs() ensureCompilerProvidedLibsPrecached() add("-Xcache-directory=${rootCacheDirectory.absolutePath}")