Add support for building on Darwin hosts
Add toolchain and build rules for building on Darwin.
Change-Id: I78e21f4051b2941182121b28c9ddfa24396ada41
diff --git a/cc/x86_darwin_host.go b/cc/x86_darwin_host.go
new file mode 100644
index 0000000..bed977d
--- /dev/null
+++ b/cc/x86_darwin_host.go
@@ -0,0 +1,213 @@
+package cc
+
+import (
+ "runtime"
+ "strings"
+
+ "android/soong/common"
+)
+
+var (
+ darwinCflags = []string{
+ "-fno-exceptions", // from build/core/combo/select.mk
+ "-Wno-multichar", // from build/core/combo/select.mk
+
+ "-fPIC",
+ "-funwind-tables",
+ "-include ${SrcDir}/build/core/combo/include/arch/darwin-x86/AndroidConfig.h",
+
+ // Workaround differences in inttypes.h between host and target.
+ //See bug 12708004.
+ "-D__STDC_FORMAT_MACROS",
+ "-D__STDC_CONSTANT_MACROS",
+
+ // HOST_RELEASE_CFLAGS
+ "-O2", // from build/core/combo/select.mk
+ "-g", // from build/core/combo/select.mk
+ "-fno-strict-aliasing", // from build/core/combo/select.mk
+ "-isysroot ${macSdkRoot}",
+ "-mmacosx-version-min=10.9",
+ "-DMACOSX_DEPLOYMENT_TARGET=10.9",
+ }
+
+ darwinCppflags = []string{
+ "-isystem ${macSdkPath}/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
+ }
+
+ darwinLdflags = []string{
+ "-isysroot ${macSdkRoot}",
+ "-Wl,-syslibroot,${macSdkRoot}",
+ "-mmacosx-version-min=10.9",
+ }
+
+ // Extended cflags
+ darwinX86Cflags = []string{
+ "-m32",
+ }
+
+ darwinX8664Cflags = []string{
+ "-m64",
+ }
+
+ darwinX86Ldflags = []string{
+ "-m32",
+ "-Wl,-rpath,@loader_path/../lib",
+ }
+
+ darwinX8664Ldflags = []string{
+ "-m64",
+ "-Wl,-rpath,@loader_path/../lib64",
+ }
+
+ darwinClangCflags = append([]string{
+ "-integrated-as",
+ }, clangFilterUnknownCflags(darwinCflags)...)
+
+ darwinClangLdflags = clangFilterUnknownCflags(darwinLdflags)
+
+ darwinX86ClangLdflags = clangFilterUnknownCflags(darwinX86Ldflags)
+
+ darwinX8664ClangLdflags = clangFilterUnknownCflags(darwinX8664Ldflags)
+
+ darwinClangCppflags = clangFilterUnknownCflags(darwinCppflags)
+)
+
+func init() {
+ pctx.StaticVariable("macSdkPath", "/Applications/Xcode.app/Contents/Developer")
+ pctx.StaticVariable("macSdkRoot", "${macSdkPath}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk")
+
+ pctx.StaticVariable("darwinGccVersion", "4.2.1")
+ pctx.StaticVariable("darwinGccRoot",
+ "${SrcDir}/prebuilts/gcc/${HostPrebuiltTag}/host/i686-apple-darwin-${darwinGccVersion}")
+
+ pctx.StaticVariable("darwinGccTriple", "i686-apple-darwin11")
+
+ pctx.StaticVariable("darwinCflags", strings.Join(darwinCflags, " "))
+ pctx.StaticVariable("darwinLdflags", strings.Join(darwinLdflags, " "))
+ pctx.StaticVariable("darwinCppflags", strings.Join(darwinCppflags, " "))
+
+ pctx.StaticVariable("darwinClangCflags", strings.Join(darwinClangCflags, " "))
+ pctx.StaticVariable("darwinClangLdflags", strings.Join(darwinClangLdflags, " "))
+ pctx.StaticVariable("darwinClangCppflags", strings.Join(darwinClangCppflags, " "))
+
+ // Extended cflags
+ pctx.StaticVariable("darwinX86Cflags", strings.Join(darwinX86Cflags, " "))
+ pctx.StaticVariable("darwinX8664Cflags", strings.Join(darwinX8664Cflags, " "))
+ pctx.StaticVariable("darwinX86Ldflags", strings.Join(darwinX86Ldflags, " "))
+ pctx.StaticVariable("darwinX8664Ldflags", strings.Join(darwinX8664Ldflags, " "))
+
+ pctx.StaticVariable("darwinX86ClangCflags",
+ strings.Join(clangFilterUnknownCflags(darwinX86Cflags), " "))
+ pctx.StaticVariable("darwinX8664ClangCflags",
+ strings.Join(clangFilterUnknownCflags(darwinX8664Cflags), " "))
+ pctx.StaticVariable("darwinX86ClangLdflags", strings.Join(darwinX86ClangLdflags, " "))
+ pctx.StaticVariable("darwinX8664ClangLdflags", strings.Join(darwinX8664ClangLdflags, " "))
+}
+
+type toolchainDarwin struct {
+ cFlags, ldFlags string
+}
+
+type toolchainDarwinX86 struct {
+ toolchain32Bit
+ toolchainDarwin
+}
+
+type toolchainDarwinX8664 struct {
+ toolchain64Bit
+ toolchainDarwin
+}
+
+func (t *toolchainDarwinX86) Name() string {
+ return "x86"
+}
+
+func (t *toolchainDarwinX8664) Name() string {
+ return "x86_64"
+}
+
+func (t *toolchainDarwin) GccRoot() string {
+ return "${darwinGccRoot}"
+}
+
+func (t *toolchainDarwin) GccTriple() string {
+ return "${darwinGccTriple}"
+}
+
+func (t *toolchainDarwin) GccVersion() string {
+ return "${darwinGccVersion}"
+}
+
+func (t *toolchainDarwin) Cflags() string {
+ return "${darwinCflags} ${darwinX86Cflags}"
+}
+
+func (t *toolchainDarwinX8664) Cflags() string {
+ return "${darwinCflags} ${darwinX8664Cflags}"
+}
+
+func (t *toolchainDarwin) Cppflags() string {
+ return "${darwinCppflags}"
+}
+
+func (t *toolchainDarwinX86) Ldflags() string {
+ return "${darwinLdflags} ${darwinX86Ldflags}"
+}
+
+func (t *toolchainDarwinX8664) Ldflags() string {
+ return "${darwinLdflags} ${darwinX8664Ldflags}"
+}
+
+func (t *toolchainDarwin) IncludeFlags() string {
+ return ""
+}
+
+func (t *toolchainDarwinX86) ClangTriple() string {
+ return "i686-darwin-gnu"
+}
+
+func (t *toolchainDarwinX86) ClangCflags() string {
+ return "${darwinClangCflags} ${darwinX86ClangCflags}"
+}
+
+func (t *toolchainDarwinX86) ClangCppflags() string {
+ return "${darwinClangCppflags}"
+}
+
+func (t *toolchainDarwinX8664) ClangTriple() string {
+ return "x86_64-darwin-gnu"
+}
+
+func (t *toolchainDarwinX8664) ClangCflags() string {
+ return "${darwinClangCflags} ${darwinX8664ClangCflags}"
+}
+
+func (t *toolchainDarwinX8664) ClangCppflags() string {
+ return "${darwinClangCppflags}"
+}
+
+func (t *toolchainDarwinX86) ClangLdflags() string {
+ return "${darwinClangLdflags} ${darwinX86ClangLdflags}"
+}
+
+func (t *toolchainDarwinX8664) ClangLdflags() string {
+ return "${darwinClangLdflags} ${darwinX8664ClangLdflags}"
+}
+
+var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
+var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}
+
+func darwinX86ToolchainFactory(archVariant string, cpuVariant string) Toolchain {
+ return toolchainDarwinX86Singleton
+}
+
+func darwinX8664ToolchainFactory(archVariant string, cpuVariant string) Toolchain {
+ return toolchainDarwinX8664Singleton
+}
+
+func init() {
+ if runtime.GOOS == "darwin" {
+ registerToolchainFactory(common.Host, common.X86, darwinX86ToolchainFactory)
+ registerToolchainFactory(common.Host, common.X86_64, darwinX8664ToolchainFactory)
+ }
+}