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 = \ predefinedLlvmDistributions = \
clang-llvm-8.0.0-linux-x86-64 \ clang-llvm-8.0.0-linux-x86-64 \
msys2-mingw-w64-x86_64-clang-llvm-lld-compiler_rt-8.0.1 \ 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.dev = clang-llvm-8.0.0-linux-x86-64
llvm.linux_x64.user = 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.dev = clang-llvm-apple-8.0.0-darwin-macos
llvm.macos_x64.user = 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. # By default LLVM uses 250 for -03 builds.
# We use a smaller value since default value leads to # We use a smaller value since default value leads to
# unreasonably bloated runtime code without any measurable # 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.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
llvmVersion.macos_arm64 = 8.0.0
cacheableTargets.macos_x64 = \ cacheableTargets.macos_x64 = \
macos_x64 \ macos_x64 \
@@ -73,6 +78,8 @@ cacheableTargets.linux_x64 = \
cacheableTargets.mingw_x64 = cacheableTargets.mingw_x64 =
cacheableTargets.macos_arm64 =
# 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
@@ -113,6 +120,11 @@ xcode-addon-xcode_12_2-macos_x64.default = \
remote:internal remote:internal
# macOS Apple Silicon # 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 targetToolchain.macos_x64-macos_arm64 = target-toolchain-xcode_12_2-macos_x64
arch.macos_arm64 = arm64 arch.macos_arm64 = arm64
targetSysRoot.macos_arm64 = target-sysroot-xcode_12_2-macos_x64 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 osVersionMin.macos_arm64 = 11.0
runtimeDefinitions.macos_arm64 = KONAN_OSX=1 KONAN_MACOSX=1 KONAN_ARM64=1 KONAN_OBJC_INTEROP=1 \ runtimeDefinitions.macos_arm64 = KONAN_OSX=1 KONAN_MACOSX=1 KONAN_ARM64=1 KONAN_OBJC_INTEROP=1 \
KONAN_CORE_SYMBOLICATION=1 KONAN_CORE_SYMBOLICATION=1
dependencies.macos_arm64 = \
libffi-3.3-1-macos-arm64
dependencies.macos_x64-macos_arm64 = \ dependencies.macos_x64-macos_arm64 = \
libffi-3.2.1-3-darwin-macos libffi-3.2.1-3-darwin-macos
target-sysroot-xcode_12_2-macos_arm64.default = \ target-sysroot-xcode_12_2-macos_arm64.default = \
remote:internal 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. # Apple's 32-bit iOS.
targetToolchain.macos_x64-ios_arm32 = target-toolchain-xcode_12_2-macos_x64 targetToolchain.macos_x64-ios_arm32 = target-toolchain-xcode_12_2-macos_x64
dependencies.macos_x64-ios_arm32 = \ 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 = \ dependencies.macos_x64-ios_arm64 = \
libffi-3.2.1-3-darwin-macos 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 = \ target-sysroot-xcode_12_2-ios_arm64.default = \
remote:internal remote:internal
@@ -43,7 +43,8 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
private val binDir = when (HostManager.host) { private val binDir = when (HostManager.host) {
KonanTarget.LINUX_X64 -> "$absoluteTargetToolchain/bin" KonanTarget.LINUX_X64 -> "$absoluteTargetToolchain/bin"
KonanTarget.MINGW_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") else -> throw TargetSupportException("Unexpected host platform")
} }
// TODO: Use buildList // TODO: Use buildList
@@ -88,8 +88,9 @@ abstract class KonanPropertiesLoader(override val target: KonanTarget,
} }
private fun defaultArchiveTypeByHost(host: KonanTarget): ArchiveType = when (host) { private fun defaultArchiveTypeByHost(host: KonanTarget): ArchiveType = when (host) {
KonanTarget.LINUX_X64 -> ArchiveType.TAR_GZ KonanTarget.LINUX_X64,
KonanTarget.MACOS_X64 -> ArchiveType.TAR_GZ KonanTarget.MACOS_X64,
KonanTarget.MACOS_ARM64 -> ArchiveType.TAR_GZ
KonanTarget.MINGW_X64 -> ArchiveType.ZIP KonanTarget.MINGW_X64 -> ArchiveType.ZIP
else -> error("$host can't be a host platform!") else -> error("$host can't be a host platform!")
} }
@@ -91,13 +91,19 @@ open class HostManager(
ANDROID_ARM32, ANDROID_ARM32,
ANDROID_ARM64, ANDROID_ARM64,
WASM32 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( private val enabledExperimentalByHost: Map<KonanTarget, Set<KonanTarget>> = mapOf(
LINUX_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets, LINUX_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets,
MACOS_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 { val enabledByHost: Map<KonanTarget, Set<KonanTarget>> by lazy {
@@ -146,7 +152,8 @@ open class HostManager(
val jniHostPlatformIncludeDir: String val jniHostPlatformIncludeDir: String
get() = when (host) { get() = when (host) {
MACOS_X64 -> "darwin" MACOS_X64,
MACOS_ARM64 -> "darwin"
LINUX_X64 -> "linux" LINUX_X64 -> "linux"
MINGW_X64 -> "win32" MINGW_X64 -> "win32"
else -> throw TargetSupportException("Unknown host: $host.") else -> throw TargetSupportException("Unknown host: $host.")
@@ -160,13 +167,15 @@ open class HostManager(
return when (val javaArch = System.getProperty("os.arch")) { return when (val javaArch = System.getProperty("os.arch")) {
"x86_64" -> "x86_64" "x86_64" -> "x86_64"
"amd64" -> "x86_64" "amd64" -> "x86_64"
"arm64" -> "arm64" "arm64" -> "aarch64"
"aarch64" -> "aarch64"
else -> throw TargetSupportException("Unknown hardware platform: $javaArch") else -> throw TargetSupportException("Unknown hardware platform: $javaArch")
} }
} }
private val hostMapping: Map<Pair<String, String>, KonanTarget> = mapOf( private val hostMapping: Map<Pair<String, String>, KonanTarget> = mapOf(
Pair("osx", "x86_64") to MACOS_X64, Pair("osx", "x86_64") to MACOS_X64,
Pair("osx", "aarch64") to MACOS_ARM64,
Pair("linux", "x86_64") to LINUX_X64, Pair("linux", "x86_64") to LINUX_X64,
Pair("windows", "x86_64") to MINGW_X64 Pair("windows", "x86_64") to MINGW_X64
) )