Support caches on ios_arm64

This commit is contained in:
Sergey Bogolepov
2020-12-03 17:27:13 +07:00
committed by Stanislav Erokhin
parent 4cf4754736
commit 9c082775e6
5 changed files with 31 additions and 18 deletions
+2 -5
View File
@@ -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.
+10
View File
@@ -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
@@ -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")
@@ -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)
}
}
@@ -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<String>) {
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<String>) {
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,