diff options
Diffstat (limited to 'cc/config/arm64_device.go')
| -rw-r--r-- | cc/config/arm64_device.go | 67 |
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, " "), } } |
