Add arch features

Allow architecture toolchains to register "features" supported by the
current variant, and then apply properties from the selected features.
Equivalent to the ARCH_*_HAS_* variables in the combo makefiles.

Change-Id: Ib6823be1c1a52da677d081db9f24336a072eaf39
diff --git a/cc/arm_device.go b/cc/arm_device.go
index 8f3485e..f168811 100644
--- a/cc/arm_device.go
+++ b/cc/arm_device.go
@@ -306,9 +306,9 @@
 	}
 }
 
-func armToolchainFactory(archVariant string, cpuVariant string) Toolchain {
+func armToolchainFactory(arch common.Arch) Toolchain {
 	var fixCortexA8 string
-	switch cpuVariant {
+	switch arch.CpuVariant {
 	case "cortex-a8", "":
 		// Generic ARM might be a Cortex A8 -- better safe than sorry
 		fixCortexA8 = "-Wl,--fix-cortex-a8"
@@ -319,8 +319,8 @@
 	return &toolchainArm{
 		cflags: strings.Join([]string{
 			"${armCflags}",
-			armArchVariantCflagsVar[archVariant],
-			armCpuVariantCflagsVar[cpuVariant],
+			armArchVariantCflagsVar[arch.ArchVariant],
+			armCpuVariantCflagsVar[arch.CpuVariant],
 		}, " "),
 		ldflags: strings.Join([]string{
 			"${armLdflags}",
@@ -328,8 +328,8 @@
 		}, " "),
 		clangCflags: strings.Join([]string{
 			"${armClangCflags}",
-			armClangArchVariantCflagsVar[archVariant],
-			armClangCpuVariantCflagsVar[cpuVariant],
+			armClangArchVariantCflagsVar[arch.ArchVariant],
+			armClangCpuVariantCflagsVar[arch.CpuVariant],
 		}, " "),
 	}
 }