blob: 9ca03bac8a85bcf54893ffe17c62d3cd14f16c3d [file] [log] [blame]
Colin Cross0af4b842015-04-30 16:36:18 -07001package cc
2
3import (
Colin Cross0af4b842015-04-30 16:36:18 -07004 "strings"
5
6 "android/soong/common"
7)
8
9var (
10 darwinCflags = []string{
11 "-fno-exceptions", // from build/core/combo/select.mk
12 "-Wno-multichar", // from build/core/combo/select.mk
13
Dan Willemsen490fd492015-11-24 17:53:15 -080014 "-fdiagnostics-color",
15
Colin Cross0af4b842015-04-30 16:36:18 -070016 "-fPIC",
17 "-funwind-tables",
Colin Cross0af4b842015-04-30 16:36:18 -070018
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",
Dan Willemsen3bf6b472015-09-11 17:41:10 -070055 "-Wl,-rpath,@loader_path/lib",
Colin Cross0af4b842015-04-30 16:36:18 -070056 }
57
58 darwinX8664Ldflags = []string{
59 "-m64",
60 "-Wl,-rpath,@loader_path/../lib64",
Dan Willemsen3bf6b472015-09-11 17:41:10 -070061 "-Wl,-rpath,@loader_path/lib64",
Colin Cross0af4b842015-04-30 16:36:18 -070062 }
63
64 darwinClangCflags = append([]string{
65 "-integrated-as",
66 }, clangFilterUnknownCflags(darwinCflags)...)
67
68 darwinClangLdflags = clangFilterUnknownCflags(darwinLdflags)
69
70 darwinX86ClangLdflags = clangFilterUnknownCflags(darwinX86Ldflags)
71
72 darwinX8664ClangLdflags = clangFilterUnknownCflags(darwinX8664Ldflags)
73
74 darwinClangCppflags = clangFilterUnknownCflags(darwinCppflags)
75)
76
77func init() {
78 pctx.StaticVariable("macSdkPath", "/Applications/Xcode.app/Contents/Developer")
79 pctx.StaticVariable("macSdkRoot", "${macSdkPath}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk")
80
81 pctx.StaticVariable("darwinGccVersion", "4.2.1")
82 pctx.StaticVariable("darwinGccRoot",
83 "${SrcDir}/prebuilts/gcc/${HostPrebuiltTag}/host/i686-apple-darwin-${darwinGccVersion}")
84
85 pctx.StaticVariable("darwinGccTriple", "i686-apple-darwin11")
86
87 pctx.StaticVariable("darwinCflags", strings.Join(darwinCflags, " "))
88 pctx.StaticVariable("darwinLdflags", strings.Join(darwinLdflags, " "))
89 pctx.StaticVariable("darwinCppflags", strings.Join(darwinCppflags, " "))
90
91 pctx.StaticVariable("darwinClangCflags", strings.Join(darwinClangCflags, " "))
92 pctx.StaticVariable("darwinClangLdflags", strings.Join(darwinClangLdflags, " "))
93 pctx.StaticVariable("darwinClangCppflags", strings.Join(darwinClangCppflags, " "))
94
95 // Extended cflags
96 pctx.StaticVariable("darwinX86Cflags", strings.Join(darwinX86Cflags, " "))
97 pctx.StaticVariable("darwinX8664Cflags", strings.Join(darwinX8664Cflags, " "))
98 pctx.StaticVariable("darwinX86Ldflags", strings.Join(darwinX86Ldflags, " "))
99 pctx.StaticVariable("darwinX8664Ldflags", strings.Join(darwinX8664Ldflags, " "))
100
101 pctx.StaticVariable("darwinX86ClangCflags",
102 strings.Join(clangFilterUnknownCflags(darwinX86Cflags), " "))
103 pctx.StaticVariable("darwinX8664ClangCflags",
104 strings.Join(clangFilterUnknownCflags(darwinX8664Cflags), " "))
105 pctx.StaticVariable("darwinX86ClangLdflags", strings.Join(darwinX86ClangLdflags, " "))
106 pctx.StaticVariable("darwinX8664ClangLdflags", strings.Join(darwinX8664ClangLdflags, " "))
107}
108
109type toolchainDarwin struct {
110 cFlags, ldFlags string
111}
112
113type toolchainDarwinX86 struct {
114 toolchain32Bit
115 toolchainDarwin
116}
117
118type toolchainDarwinX8664 struct {
119 toolchain64Bit
120 toolchainDarwin
121}
122
123func (t *toolchainDarwinX86) Name() string {
124 return "x86"
125}
126
127func (t *toolchainDarwinX8664) Name() string {
128 return "x86_64"
129}
130
131func (t *toolchainDarwin) GccRoot() string {
132 return "${darwinGccRoot}"
133}
134
135func (t *toolchainDarwin) GccTriple() string {
136 return "${darwinGccTriple}"
137}
138
139func (t *toolchainDarwin) GccVersion() string {
140 return "${darwinGccVersion}"
141}
142
143func (t *toolchainDarwin) Cflags() string {
144 return "${darwinCflags} ${darwinX86Cflags}"
145}
146
147func (t *toolchainDarwinX8664) Cflags() string {
148 return "${darwinCflags} ${darwinX8664Cflags}"
149}
150
151func (t *toolchainDarwin) Cppflags() string {
152 return "${darwinCppflags}"
153}
154
155func (t *toolchainDarwinX86) Ldflags() string {
156 return "${darwinLdflags} ${darwinX86Ldflags}"
157}
158
159func (t *toolchainDarwinX8664) Ldflags() string {
160 return "${darwinLdflags} ${darwinX8664Ldflags}"
161}
162
163func (t *toolchainDarwin) IncludeFlags() string {
164 return ""
165}
166
167func (t *toolchainDarwinX86) ClangTriple() string {
168 return "i686-darwin-gnu"
169}
170
171func (t *toolchainDarwinX86) ClangCflags() string {
172 return "${darwinClangCflags} ${darwinX86ClangCflags}"
173}
174
175func (t *toolchainDarwinX86) ClangCppflags() string {
176 return "${darwinClangCppflags}"
177}
178
179func (t *toolchainDarwinX8664) ClangTriple() string {
180 return "x86_64-darwin-gnu"
181}
182
183func (t *toolchainDarwinX8664) ClangCflags() string {
184 return "${darwinClangCflags} ${darwinX8664ClangCflags}"
185}
186
187func (t *toolchainDarwinX8664) ClangCppflags() string {
188 return "${darwinClangCppflags}"
189}
190
191func (t *toolchainDarwinX86) ClangLdflags() string {
192 return "${darwinClangLdflags} ${darwinX86ClangLdflags}"
193}
194
195func (t *toolchainDarwinX8664) ClangLdflags() string {
196 return "${darwinClangLdflags} ${darwinX8664ClangLdflags}"
197}
198
Dan Willemsen490fd492015-11-24 17:53:15 -0800199func (t *toolchainDarwin) ShlibSuffix() string {
200 return ".dylib"
201}
202
Colin Cross0af4b842015-04-30 16:36:18 -0700203var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
204var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}
205
Colin Crossc5c24ad2015-11-20 15:35:00 -0800206func darwinX86ToolchainFactory(arch common.Arch) Toolchain {
Colin Cross0af4b842015-04-30 16:36:18 -0700207 return toolchainDarwinX86Singleton
208}
209
Colin Crossc5c24ad2015-11-20 15:35:00 -0800210func darwinX8664ToolchainFactory(arch common.Arch) Toolchain {
Colin Cross0af4b842015-04-30 16:36:18 -0700211 return toolchainDarwinX8664Singleton
212}
213
214func init() {
Dan Willemsen490fd492015-11-24 17:53:15 -0800215 registerHostToolchainFactory(common.Darwin, common.X86, darwinX86ToolchainFactory)
216 registerHostToolchainFactory(common.Darwin, common.X86_64, darwinX8664ToolchainFactory)
Colin Cross0af4b842015-04-30 16:36:18 -0700217}