Support cross-compiling Windows binaries on Linux

This defines another mutator between HostOrDevice and Arch that will
expand host modules into a module for each host type
(Darwin/Linux/Windows) that is currently being built.

Change-Id: I4c8ac6b616c229f6bd45ad8a35902652fb6a4fff
diff --git a/cc/x86_darwin_host.go b/cc/x86_darwin_host.go
index 4195dae..9ca03ba 100644
--- a/cc/x86_darwin_host.go
+++ b/cc/x86_darwin_host.go
@@ -1,7 +1,6 @@
 package cc
 
 import (
-	"runtime"
 	"strings"
 
 	"android/soong/common"
@@ -12,6 +11,8 @@
 		"-fno-exceptions", // from build/core/combo/select.mk
 		"-Wno-multichar",  // from build/core/combo/select.mk
 
+		"-fdiagnostics-color",
+
 		"-fPIC",
 		"-funwind-tables",
 
@@ -195,6 +196,10 @@
 	return "${darwinClangLdflags} ${darwinX8664ClangLdflags}"
 }
 
+func (t *toolchainDarwin) ShlibSuffix() string {
+	return ".dylib"
+}
+
 var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
 var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}
 
@@ -207,8 +212,6 @@
 }
 
 func init() {
-	if runtime.GOOS == "darwin" {
-		registerToolchainFactory(common.Host, common.X86, darwinX86ToolchainFactory)
-		registerToolchainFactory(common.Host, common.X86_64, darwinX8664ToolchainFactory)
-	}
+	registerHostToolchainFactory(common.Darwin, common.X86, darwinX86ToolchainFactory)
+	registerHostToolchainFactory(common.Darwin, common.X86_64, darwinX8664ToolchainFactory)
 }