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/toolchain.go b/cc/toolchain.go
index 71a8979..5e4d02f 100644
--- a/cc/toolchain.go
+++ b/cc/toolchain.go
@@ -22,15 +22,23 @@
type toolchainFactory func(arch common.Arch) Toolchain
-var toolchainFactories = map[common.HostOrDevice]map[common.ArchType]toolchainFactory{
- common.Host: make(map[common.ArchType]toolchainFactory),
- common.Device: make(map[common.ArchType]toolchainFactory),
+var toolchainFactories = map[common.HostOrDevice]map[common.HostType]map[common.ArchType]toolchainFactory{
+ common.Host: map[common.HostType]map[common.ArchType]toolchainFactory{
+ common.Linux: make(map[common.ArchType]toolchainFactory),
+ common.Darwin: make(map[common.ArchType]toolchainFactory),
+ common.Windows: make(map[common.ArchType]toolchainFactory),
+ },
+ common.Device: map[common.HostType]map[common.ArchType]toolchainFactory{
+ common.NoHostType: make(map[common.ArchType]toolchainFactory),
+ },
}
-func registerToolchainFactory(hod common.HostOrDevice, arch common.ArchType,
- factory toolchainFactory) {
+func registerDeviceToolchainFactory(arch common.ArchType, factory toolchainFactory) {
+ toolchainFactories[common.Device][common.NoHostType][arch] = factory
+}
- toolchainFactories[hod][arch] = factory
+func registerHostToolchainFactory(ht common.HostType, arch common.ArchType, factory toolchainFactory) {
+ toolchainFactories[common.Host][ht][arch] = factory
}
type Toolchain interface {
@@ -47,6 +55,7 @@
IncludeFlags() string
InstructionSetFlags(string) (string, error)
+ ClangSupported() bool
ClangTriple() string
ToolchainClangCflags() string
ClangCflags() string
@@ -55,6 +64,9 @@
ClangInstructionSetFlags(string) (string, error)
Is64Bit() bool
+
+ ShlibSuffix() string
+ ExecutableSuffix() string
}
type toolchainBase struct {
@@ -86,6 +98,18 @@
return ""
}
+func (toolchainBase) ClangSupported() bool {
+ return true
+}
+
+func (toolchainBase) ShlibSuffix() string {
+ return ".so"
+}
+
+func (toolchainBase) ExecutableSuffix() string {
+ return ""
+}
+
type toolchain64Bit struct {
toolchainBase
}