From b8c5e95e269261a78688770691327a51a1985702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Kosi=C5=84ski?= Date: Sat, 7 Sep 2024 00:01:55 +0000 Subject: [PATCH] Add missing pieces of ARMv9.2-A support. aosp/3255916 didn't add all of the required infrastructure. Refactor it to be more like x86_64 so it requires less boilerplate code. Bug: 364383722 Test: presubmit Change-Id: Idc5279ffc5fe964bea9f98873c01468944d90091 --- android/arch_list.go | 1 + cc/config/arm64_device.go | 30 +++++++----------------------- cc/config/arm64_linux_host.go | 4 ++-- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/android/arch_list.go b/android/arch_list.go index 2937092af..9501c877c 100644 --- a/android/arch_list.go +++ b/android/arch_list.go @@ -26,6 +26,7 @@ var archVariants = map[ArchType][]string{ "armv8-2a", "armv8-2a-dotprod", "armv9-a", + "armv9-2a", }, X86: { "amberlake", diff --git a/cc/config/arm64_device.go b/cc/config/arm64_device.go index 761afcf18..0dcf2cfd4 100644 --- a/cc/config/arm64_device.go +++ b/cc/config/arm64_device.go @@ -118,11 +118,9 @@ func init() { pctx.StaticVariable("Arm64Cppflags", strings.Join(arm64Cppflags, " ")) - pctx.StaticVariable("Arm64Armv8ACflags", strings.Join(arm64ArchVariantCflags["armv8-a"], " ")) - pctx.StaticVariable("Arm64Armv8ABranchProtCflags", strings.Join(arm64ArchVariantCflags["armv8-a-branchprot"], " ")) - pctx.StaticVariable("Arm64Armv82ACflags", strings.Join(arm64ArchVariantCflags["armv8-2a"], " ")) - pctx.StaticVariable("Arm64Armv82ADotprodCflags", strings.Join(arm64ArchVariantCflags["armv8-2a-dotprod"], " ")) - pctx.StaticVariable("Arm64Armv9ACflags", strings.Join(arm64ArchVariantCflags["armv9-a"], " ")) + for variant, cflags := range arm64ArchVariantCflags { + pctx.StaticVariable("Arm64"+variant+"VariantCflags", strings.Join(cflags, " ")) + } pctx.StaticVariable("Arm64CortexA53Cflags", strings.Join(arm64CpuVariantCflags["cortex-a53"], " ")) pctx.StaticVariable("Arm64CortexA55Cflags", strings.Join(arm64CpuVariantCflags["cortex-a55"], " ")) @@ -134,14 +132,6 @@ func init() { } var ( - arm64ArchVariantCflagsVar = map[string]string{ - "armv8-a": "${config.Arm64Armv8ACflags}", - "armv8-a-branchprot": "${config.Arm64Armv8ABranchProtCflags}", - "armv8-2a": "${config.Arm64Armv82ACflags}", - "armv8-2a-dotprod": "${config.Arm64Armv82ADotprodCflags}", - "armv9-a": "${config.Arm64Armv9ACflags}", - } - arm64CpuVariantCflagsVar = map[string]string{ "cortex-a53": "${config.Arm64CortexA53Cflags}", "cortex-a55": "${config.Arm64CortexA55Cflags}", @@ -211,18 +201,12 @@ func (toolchainArm64) LibclangRuntimeLibraryArch() string { } func arm64ToolchainFactory(arch android.Arch) Toolchain { - switch arch.ArchVariant { - case "armv8-a": - case "armv8-a-branchprot": - case "armv8-2a": - case "armv8-2a-dotprod": - case "armv9-a": - // Nothing extra for armv8-a/armv8-2a - default: - panic(fmt.Sprintf("Unknown ARM architecture version: %q", arch.ArchVariant)) + // Error now rather than having a confusing Ninja error + if _, ok := arm64ArchVariantCflags[arch.ArchVariant]; !ok { + panic(fmt.Sprintf("Unknown ARM64 architecture version: %q", arch.ArchVariant)) } - toolchainCflags := []string{arm64ArchVariantCflagsVar[arch.ArchVariant]} + toolchainCflags := []string{"${config.Arm64" + arch.ArchVariant + "VariantCflags}"} toolchainCflags = append(toolchainCflags, variantOrDefault(arm64CpuVariantCflagsVar, arch.CpuVariant)) diff --git a/cc/config/arm64_linux_host.go b/cc/config/arm64_linux_host.go index 438e0e6b6..a19b0ed92 100644 --- a/cc/config/arm64_linux_host.go +++ b/cc/config/arm64_linux_host.go @@ -87,8 +87,8 @@ func (toolchainLinuxBionicArm64) CrtBeginSharedBinary() []string { } func linuxBionicArm64ToolchainFactory(arch android.Arch) Toolchain { - archVariant := "armv8-a" // for host, default to armv8-a - toolchainCflags := []string{arm64ArchVariantCflagsVar[archVariant]} + // for host, default to armv8-a + toolchainCflags := []string{"-march=armv8-a"} // We don't specify CPU architecture for host. Conservatively assume // the host CPU needs the fix