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