xref: /aosp_15_r20/build/soong/cc/config/x86_linux_host.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2016 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage config
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"strings"
19*333d2b36SAndroid Build Coastguard Worker
20*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
21*333d2b36SAndroid Build Coastguard Worker)
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Workervar (
24*333d2b36SAndroid Build Coastguard Worker	linuxCflags = []string{
25*333d2b36SAndroid Build Coastguard Worker		"-Wa,--noexecstack",
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Worker		"-fPIC",
28*333d2b36SAndroid Build Coastguard Worker
29*333d2b36SAndroid Build Coastguard Worker		"-fno-omit-frame-pointer",
30*333d2b36SAndroid Build Coastguard Worker
31*333d2b36SAndroid Build Coastguard Worker		"-U_FORTIFY_SOURCE",
32*333d2b36SAndroid Build Coastguard Worker		"-D_FORTIFY_SOURCE=2",
33*333d2b36SAndroid Build Coastguard Worker		"-fstack-protector",
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Worker		"--gcc-toolchain=${LinuxGccRoot}",
36*333d2b36SAndroid Build Coastguard Worker		"-fstack-protector-strong",
37*333d2b36SAndroid Build Coastguard Worker	}
38*333d2b36SAndroid Build Coastguard Worker
39*333d2b36SAndroid Build Coastguard Worker	linuxGlibcCflags = []string{
40*333d2b36SAndroid Build Coastguard Worker		"--sysroot ${LinuxGccRoot}/sysroot",
41*333d2b36SAndroid Build Coastguard Worker	}
42*333d2b36SAndroid Build Coastguard Worker
43*333d2b36SAndroid Build Coastguard Worker	linuxMuslCflags = []string{
44*333d2b36SAndroid Build Coastguard Worker		"-D_LIBCPP_HAS_MUSL_LIBC",
45*333d2b36SAndroid Build Coastguard Worker		"-DANDROID_HOST_MUSL",
46*333d2b36SAndroid Build Coastguard Worker		"-nostdlibinc",
47*333d2b36SAndroid Build Coastguard Worker		"--sysroot /dev/null",
48*333d2b36SAndroid Build Coastguard Worker	}
49*333d2b36SAndroid Build Coastguard Worker
50*333d2b36SAndroid Build Coastguard Worker	linuxLdflags = []string{
51*333d2b36SAndroid Build Coastguard Worker		"-Wl,-z,noexecstack",
52*333d2b36SAndroid Build Coastguard Worker		"-Wl,-z,relro",
53*333d2b36SAndroid Build Coastguard Worker		"-Wl,-z,now",
54*333d2b36SAndroid Build Coastguard Worker		"-Wl,--no-undefined-version",
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker		"--gcc-toolchain=${LinuxGccRoot}",
57*333d2b36SAndroid Build Coastguard Worker	}
58*333d2b36SAndroid Build Coastguard Worker
59*333d2b36SAndroid Build Coastguard Worker	linuxLldflags = append(linuxLdflags,
60*333d2b36SAndroid Build Coastguard Worker		"-Wl,--compress-debug-sections=zstd",
61*333d2b36SAndroid Build Coastguard Worker	)
62*333d2b36SAndroid Build Coastguard Worker
63*333d2b36SAndroid Build Coastguard Worker	linuxGlibcLdflags = []string{
64*333d2b36SAndroid Build Coastguard Worker		"--sysroot ${LinuxGccRoot}/sysroot",
65*333d2b36SAndroid Build Coastguard Worker	}
66*333d2b36SAndroid Build Coastguard Worker
67*333d2b36SAndroid Build Coastguard Worker	linuxMuslLdflags = []string{
68*333d2b36SAndroid Build Coastguard Worker		"-nostdlib",
69*333d2b36SAndroid Build Coastguard Worker		"--sysroot /dev/null",
70*333d2b36SAndroid Build Coastguard Worker	}
71*333d2b36SAndroid Build Coastguard Worker
72*333d2b36SAndroid Build Coastguard Worker	// Extended cflags
73*333d2b36SAndroid Build Coastguard Worker	linuxX86Cflags = []string{
74*333d2b36SAndroid Build Coastguard Worker		"-msse3",
75*333d2b36SAndroid Build Coastguard Worker		"-m32",
76*333d2b36SAndroid Build Coastguard Worker		"-march=prescott",
77*333d2b36SAndroid Build Coastguard Worker		"-D_FILE_OFFSET_BITS=64",
78*333d2b36SAndroid Build Coastguard Worker		"-D_LARGEFILE_SOURCE=1",
79*333d2b36SAndroid Build Coastguard Worker	}
80*333d2b36SAndroid Build Coastguard Worker
81*333d2b36SAndroid Build Coastguard Worker	linuxX8664Cflags = []string{
82*333d2b36SAndroid Build Coastguard Worker		"-m64",
83*333d2b36SAndroid Build Coastguard Worker	}
84*333d2b36SAndroid Build Coastguard Worker
85*333d2b36SAndroid Build Coastguard Worker	linuxX86Ldflags = []string{
86*333d2b36SAndroid Build Coastguard Worker		"-m32",
87*333d2b36SAndroid Build Coastguard Worker		"-B${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32",
88*333d2b36SAndroid Build Coastguard Worker		"-L${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32",
89*333d2b36SAndroid Build Coastguard Worker		"-L${LinuxGccRoot}/${LinuxGccTriple}/lib32",
90*333d2b36SAndroid Build Coastguard Worker	}
91*333d2b36SAndroid Build Coastguard Worker
92*333d2b36SAndroid Build Coastguard Worker	linuxX8664Ldflags = []string{
93*333d2b36SAndroid Build Coastguard Worker		"-m64",
94*333d2b36SAndroid Build Coastguard Worker		"-B${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}",
95*333d2b36SAndroid Build Coastguard Worker		"-L${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}",
96*333d2b36SAndroid Build Coastguard Worker		"-L${LinuxGccRoot}/${LinuxGccTriple}/lib64",
97*333d2b36SAndroid Build Coastguard Worker	}
98*333d2b36SAndroid Build Coastguard Worker
99*333d2b36SAndroid Build Coastguard Worker	linuxAvailableLibraries = addPrefix([]string{
100*333d2b36SAndroid Build Coastguard Worker		"c",
101*333d2b36SAndroid Build Coastguard Worker		"dl",
102*333d2b36SAndroid Build Coastguard Worker		"gcc",
103*333d2b36SAndroid Build Coastguard Worker		"gcc_s",
104*333d2b36SAndroid Build Coastguard Worker		"m",
105*333d2b36SAndroid Build Coastguard Worker		"ncurses",
106*333d2b36SAndroid Build Coastguard Worker		"pthread",
107*333d2b36SAndroid Build Coastguard Worker		"resolv",
108*333d2b36SAndroid Build Coastguard Worker		"rt",
109*333d2b36SAndroid Build Coastguard Worker		"util",
110*333d2b36SAndroid Build Coastguard Worker	}, "-l")
111*333d2b36SAndroid Build Coastguard Worker
112*333d2b36SAndroid Build Coastguard Worker	muslCrtBeginStaticBinary, muslCrtEndStaticBinary   = []string{"libc_musl_crtbegin_static"}, []string{"libc_musl_crtend"}
113*333d2b36SAndroid Build Coastguard Worker	muslCrtBeginSharedBinary, muslCrtEndSharedBinary   = []string{"libc_musl_crtbegin_dynamic"}, []string{"libc_musl_crtend"}
114*333d2b36SAndroid Build Coastguard Worker	muslCrtBeginSharedLibrary, muslCrtEndSharedLibrary = []string{"libc_musl_crtbegin_so"}, []string{"libc_musl_crtend_so"}
115*333d2b36SAndroid Build Coastguard Worker
116*333d2b36SAndroid Build Coastguard Worker	MuslDefaultSharedLibraries = []string{"libc_musl"}
117*333d2b36SAndroid Build Coastguard Worker)
118*333d2b36SAndroid Build Coastguard Worker
119*333d2b36SAndroid Build Coastguard Workerconst (
120*333d2b36SAndroid Build Coastguard Worker	linuxGccVersion   = "4.8.3"
121*333d2b36SAndroid Build Coastguard Worker	linuxGlibcVersion = "2.17"
122*333d2b36SAndroid Build Coastguard Worker)
123*333d2b36SAndroid Build Coastguard Worker
124*333d2b36SAndroid Build Coastguard Workerfunc init() {
125*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxGccVersion", linuxGccVersion)
126*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxGlibcVersion", linuxGlibcVersion)
127*333d2b36SAndroid Build Coastguard Worker
128*333d2b36SAndroid Build Coastguard Worker	// Most places use the full GCC version. A few only use up to the first two numbers.
129*333d2b36SAndroid Build Coastguard Worker	if p := strings.Split(linuxGccVersion, "."); len(p) > 2 {
130*333d2b36SAndroid Build Coastguard Worker		pctx.StaticVariable("ShortLinuxGccVersion", strings.Join(p[:2], "."))
131*333d2b36SAndroid Build Coastguard Worker	} else {
132*333d2b36SAndroid Build Coastguard Worker		pctx.StaticVariable("ShortLinuxGccVersion", linuxGccVersion)
133*333d2b36SAndroid Build Coastguard Worker	}
134*333d2b36SAndroid Build Coastguard Worker
135*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("LinuxGccRoot",
136*333d2b36SAndroid Build Coastguard Worker		"prebuilts/gcc/linux-x86/host/x86_64-linux-glibc${LinuxGlibcVersion}-${ShortLinuxGccVersion}")
137*333d2b36SAndroid Build Coastguard Worker
138*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxGccTriple", "x86_64-linux")
139*333d2b36SAndroid Build Coastguard Worker
140*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxCflags", strings.Join(linuxCflags, " "))
141*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxLdflags", strings.Join(linuxLdflags, " "))
142*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxLldflags", strings.Join(linuxLldflags, " "))
143*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxGlibcCflags", strings.Join(linuxGlibcCflags, " "))
144*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxGlibcLdflags", strings.Join(linuxGlibcLdflags, " "))
145*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxGlibcLldflags", strings.Join(linuxGlibcLdflags, " "))
146*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxMuslCflags", strings.Join(linuxMuslCflags, " "))
147*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxMuslLdflags", strings.Join(linuxMuslLdflags, " "))
148*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxMuslLldflags", strings.Join(linuxMuslLdflags, " "))
149*333d2b36SAndroid Build Coastguard Worker
150*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxX86Cflags", strings.Join(linuxX86Cflags, " "))
151*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxX8664Cflags", strings.Join(linuxX8664Cflags, " "))
152*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxX86Ldflags", strings.Join(linuxX86Ldflags, " "))
153*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxX86Lldflags", strings.Join(linuxX86Ldflags, " "))
154*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxX8664Ldflags", strings.Join(linuxX8664Ldflags, " "))
155*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxX8664Lldflags", strings.Join(linuxX8664Ldflags, " "))
156*333d2b36SAndroid Build Coastguard Worker	// Yasm flags
157*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxX86YasmFlags", "-f elf32 -m x86")
158*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("LinuxX8664YasmFlags", "-f elf64 -m amd64")
159*333d2b36SAndroid Build Coastguard Worker}
160*333d2b36SAndroid Build Coastguard Worker
161*333d2b36SAndroid Build Coastguard Workertype toolchainLinux struct {
162*333d2b36SAndroid Build Coastguard Worker	toolchainBase
163*333d2b36SAndroid Build Coastguard Worker	cFlags, ldFlags string
164*333d2b36SAndroid Build Coastguard Worker}
165*333d2b36SAndroid Build Coastguard Worker
166*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxX86 struct {
167*333d2b36SAndroid Build Coastguard Worker	toolchain32Bit
168*333d2b36SAndroid Build Coastguard Worker	toolchainLinux
169*333d2b36SAndroid Build Coastguard Worker}
170*333d2b36SAndroid Build Coastguard Worker
171*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxX8664 struct {
172*333d2b36SAndroid Build Coastguard Worker	toolchain64Bit
173*333d2b36SAndroid Build Coastguard Worker	toolchainLinux
174*333d2b36SAndroid Build Coastguard Worker}
175*333d2b36SAndroid Build Coastguard Worker
176*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) Name() string {
177*333d2b36SAndroid Build Coastguard Worker	return "x86"
178*333d2b36SAndroid Build Coastguard Worker}
179*333d2b36SAndroid Build Coastguard Worker
180*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) Name() string {
181*333d2b36SAndroid Build Coastguard Worker	return "x86_64"
182*333d2b36SAndroid Build Coastguard Worker}
183*333d2b36SAndroid Build Coastguard Worker
184*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinux) IncludeFlags() string {
185*333d2b36SAndroid Build Coastguard Worker	return ""
186*333d2b36SAndroid Build Coastguard Worker}
187*333d2b36SAndroid Build Coastguard Worker
188*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) Cflags() string {
189*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxCflags} ${config.LinuxX86Cflags}"
190*333d2b36SAndroid Build Coastguard Worker}
191*333d2b36SAndroid Build Coastguard Worker
192*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) Cppflags() string {
193*333d2b36SAndroid Build Coastguard Worker	return ""
194*333d2b36SAndroid Build Coastguard Worker}
195*333d2b36SAndroid Build Coastguard Worker
196*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) Cflags() string {
197*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxCflags} ${config.LinuxX8664Cflags}"
198*333d2b36SAndroid Build Coastguard Worker}
199*333d2b36SAndroid Build Coastguard Worker
200*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) Cppflags() string {
201*333d2b36SAndroid Build Coastguard Worker	return ""
202*333d2b36SAndroid Build Coastguard Worker}
203*333d2b36SAndroid Build Coastguard Worker
204*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) Ldflags() string {
205*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxLdflags} ${config.LinuxX86Ldflags}"
206*333d2b36SAndroid Build Coastguard Worker}
207*333d2b36SAndroid Build Coastguard Worker
208*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) Lldflags() string {
209*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxLldflags} ${config.LinuxX86Lldflags}"
210*333d2b36SAndroid Build Coastguard Worker}
211*333d2b36SAndroid Build Coastguard Worker
212*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) Ldflags() string {
213*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxLdflags} ${config.LinuxX8664Ldflags}"
214*333d2b36SAndroid Build Coastguard Worker}
215*333d2b36SAndroid Build Coastguard Worker
216*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) Lldflags() string {
217*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxLldflags} ${config.LinuxX8664Lldflags}"
218*333d2b36SAndroid Build Coastguard Worker}
219*333d2b36SAndroid Build Coastguard Worker
220*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX86) YasmFlags() string {
221*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxX86YasmFlags}"
222*333d2b36SAndroid Build Coastguard Worker}
223*333d2b36SAndroid Build Coastguard Worker
224*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxX8664) YasmFlags() string {
225*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxX8664YasmFlags}"
226*333d2b36SAndroid Build Coastguard Worker}
227*333d2b36SAndroid Build Coastguard Worker
228*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxX86) LibclangRuntimeLibraryArch() string {
229*333d2b36SAndroid Build Coastguard Worker	return "i386"
230*333d2b36SAndroid Build Coastguard Worker}
231*333d2b36SAndroid Build Coastguard Worker
232*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxX8664) LibclangRuntimeLibraryArch() string {
233*333d2b36SAndroid Build Coastguard Worker	return "x86_64"
234*333d2b36SAndroid Build Coastguard Worker}
235*333d2b36SAndroid Build Coastguard Worker
236*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinux) AvailableLibraries() []string {
237*333d2b36SAndroid Build Coastguard Worker	return linuxAvailableLibraries
238*333d2b36SAndroid Build Coastguard Worker}
239*333d2b36SAndroid Build Coastguard Worker
240*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinux) ShlibSuffix() string {
241*333d2b36SAndroid Build Coastguard Worker	return ".so"
242*333d2b36SAndroid Build Coastguard Worker}
243*333d2b36SAndroid Build Coastguard Worker
244*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinux) ExecutableSuffix() string {
245*333d2b36SAndroid Build Coastguard Worker	return ""
246*333d2b36SAndroid Build Coastguard Worker}
247*333d2b36SAndroid Build Coastguard Worker
248*333d2b36SAndroid Build Coastguard Worker// glibc specialization of the linux toolchain
249*333d2b36SAndroid Build Coastguard Worker
250*333d2b36SAndroid Build Coastguard Workertype toolchainGlibc struct {
251*333d2b36SAndroid Build Coastguard Worker	toolchainNoCrt
252*333d2b36SAndroid Build Coastguard Worker}
253*333d2b36SAndroid Build Coastguard Worker
254*333d2b36SAndroid Build Coastguard Workerfunc (toolchainGlibc) Glibc() bool { return true }
255*333d2b36SAndroid Build Coastguard Worker
256*333d2b36SAndroid Build Coastguard Workerfunc (toolchainGlibc) Cflags() string {
257*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxGlibcCflags}"
258*333d2b36SAndroid Build Coastguard Worker}
259*333d2b36SAndroid Build Coastguard Worker
260*333d2b36SAndroid Build Coastguard Workerfunc (toolchainGlibc) Ldflags() string {
261*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxGlibcLdflags}"
262*333d2b36SAndroid Build Coastguard Worker}
263*333d2b36SAndroid Build Coastguard Worker
264*333d2b36SAndroid Build Coastguard Workerfunc (toolchainGlibc) Lldflags() string {
265*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxGlibcLldflags}"
266*333d2b36SAndroid Build Coastguard Worker}
267*333d2b36SAndroid Build Coastguard Worker
268*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxGlibcX86 struct {
269*333d2b36SAndroid Build Coastguard Worker	toolchainLinuxX86
270*333d2b36SAndroid Build Coastguard Worker	toolchainGlibc
271*333d2b36SAndroid Build Coastguard Worker}
272*333d2b36SAndroid Build Coastguard Worker
273*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxGlibcX8664 struct {
274*333d2b36SAndroid Build Coastguard Worker	toolchainLinuxX8664
275*333d2b36SAndroid Build Coastguard Worker	toolchainGlibc
276*333d2b36SAndroid Build Coastguard Worker}
277*333d2b36SAndroid Build Coastguard Worker
278*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX86) ClangTriple() string {
279*333d2b36SAndroid Build Coastguard Worker	return "i686-linux-gnu"
280*333d2b36SAndroid Build Coastguard Worker}
281*333d2b36SAndroid Build Coastguard Worker
282*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX86) Cflags() string {
283*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.Cflags() + " " + t.toolchainGlibc.Cflags()
284*333d2b36SAndroid Build Coastguard Worker}
285*333d2b36SAndroid Build Coastguard Worker
286*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX86) Ldflags() string {
287*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.Ldflags() + " " + t.toolchainGlibc.Ldflags()
288*333d2b36SAndroid Build Coastguard Worker}
289*333d2b36SAndroid Build Coastguard Worker
290*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX86) Lldflags() string {
291*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.Lldflags() + " " + t.toolchainGlibc.Lldflags()
292*333d2b36SAndroid Build Coastguard Worker}
293*333d2b36SAndroid Build Coastguard Worker
294*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX8664) ClangTriple() string {
295*333d2b36SAndroid Build Coastguard Worker	return "x86_64-linux-gnu"
296*333d2b36SAndroid Build Coastguard Worker}
297*333d2b36SAndroid Build Coastguard Worker
298*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX8664) Cflags() string {
299*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.Cflags() + " " + t.toolchainGlibc.Cflags()
300*333d2b36SAndroid Build Coastguard Worker}
301*333d2b36SAndroid Build Coastguard Worker
302*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX8664) Ldflags() string {
303*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.Ldflags() + " " + t.toolchainGlibc.Ldflags()
304*333d2b36SAndroid Build Coastguard Worker}
305*333d2b36SAndroid Build Coastguard Worker
306*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxGlibcX8664) Lldflags() string {
307*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.Lldflags() + " " + t.toolchainGlibc.Lldflags()
308*333d2b36SAndroid Build Coastguard Worker}
309*333d2b36SAndroid Build Coastguard Worker
310*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxGlibcX86Singleton Toolchain = &toolchainLinuxGlibcX86{}
311*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxGlibcX8664Singleton Toolchain = &toolchainLinuxGlibcX8664{}
312*333d2b36SAndroid Build Coastguard Worker
313*333d2b36SAndroid Build Coastguard Workerfunc linuxGlibcX86ToolchainFactory(arch android.Arch) Toolchain {
314*333d2b36SAndroid Build Coastguard Worker	return toolchainLinuxGlibcX86Singleton
315*333d2b36SAndroid Build Coastguard Worker}
316*333d2b36SAndroid Build Coastguard Worker
317*333d2b36SAndroid Build Coastguard Workerfunc linuxGlibcX8664ToolchainFactory(arch android.Arch) Toolchain {
318*333d2b36SAndroid Build Coastguard Worker	return toolchainLinuxGlibcX8664Singleton
319*333d2b36SAndroid Build Coastguard Worker}
320*333d2b36SAndroid Build Coastguard Worker
321*333d2b36SAndroid Build Coastguard Worker// musl specialization of the linux toolchain
322*333d2b36SAndroid Build Coastguard Worker
323*333d2b36SAndroid Build Coastguard Workertype toolchainMusl struct {
324*333d2b36SAndroid Build Coastguard Worker}
325*333d2b36SAndroid Build Coastguard Worker
326*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) Musl() bool { return true }
327*333d2b36SAndroid Build Coastguard Worker
328*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) CrtBeginStaticBinary() []string       { return muslCrtBeginStaticBinary }
329*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) CrtBeginSharedBinary() []string       { return muslCrtBeginSharedBinary }
330*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) CrtBeginSharedLibrary() []string      { return muslCrtBeginSharedLibrary }
331*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) CrtEndStaticBinary() []string         { return muslCrtEndStaticBinary }
332*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) CrtEndSharedBinary() []string         { return muslCrtEndSharedBinary }
333*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) CrtEndSharedLibrary() []string        { return muslCrtEndSharedLibrary }
334*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) CrtPadSegmentSharedLibrary() []string { return nil }
335*333d2b36SAndroid Build Coastguard Worker
336*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) DefaultSharedLibraries() []string { return MuslDefaultSharedLibraries }
337*333d2b36SAndroid Build Coastguard Worker
338*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) Cflags() string {
339*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxMuslCflags}"
340*333d2b36SAndroid Build Coastguard Worker}
341*333d2b36SAndroid Build Coastguard Worker
342*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) Ldflags() string {
343*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxMuslLdflags}"
344*333d2b36SAndroid Build Coastguard Worker}
345*333d2b36SAndroid Build Coastguard Worker
346*333d2b36SAndroid Build Coastguard Workerfunc (toolchainMusl) Lldflags() string {
347*333d2b36SAndroid Build Coastguard Worker	return "${config.LinuxMuslLldflags}"
348*333d2b36SAndroid Build Coastguard Worker}
349*333d2b36SAndroid Build Coastguard Worker
350*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxMuslX86 struct {
351*333d2b36SAndroid Build Coastguard Worker	toolchainLinuxX86
352*333d2b36SAndroid Build Coastguard Worker	toolchainMusl
353*333d2b36SAndroid Build Coastguard Worker}
354*333d2b36SAndroid Build Coastguard Worker
355*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxMuslX8664 struct {
356*333d2b36SAndroid Build Coastguard Worker	toolchainLinuxX8664
357*333d2b36SAndroid Build Coastguard Worker	toolchainMusl
358*333d2b36SAndroid Build Coastguard Worker}
359*333d2b36SAndroid Build Coastguard Worker
360*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX86) ClangTriple() string {
361*333d2b36SAndroid Build Coastguard Worker	return "i686-linux-musl"
362*333d2b36SAndroid Build Coastguard Worker}
363*333d2b36SAndroid Build Coastguard Worker
364*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX86) Cflags() string {
365*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.Cflags() + " " + t.toolchainMusl.Cflags()
366*333d2b36SAndroid Build Coastguard Worker}
367*333d2b36SAndroid Build Coastguard Worker
368*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX86) Ldflags() string {
369*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.Ldflags() + " " + t.toolchainMusl.Ldflags()
370*333d2b36SAndroid Build Coastguard Worker}
371*333d2b36SAndroid Build Coastguard Worker
372*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX86) Lldflags() string {
373*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX86.Lldflags() + " " + t.toolchainMusl.Lldflags()
374*333d2b36SAndroid Build Coastguard Worker}
375*333d2b36SAndroid Build Coastguard Worker
376*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX8664) ClangTriple() string {
377*333d2b36SAndroid Build Coastguard Worker	return "x86_64-linux-musl"
378*333d2b36SAndroid Build Coastguard Worker}
379*333d2b36SAndroid Build Coastguard Worker
380*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX8664) Cflags() string {
381*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.Cflags() + " " + t.toolchainMusl.Cflags()
382*333d2b36SAndroid Build Coastguard Worker}
383*333d2b36SAndroid Build Coastguard Worker
384*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX8664) Ldflags() string {
385*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.Ldflags() + " " + t.toolchainMusl.Ldflags()
386*333d2b36SAndroid Build Coastguard Worker}
387*333d2b36SAndroid Build Coastguard Worker
388*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslX8664) Lldflags() string {
389*333d2b36SAndroid Build Coastguard Worker	return t.toolchainLinuxX8664.Lldflags() + " " + t.toolchainMusl.Lldflags()
390*333d2b36SAndroid Build Coastguard Worker}
391*333d2b36SAndroid Build Coastguard Worker
392*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxMuslX86Singleton Toolchain = &toolchainLinuxMuslX86{}
393*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxMuslX8664Singleton Toolchain = &toolchainLinuxMuslX8664{}
394*333d2b36SAndroid Build Coastguard Worker
395*333d2b36SAndroid Build Coastguard Workerfunc linuxMuslX86ToolchainFactory(arch android.Arch) Toolchain {
396*333d2b36SAndroid Build Coastguard Worker	return toolchainLinuxMuslX86Singleton
397*333d2b36SAndroid Build Coastguard Worker}
398*333d2b36SAndroid Build Coastguard Worker
399*333d2b36SAndroid Build Coastguard Workerfunc linuxMuslX8664ToolchainFactory(arch android.Arch) Toolchain {
400*333d2b36SAndroid Build Coastguard Worker	return toolchainLinuxMuslX8664Singleton
401*333d2b36SAndroid Build Coastguard Worker}
402*333d2b36SAndroid Build Coastguard Worker
403*333d2b36SAndroid Build Coastguard Workerfunc init() {
404*333d2b36SAndroid Build Coastguard Worker	registerToolchainFactory(android.Linux, android.X86, linuxGlibcX86ToolchainFactory)
405*333d2b36SAndroid Build Coastguard Worker	registerToolchainFactory(android.Linux, android.X86_64, linuxGlibcX8664ToolchainFactory)
406*333d2b36SAndroid Build Coastguard Worker	registerToolchainFactory(android.LinuxMusl, android.X86, linuxMuslX86ToolchainFactory)
407*333d2b36SAndroid Build Coastguard Worker	registerToolchainFactory(android.LinuxMusl, android.X86_64, linuxMuslX8664ToolchainFactory)
408*333d2b36SAndroid Build Coastguard Worker}
409