Fix arm[64] cflags
Limit arm cpu variants to armv7-a-neon only, and handle a generic
armv7-a-neon cpu variant. Add arm64 cortex-a53 cpu variant. Sanity check
the arch variant against supported versions.
Change-Id: I8ecdea4cd36d9c82e1f29b158efc131f8b1cbc4d
diff --git a/cc/arm64_device.go b/cc/arm64_device.go
index c861498..284e5bd 100644
--- a/cc/arm64_device.go
+++ b/cc/arm64_device.go
@@ -15,6 +15,7 @@
package cc
import (
+ "fmt"
"strings"
"android/soong/common"
@@ -72,6 +73,14 @@
arm64Cppflags = []string{
"-fvisibility-inlines-hidden",
}
+
+ arm64CpuVariantCflags = map[string][]string{
+ "cortex-a53": []string{
+ "-mcpu=cortex-a53",
+ },
+ }
+
+ arm64ClangCpuVariantCflags = copyVariantFlags(arm64CpuVariantCflags)
)
const (
@@ -101,13 +110,31 @@
pctx.StaticVariable("arm64ClangCflags", strings.Join(clangFilterUnknownCflags(arm64Cflags), " "))
pctx.StaticVariable("arm64ClangLdflags", strings.Join(clangFilterUnknownCflags(arm64Ldflags), " "))
pctx.StaticVariable("arm64ClangCppflags", strings.Join(clangFilterUnknownCflags(arm64Cppflags), " "))
+
+ pctx.StaticVariable("arm64CortexA53Cflags",
+ strings.Join(arm64CpuVariantCflags["cortex-a53"], " "))
+ pctx.StaticVariable("arm64ClangCortexA53Cflags",
+ strings.Join(arm64ClangCpuVariantCflags["cortex-a53"], " "))
}
+var (
+ arm64CpuVariantCflagsVar = map[string]string{
+ "": "",
+ "cortex-a53": "${arm64CortexA53Cflags}",
+ }
+
+ arm64ClangCpuVariantCflagsVar = map[string]string{
+ "": "",
+ "cortex-a53": "${arm64ClangCortexA53Cflags}",
+ }
+)
+
type toolchainArm64 struct {
toolchain64Bit
-}
-var toolchainArm64Singleton = &toolchainArm64{}
+ toolchainCflags string
+ toolchainClangCflags string
+}
func (t *toolchainArm64) Name() string {
return "arm64"
@@ -125,6 +152,10 @@
return arm64GccVersion
}
+func (t *toolchainArm64) ToolchainCflags() string {
+ return t.toolchainCflags
+}
+
func (t *toolchainArm64) Cflags() string {
return "${arm64Cflags}"
}
@@ -157,8 +188,19 @@
return "${arm64Ldflags}"
}
+func (t *toolchainArm64) ToolchainClangCflags() string {
+ return t.toolchainClangCflags
+}
+
func arm64ToolchainFactory(arch common.Arch) Toolchain {
- return toolchainArm64Singleton
+ if arch.ArchVariant != "armv8-a" {
+ panic(fmt.Sprintf("Unknown ARM architecture version: %q", arch.ArchVariant))
+ }
+
+ return &toolchainArm64{
+ toolchainCflags: variantOrDefault(arm64CpuVariantCflagsVar, arch.CpuVariant),
+ toolchainClangCflags: variantOrDefault(arm64ClangCpuVariantCflagsVar, arch.CpuVariant),
+ }
}
func init() {