blob: 3bf9671af9b37deffa7c65bad22e80954b7f8778 [file] [log] [blame]
Colin Cross3f40fa42015-01-30 17:27:36 -08001package cc
2
3import (
Colin Cross3f40fa42015-01-30 17:27:36 -08004 "strings"
5
6 "android/soong/common"
7)
8
9var (
10 linuxCflags = []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 Cross3f40fa42015-01-30 17:27:36 -080016 "-Wa,--noexecstack",
17
18 "-fPIC",
19 "-no-canonical-prefixes",
Colin Cross3f40fa42015-01-30 17:27:36 -080020
Colin Cross3f40fa42015-01-30 17:27:36 -080021 "-U_FORTIFY_SOURCE",
Dan Willemsen3bf6b472015-09-11 17:41:10 -070022 "-D_FORTIFY_SOURCE=2",
Colin Cross74d1ec02015-04-28 13:30:13 -070023 "-fstack-protector",
Colin Cross3f40fa42015-01-30 17:27:36 -080024
25 // Workaround differences in inttypes.h between host and target.
26 //See bug 12708004.
27 "-D__STDC_FORMAT_MACROS",
28 "-D__STDC_CONSTANT_MACROS",
29
30 // HOST_RELEASE_CFLAGS
31 "-O2", // from build/core/combo/select.mk
32 "-g", // from build/core/combo/select.mk
33 "-fno-strict-aliasing", // from build/core/combo/select.mk
34 }
35
36 linuxLdflags = []string{
37 "-Wl,-z,noexecstack",
38 "-Wl,-z,relro",
39 "-Wl,-z,now",
Dan Willemsenc7e45972015-12-09 13:05:28 -080040 "-Wl,--no-undefined-version",
Colin Cross3f40fa42015-01-30 17:27:36 -080041 }
42
43 // Extended cflags
44 linuxX86Cflags = []string{
45 "-msse3",
46 "-mfpmath=sse",
47 "-m32",
48 "-march=prescott",
Dan Willemsen3bf6b472015-09-11 17:41:10 -070049 "-D_FILE_OFFSET_BITS=64",
50 "-D_LARGEFILE_SOURCE=1",
Colin Cross3f40fa42015-01-30 17:27:36 -080051 }
52
53 linuxX8664Cflags = []string{
54 "-m64",
55 }
56
57 linuxX86Ldflags = []string{
58 "-m32",
Colin Cross8df14ac2015-04-07 16:52:05 -070059 `-Wl,-rpath,\$$ORIGIN/../lib`,
Dan Willemsen3bf6b472015-09-11 17:41:10 -070060 `-Wl,-rpath,\$$ORIGIN/lib`,
Colin Cross3f40fa42015-01-30 17:27:36 -080061 }
62
63 linuxX8664Ldflags = []string{
64 "-m64",
Colin Cross8df14ac2015-04-07 16:52:05 -070065 `-Wl,-rpath,\$$ORIGIN/../lib64`,
Dan Willemsen3bf6b472015-09-11 17:41:10 -070066 `-Wl,-rpath,\$$ORIGIN/lib64`,
Colin Cross3f40fa42015-01-30 17:27:36 -080067 }
68
69 linuxClangCflags = append([]string{
70 "--gcc-toolchain=${linuxGccRoot}",
71 "--sysroot=${linuxGccRoot}/sysroot",
72 }, clangFilterUnknownCflags(linuxCflags)...)
73
74 linuxClangLdflags = append([]string{
75 "--gcc-toolchain=${linuxGccRoot}",
76 "--sysroot=${linuxGccRoot}/sysroot",
77 }, clangFilterUnknownCflags(linuxLdflags)...)
78
79 linuxX86ClangLdflags = append([]string{
80 "-B${linuxGccRoot}/lib/gcc/${linuxGccTriple}/${linuxGccVersion}/32",
81 "-L${linuxGccRoot}/lib/gcc/${linuxGccTriple}/${linuxGccVersion}/32",
82 "-L${linuxGccRoot}/${linuxGccTriple}/lib32",
83 }, clangFilterUnknownCflags(linuxX86Ldflags)...)
84
85 linuxX8664ClangLdflags = append([]string{
86 "-B${linuxGccRoot}/lib/gcc/${linuxGccTriple}/${linuxGccVersion}",
87 "-L${linuxGccRoot}/lib/gcc/${linuxGccTriple}/${linuxGccVersion}",
88 "-L${linuxGccRoot}/${linuxGccTriple}/lib64",
89 }, clangFilterUnknownCflags(linuxX8664Ldflags)...)
90
91 linuxClangCppflags = []string{
92 "-isystem ${linuxGccRoot}/${linuxGccTriple}/include/c++/${linuxGccVersion}",
93 "-isystem ${linuxGccRoot}/${linuxGccTriple}/include/c++/${linuxGccVersion}/backward",
94 }
95
96 linuxX86ClangCppflags = []string{
97 "-isystem ${linuxGccRoot}/${linuxGccTriple}/include/c++/${linuxGccVersion}/${linuxGccTriple}/32",
98 }
99
100 linuxX8664ClangCppflags = []string{
101 "-isystem ${linuxGccRoot}/${linuxGccTriple}/include/c++/${linuxGccVersion}/${linuxGccTriple}",
102 }
103)
104
Dan Willemsen34fc3b12015-12-07 12:30:44 -0800105const (
106 linuxGccVersion = "4.8"
107)
108
Colin Cross3f40fa42015-01-30 17:27:36 -0800109func init() {
Dan Willemsen34fc3b12015-12-07 12:30:44 -0800110 pctx.StaticVariable("linuxGccVersion", linuxGccVersion)
Colin Cross3f40fa42015-01-30 17:27:36 -0800111
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700112 pctx.SourcePathVariable("linuxGccRoot",
113 "prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-linux-glibc2.15-${linuxGccVersion}")
Colin Cross3f40fa42015-01-30 17:27:36 -0800114
115 pctx.StaticVariable("linuxGccTriple", "x86_64-linux")
116
117 pctx.StaticVariable("linuxCflags", strings.Join(linuxCflags, " "))
118 pctx.StaticVariable("linuxLdflags", strings.Join(linuxLdflags, " "))
119
120 pctx.StaticVariable("linuxClangCflags", strings.Join(linuxClangCflags, " "))
121 pctx.StaticVariable("linuxClangLdflags", strings.Join(linuxClangLdflags, " "))
122 pctx.StaticVariable("linuxClangCppflags", strings.Join(linuxClangCppflags, " "))
123
124 // Extended cflags
125 pctx.StaticVariable("linuxX86Cflags", strings.Join(linuxX86Cflags, " "))
126 pctx.StaticVariable("linuxX8664Cflags", strings.Join(linuxX8664Cflags, " "))
127 pctx.StaticVariable("linuxX86Ldflags", strings.Join(linuxX86Ldflags, " "))
128 pctx.StaticVariable("linuxX8664Ldflags", strings.Join(linuxX8664Ldflags, " "))
129
130 pctx.StaticVariable("linuxX86ClangCflags",
131 strings.Join(clangFilterUnknownCflags(linuxX86Cflags), " "))
132 pctx.StaticVariable("linuxX8664ClangCflags",
133 strings.Join(clangFilterUnknownCflags(linuxX8664Cflags), " "))
134 pctx.StaticVariable("linuxX86ClangLdflags", strings.Join(linuxX86ClangLdflags, " "))
135 pctx.StaticVariable("linuxX8664ClangLdflags", strings.Join(linuxX8664ClangLdflags, " "))
136 pctx.StaticVariable("linuxX86ClangCppflags", strings.Join(linuxX86ClangCppflags, " "))
137 pctx.StaticVariable("linuxX8664ClangCppflags", strings.Join(linuxX8664ClangCppflags, " "))
138}
139
140type toolchainLinux struct {
141 cFlags, ldFlags string
142}
143
144type toolchainLinuxX86 struct {
145 toolchain32Bit
146 toolchainLinux
147}
148
149type toolchainLinuxX8664 struct {
150 toolchain64Bit
151 toolchainLinux
152}
153
Dan Albertbe961682015-03-18 23:38:50 -0700154func (t *toolchainLinuxX86) Name() string {
155 return "x86"
156}
157
158func (t *toolchainLinuxX8664) Name() string {
159 return "x86_64"
160}
161
Colin Cross3f40fa42015-01-30 17:27:36 -0800162func (t *toolchainLinux) GccRoot() string {
163 return "${linuxGccRoot}"
164}
165
166func (t *toolchainLinux) GccTriple() string {
167 return "${linuxGccTriple}"
168}
169
Dan Albertbe961682015-03-18 23:38:50 -0700170func (t *toolchainLinux) GccVersion() string {
Dan Willemsen34fc3b12015-12-07 12:30:44 -0800171 return linuxGccVersion
Dan Albertbe961682015-03-18 23:38:50 -0700172}
173
Colin Cross3f40fa42015-01-30 17:27:36 -0800174func (t *toolchainLinuxX86) Cflags() string {
175 return "${linuxCflags} ${linuxX86Cflags}"
176}
177
178func (t *toolchainLinuxX8664) Cflags() string {
179 return "${linuxCflags} ${linuxX8664Cflags}"
180}
181
182func (t *toolchainLinux) Cppflags() string {
183 return ""
184}
185
186func (t *toolchainLinuxX86) Ldflags() string {
187 return "${linuxLdflags} ${linuxX86Ldflags}"
188}
189
190func (t *toolchainLinuxX8664) Ldflags() string {
191 return "${linuxLdflags} ${linuxX8664Ldflags}"
192}
193
194func (t *toolchainLinux) IncludeFlags() string {
195 return ""
196}
197
198func (t *toolchainLinuxX86) ClangTriple() string {
199 return "i686-linux-gnu"
200}
201
202func (t *toolchainLinuxX86) ClangCflags() string {
203 return "${linuxClangCflags} ${linuxX86ClangCflags}"
204}
205
206func (t *toolchainLinuxX86) ClangCppflags() string {
207 return "${linuxClangCppflags} ${linuxX86ClangCppflags}"
208}
209
210func (t *toolchainLinuxX8664) ClangTriple() string {
211 return "x86_64-linux-gnu"
212}
213
214func (t *toolchainLinuxX8664) ClangCflags() string {
215 return "${linuxClangCflags} ${linuxX8664ClangCflags}"
216}
217
218func (t *toolchainLinuxX8664) ClangCppflags() string {
219 return "${linuxClangCppflags} ${linuxX8664ClangCppflags}"
220}
221
222func (t *toolchainLinuxX86) ClangLdflags() string {
223 return "${linuxClangLdflags} ${linuxX86ClangLdflags}"
224}
225
226func (t *toolchainLinuxX8664) ClangLdflags() string {
227 return "${linuxClangLdflags} ${linuxX8664ClangLdflags}"
228}
229
Colin Cross97ba0732015-03-23 17:50:24 -0700230var toolchainLinuxX86Singleton Toolchain = &toolchainLinuxX86{}
231var toolchainLinuxX8664Singleton Toolchain = &toolchainLinuxX8664{}
Colin Cross3f40fa42015-01-30 17:27:36 -0800232
Colin Crossc5c24ad2015-11-20 15:35:00 -0800233func linuxX86ToolchainFactory(arch common.Arch) Toolchain {
Colin Cross3f40fa42015-01-30 17:27:36 -0800234 return toolchainLinuxX86Singleton
235}
236
Colin Crossc5c24ad2015-11-20 15:35:00 -0800237func linuxX8664ToolchainFactory(arch common.Arch) Toolchain {
Colin Cross3f40fa42015-01-30 17:27:36 -0800238 return toolchainLinuxX8664Singleton
239}
240
241func init() {
Dan Willemsen490fd492015-11-24 17:53:15 -0800242 registerHostToolchainFactory(common.Linux, common.X86, linuxX86ToolchainFactory)
243 registerHostToolchainFactory(common.Linux, common.X86_64, linuxX8664ToolchainFactory)
Colin Cross3f40fa42015-01-30 17:27:36 -0800244}