Enable arm_on_x86 mode when arm is a secondary arch
Enable arm_on_x86 mode whenever compiling for x86 on the device,
and either arm is listed as an ABI on the x86 arch, or arm exists
as a target arch.
Bug: 35286489
Test: examine bcc cflags
Change-Id: Iebd0e7b95f584d25773a60474c27425cac7a578e
diff --git a/android/arch.go b/android/arch.go
index f9697bc..2d0515f 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -716,17 +716,19 @@
prefix := "target.android32"
a.appendProperties(ctx, genProps, targetProp, field, prefix)
}
- }
- if arch.ArchType == X86 && hasArmAbi(arch) {
- field := "Arm_on_x86"
- prefix := "target.arm_on_x86"
- a.appendProperties(ctx, genProps, targetProp, field, prefix)
- }
- if arch.ArchType == X86_64 && hasArmAbi(arch) {
- field := "Arm_on_x86_64"
- prefix := "target.arm_on_x86_64"
- a.appendProperties(ctx, genProps, targetProp, field, prefix)
+ if arch.ArchType == X86 && (hasArmAbi(arch) ||
+ hasArmAndroidArch(ctx.AConfig().Targets[Device])) {
+ field := "Arm_on_x86"
+ prefix := "target.arm_on_x86"
+ a.appendProperties(ctx, genProps, targetProp, field, prefix)
+ }
+ if arch.ArchType == X86_64 && (hasArmAbi(arch) ||
+ hasArmAndroidArch(ctx.AConfig().Targets[Device])) {
+ field := "Arm_on_x86_64"
+ prefix := "target.arm_on_x86_64"
+ a.appendProperties(ctx, genProps, targetProp, field, prefix)
+ }
}
}
}
@@ -835,6 +837,16 @@
return false
}
+// hasArmArch returns true if targets has at least arm Android arch
+func hasArmAndroidArch(targets []Target) bool {
+ for _, target := range targets {
+ if target.Os == Android && target.Arch.ArchType == Arm {
+ return true
+ }
+ }
+ return false
+}
+
type archConfig struct {
arch string
archVariant string