Add initial support for macos_arm64 host

This commit is contained in:
Sergey Bogolepov
2021-03-19 20:07:02 +07:00
committed by TeamCityServer
parent 4222fb9629
commit 7e18b69e7d
4 changed files with 43 additions and 7 deletions
+26 -1
View File
@@ -38,7 +38,8 @@ reducedLlvmAppendix = compact
predefinedLlvmDistributions = \
clang-llvm-8.0.0-linux-x86-64 \
msys2-mingw-w64-x86_64-clang-llvm-lld-compiler_rt-8.0.1 \
clang-llvm-apple-8.0.0-darwin-macos
clang-llvm-apple-8.0.0-darwin-macos \
clang-llvm-apple-8.0.0-darwin-macos-aarch64
llvm.linux_x64.dev = clang-llvm-8.0.0-linux-x86-64
llvm.linux_x64.user = clang-llvm-8.0.0-linux-x86-64
@@ -49,6 +50,9 @@ llvm.mingw_x64.user = msys2-mingw-w64-x86_64-clang-llvm-lld-compiler_rt-8.0.1
llvm.macos_x64.dev = clang-llvm-apple-8.0.0-darwin-macos
llvm.macos_x64.user = clang-llvm-apple-8.0.0-darwin-macos
llvm.macos_arm64.dev = clang-llvm-apple-8.0.0-darwin-macos-aarch64
llvm.macos_arm64.user = clang-llvm-apple-8.0.0-darwin-macos-aarch64
# By default LLVM uses 250 for -03 builds.
# We use a smaller value since default value leads to
# unreasonably bloated runtime code without any measurable
@@ -62,6 +66,7 @@ linkerGccFlags = -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed
llvmVersion.linux_x64 = 8.0.0
llvmVersion.mingw_x64 = 8.0.1
llvmVersion.macos_x64 = 8.0.0
llvmVersion.macos_arm64 = 8.0.0
cacheableTargets.macos_x64 = \
macos_x64 \
@@ -73,6 +78,8 @@ cacheableTargets.linux_x64 = \
cacheableTargets.mingw_x64 =
cacheableTargets.macos_arm64 =
# Mac OS X.
# Can be an absolute path instead of predefined value.
llvmHome.macos_x64 = $llvm.macos_x64.dev
@@ -113,6 +120,11 @@ xcode-addon-xcode_12_2-macos_x64.default = \
remote:internal
# macOS Apple Silicon
llvmHome.macos_arm64 = $llvm.macos_arm64.dev
targetToolchain.macos_arm64 = target-toolchain-xcode_12_2-macos_x64
libffiDir.macos_arm64 = libffi-3.3-1-macos-arm64
additionalToolsDir.macos_arm64 = xcode-addon-xcode_12_2-macos_x64
targetToolchain.macos_x64-macos_arm64 = target-toolchain-xcode_12_2-macos_x64
arch.macos_arm64 = arm64
targetSysRoot.macos_arm64 = target-sysroot-xcode_12_2-macos_x64
@@ -136,12 +148,21 @@ osVersionMinFlagClang.macos_arm64 = -mmacosx-version-min
osVersionMin.macos_arm64 = 11.0
runtimeDefinitions.macos_arm64 = KONAN_OSX=1 KONAN_MACOSX=1 KONAN_ARM64=1 KONAN_OBJC_INTEROP=1 \
KONAN_CORE_SYMBOLICATION=1
dependencies.macos_arm64 = \
libffi-3.3-1-macos-arm64
dependencies.macos_x64-macos_arm64 = \
libffi-3.2.1-3-darwin-macos
target-sysroot-xcode_12_2-macos_arm64.default = \
remote:internal
target-toolchain-xcode_12_2-macos_arm64.default = \
remote:internal
xcode-addon-xcode_12_2-macos_arm64.default = \
remote:internal
# Apple's 32-bit iOS.
targetToolchain.macos_x64-ios_arm32 = target-toolchain-xcode_12_2-macos_x64
dependencies.macos_x64-ios_arm32 = \
@@ -180,6 +201,10 @@ targetToolchain.macos_x64-ios_arm64 = target-toolchain-xcode_12_2-macos_x64
dependencies.macos_x64-ios_arm64 = \
libffi-3.2.1-3-darwin-macos
targetToolchain.macos_arm64-ios_arm64 = target-toolchain-xcode_12_2-macos_x64
dependencies.macos_arm64-ios_arm64 = \
libffi-3.3-1-macos-arm64
target-sysroot-xcode_12_2-ios_arm64.default = \
remote:internal
@@ -43,7 +43,8 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
private val binDir = when (HostManager.host) {
KonanTarget.LINUX_X64 -> "$absoluteTargetToolchain/bin"
KonanTarget.MINGW_X64 -> "$absoluteTargetToolchain/bin"
KonanTarget.MACOS_X64 -> "$absoluteTargetToolchain/usr/bin"
KonanTarget.MACOS_X64,
KonanTarget.MACOS_ARM64 -> "$absoluteTargetToolchain/usr/bin"
else -> throw TargetSupportException("Unexpected host platform")
}
// TODO: Use buildList
@@ -88,8 +88,9 @@ abstract class KonanPropertiesLoader(override val target: KonanTarget,
}
private fun defaultArchiveTypeByHost(host: KonanTarget): ArchiveType = when (host) {
KonanTarget.LINUX_X64 -> ArchiveType.TAR_GZ
KonanTarget.MACOS_X64 -> ArchiveType.TAR_GZ
KonanTarget.LINUX_X64,
KonanTarget.MACOS_X64,
KonanTarget.MACOS_ARM64 -> ArchiveType.TAR_GZ
KonanTarget.MINGW_X64 -> ArchiveType.ZIP
else -> error("$host can't be a host platform!")
}
@@ -91,13 +91,19 @@ open class HostManager(
ANDROID_ARM32,
ANDROID_ARM64,
WASM32
),
MACOS_ARM64 to setOf(
// TODO: More targets will be added later after additional testing.
MACOS_ARM64,
IOS_ARM64
)
)
private val enabledExperimentalByHost: Map<KonanTarget, Set<KonanTarget>> = mapOf(
LINUX_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets,
MACOS_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets,
MINGW_X64 to setOf<KonanTarget>() + zephyrSubtargets
MINGW_X64 to setOf<KonanTarget>() + zephyrSubtargets,
MACOS_ARM64 to emptySet()
)
val enabledByHost: Map<KonanTarget, Set<KonanTarget>> by lazy {
@@ -146,7 +152,8 @@ open class HostManager(
val jniHostPlatformIncludeDir: String
get() = when (host) {
MACOS_X64 -> "darwin"
MACOS_X64,
MACOS_ARM64 -> "darwin"
LINUX_X64 -> "linux"
MINGW_X64 -> "win32"
else -> throw TargetSupportException("Unknown host: $host.")
@@ -160,13 +167,15 @@ open class HostManager(
return when (val javaArch = System.getProperty("os.arch")) {
"x86_64" -> "x86_64"
"amd64" -> "x86_64"
"arm64" -> "arm64"
"arm64" -> "aarch64"
"aarch64" -> "aarch64"
else -> throw TargetSupportException("Unknown hardware platform: $javaArch")
}
}
private val hostMapping: Map<Pair<String, String>, KonanTarget> = mapOf(
Pair("osx", "x86_64") to MACOS_X64,
Pair("osx", "aarch64") to MACOS_ARM64,
Pair("linux", "x86_64") to LINUX_X64,
Pair("windows", "x86_64") to MINGW_X64
)