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),
|
platformManager = new PlatformManager(DistributionKt.buildDistribution(projectDir.absolutePath),
|
||||||
ext.experimentalEnabled)
|
ext.experimentalEnabled)
|
||||||
|
|
||||||
cacheableTargets = [
|
cacheableTargetNames = platformManager.hostPlatform.cacheableTargets
|
||||||
KonanTarget.MACOS_X64.INSTANCE,
|
cacheableTargets = cacheableTargetNames.collect { platformManager.targetByName(it) }
|
||||||
KonanTarget.IOS_X64.INSTANCE
|
|
||||||
]
|
|
||||||
cacheableTargetNames = cacheableTargets.collect { it.visibleName }
|
|
||||||
|
|
||||||
// Some targets miss zlib in their sysroots.
|
// Some targets miss zlib in their sysroots.
|
||||||
// We skip these targets when generate a corresponding platform library.
|
// 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.mingw_x64 = 8.0.1
|
||||||
llvmVersion.macos_x64 = 8.0.0
|
llvmVersion.macos_x64 = 8.0.0
|
||||||
|
|
||||||
|
cacheableTargets.macos_x64 = \
|
||||||
|
macos_x64 \
|
||||||
|
ios_x64 \
|
||||||
|
ios_arm64
|
||||||
|
|
||||||
|
cacheableTargets.linux_x64 =
|
||||||
|
|
||||||
|
cacheableTargets.mingw_x64 =
|
||||||
|
|
||||||
# Mac OS X.
|
# Mac OS X.
|
||||||
# Can be an absolute path instead of predefined value.
|
# Can be an absolute path instead of predefined value.
|
||||||
llvmHome.macos_x64 = $llvm.macos_x64.dev
|
llvmHome.macos_x64 = $llvm.macos_x64.dev
|
||||||
@@ -165,6 +174,7 @@ osVersionMinFlagClang.ios_arm64 = -miphoneos-version-min
|
|||||||
osVersionMin.ios_arm64 = 9.0
|
osVersionMin.ios_arm64 = 9.0
|
||||||
runtimeDefinitions.ios_arm64 = KONAN_OBJC_INTEROP=1 KONAN_IOS=1 KONAN_ARM64=1 \
|
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
|
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.
|
# Apple's iOS simulator.
|
||||||
targetToolchain.macos_x64-ios_x64 = target-toolchain-xcode_12_2-macos_x64
|
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 llvmVersion get() = hostString("llvmVersion")
|
||||||
val libffiDir get() = hostString("libffiDir")
|
val libffiDir get() = hostString("libffiDir")
|
||||||
|
|
||||||
|
val cacheableTargets get() = hostList("cacheableTargets")
|
||||||
|
val additionalCacheFlags get() = targetList("additionalCacheFlags")
|
||||||
|
|
||||||
// TODO: Delegate to a map?
|
// TODO: Delegate to a map?
|
||||||
val linkerOptimizationFlags get() = targetList("linkerOptimizationFlags")
|
val linkerOptimizationFlags get() = targetList("linkerOptimizationFlags")
|
||||||
val linkerKonanFlags get() = targetList("linkerKonanFlags")
|
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.provider.Property
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.konan.KonanCompilerRunner
|
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.gradle.plugin.konan.konanHome
|
||||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
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
|
import java.io.File
|
||||||
|
|
||||||
enum class KonanCacheKind(val outputKind: CompilerOutputKind) {
|
enum class KonanCacheKind(val outputKind: CompilerOutputKind) {
|
||||||
@@ -56,14 +55,17 @@ open class KonanCacheTask: DefaultTask() {
|
|||||||
val deleted = cacheFile.deleteRecursively()
|
val deleted = cacheFile.deleteRecursively()
|
||||||
check(deleted) { "Cannot delete stale cache: ${cacheFile.absolutePath}" }
|
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(
|
val args = listOf(
|
||||||
"-g",
|
"-g",
|
||||||
"-target", target,
|
"-target", target,
|
||||||
"-produce", cacheKind.outputKind.name.toLowerCase(),
|
"-produce", cacheKind.outputKind.name.toLowerCase(),
|
||||||
"-Xadd-cache=${originalKlib.absolutePath}",
|
"-Xadd-cache=${originalKlib.absolutePath}",
|
||||||
"-Xcache-directory=${cacheDirectory.absolutePath}"
|
"-Xcache-directory=${cacheDirectory.absolutePath}"
|
||||||
)
|
) + additionalCacheFlags
|
||||||
KonanCompilerRunner(project, konanHome = compilerDistributionPath.get().absolutePath).run(args)
|
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.CachedLibraries
|
||||||
import org.jetbrains.kotlin.backend.konan.OutputFiles
|
import org.jetbrains.kotlin.backend.konan.OutputFiles
|
||||||
import org.jetbrains.kotlin.backend.konan.files.renameAtomic
|
import org.jetbrains.kotlin.backend.konan.files.renameAtomic
|
||||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
import org.jetbrains.kotlin.konan.target.*
|
||||||
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.util.KonanHomeProvider
|
import org.jetbrains.kotlin.konan.util.KonanHomeProvider
|
||||||
import org.jetbrains.kotlin.konan.util.PlatformLibsInfo
|
import org.jetbrains.kotlin.konan.util.PlatformLibsInfo
|
||||||
import org.jetbrains.kotlin.konan.util.visibleName
|
import org.jetbrains.kotlin.konan.util.visibleName
|
||||||
@@ -28,7 +25,6 @@ import java.nio.file.Files
|
|||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
import java.util.concurrent.atomic.AtomicInteger
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
import java.io.File as JFile
|
|
||||||
|
|
||||||
// TODO: We definitely need to unify logging in different parts of the compiler.
|
// TODO: We definitely need to unify logging in different parts of the compiler.
|
||||||
private class Logger(val level: Level = Level.NORMAL) {
|
private class Logger(val level: Level = Level.NORMAL) {
|
||||||
@@ -126,8 +122,11 @@ fun generatePlatformLibraries(args: Array<String>) {
|
|||||||
argParser.parse(args)
|
argParser.parse(args)
|
||||||
|
|
||||||
val distribution = customerDistribution(KonanHomeProvider.determineKonanHome())
|
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()
|
val inputDirectory = inputDirectoryPath?.File()
|
||||||
?: File(distribution.konanSubdir, "platformDef").child(target.visibleName)
|
?: 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 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(
|
generatePlatformLibraries(
|
||||||
target, mode,
|
target, mode,
|
||||||
|
|||||||
Reference in New Issue
Block a user