aboutsummaryrefslogtreecommitdiff
path: root/cc/config/arm64_device.go
diff options
context:
space:
mode:
Diffstat (limited to 'cc/config/arm64_device.go')
-rw-r--r--cc/config/arm64_device.go67
1 files changed, 20 insertions, 47 deletions
diff --git a/cc/config/arm64_device.go b/cc/config/arm64_device.go
index 25edb798d..332c138c7 100644
--- a/cc/config/arm64_device.go
+++ b/cc/config/arm64_device.go
@@ -28,38 +28,21 @@ var (
}
arm64ArchVariantCflags = map[string][]string{
- "armv8-a": []string{
- "-march=armv8-a",
- },
- "armv8-a-branchprot": []string{
- "-march=armv8-a",
- "-mbranch-protection=standard",
- },
- "armv8-2a": []string{
- "-march=armv8.2-a",
- },
- "armv8-2a-dotprod": []string{
- "-march=armv8.2-a+dotprod",
- },
- // On ARMv9 and later, Pointer Authentication Codes (PAC) are mandatory,
- // so -fstack-protector is unnecessary.
- "armv9-a": []string{
- "-march=armv9-a",
- "-mbranch-protection=standard",
- "-fno-stack-protector",
- },
- "armv9-2a": []string{
- "-march=armv9.2-a",
- "-mbranch-protection=standard",
- "-fno-stack-protector",
- },
- "armv9-3a": []string{
- "-march=armv9.3-a",
- "-mbranch-protection=standard",
- "-fno-stack-protector",
- },
- "armv9-4a": []string{
- "-march=armv9.4-a",
+ "armv8-a": {"-march=armv8-a"},
+ "armv8-a-branchprot": {"-march=armv8-a"},
+ "armv8-2a": {"-march=armv8.2-a"},
+ "armv8-2a-dotprod": {"-march=armv8.2-a+dotprod"},
+ "armv8-5a": {"-march=armv8.5-a"},
+ "armv8-7a": {"-march=armv8.7-a"},
+ "armv9-a": {"-march=armv9-a"},
+ "armv9-2a": {"-march=armv9.2-a"},
+ "armv9-3a": {"-march=armv9.3-a"},
+ "armv9-4a": {"-march=armv9.4-a"},
+ }
+
+ arm64ArchFeatureCflags = map[string][]string{
+ // When Pointer Authentication Codes (PAC) are available, -fstack-protector is unnecessary.
+ "branchprot": {
"-mbranch-protection=standard",
"-fno-stack-protector",
},
@@ -70,8 +53,6 @@ var (
"-Wl,-z,separate-loadable-segments",
}
- arm64Lldflags = arm64Ldflags
-
arm64Cppflags = []string{}
arm64CpuVariantCflags = map[string][]string{
@@ -108,11 +89,9 @@ var (
)
func init() {
- pctx.StaticVariable("Arm64Ldflags", strings.Join(arm64Ldflags, " "))
-
- pctx.VariableFunc("Arm64Lldflags", func(ctx android.PackageVarContext) string {
+ pctx.VariableFunc("Arm64Ldflags", func(ctx android.PackageVarContext) string {
maxPageSizeFlag := "-Wl,-z,max-page-size=" + ctx.Config().MaxPageSizeSupported()
- flags := append(arm64Lldflags, maxPageSizeFlag)
+ flags := append(arm64Ldflags, maxPageSizeFlag)
return strings.Join(flags, " ")
})
@@ -170,7 +149,6 @@ type toolchainArm64 struct {
toolchain64Bit
ldflags string
- lldflags string
toolchainCflags string
}
@@ -198,10 +176,6 @@ func (t *toolchainArm64) Ldflags() string {
return t.ldflags
}
-func (t *toolchainArm64) Lldflags() string {
- return t.lldflags
-}
-
func (t *toolchainArm64) ToolchainCflags() string {
return t.toolchainCflags
}
@@ -219,6 +193,9 @@ func arm64ToolchainFactory(arch android.Arch) Toolchain {
toolchainCflags := []string{"${config.Arm64" + arch.ArchVariant + "VariantCflags}"}
toolchainCflags = append(toolchainCflags,
variantOrDefault(arm64CpuVariantCflagsVar, arch.CpuVariant))
+ for _, feature := range arch.ArchFeatures {
+ toolchainCflags = append(toolchainCflags, arm64ArchFeatureCflags[feature]...)
+ }
extraLdflags := variantOrDefault(arm64CpuVariantLdflags, arch.CpuVariant)
return &toolchainArm64{
@@ -226,10 +203,6 @@ func arm64ToolchainFactory(arch android.Arch) Toolchain {
"${config.Arm64Ldflags}",
extraLdflags,
}, " "),
- lldflags: strings.Join([]string{
- "${config.Arm64Lldflags}",
- extraLdflags,
- }, " "),
toolchainCflags: strings.Join(toolchainCflags, " "),
}
}