Add Darwin+Arm64 toolchain support am: 8528f4ec5e

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1863969

Change-Id: I011b3fb63d4bdc2723e06a58ab598a0aa336a598
This commit is contained in:
Dan Willemsen
2021-11-02 05:40:08 +00:00
committed by Automerger Merge Worker
7 changed files with 98 additions and 15 deletions

View File

@@ -921,6 +921,11 @@ func shouldSkipAndroidMkProcessing(module *ModuleBase) bool {
return true return true
} }
// Only expose the primary Darwin target, as Make does not understand Darwin+Arm64
if module.Os() == Darwin && module.Target().HostCross {
return true
}
return !module.Enabled() || return !module.Enabled() ||
module.commonProperties.HideFromMake || module.commonProperties.HideFromMake ||
// Make does not understand LinuxBionic // Make does not understand LinuxBionic

View File

@@ -308,7 +308,7 @@ var (
// LinuxMusl is the OS for the Linux kernel plus the musl runtime. // LinuxMusl is the OS for the Linux kernel plus the musl runtime.
LinuxMusl = newOsType("linux_musl", Host, false, X86, X86_64) LinuxMusl = newOsType("linux_musl", Host, false, X86, X86_64)
// Darwin is the OS for MacOS/Darwin host machines. // Darwin is the OS for MacOS/Darwin host machines.
Darwin = newOsType("darwin", Host, false, X86_64) Darwin = newOsType("darwin", Host, false, Arm64, X86_64)
// LinuxBionic is the OS for the Linux kernel plus the Bionic libc runtime, but without the // LinuxBionic is the OS for the Linux kernel plus the Bionic libc runtime, but without the
// rest of Android. // rest of Android.
LinuxBionic = newOsType("linux_bionic", Host, false, Arm64, X86_64) LinuxBionic = newOsType("linux_bionic", Host, false, Arm64, X86_64)
@@ -696,6 +696,11 @@ func archMutator(bpctx blueprint.BottomUpMutatorContext) {
for i, m := range modules { for i, m := range modules {
addTargetProperties(m, targets[i], multiTargets, i == 0) addTargetProperties(m, targets[i], multiTargets, i == 0)
m.base().setArchProperties(mctx) m.base().setArchProperties(mctx)
// Install support doesn't understand Darwin+Arm64
if os == Darwin && targets[i].HostCross {
m.base().commonProperties.SkipInstall = true
}
} }
} }

View File

@@ -39,6 +39,7 @@ const (
osArchAndroidArm64 = "android_arm64" osArchAndroidArm64 = "android_arm64"
osArchAndroidX86 = "android_x86" osArchAndroidX86 = "android_x86"
osArchAndroidX86_64 = "android_x86_64" osArchAndroidX86_64 = "android_x86_64"
osArchDarwinArm64 = "darwin_arm64"
osArchDarwinX86_64 = "darwin_x86_64" osArchDarwinX86_64 = "darwin_x86_64"
osArchLinuxX86 = "linux_glibc_x86" osArchLinuxX86 = "linux_glibc_x86"
osArchLinuxX86_64 = "linux_glibc_x86_64" osArchLinuxX86_64 = "linux_glibc_x86_64"
@@ -96,6 +97,7 @@ var (
osArchAndroidArm64: "//build/bazel/platforms/os_arch:android_arm64", osArchAndroidArm64: "//build/bazel/platforms/os_arch:android_arm64",
osArchAndroidX86: "//build/bazel/platforms/os_arch:android_x86", osArchAndroidX86: "//build/bazel/platforms/os_arch:android_x86",
osArchAndroidX86_64: "//build/bazel/platforms/os_arch:android_x86_64", osArchAndroidX86_64: "//build/bazel/platforms/os_arch:android_x86_64",
osArchDarwinArm64: "//build/bazel/platforms/os_arch:darwin_arm64",
osArchDarwinX86_64: "//build/bazel/platforms/os_arch:darwin_x86_64", osArchDarwinX86_64: "//build/bazel/platforms/os_arch:darwin_x86_64",
osArchLinuxX86: "//build/bazel/platforms/os_arch:linux_glibc_x86", osArchLinuxX86: "//build/bazel/platforms/os_arch:linux_glibc_x86",
osArchLinuxX86_64: "//build/bazel/platforms/os_arch:linux_glibc_x86_64", osArchLinuxX86_64: "//build/bazel/platforms/os_arch:linux_glibc_x86_64",

View File

@@ -24,7 +24,7 @@ bootstrap_go_package {
"x86_device.go", "x86_device.go",
"x86_64_device.go", "x86_64_device.go",
"x86_darwin_host.go", "darwin_host.go",
"x86_linux_host.go", "x86_linux_host.go",
"x86_linux_bionic_host.go", "x86_linux_bionic_host.go",
"x86_windows_host.go", "x86_windows_host.go",

View File

@@ -174,19 +174,43 @@ type toolchainDarwin struct {
toolchain64Bit toolchain64Bit
} }
func (t *toolchainDarwin) Name() string { type toolchainDarwinX86 struct {
toolchainDarwin
}
type toolchainDarwinArm struct {
toolchainDarwin
}
func (t *toolchainDarwinArm) Name() string {
return "arm64"
}
func (t *toolchainDarwinX86) Name() string {
return "x86_64" return "x86_64"
} }
func (t *toolchainDarwin) GccRoot() string { func (t *toolchainDarwinArm) GccRoot() string {
panic("unimplemented")
}
func (t *toolchainDarwinArm) GccTriple() string {
panic("unimplemented")
}
func (t *toolchainDarwinArm) GccVersion() string {
panic("unimplemented")
}
func (t *toolchainDarwinX86) GccRoot() string {
return "${config.DarwinGccRoot}" return "${config.DarwinGccRoot}"
} }
func (t *toolchainDarwin) GccTriple() string { func (t *toolchainDarwinX86) GccTriple() string {
return "${config.DarwinGccTriple}" return "${config.DarwinGccTriple}"
} }
func (t *toolchainDarwin) GccVersion() string { func (t *toolchainDarwinX86) GccVersion() string {
return darwinGccVersion return darwinGccVersion
} }
@@ -194,7 +218,11 @@ func (t *toolchainDarwin) IncludeFlags() string {
return "" return ""
} }
func (t *toolchainDarwin) ClangTriple() string { func (t *toolchainDarwinArm) ClangTriple() string {
return "aarch64-apple-darwin"
}
func (t *toolchainDarwinX86) ClangTriple() string {
return "x86_64-apple-darwin" return "x86_64-apple-darwin"
} }
@@ -230,12 +258,18 @@ func (t *toolchainDarwin) ToolPath() string {
return "${config.MacToolPath}" return "${config.MacToolPath}"
} }
var toolchainDarwinSingleton Toolchain = &toolchainDarwin{} var toolchainDarwinArmSingleton Toolchain = &toolchainDarwinArm{}
var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
func darwinToolchainFactory(arch android.Arch) Toolchain { func darwinArmToolchainFactory(arch android.Arch) Toolchain {
return toolchainDarwinSingleton return toolchainDarwinArmSingleton
}
func darwinX86ToolchainFactory(arch android.Arch) Toolchain {
return toolchainDarwinX86Singleton
} }
func init() { func init() {
registerToolchainFactory(android.Darwin, android.X86_64, darwinToolchainFactory) registerToolchainFactory(android.Darwin, android.Arm64, darwinArmToolchainFactory)
registerToolchainFactory(android.Darwin, android.X86_64, darwinX86ToolchainFactory)
} }

View File

@@ -16,7 +16,7 @@ bootstrap_go_package {
"lints.go", "lints.go",
"toolchain.go", "toolchain.go",
"allowed_list.go", "allowed_list.go",
"x86_darwin_host.go", "darwin_host.go",
"x86_linux_bionic_host.go", "x86_linux_bionic_host.go",
"x86_linux_host.go", "x86_linux_host.go",
"x86_device.go", "x86_device.go",

View File

@@ -25,41 +25,64 @@ var (
DarwinRustLinkFlags = []string{ DarwinRustLinkFlags = []string{
"-B${cc_config.MacToolPath}", "-B${cc_config.MacToolPath}",
} }
darwinArm64Rustflags = []string{}
darwinArm64Linkflags = []string{}
darwinX8664Rustflags = []string{} darwinX8664Rustflags = []string{}
darwinX8664Linkflags = []string{} darwinX8664Linkflags = []string{}
) )
func init() { func init() {
registerToolchainFactory(android.Darwin, android.Arm64, darwinArm64ToolchainFactory)
registerToolchainFactory(android.Darwin, android.X86_64, darwinX8664ToolchainFactory) registerToolchainFactory(android.Darwin, android.X86_64, darwinX8664ToolchainFactory)
pctx.StaticVariable("DarwinToolchainRustFlags", strings.Join(DarwinRustFlags, " ")) pctx.StaticVariable("DarwinToolchainRustFlags", strings.Join(DarwinRustFlags, " "))
pctx.StaticVariable("DarwinToolchainLinkFlags", strings.Join(DarwinRustLinkFlags, " ")) pctx.StaticVariable("DarwinToolchainLinkFlags", strings.Join(DarwinRustLinkFlags, " "))
pctx.StaticVariable("DarwinToolchainArm64RustFlags", strings.Join(darwinArm64Rustflags, " "))
pctx.StaticVariable("DarwinToolchainArm64LinkFlags", strings.Join(darwinArm64Linkflags, " "))
pctx.StaticVariable("DarwinToolchainX8664RustFlags", strings.Join(darwinX8664Rustflags, " ")) pctx.StaticVariable("DarwinToolchainX8664RustFlags", strings.Join(darwinX8664Rustflags, " "))
pctx.StaticVariable("DarwinToolchainX8664LinkFlags", strings.Join(darwinX8664Linkflags, " ")) pctx.StaticVariable("DarwinToolchainX8664LinkFlags", strings.Join(darwinX8664Linkflags, " "))
} }
type toolchainDarwin struct { type toolchainDarwin struct {
toolchain64Bit
toolchainRustFlags string toolchainRustFlags string
toolchainLinkFlags string toolchainLinkFlags string
} }
type toolchainDarwinX8664 struct { type toolchainDarwinArm64 struct {
toolchain64Bit
toolchainDarwin toolchainDarwin
} }
type toolchainDarwinX8664 struct {
toolchainDarwin
}
func (toolchainDarwinArm64) Supported() bool {
return true
}
func (toolchainDarwinX8664) Supported() bool { func (toolchainDarwinX8664) Supported() bool {
return true return true
} }
func (toolchainDarwinX8664) Bionic() bool { func (toolchainDarwin) Bionic() bool {
return false return false
} }
func (t *toolchainDarwinArm64) Name() string {
return "arm64"
}
func (t *toolchainDarwinX8664) Name() string { func (t *toolchainDarwinX8664) Name() string {
return "x86_64" return "x86_64"
} }
func (t *toolchainDarwinArm64) RustTriple() string {
return "aarch64-apple-darwin"
}
func (t *toolchainDarwinX8664) RustTriple() string { func (t *toolchainDarwinX8664) RustTriple() string {
return "x86_64-apple-darwin" return "x86_64-apple-darwin"
} }
@@ -76,6 +99,15 @@ func (t *toolchainDarwin) ProcMacroSuffix() string {
return ".dylib" return ".dylib"
} }
func (t *toolchainDarwinArm64) ToolchainLinkFlags() string {
// Prepend the lld flags from cc_config so we stay in sync with cc
return "${cc_config.DarwinLldflags} ${config.DarwinToolchainLinkFlags} ${config.DarwinToolchainArm64LinkFlags}"
}
func (t *toolchainDarwinArm64) ToolchainRustFlags() string {
return "${config.DarwinToolchainRustFlags} ${config.DarwinToolchainArm64RustFlags}"
}
func (t *toolchainDarwinX8664) ToolchainLinkFlags() string { func (t *toolchainDarwinX8664) ToolchainLinkFlags() string {
// Prepend the lld flags from cc_config so we stay in sync with cc // Prepend the lld flags from cc_config so we stay in sync with cc
return "${cc_config.DarwinLldflags} ${config.DarwinToolchainLinkFlags} ${config.DarwinToolchainX8664LinkFlags}" return "${cc_config.DarwinLldflags} ${config.DarwinToolchainLinkFlags} ${config.DarwinToolchainX8664LinkFlags}"
@@ -85,8 +117,13 @@ func (t *toolchainDarwinX8664) ToolchainRustFlags() string {
return "${config.DarwinToolchainRustFlags} ${config.DarwinToolchainX8664RustFlags}" return "${config.DarwinToolchainRustFlags} ${config.DarwinToolchainX8664RustFlags}"
} }
func darwinArm64ToolchainFactory(arch android.Arch) Toolchain {
return toolchainDarwinArm64Singleton
}
func darwinX8664ToolchainFactory(arch android.Arch) Toolchain { func darwinX8664ToolchainFactory(arch android.Arch) Toolchain {
return toolchainDarwinX8664Singleton return toolchainDarwinX8664Singleton
} }
var toolchainDarwinArm64Singleton Toolchain = &toolchainDarwinArm64{}
var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{} var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}