Simplify arch target handling
Soong's multi-architecture building has grown complex, with the
combination of HostOrDevice+HostType+Arch necessary to determine how to
build a variant of a module, and three separate mutators to split each
into its variations.
Combine HostOrDevice+HostType into Os, which will be Linux, Darwin,
Windows, or Android. Store Os+Arch as a single Target.
Change-Id: I92f2e2dac53617d595a35cc285d2bd348baa0fbd
diff --git a/cc/toolchain.go b/cc/toolchain.go
index efb7953..87657ef 100644
--- a/cc/toolchain.go
+++ b/cc/toolchain.go
@@ -22,23 +22,13 @@
type toolchainFactory func(arch android.Arch) Toolchain
-var toolchainFactories = map[android.HostOrDevice]map[android.HostType]map[android.ArchType]toolchainFactory{
- android.Host: map[android.HostType]map[android.ArchType]toolchainFactory{
- android.Linux: make(map[android.ArchType]toolchainFactory),
- android.Darwin: make(map[android.ArchType]toolchainFactory),
- android.Windows: make(map[android.ArchType]toolchainFactory),
- },
- android.Device: map[android.HostType]map[android.ArchType]toolchainFactory{
- android.NoHostType: make(map[android.ArchType]toolchainFactory),
- },
-}
+var toolchainFactories = make(map[android.OsType]map[android.ArchType]toolchainFactory)
-func registerDeviceToolchainFactory(arch android.ArchType, factory toolchainFactory) {
- toolchainFactories[android.Device][android.NoHostType][arch] = factory
-}
-
-func registerHostToolchainFactory(ht android.HostType, arch android.ArchType, factory toolchainFactory) {
- toolchainFactories[android.Host][ht][arch] = factory
+func registerToolchainFactory(os android.OsType, arch android.ArchType, factory toolchainFactory) {
+ if toolchainFactories[os] == nil {
+ toolchainFactories[os] = make(map[android.ArchType]toolchainFactory)
+ }
+ toolchainFactories[os][arch] = factory
}
type Toolchain interface {