blob: be4093343e2a6b190367758ad363827a5f40b8ee [file] [log] [blame]
Colin Cross0af4b842015-04-30 16:36:18 -07001package cc
2
3import (
4 "runtime"
5 "strings"
6
7 "android/soong/common"
8)
9
10var (
11 darwinCflags = []string{
12 "-fno-exceptions", // from build/core/combo/select.mk
13 "-Wno-multichar", // from build/core/combo/select.mk
14
15 "-fPIC",
16 "-funwind-tables",
Colin Cross0af4b842015-04-30 16:36:18 -070017
18 // Workaround differences in inttypes.h between host and target.
19 //See bug 12708004.
20 "-D__STDC_FORMAT_MACROS",
21 "-D__STDC_CONSTANT_MACROS",
22
23 // HOST_RELEASE_CFLAGS
24 "-O2", // from build/core/combo/select.mk
25 "-g", // from build/core/combo/select.mk
26 "-fno-strict-aliasing", // from build/core/combo/select.mk
27 "-isysroot ${macSdkRoot}",
28 "-mmacosx-version-min=10.9",
29 "-DMACOSX_DEPLOYMENT_TARGET=10.9",
30 }
31
32 darwinCppflags = []string{
33 "-isystem ${macSdkPath}/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
34 }
35
36 darwinLdflags = []string{
37 "-isysroot ${macSdkRoot}",
38 "-Wl,-syslibroot,${macSdkRoot}",
39 "-mmacosx-version-min=10.9",
40 }
41
42 // Extended cflags
43 darwinX86Cflags = []string{
44 "-m32",
45 }
46
47 darwinX8664Cflags = []string{
48 "-m64",
49 }
50
51 darwinX86Ldflags = []string{
52 "-m32",
53 "-Wl,-rpath,@loader_path/../lib",
Dan Willemsen3bf6b472015-09-11 17:41:10 -070054 "-Wl,-rpath,@loader_path/lib",
Colin Cross0af4b842015-04-30 16:36:18 -070055 }
56
57 darwinX8664Ldflags = []string{
58 "-m64",
59 "-Wl,-rpath,@loader_path/../lib64",
Dan Willemsen3bf6b472015-09-11 17:41:10 -070060 "-Wl,-rpath,@loader_path/lib64",
Colin Cross0af4b842015-04-30 16:36:18 -070061 }
62
63 darwinClangCflags = append([]string{
64 "-integrated-as",
65 }, clangFilterUnknownCflags(darwinCflags)...)
66
67 darwinClangLdflags = clangFilterUnknownCflags(darwinLdflags)
68
69 darwinX86ClangLdflags = clangFilterUnknownCflags(darwinX86Ldflags)
70
71 darwinX8664ClangLdflags = clangFilterUnknownCflags(darwinX8664Ldflags)
72
73 darwinClangCppflags = clangFilterUnknownCflags(darwinCppflags)
74)
75
76func init() {
77 pctx.StaticVariable("macSdkPath", "/Applications/Xcode.app/Contents/Developer")
78 pctx.StaticVariable("macSdkRoot", "${macSdkPath}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk")
79
80 pctx.StaticVariable("darwinGccVersion", "4.2.1")
81 pctx.StaticVariable("darwinGccRoot",
82 "${SrcDir}/prebuilts/gcc/${HostPrebuiltTag}/host/i686-apple-darwin-${darwinGccVersion}")
83
84 pctx.StaticVariable("darwinGccTriple", "i686-apple-darwin11")
85
86 pctx.StaticVariable("darwinCflags", strings.Join(darwinCflags, " "))
87 pctx.StaticVariable("darwinLdflags", strings.Join(darwinLdflags, " "))
88 pctx.StaticVariable("darwinCppflags", strings.Join(darwinCppflags, " "))
89
90 pctx.StaticVariable("darwinClangCflags", strings.Join(darwinClangCflags, " "))
91 pctx.StaticVariable("darwinClangLdflags", strings.Join(darwinClangLdflags, " "))
92 pctx.StaticVariable("darwinClangCppflags", strings.Join(darwinClangCppflags, " "))
93
94 // Extended cflags
95 pctx.StaticVariable("darwinX86Cflags", strings.Join(darwinX86Cflags, " "))
96 pctx.StaticVariable("darwinX8664Cflags", strings.Join(darwinX8664Cflags, " "))
97 pctx.StaticVariable("darwinX86Ldflags", strings.Join(darwinX86Ldflags, " "))
98 pctx.StaticVariable("darwinX8664Ldflags", strings.Join(darwinX8664Ldflags, " "))
99
100 pctx.StaticVariable("darwinX86ClangCflags",
101 strings.Join(clangFilterUnknownCflags(darwinX86Cflags), " "))
102 pctx.StaticVariable("darwinX8664ClangCflags",
103 strings.Join(clangFilterUnknownCflags(darwinX8664Cflags), " "))
104 pctx.StaticVariable("darwinX86ClangLdflags", strings.Join(darwinX86ClangLdflags, " "))
105 pctx.StaticVariable("darwinX8664ClangLdflags", strings.Join(darwinX8664ClangLdflags, " "))
106}
107
108type toolchainDarwin struct {
109 cFlags, ldFlags string
110}
111
112type toolchainDarwinX86 struct {
113 toolchain32Bit
114 toolchainDarwin
115}
116
117type toolchainDarwinX8664 struct {
118 toolchain64Bit
119 toolchainDarwin
120}
121
122func (t *toolchainDarwinX86) Name() string {
123 return "x86"
124}
125
126func (t *toolchainDarwinX8664) Name() string {
127 return "x86_64"
128}
129
130func (t *toolchainDarwin) GccRoot() string {
131 return "${darwinGccRoot}"
132}
133
134func (t *toolchainDarwin) GccTriple() string {
135 return "${darwinGccTriple}"
136}
137
138func (t *toolchainDarwin) GccVersion() string {
139 return "${darwinGccVersion}"
140}
141
142func (t *toolchainDarwin) Cflags() string {
143 return "${darwinCflags} ${darwinX86Cflags}"
144}
145
146func (t *toolchainDarwinX8664) Cflags() string {
147 return "${darwinCflags} ${darwinX8664Cflags}"
148}
149
150func (t *toolchainDarwin) Cppflags() string {
151 return "${darwinCppflags}"
152}
153
154func (t *toolchainDarwinX86) Ldflags() string {
155 return "${darwinLdflags} ${darwinX86Ldflags}"
156}
157
158func (t *toolchainDarwinX8664) Ldflags() string {
159 return "${darwinLdflags} ${darwinX8664Ldflags}"
160}
161
162func (t *toolchainDarwin) IncludeFlags() string {
163 return ""
164}
165
166func (t *toolchainDarwinX86) ClangTriple() string {
167 return "i686-darwin-gnu"
168}
169
170func (t *toolchainDarwinX86) ClangCflags() string {
171 return "${darwinClangCflags} ${darwinX86ClangCflags}"
172}
173
174func (t *toolchainDarwinX86) ClangCppflags() string {
175 return "${darwinClangCppflags}"
176}
177
178func (t *toolchainDarwinX8664) ClangTriple() string {
179 return "x86_64-darwin-gnu"
180}
181
182func (t *toolchainDarwinX8664) ClangCflags() string {
183 return "${darwinClangCflags} ${darwinX8664ClangCflags}"
184}
185
186func (t *toolchainDarwinX8664) ClangCppflags() string {
187 return "${darwinClangCppflags}"
188}
189
190func (t *toolchainDarwinX86) ClangLdflags() string {
191 return "${darwinClangLdflags} ${darwinX86ClangLdflags}"
192}
193
194func (t *toolchainDarwinX8664) ClangLdflags() string {
195 return "${darwinClangLdflags} ${darwinX8664ClangLdflags}"
196}
197
198var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
199var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}
200
201func darwinX86ToolchainFactory(archVariant string, cpuVariant string) Toolchain {
202 return toolchainDarwinX86Singleton
203}
204
205func darwinX8664ToolchainFactory(archVariant string, cpuVariant string) Toolchain {
206 return toolchainDarwinX8664Singleton
207}
208
209func init() {
210 if runtime.GOOS == "darwin" {
211 registerToolchainFactory(common.Host, common.X86, darwinX86ToolchainFactory)
212 registerToolchainFactory(common.Host, common.X86_64, darwinX8664ToolchainFactory)
213 }
214}