Support caches on ios_arm64
This commit is contained in:
committed by
Stanislav Erokhin
parent
4cf4754736
commit
9c082775e6
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
+3
@@ -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")
|
||||
|
||||
+7
-5
@@ -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)
|
||||
}
|
||||
}
|
||||
+9
-8
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user