Dynamically generate arch struct

Now we don't need to hardcode the list of OS/Arch/Variant/Features in
android/arch.go.

Change-Id: I0f9cc35d55baa31f036825fdf5b9dd30d076e56e
diff --git a/cc/config/x86_device.go b/cc/config/x86_device.go
index 4667caa..6b55564 100644
--- a/cc/config/x86_device.go
+++ b/cc/config/x86_device.go
@@ -113,16 +113,14 @@
 )
 
 func init() {
-	android.RegisterArchFeatures(android.X86, "x86_64",
-		"ssse3",
-		"sse4",
-		"sse4_1",
-		"sse4_2",
-		"popcnt")
-	android.RegisterArchFeatures(android.X86, "atom",
-		"ssse3",
-		"movbe")
-	android.RegisterArchFeatures(android.X86, "haswell",
+	android.RegisterArchVariants(android.X86,
+		"atom",
+		"haswell",
+		"ivybridge",
+		"sandybridge",
+		"silvermont",
+		"x86_64")
+	android.RegisterArchFeatures(android.X86,
 		"ssse3",
 		"sse4",
 		"sse4_1",
@@ -131,7 +129,25 @@
 		"avx",
 		"popcnt",
 		"movbe")
-	android.RegisterArchFeatures(android.X86, "ivybridge",
+	android.RegisterArchVariantFeatures(android.X86, "x86_64",
+		"ssse3",
+		"sse4",
+		"sse4_1",
+		"sse4_2",
+		"popcnt")
+	android.RegisterArchVariantFeatures(android.X86, "atom",
+		"ssse3",
+		"movbe")
+	android.RegisterArchVariantFeatures(android.X86, "haswell",
+		"ssse3",
+		"sse4",
+		"sse4_1",
+		"sse4_2",
+		"aes_ni",
+		"avx",
+		"popcnt",
+		"movbe")
+	android.RegisterArchVariantFeatures(android.X86, "ivybridge",
 		"ssse3",
 		"sse4",
 		"sse4_1",
@@ -139,13 +155,13 @@
 		"aes_ni",
 		"avx",
 		"popcnt")
-	android.RegisterArchFeatures(android.X86, "sandybridge",
+	android.RegisterArchVariantFeatures(android.X86, "sandybridge",
 		"ssse3",
 		"sse4",
 		"sse4_1",
 		"sse4_2",
 		"popcnt")
-	android.RegisterArchFeatures(android.X86, "silvermont",
+	android.RegisterArchVariantFeatures(android.X86, "silvermont",
 		"ssse3",
 		"sse4",
 		"sse4_1",