From 9c082775e6dac5bb4971305403651e77b7120dd5 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Thu, 3 Dec 2020 17:27:13 +0700 Subject: [PATCH] Support caches on ios_arm64 --- kotlin-native/build.gradle | 7 ++----- kotlin-native/konan/konan.properties | 10 ++++++++++ .../kotlin/konan/target/Configurables.kt | 3 +++ .../gradle/plugin/konan/tasks/KonanCacheTask.kt | 12 +++++++----- .../cli/utilities/GeneratePlatformLibraries.kt | 17 +++++++++-------- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/kotlin-native/build.gradle b/kotlin-native/build.gradle index b630f39f447..ec1b0c730f7 100644 --- a/kotlin-native/build.gradle +++ b/kotlin-native/build.gradle @@ -74,11 +74,8 @@ ext { platformManager = new PlatformManager(DistributionKt.buildDistribution(projectDir.absolutePath), ext.experimentalEnabled) - cacheableTargets = [ - KonanTarget.MACOS_X64.INSTANCE, - KonanTarget.IOS_X64.INSTANCE - ] - cacheableTargetNames = cacheableTargets.collect { it.visibleName } + cacheableTargetNames = platformManager.hostPlatform.cacheableTargets + cacheableTargets = cacheableTargetNames.collect { platformManager.targetByName(it) } // Some targets miss zlib in their sysroots. // We skip these targets when generate a corresponding platform library. diff --git a/kotlin-native/konan/konan.properties b/kotlin-native/konan/konan.properties index d745f1a0616..6c96ef4250b 100644 --- a/kotlin-native/konan/konan.properties +++ b/kotlin-native/konan/konan.properties @@ -63,6 +63,15 @@ llvmVersion.linux_x64 = 8.0.0 llvmVersion.mingw_x64 = 8.0.1 llvmVersion.macos_x64 = 8.0.0 +cacheableTargets.macos_x64 = \ + macos_x64 \ + ios_x64 \ + ios_arm64 + +cacheableTargets.linux_x64 = + +cacheableTargets.mingw_x64 = + # Mac OS X. # Can be an absolute path instead of predefined value. llvmHome.macos_x64 = $llvm.macos_x64.dev @@ -165,6 +174,7 @@ osVersionMinFlagClang.ios_arm64 = -miphoneos-version-min osVersionMin.ios_arm64 = 9.0 runtimeDefinitions.ios_arm64 = KONAN_OBJC_INTEROP=1 KONAN_IOS=1 KONAN_ARM64=1 \ KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 KONAN_REPORT_BACKTRACE_TO_IOS_CRASH_LOG=1 MACHSIZE=64 +additionalCacheFlags.ios_arm64 = -Xembed-bitcode-marker # Apple's iOS simulator. targetToolchain.macos_x64-ios_x64 = target-toolchain-xcode_12_2-macos_x64 diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt index 4caea4e26ad..fb12b1ad11d 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Configurables.kt @@ -38,6 +38,9 @@ interface Configurables : TargetableExternalStorage { val llvmVersion get() = hostString("llvmVersion") val libffiDir get() = hostString("libffiDir") + val cacheableTargets get() = hostList("cacheableTargets") + val additionalCacheFlags get() = targetList("additionalCacheFlags") + // TODO: Delegate to a map? val linkerOptimizationFlags get() = targetList("linkerOptimizationFlags") val linkerKonanFlags get() = targetList("linkerKonanFlags") diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCacheTask.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCacheTask.kt index abe200aefc7..5f40a175ce8 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCacheTask.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCacheTask.kt @@ -4,10 +4,9 @@ import org.gradle.api.DefaultTask import org.gradle.api.provider.Property import org.gradle.api.tasks.* import org.jetbrains.kotlin.gradle.plugin.konan.KonanCompilerRunner -import org.jetbrains.kotlin.gradle.plugin.konan.hostManager import org.jetbrains.kotlin.gradle.plugin.konan.konanHome import org.jetbrains.kotlin.konan.target.CompilerOutputKind -import org.jetbrains.kotlin.konan.target.HostManager +import org.jetbrains.kotlin.konan.target.PlatformManager import java.io.File enum class KonanCacheKind(val outputKind: CompilerOutputKind) { @@ -56,14 +55,17 @@ open class KonanCacheTask: DefaultTask() { val deleted = cacheFile.deleteRecursively() check(deleted) { "Cannot delete stale cache: ${cacheFile.absolutePath}" } } - + val konanHome = compilerDistributionPath.get().absolutePath + val additionalCacheFlags = PlatformManager(konanHome).let { + it.targetByName(target).let(it::loader).additionalCacheFlags + } val args = listOf( "-g", "-target", target, "-produce", cacheKind.outputKind.name.toLowerCase(), "-Xadd-cache=${originalKlib.absolutePath}", "-Xcache-directory=${cacheDirectory.absolutePath}" - ) - KonanCompilerRunner(project, konanHome = compilerDistributionPath.get().absolutePath).run(args) + ) + additionalCacheFlags + KonanCompilerRunner(project, konanHome = konanHome).run(args) } } \ No newline at end of file diff --git a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt index c4fc36d6c58..3bd25c91220 100644 --- a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt +++ b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt @@ -12,10 +12,7 @@ import kotlinx.cli.* import org.jetbrains.kotlin.backend.konan.CachedLibraries import org.jetbrains.kotlin.backend.konan.OutputFiles import org.jetbrains.kotlin.backend.konan.files.renameAtomic -import org.jetbrains.kotlin.konan.target.CompilerOutputKind -import org.jetbrains.kotlin.konan.target.HostManager -import org.jetbrains.kotlin.konan.target.KonanTarget -import org.jetbrains.kotlin.konan.target.customerDistribution +import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.konan.util.PlatformLibsInfo import org.jetbrains.kotlin.konan.util.visibleName @@ -28,7 +25,6 @@ import java.nio.file.Files import java.nio.file.Paths import java.util.concurrent.atomic.AtomicInteger import kotlin.system.exitProcess -import java.io.File as JFile // TODO: We definitely need to unify logging in different parts of the compiler. private class Logger(val level: Level = Level.NORMAL) { @@ -126,8 +122,11 @@ fun generatePlatformLibraries(args: Array) { argParser.parse(args) val distribution = customerDistribution(KonanHomeProvider.determineKonanHome()) - val target = HostManager(distribution).targetByName(targetName) - + val platformManager = PlatformManager(distribution) + val target = platformManager.targetByName(targetName) + val targetCacheArgs = platformManager.let { + target.let(it::loader).additionalCacheFlags + } val inputDirectory = inputDirectoryPath?.File() ?: File(distribution.konanSubdir, "platformDef").child(target.visibleName) @@ -148,7 +147,9 @@ fun generatePlatformLibraries(args: Array) { val logger = Logger(if (verbose) Logger.Level.VERBOSE else Logger.Level.NORMAL) - val cacheInfo = cacheDirectory?.let { CacheInfo(it, cacheKind.outputKind.visibleName, cacheArgs) } + val cacheInfo = cacheDirectory?.let { + CacheInfo(it, cacheKind.outputKind.visibleName, cacheArgs + targetCacheArgs) + } generatePlatformLibraries( target, mode,