From a2a582413e5d0d67af69deb30a9f5924703dd875 Mon Sep 17 00:00:00 2001 From: Isaac Chen Date: Wed, 23 Aug 2017 10:57:17 +0000 Subject: [PATCH] Revert "Revert "Build support for 32-bit armv8-a"" This reverts commit 80b27e4e2093309a72a15b9802212da47172f026. Fixed CTS build issue by adding -march=armv7-a in cts/tests/tests/os/jni/Android.mk since the library built here needs/uses instruction (swp) obsolete in ARMv8. Bug: 64964151 Test: lunch aosp_arm64-userdebug; make -j cts lunch aosp_x86-userdebug; make -j cts lunch aosp_sailfish-userdebug; make -j cts lunch aosp_bullhead-userdebug; make -j cts Change-Id: I6ccafce043e101c769ad370a81ffa0eb62719b5e --- cc/config/arm_device.go | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/cc/config/arm_device.go b/cc/config/arm_device.go index d50de2b4f..f093563fb 100644 --- a/cc/config/arm_device.go +++ b/cc/config/arm_device.go @@ -102,6 +102,11 @@ var ( "-mfloat-abi=softfp", "-mfpu=neon", }, + "armv8-a": []string{ + "-march=armv8-a", + "-mfloat-abi=softfp", + "-mfpu=neon-fp-armv8", + }, } armCpuVariantCflags = map[string][]string{ @@ -174,6 +179,7 @@ func init() { "armv5te", "armv7-a", "armv7-a-neon", + "armv8-a", "cortex-a7", "cortex-a8", "cortex-a9", @@ -188,12 +194,19 @@ func init() { "denver") android.RegisterArchVariantFeatures(android.Arm, "armv7-a-neon", "neon") + android.RegisterArchVariantFeatures(android.Arm, "armv8-a", "neon") // Krait and Kryo targets are not supported by GCC, but are supported by Clang, // so override the definitions when building modules with Clang. replaceFirst(armClangCpuVariantCflags["krait"], "-mcpu=cortex-a15", "-mcpu=krait") replaceFirst(armClangCpuVariantCflags["kryo"], "-mcpu=cortex-a15", "-mcpu=krait") + // The reason we use "-march=armv8-a+crc", instead of "-march=armv8-a", for + // gcc is the latter would conflict with any specified/supported -mcpu! + // All armv8-a cores supported by gcc 4.9 support crc, so it's safe + // to add +crc. Besides, the use of gcc is only for legacy code. + replaceFirst(armArchVariantCflags["armv8-a"], "-march=armv8-a", "-march=armv8-a+crc") + pctx.StaticVariable("armGccVersion", armGccVersion) pctx.SourcePathVariable("ArmGccRoot", @@ -215,6 +228,7 @@ func init() { pctx.StaticVariable("ArmArmv5TECflags", strings.Join(armArchVariantCflags["armv5te"], " ")) pctx.StaticVariable("ArmArmv7ACflags", strings.Join(armArchVariantCflags["armv7-a"], " ")) pctx.StaticVariable("ArmArmv7ANeonCflags", strings.Join(armArchVariantCflags["armv7-a-neon"], " ")) + pctx.StaticVariable("ArmArmv8ACflags", strings.Join(armArchVariantCflags["armv8-a"], " ")) // Cpu variant cflags pctx.StaticVariable("ArmGenericCflags", strings.Join(armCpuVariantCflags[""], " ")) @@ -242,6 +256,8 @@ func init() { strings.Join(armClangArchVariantCflags["armv7-a"], " ")) pctx.StaticVariable("ArmClangArmv7ANeonCflags", strings.Join(armClangArchVariantCflags["armv7-a-neon"], " ")) + pctx.StaticVariable("ArmClangArmv8ACflags", + strings.Join(armClangArchVariantCflags["armv8-a"], " ")) // Clang cpu variant cflags pctx.StaticVariable("ArmClangGenericCflags", @@ -265,6 +281,7 @@ var ( "armv5te": "${config.ArmArmv5TECflags}", "armv7-a": "${config.ArmArmv7ACflags}", "armv7-a-neon": "${config.ArmArmv7ANeonCflags}", + "armv8-a": "${config.ArmArmv8ACflags}", } armCpuVariantCflagsVar = map[string]string{ @@ -286,6 +303,7 @@ var ( "armv5te": "${config.ArmClangArmv5TECflags}", "armv7-a": "${config.ArmClangArmv7ACflags}", "armv7-a-neon": "${config.ArmClangArmv7ANeonCflags}", + "armv8-a": "${config.ArmClangArmv8ACflags}", } armClangCpuVariantCflagsVar = map[string]string{ @@ -402,6 +420,11 @@ func armToolchainFactory(arch android.Arch) Toolchain { toolchainClangCflags[0] = "${config.ArmToolchainClangCflags}" toolchainClangCflags[1] = armClangArchVariantCflagsVar[arch.ArchVariant] + toolchainCflags = append(toolchainCflags, + variantOrDefault(armCpuVariantCflagsVar, arch.CpuVariant)) + toolchainClangCflags = append(toolchainClangCflags, + variantOrDefault(armClangCpuVariantCflagsVar, arch.CpuVariant)) + switch arch.ArchVariant { case "armv7-a-neon": switch arch.CpuVariant { @@ -411,15 +434,12 @@ func armToolchainFactory(arch android.Arch) Toolchain { default: fixCortexA8 = "-Wl,--no-fix-cortex-a8" } - - toolchainCflags = append(toolchainCflags, - variantOrDefault(armCpuVariantCflagsVar, arch.CpuVariant)) - toolchainClangCflags = append(toolchainClangCflags, - variantOrDefault(armClangCpuVariantCflagsVar, arch.CpuVariant)) case "armv7-a": fixCortexA8 = "-Wl,--fix-cortex-a8" case "armv5te": // Nothing extra for armv5te + case "armv8-a": + // Nothing extra for armv8-a default: panic(fmt.Sprintf("Unknown ARM architecture version: %q", arch.ArchVariant)) }