Move arch variants registering code to arch.go.
This enables using arch-dependent property values in modules defined in
android/.
Bug: 122332178
Test: Soong tests + TreeHugger
Change-Id: I89869e395fabf0e69f505b77eab8a4221384124e
diff --git a/android/arch.go b/android/arch.go
index e8d9c6e..0180b87 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -103,21 +103,217 @@
}
*/
-var archVariants = map[ArchType][]string{}
-var archFeatures = map[ArchType][]string{}
-var archFeatureMap = map[ArchType]map[string][]string{}
+var archVariants = map[ArchType][]string{
+ Arm: {
+ "armv7-a",
+ "armv7-a-neon",
+ "armv8-a",
+ "armv8-2a",
+ "cortex-a7",
+ "cortex-a8",
+ "cortex-a9",
+ "cortex-a15",
+ "cortex-a53",
+ "cortex-a53-a57",
+ "cortex-a55",
+ "cortex-a72",
+ "cortex-a73",
+ "cortex-a75",
+ "cortex-a76",
+ "krait",
+ "kryo",
+ "kryo385",
+ "exynos-m1",
+ "exynos-m2",
+ },
+ Arm64: {
+ "armv8_a",
+ "armv8_2a",
+ "cortex-a53",
+ "cortex-a55",
+ "cortex-a72",
+ "cortex-a73",
+ "cortex-a75",
+ "cortex-a76",
+ "kryo",
+ "kryo385",
+ "exynos-m1",
+ "exynos-m2",
+ },
+ Mips: {
+ "mips32_fp",
+ "mips32r2_fp",
+ "mips32r2_fp_xburst",
+ "mips32r2dsp_fp",
+ "mips32r2dspr2_fp",
+ "mips32r6",
+ },
+ Mips64: {
+ "mips64r2",
+ "mips64r6",
+ },
+ X86: {
+ "atom",
+ "haswell",
+ "ivybridge",
+ "sandybridge",
+ "silvermont",
+ "x86_64",
+ },
+ X86_64: {
+ "haswell",
+ "ivybridge",
+ "sandybridge",
+ "silvermont",
+ },
+}
+
+var archFeatures = map[ArchType][]string{
+ Arm: {
+ "neon",
+ },
+ Mips: {
+ "dspr2",
+ "rev6",
+ "msa",
+ },
+ Mips64: {
+ "rev6",
+ "msa",
+ },
+ X86: {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "avx",
+ "popcnt",
+ "movbe",
+ },
+ X86_64: {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "avx",
+ "popcnt",
+ },
+}
+
+var archFeatureMap = map[ArchType]map[string][]string{
+ Arm: {
+ "armv7-a-neon": {
+ "neon",
+ },
+ "armv8-a": {
+ "neon",
+ },
+ "armv8-2a": {
+ "neon",
+ },
+ },
+ Mips: {
+ "mips32r2dspr2_fp": {
+ "dspr2",
+ },
+ "mips32r6": {
+ "rev6",
+ },
+ },
+ Mips64: {
+ "mips64r6": {
+ "rev6",
+ },
+ },
+ X86: {
+ "atom": {
+ "ssse3",
+ "movbe",
+ },
+ "haswell": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "avx",
+ "popcnt",
+ "movbe",
+ },
+ "ivybridge": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "avx",
+ "popcnt",
+ },
+ "sandybridge": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ },
+ "silvermont": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "popcnt",
+ "movbe",
+ },
+ "x86_64": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ },
+ },
+ X86_64: {
+ "haswell": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "avx",
+ "popcnt",
+ },
+ "ivybridge": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "avx",
+ "popcnt",
+ },
+ "sandybridge": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "popcnt",
+ },
+ "silvermont": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "popcnt",
+ },
+ },
+}
+
var defaultArchFeatureMap = map[OsType]map[ArchType][]string{}
-func RegisterArchVariants(arch ArchType, variants ...string) {
- checkCalledFromInit()
- archVariants[arch] = append(archVariants[arch], variants...)
-}
-
-func RegisterArchFeatures(arch ArchType, features ...string) {
- checkCalledFromInit()
- archFeatures[arch] = append(archFeatures[arch], features...)
-}
-
func RegisterDefaultArchVariantFeatures(os OsType, arch ArchType, features ...string) {
checkCalledFromInit()
@@ -133,24 +329,6 @@
defaultArchFeatureMap[os][arch] = features
}
-func RegisterArchVariantFeatures(arch ArchType, variant string, features ...string) {
- checkCalledFromInit()
- if !InList(variant, archVariants[arch]) {
- panic(fmt.Errorf("Invalid variant %q for arch %q", variant, arch))
- }
-
- for _, feature := range features {
- if !InList(feature, archFeatures[arch]) {
- panic(fmt.Errorf("Invalid feature %q for arch %q variant %q", feature, arch, variant))
- }
- }
-
- if archFeatureMap[arch] == nil {
- archFeatureMap[arch] = make(map[string][]string)
- }
- archFeatureMap[arch][variant] = features
-}
-
// An Arch indicates a single CPU architecture.
type Arch struct {
ArchType ArchType