xref: /aosp_15_r20/external/musl/Android.bp (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker// Build musl libc from source to eventually use as the libc for host modules in the platform build.
2*c9945492SAndroid Build Coastguard Worker// The list of sources to compile for each library is loaded from sources.bp, which is generated
3*c9945492SAndroid Build Coastguard Worker// by generate_bp.py.
4*c9945492SAndroid Build Coastguard Worker
5*c9945492SAndroid Build Coastguard Workerpackage {
6*c9945492SAndroid Build Coastguard Worker    default_visibility: ["//visibility:private"],
7*c9945492SAndroid Build Coastguard Worker    default_applicable_licenses: ["musl_license"],
8*c9945492SAndroid Build Coastguard Worker}
9*c9945492SAndroid Build Coastguard Worker
10*c9945492SAndroid Build Coastguard Workerlicense {
11*c9945492SAndroid Build Coastguard Worker    name: "musl_license",
12*c9945492SAndroid Build Coastguard Worker    visibility: [":__subpackages__"],
13*c9945492SAndroid Build Coastguard Worker    license_kinds: [
14*c9945492SAndroid Build Coastguard Worker        "SPDX-license-identifier-MIT",
15*c9945492SAndroid Build Coastguard Worker        "SPDX-license-identifier-BSD",
16*c9945492SAndroid Build Coastguard Worker    ],
17*c9945492SAndroid Build Coastguard Worker    license_text: ["COPYRIGHT"],
18*c9945492SAndroid Build Coastguard Worker}
19*c9945492SAndroid Build Coastguard Worker
20*c9945492SAndroid Build Coastguard Workercc_library_headers {
21*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_arch_headers",
22*c9945492SAndroid Build Coastguard Worker    host_supported: true,
23*c9945492SAndroid Build Coastguard Worker    device_supported: false,
24*c9945492SAndroid Build Coastguard Worker    system_shared_libs: [],
25*c9945492SAndroid Build Coastguard Worker    generated_headers: [
26*c9945492SAndroid Build Coastguard Worker        "libc_musl_alltypes.h",
27*c9945492SAndroid Build Coastguard Worker        "libc_musl_syscall.h",
28*c9945492SAndroid Build Coastguard Worker    ],
29*c9945492SAndroid Build Coastguard Worker    export_generated_headers: [
30*c9945492SAndroid Build Coastguard Worker        "libc_musl_alltypes.h",
31*c9945492SAndroid Build Coastguard Worker        "libc_musl_syscall.h",
32*c9945492SAndroid Build Coastguard Worker    ],
33*c9945492SAndroid Build Coastguard Worker    export_include_dirs: [
34*c9945492SAndroid Build Coastguard Worker        "arch/generic",
35*c9945492SAndroid Build Coastguard Worker    ],
36*c9945492SAndroid Build Coastguard Worker    arch: {
37*c9945492SAndroid Build Coastguard Worker        arm: {
38*c9945492SAndroid Build Coastguard Worker            export_include_dirs: ["arch/arm"],
39*c9945492SAndroid Build Coastguard Worker        },
40*c9945492SAndroid Build Coastguard Worker        arm64: {
41*c9945492SAndroid Build Coastguard Worker            export_include_dirs: ["arch/aarch64"],
42*c9945492SAndroid Build Coastguard Worker        },
43*c9945492SAndroid Build Coastguard Worker        x86: {
44*c9945492SAndroid Build Coastguard Worker            export_include_dirs: ["arch/i386"],
45*c9945492SAndroid Build Coastguard Worker        },
46*c9945492SAndroid Build Coastguard Worker        x86_64: {
47*c9945492SAndroid Build Coastguard Worker            export_include_dirs: ["arch/x86_64"],
48*c9945492SAndroid Build Coastguard Worker        },
49*c9945492SAndroid Build Coastguard Worker    },
50*c9945492SAndroid Build Coastguard Worker}
51*c9945492SAndroid Build Coastguard Worker
52*c9945492SAndroid Build Coastguard Workercc_library_headers {
53*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_private_headers",
54*c9945492SAndroid Build Coastguard Worker    host_supported: true,
55*c9945492SAndroid Build Coastguard Worker    device_supported: false,
56*c9945492SAndroid Build Coastguard Worker    system_shared_libs: [],
57*c9945492SAndroid Build Coastguard Worker    generated_headers: [
58*c9945492SAndroid Build Coastguard Worker        "libc_musl_version.h",
59*c9945492SAndroid Build Coastguard Worker    ],
60*c9945492SAndroid Build Coastguard Worker    export_generated_headers: [
61*c9945492SAndroid Build Coastguard Worker        "libc_musl_version.h",
62*c9945492SAndroid Build Coastguard Worker    ],
63*c9945492SAndroid Build Coastguard Worker    export_include_dirs: [
64*c9945492SAndroid Build Coastguard Worker        "src/include",
65*c9945492SAndroid Build Coastguard Worker        "src/internal",
66*c9945492SAndroid Build Coastguard Worker    ],
67*c9945492SAndroid Build Coastguard Worker}
68*c9945492SAndroid Build Coastguard Worker
69*c9945492SAndroid Build Coastguard Workercc_library_headers {
70*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_public_headers",
71*c9945492SAndroid Build Coastguard Worker    host_supported: true,
72*c9945492SAndroid Build Coastguard Worker    device_supported: false,
73*c9945492SAndroid Build Coastguard Worker    system_shared_libs: [],
74*c9945492SAndroid Build Coastguard Worker    export_system_include_dirs: [
75*c9945492SAndroid Build Coastguard Worker        "android/include",
76*c9945492SAndroid Build Coastguard Worker        "include",
77*c9945492SAndroid Build Coastguard Worker    ],
78*c9945492SAndroid Build Coastguard Worker}
79*c9945492SAndroid Build Coastguard Worker
80*c9945492SAndroid Build Coastguard Workercc_defaults {
81*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_base_defaults",
82*c9945492SAndroid Build Coastguard Worker    host_supported: true,
83*c9945492SAndroid Build Coastguard Worker    device_supported: false,
84*c9945492SAndroid Build Coastguard Worker    system_shared_libs: [],
85*c9945492SAndroid Build Coastguard Worker    cflags: [
86*c9945492SAndroid Build Coastguard Worker        // CFLAGS_C99FSE
87*c9945492SAndroid Build Coastguard Worker        "-nostdinc",
88*c9945492SAndroid Build Coastguard Worker        "-ffreestanding",
89*c9945492SAndroid Build Coastguard Worker        "-Wa,--noexecstack",
90*c9945492SAndroid Build Coastguard Worker
91*c9945492SAndroid Build Coastguard Worker        // CFLAGS_AUTO
92*c9945492SAndroid Build Coastguard Worker        "-Os",
93*c9945492SAndroid Build Coastguard Worker        "-pipe",
94*c9945492SAndroid Build Coastguard Worker        "-fomit-frame-pointer",
95*c9945492SAndroid Build Coastguard Worker        "-fno-unwind-tables",
96*c9945492SAndroid Build Coastguard Worker        "-fno-asynchronous-unwind-tables",
97*c9945492SAndroid Build Coastguard Worker        "-ffunction-sections",
98*c9945492SAndroid Build Coastguard Worker        "-fdata-sections",
99*c9945492SAndroid Build Coastguard Worker        //"-w",
100*c9945492SAndroid Build Coastguard Worker        "-Wno-pointer-to-int-cast",
101*c9945492SAndroid Build Coastguard Worker        "-Werror=implicit-function-declaration",
102*c9945492SAndroid Build Coastguard Worker        "-Werror=implicit-int",
103*c9945492SAndroid Build Coastguard Worker        "-Werror=pointer-sign",
104*c9945492SAndroid Build Coastguard Worker        "-Werror=pointer-arith",
105*c9945492SAndroid Build Coastguard Worker        "-Werror=int-conversion",
106*c9945492SAndroid Build Coastguard Worker        "-Werror=incompatible-pointer-types",
107*c9945492SAndroid Build Coastguard Worker        "-Qunused-arguments",
108*c9945492SAndroid Build Coastguard Worker        "-Waddress",
109*c9945492SAndroid Build Coastguard Worker        "-Warray-bounds",
110*c9945492SAndroid Build Coastguard Worker        "-Wchar-subscripts",
111*c9945492SAndroid Build Coastguard Worker        "-Wduplicate-decl-specifier",
112*c9945492SAndroid Build Coastguard Worker        "-Winit-self",
113*c9945492SAndroid Build Coastguard Worker        "-Wreturn-type",
114*c9945492SAndroid Build Coastguard Worker        "-Wsequence-point",
115*c9945492SAndroid Build Coastguard Worker        "-Wstrict-aliasing",
116*c9945492SAndroid Build Coastguard Worker        "-Wunused-function",
117*c9945492SAndroid Build Coastguard Worker        "-Wunused-label",
118*c9945492SAndroid Build Coastguard Worker        "-Wunused-variable",
119*c9945492SAndroid Build Coastguard Worker
120*c9945492SAndroid Build Coastguard Worker        // CFLAGS_ALL
121*c9945492SAndroid Build Coastguard Worker        "-D_XOPEN_SOURCE=700",
122*c9945492SAndroid Build Coastguard Worker
123*c9945492SAndroid Build Coastguard Worker        // undefine NDEBUG from global flags, musl defines it locally
124*c9945492SAndroid Build Coastguard Worker        "-UNDEBUG",
125*c9945492SAndroid Build Coastguard Worker
126*c9945492SAndroid Build Coastguard Worker        // disable warnings:
127*c9945492SAndroid Build Coastguard Worker        "-Wno-bitwise-op-parentheses",
128*c9945492SAndroid Build Coastguard Worker        "-Wno-dangling-else",
129*c9945492SAndroid Build Coastguard Worker        "-Wno-ignored-attributes",
130*c9945492SAndroid Build Coastguard Worker        "-Wno-logical-op-parentheses",
131*c9945492SAndroid Build Coastguard Worker        "-Wno-missing-braces",
132*c9945492SAndroid Build Coastguard Worker        "-Wno-missing-field-initializers",
133*c9945492SAndroid Build Coastguard Worker        "-Wno-parentheses",
134*c9945492SAndroid Build Coastguard Worker        "-Wno-shift-op-parentheses",
135*c9945492SAndroid Build Coastguard Worker        "-Wno-string-plus-int",
136*c9945492SAndroid Build Coastguard Worker        "-Wno-unused-parameter",
137*c9945492SAndroid Build Coastguard Worker    ],
138*c9945492SAndroid Build Coastguard Worker
139*c9945492SAndroid Build Coastguard Worker    arch: {
140*c9945492SAndroid Build Coastguard Worker        x86: {
141*c9945492SAndroid Build Coastguard Worker            cflags: ["-frounding-math"],
142*c9945492SAndroid Build Coastguard Worker        },
143*c9945492SAndroid Build Coastguard Worker        x86_64: {
144*c9945492SAndroid Build Coastguard Worker            cflags: ["-frounding-math"],
145*c9945492SAndroid Build Coastguard Worker        },
146*c9945492SAndroid Build Coastguard Worker        arm: {
147*c9945492SAndroid Build Coastguard Worker            cflags: ["-Wno-ignored-pragmas"],
148*c9945492SAndroid Build Coastguard Worker        },
149*c9945492SAndroid Build Coastguard Worker        arm64: {
150*c9945492SAndroid Build Coastguard Worker            cflags: ["-Wno-ignored-pragmas"],
151*c9945492SAndroid Build Coastguard Worker        },
152*c9945492SAndroid Build Coastguard Worker    },
153*c9945492SAndroid Build Coastguard Worker
154*c9945492SAndroid Build Coastguard Worker    ldflags: [
155*c9945492SAndroid Build Coastguard Worker        "-Wl,--sort-section,alignment",
156*c9945492SAndroid Build Coastguard Worker        "-Wl,--sort-common",
157*c9945492SAndroid Build Coastguard Worker        "-Wl,--gc-sections",
158*c9945492SAndroid Build Coastguard Worker        "-Wl,--hash-style=both",
159*c9945492SAndroid Build Coastguard Worker        "-Wl,--no-undefined",
160*c9945492SAndroid Build Coastguard Worker        // Can't use --exclude-libs=ALL, that excludes the static libraries
161*c9945492SAndroid Build Coastguard Worker        // used for building subparts of libc_musl.
162*c9945492SAndroid Build Coastguard Worker        //"-Wl,--exclude-libs=ALL",
163*c9945492SAndroid Build Coastguard Worker        "-Wl,--exclude-libs=libgcc.a",
164*c9945492SAndroid Build Coastguard Worker        "-Wl,--exclude-libs=libgcc_stripped.a",
165*c9945492SAndroid Build Coastguard Worker        "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
166*c9945492SAndroid Build Coastguard Worker        "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
167*c9945492SAndroid Build Coastguard Worker        "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
168*c9945492SAndroid Build Coastguard Worker        "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
169*c9945492SAndroid Build Coastguard Worker    ],
170*c9945492SAndroid Build Coastguard Worker
171*c9945492SAndroid Build Coastguard Worker    asflags: ["-Wno-unused-command-line-argument"],
172*c9945492SAndroid Build Coastguard Worker
173*c9945492SAndroid Build Coastguard Worker    stl: "none",
174*c9945492SAndroid Build Coastguard Worker    c_std: "c99",
175*c9945492SAndroid Build Coastguard Worker    sanitize: {
176*c9945492SAndroid Build Coastguard Worker        never: true,
177*c9945492SAndroid Build Coastguard Worker    },
178*c9945492SAndroid Build Coastguard Worker    target: {
179*c9945492SAndroid Build Coastguard Worker        darwin: {
180*c9945492SAndroid Build Coastguard Worker            enabled: false,
181*c9945492SAndroid Build Coastguard Worker        },
182*c9945492SAndroid Build Coastguard Worker        bionic: {
183*c9945492SAndroid Build Coastguard Worker            enabled: false,
184*c9945492SAndroid Build Coastguard Worker        },
185*c9945492SAndroid Build Coastguard Worker        glibc: {
186*c9945492SAndroid Build Coastguard Worker            enabled: false,
187*c9945492SAndroid Build Coastguard Worker        },
188*c9945492SAndroid Build Coastguard Worker    },
189*c9945492SAndroid Build Coastguard Worker    lto: {
190*c9945492SAndroid Build Coastguard Worker        never: true,
191*c9945492SAndroid Build Coastguard Worker    },
192*c9945492SAndroid Build Coastguard Worker}
193*c9945492SAndroid Build Coastguard Worker
194*c9945492SAndroid Build Coastguard Workercc_defaults {
195*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_defaults",
196*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_base_defaults"],
197*c9945492SAndroid Build Coastguard Worker    header_libs: [
198*c9945492SAndroid Build Coastguard Worker        // The order here is very important, private headers like src/include/features.h override
199*c9945492SAndroid Build Coastguard Worker        // public headers like include/features.h, and arch headers like arch/x86_64/ksigaction.h
200*c9945492SAndroid Build Coastguard Worker        // override private headers like src/internal/ksigaction.h.
201*c9945492SAndroid Build Coastguard Worker        "libc_musl_arch_headers",
202*c9945492SAndroid Build Coastguard Worker        "libc_musl_private_headers",
203*c9945492SAndroid Build Coastguard Worker        "libc_musl_public_headers",
204*c9945492SAndroid Build Coastguard Worker    ],
205*c9945492SAndroid Build Coastguard Worker}
206*c9945492SAndroid Build Coastguard Worker
207*c9945492SAndroid Build Coastguard Workercc_library_headers {
208*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_headers",
209*c9945492SAndroid Build Coastguard Worker    visibility: ["//bionic/libc"],
210*c9945492SAndroid Build Coastguard Worker    host_supported: true,
211*c9945492SAndroid Build Coastguard Worker    device_supported: false,
212*c9945492SAndroid Build Coastguard Worker    system_shared_libs: [],
213*c9945492SAndroid Build Coastguard Worker    export_header_lib_headers: [
214*c9945492SAndroid Build Coastguard Worker        "libc_musl_arch_headers",
215*c9945492SAndroid Build Coastguard Worker        "libc_musl_public_headers",
216*c9945492SAndroid Build Coastguard Worker        "libc_uapi_headers",
217*c9945492SAndroid Build Coastguard Worker    ],
218*c9945492SAndroid Build Coastguard Worker    header_libs: [
219*c9945492SAndroid Build Coastguard Worker        "libc_musl_arch_headers",
220*c9945492SAndroid Build Coastguard Worker        "libc_musl_public_headers",
221*c9945492SAndroid Build Coastguard Worker        "libc_uapi_headers",
222*c9945492SAndroid Build Coastguard Worker    ],
223*c9945492SAndroid Build Coastguard Worker}
224*c9945492SAndroid Build Coastguard Worker
225*c9945492SAndroid Build Coastguard Worker//
226*c9945492SAndroid Build Coastguard Worker// The main musl libc library
227*c9945492SAndroid Build Coastguard Worker//
228*c9945492SAndroid Build Coastguard Worker
229*c9945492SAndroid Build Coastguard Workercc_library {
230*c9945492SAndroid Build Coastguard Worker    name: "libc_musl",
231*c9945492SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
232*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_defaults"],
233*c9945492SAndroid Build Coastguard Worker    whole_static_libs: ["libc_musl_static"],
234*c9945492SAndroid Build Coastguard Worker    shared: {
235*c9945492SAndroid Build Coastguard Worker        whole_static_libs: ["libc_musl_ldso"],
236*c9945492SAndroid Build Coastguard Worker    },
237*c9945492SAndroid Build Coastguard Worker    ldflags: [
238*c9945492SAndroid Build Coastguard Worker        "-Wl,-e,_dlstart",
239*c9945492SAndroid Build Coastguard Worker        "-nostdlib",
240*c9945492SAndroid Build Coastguard Worker    ],
241*c9945492SAndroid Build Coastguard Worker    dynamic_list: "dynamic.list",
242*c9945492SAndroid Build Coastguard Worker    export_header_lib_headers: [
243*c9945492SAndroid Build Coastguard Worker        "libc_musl_arch_headers",
244*c9945492SAndroid Build Coastguard Worker        "libc_musl_public_headers",
245*c9945492SAndroid Build Coastguard Worker        "libc_uapi_headers",
246*c9945492SAndroid Build Coastguard Worker    ],
247*c9945492SAndroid Build Coastguard Worker    header_libs: [
248*c9945492SAndroid Build Coastguard Worker        "libc_uapi_headers",
249*c9945492SAndroid Build Coastguard Worker    ],
250*c9945492SAndroid Build Coastguard Worker}
251*c9945492SAndroid Build Coastguard Worker
252*c9945492SAndroid Build Coastguard Worker// All the static parts of the main musl libc.  Don't use this directly, use
253*c9945492SAndroid Build Coastguard Worker// the version exported through libc_musl instead.
254*c9945492SAndroid Build Coastguard Workercc_library_static {
255*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_static",
256*c9945492SAndroid Build Coastguard Worker    defaults: [
257*c9945492SAndroid Build Coastguard Worker        "libc_musl_defaults",
258*c9945492SAndroid Build Coastguard Worker        "libc_musl_sources",
259*c9945492SAndroid Build Coastguard Worker    ],
260*c9945492SAndroid Build Coastguard Worker    whole_static_libs: [
261*c9945492SAndroid Build Coastguard Worker        "libc_musl_opt",
262*c9945492SAndroid Build Coastguard Worker        "libc_musl_opt_nossp",
263*c9945492SAndroid Build Coastguard Worker        "libc_musl_nossp",
264*c9945492SAndroid Build Coastguard Worker        "libexecinfo",
265*c9945492SAndroid Build Coastguard Worker        "libb64",
266*c9945492SAndroid Build Coastguard Worker        "libunwind",
267*c9945492SAndroid Build Coastguard Worker    ],
268*c9945492SAndroid Build Coastguard Worker    multilib: {
269*c9945492SAndroid Build Coastguard Worker        lib32: {
270*c9945492SAndroid Build Coastguard Worker            whole_static_libs: ["libc_musl_compat32"],
271*c9945492SAndroid Build Coastguard Worker        },
272*c9945492SAndroid Build Coastguard Worker    },
273*c9945492SAndroid Build Coastguard Worker    export_header_lib_headers: [
274*c9945492SAndroid Build Coastguard Worker        "libc_musl_arch_headers",
275*c9945492SAndroid Build Coastguard Worker        "libc_musl_public_headers",
276*c9945492SAndroid Build Coastguard Worker        "libc_uapi_headers",
277*c9945492SAndroid Build Coastguard Worker    ],
278*c9945492SAndroid Build Coastguard Worker    header_libs: [
279*c9945492SAndroid Build Coastguard Worker        "libc_uapi_headers",
280*c9945492SAndroid Build Coastguard Worker    ],
281*c9945492SAndroid Build Coastguard Worker}
282*c9945492SAndroid Build Coastguard Worker
283*c9945492SAndroid Build Coastguard Worker// Musl sources that are compiled with -O3
284*c9945492SAndroid Build Coastguard Workercc_library_static {
285*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_opt",
286*c9945492SAndroid Build Coastguard Worker    defaults: [
287*c9945492SAndroid Build Coastguard Worker        "libc_musl_defaults",
288*c9945492SAndroid Build Coastguard Worker        "libc_musl_opt_sources",
289*c9945492SAndroid Build Coastguard Worker    ],
290*c9945492SAndroid Build Coastguard Worker    cflags: ["-O3"],
291*c9945492SAndroid Build Coastguard Worker}
292*c9945492SAndroid Build Coastguard Worker
293*c9945492SAndroid Build Coastguard Worker// Musl sources that are compiled with -O3 and -fno-stack-protector
294*c9945492SAndroid Build Coastguard Workercc_library_static {
295*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_opt_nossp",
296*c9945492SAndroid Build Coastguard Worker    defaults: [
297*c9945492SAndroid Build Coastguard Worker        "libc_musl_defaults",
298*c9945492SAndroid Build Coastguard Worker        "libc_musl_opt_nossp_sources",
299*c9945492SAndroid Build Coastguard Worker    ],
300*c9945492SAndroid Build Coastguard Worker    cflags: [
301*c9945492SAndroid Build Coastguard Worker        "-O3",
302*c9945492SAndroid Build Coastguard Worker        "-fno-stack-protector",
303*c9945492SAndroid Build Coastguard Worker    ],
304*c9945492SAndroid Build Coastguard Worker}
305*c9945492SAndroid Build Coastguard Worker
306*c9945492SAndroid Build Coastguard Worker// Musl sources that are compiled with -fno-stack-protector
307*c9945492SAndroid Build Coastguard Workercc_library_static {
308*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_nossp",
309*c9945492SAndroid Build Coastguard Worker    defaults: [
310*c9945492SAndroid Build Coastguard Worker        "libc_musl_defaults",
311*c9945492SAndroid Build Coastguard Worker        "libc_musl_nossp_sources",
312*c9945492SAndroid Build Coastguard Worker    ],
313*c9945492SAndroid Build Coastguard Worker    cflags: ["-fno-stack-protector"],
314*c9945492SAndroid Build Coastguard Worker}
315*c9945492SAndroid Build Coastguard Worker
316*c9945492SAndroid Build Coastguard Worker// Musl sources for 32-bit architectures
317*c9945492SAndroid Build Coastguard Workercc_library_static {
318*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_compat32",
319*c9945492SAndroid Build Coastguard Worker    defaults: [
320*c9945492SAndroid Build Coastguard Worker        "libc_musl_defaults",
321*c9945492SAndroid Build Coastguard Worker        "libc_musl_compat32_sources",
322*c9945492SAndroid Build Coastguard Worker    ],
323*c9945492SAndroid Build Coastguard Worker}
324*c9945492SAndroid Build Coastguard Worker
325*c9945492SAndroid Build Coastguard Worker// Musl sources for the dynamic linker.
326*c9945492SAndroid Build Coastguard Workercc_library_static {
327*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_ldso",
328*c9945492SAndroid Build Coastguard Worker    defaults: [
329*c9945492SAndroid Build Coastguard Worker        "libc_musl_defaults",
330*c9945492SAndroid Build Coastguard Worker        "libc_musl_ldso_sources",
331*c9945492SAndroid Build Coastguard Worker    ],
332*c9945492SAndroid Build Coastguard Worker    cflags: [
333*c9945492SAndroid Build Coastguard Worker        "-fno-stack-protector",
334*c9945492SAndroid Build Coastguard Worker        "-DLIBC_SONAME=libc_musl.so",
335*c9945492SAndroid Build Coastguard Worker    ],
336*c9945492SAndroid Build Coastguard Worker}
337*c9945492SAndroid Build Coastguard Worker
338*c9945492SAndroid Build Coastguard Worker// An attempt to compile the dynamic linker as a standalone library separate from libc_musl.so.
339*c9945492SAndroid Build Coastguard Worker// Not used yet.
340*c9945492SAndroid Build Coastguard Workercc_library_shared {
341*c9945492SAndroid Build Coastguard Worker    name: "musl_linker",
342*c9945492SAndroid Build Coastguard Worker    defaults: [
343*c9945492SAndroid Build Coastguard Worker        "libc_musl_defaults",
344*c9945492SAndroid Build Coastguard Worker    ],
345*c9945492SAndroid Build Coastguard Worker    nocrt: true,
346*c9945492SAndroid Build Coastguard Worker    static_libs: [
347*c9945492SAndroid Build Coastguard Worker        "libc_musl_ldso",
348*c9945492SAndroid Build Coastguard Worker        "libc_musl",
349*c9945492SAndroid Build Coastguard Worker    ],
350*c9945492SAndroid Build Coastguard Worker    ldflags: [
351*c9945492SAndroid Build Coastguard Worker        "-Wl,-e,_dlstart",
352*c9945492SAndroid Build Coastguard Worker        "-nostdlib",
353*c9945492SAndroid Build Coastguard Worker        "-Wl,--exclude-libs=libc_musl.a",
354*c9945492SAndroid Build Coastguard Worker    ],
355*c9945492SAndroid Build Coastguard Worker}
356*c9945492SAndroid Build Coastguard Worker
357*c9945492SAndroid Build Coastguard Worker//
358*c9945492SAndroid Build Coastguard Worker// The musl CRT objects
359*c9945492SAndroid Build Coastguard Worker//
360*c9945492SAndroid Build Coastguard Worker
361*c9945492SAndroid Build Coastguard Workercc_defaults {
362*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crt_defaults",
363*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_base_defaults"],
364*c9945492SAndroid Build Coastguard Worker    cflags: [
365*c9945492SAndroid Build Coastguard Worker        // These are required to make sure the C code in crt/*.c
366*c9945492SAndroid Build Coastguard Worker        // doesn't have any dependencies on libc.
367*c9945492SAndroid Build Coastguard Worker        "-fno-stack-protector",
368*c9945492SAndroid Build Coastguard Worker        "-ftrivial-auto-var-init=uninitialized",
369*c9945492SAndroid Build Coastguard Worker    ],
370*c9945492SAndroid Build Coastguard Worker    ldflags: [
371*c9945492SAndroid Build Coastguard Worker        "-Wl,--no-gc-sections",
372*c9945492SAndroid Build Coastguard Worker    ],
373*c9945492SAndroid Build Coastguard Worker
374*c9945492SAndroid Build Coastguard Worker    // The headers below are the same as the header_libs in
375*c9945492SAndroid Build Coastguard Worker    // libc_musl_defaults, but bazel considers the crt depending
376*c9945492SAndroid Build Coastguard Worker    // on a header lib to be a circular dependency (toolchain ->
377*c9945492SAndroid Build Coastguard Worker    // crt objects -> header lib -> toolchain).
378*c9945492SAndroid Build Coastguard Worker    // TODO(b/263407827): go back to using header_libs once bazel
379*c9945492SAndroid Build Coastguard Worker    // supports it without introducing a dependency on the toolchain.
380*c9945492SAndroid Build Coastguard Worker    arch: {
381*c9945492SAndroid Build Coastguard Worker        arm: {
382*c9945492SAndroid Build Coastguard Worker            local_include_dirs: ["arch/arm"],
383*c9945492SAndroid Build Coastguard Worker        },
384*c9945492SAndroid Build Coastguard Worker        arm64: {
385*c9945492SAndroid Build Coastguard Worker            local_include_dirs: ["arch/aarch64"],
386*c9945492SAndroid Build Coastguard Worker        },
387*c9945492SAndroid Build Coastguard Worker        x86: {
388*c9945492SAndroid Build Coastguard Worker            local_include_dirs: ["arch/i386"],
389*c9945492SAndroid Build Coastguard Worker        },
390*c9945492SAndroid Build Coastguard Worker        x86_64: {
391*c9945492SAndroid Build Coastguard Worker            local_include_dirs: ["arch/x86_64"],
392*c9945492SAndroid Build Coastguard Worker        },
393*c9945492SAndroid Build Coastguard Worker    },
394*c9945492SAndroid Build Coastguard Worker    generated_headers: [
395*c9945492SAndroid Build Coastguard Worker        "libc_musl_alltypes.h",
396*c9945492SAndroid Build Coastguard Worker        "libc_musl_syscall.h",
397*c9945492SAndroid Build Coastguard Worker        "libc_musl_version.h",
398*c9945492SAndroid Build Coastguard Worker    ],
399*c9945492SAndroid Build Coastguard Worker    local_include_dirs: [
400*c9945492SAndroid Build Coastguard Worker        "arch/generic",
401*c9945492SAndroid Build Coastguard Worker        "src/include",
402*c9945492SAndroid Build Coastguard Worker        "src/internal",
403*c9945492SAndroid Build Coastguard Worker        "android/include",
404*c9945492SAndroid Build Coastguard Worker        "include",
405*c9945492SAndroid Build Coastguard Worker    ],
406*c9945492SAndroid Build Coastguard Worker}
407*c9945492SAndroid Build Coastguard Worker
408*c9945492SAndroid Build Coastguard Workercc_object {
409*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crt1",
410*c9945492SAndroid Build Coastguard Worker    defaults: [
411*c9945492SAndroid Build Coastguard Worker        "libc_musl_crt_defaults",
412*c9945492SAndroid Build Coastguard Worker        "libc_musl_crt1_sources",
413*c9945492SAndroid Build Coastguard Worker    ],
414*c9945492SAndroid Build Coastguard Worker}
415*c9945492SAndroid Build Coastguard Worker
416*c9945492SAndroid Build Coastguard Workercc_object {
417*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crti",
418*c9945492SAndroid Build Coastguard Worker    defaults: [
419*c9945492SAndroid Build Coastguard Worker        "libc_musl_crt_defaults",
420*c9945492SAndroid Build Coastguard Worker        "libc_musl_crti_sources",
421*c9945492SAndroid Build Coastguard Worker    ],
422*c9945492SAndroid Build Coastguard Worker}
423*c9945492SAndroid Build Coastguard Worker
424*c9945492SAndroid Build Coastguard Workercc_object {
425*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crtn",
426*c9945492SAndroid Build Coastguard Worker    defaults: [
427*c9945492SAndroid Build Coastguard Worker        "libc_musl_crt_defaults",
428*c9945492SAndroid Build Coastguard Worker        "libc_musl_crtn_sources",
429*c9945492SAndroid Build Coastguard Worker    ],
430*c9945492SAndroid Build Coastguard Worker}
431*c9945492SAndroid Build Coastguard Worker
432*c9945492SAndroid Build Coastguard Workercc_object {
433*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_rcrt1",
434*c9945492SAndroid Build Coastguard Worker    defaults: [
435*c9945492SAndroid Build Coastguard Worker        "libc_musl_crt_defaults",
436*c9945492SAndroid Build Coastguard Worker        "libc_musl_rcrt1_sources",
437*c9945492SAndroid Build Coastguard Worker    ],
438*c9945492SAndroid Build Coastguard Worker}
439*c9945492SAndroid Build Coastguard Worker
440*c9945492SAndroid Build Coastguard Workercc_object {
441*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_Scrt1",
442*c9945492SAndroid Build Coastguard Worker    defaults: [
443*c9945492SAndroid Build Coastguard Worker        "libc_musl_crt_defaults",
444*c9945492SAndroid Build Coastguard Worker        "libc_musl_Scrt1_sources",
445*c9945492SAndroid Build Coastguard Worker    ],
446*c9945492SAndroid Build Coastguard Worker}
447*c9945492SAndroid Build Coastguard Worker
448*c9945492SAndroid Build Coastguard Worker//
449*c9945492SAndroid Build Coastguard Worker// The custom CRT objects for use in the platform build.
450*c9945492SAndroid Build Coastguard Worker// Embeds the linker into crtbegin_dynamic.
451*c9945492SAndroid Build Coastguard Worker//
452*c9945492SAndroid Build Coastguard Worker
453*c9945492SAndroid Build Coastguard Workercc_object {
454*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crtbegin_dynamic",
455*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_crt_defaults"],
456*c9945492SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
457*c9945492SAndroid Build Coastguard Worker    objs: [
458*c9945492SAndroid Build Coastguard Worker        "libc_musl_crti",
459*c9945492SAndroid Build Coastguard Worker        "clang_rt.crtbegin",
460*c9945492SAndroid Build Coastguard Worker    ],
461*c9945492SAndroid Build Coastguard Worker    srcs: [
462*c9945492SAndroid Build Coastguard Worker        "android/relinterp.c",
463*c9945492SAndroid Build Coastguard Worker    ],
464*c9945492SAndroid Build Coastguard Worker    cflags: ["-DLOADER_PATH=\"libc_musl.so\""],
465*c9945492SAndroid Build Coastguard Worker}
466*c9945492SAndroid Build Coastguard Worker
467*c9945492SAndroid Build Coastguard Workercc_object {
468*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crtbegin_static",
469*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_crt_defaults"],
470*c9945492SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
471*c9945492SAndroid Build Coastguard Worker    objs: [
472*c9945492SAndroid Build Coastguard Worker        "libc_musl_Scrt1",
473*c9945492SAndroid Build Coastguard Worker        "libc_musl_crti",
474*c9945492SAndroid Build Coastguard Worker        "clang_rt.crtbegin",
475*c9945492SAndroid Build Coastguard Worker    ],
476*c9945492SAndroid Build Coastguard Worker}
477*c9945492SAndroid Build Coastguard Worker
478*c9945492SAndroid Build Coastguard Workercc_object {
479*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crtend",
480*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_crt_defaults"],
481*c9945492SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
482*c9945492SAndroid Build Coastguard Worker    objs: [
483*c9945492SAndroid Build Coastguard Worker        "clang_rt.crtend",
484*c9945492SAndroid Build Coastguard Worker        "libc_musl_crtn",
485*c9945492SAndroid Build Coastguard Worker    ],
486*c9945492SAndroid Build Coastguard Worker}
487*c9945492SAndroid Build Coastguard Worker
488*c9945492SAndroid Build Coastguard Workercc_object {
489*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crtbegin_so",
490*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_crt_defaults"],
491*c9945492SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
492*c9945492SAndroid Build Coastguard Worker    objs: [
493*c9945492SAndroid Build Coastguard Worker        "libc_musl_crti",
494*c9945492SAndroid Build Coastguard Worker        "clang_rt.crtbegin",
495*c9945492SAndroid Build Coastguard Worker    ],
496*c9945492SAndroid Build Coastguard Worker}
497*c9945492SAndroid Build Coastguard Worker
498*c9945492SAndroid Build Coastguard Workercc_object {
499*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_crtend_so",
500*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_crt_defaults"],
501*c9945492SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
502*c9945492SAndroid Build Coastguard Worker    objs: [
503*c9945492SAndroid Build Coastguard Worker        "clang_rt.crtend",
504*c9945492SAndroid Build Coastguard Worker        "libc_musl_crtn",
505*c9945492SAndroid Build Coastguard Worker    ],
506*c9945492SAndroid Build Coastguard Worker}
507*c9945492SAndroid Build Coastguard Worker
508*c9945492SAndroid Build Coastguard Worker//
509*c9945492SAndroid Build Coastguard Worker// Tests for the embedded linker trampoline
510*c9945492SAndroid Build Coastguard Worker//
511*c9945492SAndroid Build Coastguard Worker
512*c9945492SAndroid Build Coastguard Workercc_test_host {
513*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_ldso_trampoline_test",
514*c9945492SAndroid Build Coastguard Worker    srcs: ["android/ldso_trampoline_test.cpp"],
515*c9945492SAndroid Build Coastguard Worker    stl: "libc++",
516*c9945492SAndroid Build Coastguard Worker    target: {
517*c9945492SAndroid Build Coastguard Worker        darwin: {
518*c9945492SAndroid Build Coastguard Worker            enabled: false,
519*c9945492SAndroid Build Coastguard Worker        },
520*c9945492SAndroid Build Coastguard Worker    },
521*c9945492SAndroid Build Coastguard Worker}
522*c9945492SAndroid Build Coastguard Worker
523*c9945492SAndroid Build Coastguard Worker//
524*c9945492SAndroid Build Coastguard Worker// Generated headers
525*c9945492SAndroid Build Coastguard Worker//
526*c9945492SAndroid Build Coastguard Worker
527*c9945492SAndroid Build Coastguard Workergenrule {
528*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_version.h",
529*c9945492SAndroid Build Coastguard Worker    srcs: ["VERSION"],
530*c9945492SAndroid Build Coastguard Worker    out: ["version.h"],
531*c9945492SAndroid Build Coastguard Worker    cmd: "printf '#define VERSION \"%s\"\n' \"$$(cat $(location VERSION))\" > $(out)",
532*c9945492SAndroid Build Coastguard Worker}
533*c9945492SAndroid Build Coastguard Worker
534*c9945492SAndroid Build Coastguard Worker// libc_musl_arch_alltypes.h is split out of libc_musl_alltypes.h to ensure the arch-specific
535*c9945492SAndroid Build Coastguard Worker// alltypes.h.in ends up before the generic alltypes.h.in in the output.
536*c9945492SAndroid Build Coastguard Workercc_genrule {
537*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_arch_alltypes.h",
538*c9945492SAndroid Build Coastguard Worker    host_supported: true,
539*c9945492SAndroid Build Coastguard Worker    device_supported: false,
540*c9945492SAndroid Build Coastguard Worker    arch: {
541*c9945492SAndroid Build Coastguard Worker        arm: {
542*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/arm/bits/alltypes.h.in"],
543*c9945492SAndroid Build Coastguard Worker        },
544*c9945492SAndroid Build Coastguard Worker        arm64: {
545*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/aarch64/bits/alltypes.h.in"],
546*c9945492SAndroid Build Coastguard Worker        },
547*c9945492SAndroid Build Coastguard Worker        x86: {
548*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/i386/bits/alltypes.h.in"],
549*c9945492SAndroid Build Coastguard Worker        },
550*c9945492SAndroid Build Coastguard Worker        x86_64: {
551*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/x86_64/bits/alltypes.h.in"],
552*c9945492SAndroid Build Coastguard Worker        },
553*c9945492SAndroid Build Coastguard Worker    },
554*c9945492SAndroid Build Coastguard Worker    tool_files: ["tools/mkalltypes.sed"],
555*c9945492SAndroid Build Coastguard Worker    out: ["bits/arch/alltypes.h"],
556*c9945492SAndroid Build Coastguard Worker    cmd: "sed -f $(location tools/mkalltypes.sed) $(in) > $(out)",
557*c9945492SAndroid Build Coastguard Worker}
558*c9945492SAndroid Build Coastguard Worker
559*c9945492SAndroid Build Coastguard Workercc_genrule {
560*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_alltypes.h",
561*c9945492SAndroid Build Coastguard Worker    host_supported: true,
562*c9945492SAndroid Build Coastguard Worker    device_supported: false,
563*c9945492SAndroid Build Coastguard Worker    srcs: [
564*c9945492SAndroid Build Coastguard Worker        "include/alltypes.h.in",
565*c9945492SAndroid Build Coastguard Worker        ":libc_musl_arch_alltypes.h",
566*c9945492SAndroid Build Coastguard Worker    ],
567*c9945492SAndroid Build Coastguard Worker    tool_files: ["tools/mkalltypes.sed"],
568*c9945492SAndroid Build Coastguard Worker    out: ["bits/alltypes.h"],
569*c9945492SAndroid Build Coastguard Worker    cmd: "( " +
570*c9945492SAndroid Build Coastguard Worker        "cat $(location :libc_musl_arch_alltypes.h) && " +
571*c9945492SAndroid Build Coastguard Worker        "sed -f $(location tools/mkalltypes.sed) $(location include/alltypes.h.in) " +
572*c9945492SAndroid Build Coastguard Worker        ") > $(out)",
573*c9945492SAndroid Build Coastguard Worker}
574*c9945492SAndroid Build Coastguard Worker
575*c9945492SAndroid Build Coastguard Workercc_genrule {
576*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_syscall.h",
577*c9945492SAndroid Build Coastguard Worker    host_supported: true,
578*c9945492SAndroid Build Coastguard Worker    device_supported: false,
579*c9945492SAndroid Build Coastguard Worker    arch: {
580*c9945492SAndroid Build Coastguard Worker        arm: {
581*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/arm/bits/syscall.h.in"],
582*c9945492SAndroid Build Coastguard Worker        },
583*c9945492SAndroid Build Coastguard Worker        arm64: {
584*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/aarch64/bits/syscall.h.in"],
585*c9945492SAndroid Build Coastguard Worker        },
586*c9945492SAndroid Build Coastguard Worker        x86: {
587*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/i386/bits/syscall.h.in"],
588*c9945492SAndroid Build Coastguard Worker        },
589*c9945492SAndroid Build Coastguard Worker        x86_64: {
590*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/x86_64/bits/syscall.h.in"],
591*c9945492SAndroid Build Coastguard Worker        },
592*c9945492SAndroid Build Coastguard Worker    },
593*c9945492SAndroid Build Coastguard Worker    out: ["bits/syscall.h"],
594*c9945492SAndroid Build Coastguard Worker    cmd: "cp $(in) $(out) && sed -n -e s/__NR_/SYS_/p < $(in) >> $(out)",
595*c9945492SAndroid Build Coastguard Worker}
596*c9945492SAndroid Build Coastguard Worker
597*c9945492SAndroid Build Coastguard Worker//
598*c9945492SAndroid Build Coastguard Worker// Rules to generate a sysroot.  This isn't used during the build, but can be convenient to run
599*c9945492SAndroid Build Coastguard Worker// configure scripts from external projects to generate necessary files to build against musl.
600*c9945492SAndroid Build Coastguard Worker//
601*c9945492SAndroid Build Coastguard Worker
602*c9945492SAndroid Build Coastguard Worker
603*c9945492SAndroid Build Coastguard Worker// An empty static library that will be copied to libdl.a, etc. in the sysroot.
604*c9945492SAndroid Build Coastguard Worker// Shouldn't be used by anything else besides the sysroot cc_genrule.
605*c9945492SAndroid Build Coastguard Workercc_library_static {
606*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_sysroot_static_empty",
607*c9945492SAndroid Build Coastguard Worker    defaults: [
608*c9945492SAndroid Build Coastguard Worker        "libc_musl_defaults",
609*c9945492SAndroid Build Coastguard Worker    ],
610*c9945492SAndroid Build Coastguard Worker}
611*c9945492SAndroid Build Coastguard Worker
612*c9945492SAndroid Build Coastguard Worker// The linker and trampoline compiled as a .o file to use as part of the sysroot
613*c9945492SAndroid Build Coastguard Worker// crt.
614*c9945492SAndroid Build Coastguard Workercc_object {
615*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_linker_object",
616*c9945492SAndroid Build Coastguard Worker    defaults: ["libc_musl_crt_defaults"],
617*c9945492SAndroid Build Coastguard Worker    srcs: [
618*c9945492SAndroid Build Coastguard Worker        "android/relinterp.c",
619*c9945492SAndroid Build Coastguard Worker    ],
620*c9945492SAndroid Build Coastguard Worker    cflags: ["-DLOADER_PATH=\"libc_musl.so\""],
621*c9945492SAndroid Build Coastguard Worker}
622*c9945492SAndroid Build Coastguard Worker
623*c9945492SAndroid Build Coastguard Worker// The architecture-specific bits have to be handled separately because the label varies based
624*c9945492SAndroid Build Coastguard Worker// on architecture, which prevents using $(locations) to find them and requires using $(in)
625*c9945492SAndroid Build Coastguard Worker// instead, which would mix in all the other files if this were part of the main libc_musl_sysroot
626*c9945492SAndroid Build Coastguard Worker// genrule.
627*c9945492SAndroid Build Coastguard Workercc_genrule {
628*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_sysroot_bits",
629*c9945492SAndroid Build Coastguard Worker    host_supported: true,
630*c9945492SAndroid Build Coastguard Worker    device_supported: false,
631*c9945492SAndroid Build Coastguard Worker    arch: {
632*c9945492SAndroid Build Coastguard Worker        arm: {
633*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/arm/bits/*.h"],
634*c9945492SAndroid Build Coastguard Worker        },
635*c9945492SAndroid Build Coastguard Worker        arm64: {
636*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/aarch64/bits/*.h"],
637*c9945492SAndroid Build Coastguard Worker        },
638*c9945492SAndroid Build Coastguard Worker        x86: {
639*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/i386/bits/*.h"],
640*c9945492SAndroid Build Coastguard Worker        },
641*c9945492SAndroid Build Coastguard Worker        x86_64: {
642*c9945492SAndroid Build Coastguard Worker            srcs: ["arch/x86_64/bits/*.h"],
643*c9945492SAndroid Build Coastguard Worker        },
644*c9945492SAndroid Build Coastguard Worker    },
645*c9945492SAndroid Build Coastguard Worker    out: ["libc_musl_sysroot_bits.zip"],
646*c9945492SAndroid Build Coastguard Worker    tools: ["soong_zip"],
647*c9945492SAndroid Build Coastguard Worker    cmd: "includes=($(in)) && $(location soong_zip) -o $(out) -P include/bits -j -D $$(dirname $${includes[0]})",
648*c9945492SAndroid Build Coastguard Worker}
649*c9945492SAndroid Build Coastguard Worker
650*c9945492SAndroid Build Coastguard Workergenrule {
651*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_clang_wrapper",
652*c9945492SAndroid Build Coastguard Worker    srcs: ["tools/musl-clang.in"],
653*c9945492SAndroid Build Coastguard Worker    out: ["musl-clang"],
654*c9945492SAndroid Build Coastguard Worker    cmd: "sed -e 's`@CC@`clang`' -e 's`@PREFIX@`$$(dirname \"$$0\")/..`' -e 's`@INCDIR@`$${libc}/include`' -e 's`@LIBDIR@`$${libc}/lib`' $(in) > $(out) && " +
655*c9945492SAndroid Build Coastguard Worker        "chmod a+x $(out)",
656*c9945492SAndroid Build Coastguard Worker}
657*c9945492SAndroid Build Coastguard Worker
658*c9945492SAndroid Build Coastguard Workergenrule {
659*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_ld_wrapper",
660*c9945492SAndroid Build Coastguard Worker    srcs: ["tools/ld.musl-clang.in"],
661*c9945492SAndroid Build Coastguard Worker    out: ["ld.musl-clang"],
662*c9945492SAndroid Build Coastguard Worker    cmd: "sed -e 's`@CC@`clang`' -e 's`@LIBDIR@`$$(dirname \"$$0\")/../lib`' -e 's`@LDSO@`$$(dirname \"$$0\")/../lib/ld-musl.so.1`' $(in) > $(out) && " +
663*c9945492SAndroid Build Coastguard Worker        "chmod a+x $(out)",
664*c9945492SAndroid Build Coastguard Worker}
665*c9945492SAndroid Build Coastguard Worker
666*c9945492SAndroid Build Coastguard Workercc_library_host_static {
667*c9945492SAndroid Build Coastguard Worker    name: "libz_static_for_sysroot",
668*c9945492SAndroid Build Coastguard Worker    whole_static_libs: ["libz"],
669*c9945492SAndroid Build Coastguard Worker}
670*c9945492SAndroid Build Coastguard Worker
671*c9945492SAndroid Build Coastguard Workercc_genrule {
672*c9945492SAndroid Build Coastguard Worker    name: "libc_musl_sysroot",
673*c9945492SAndroid Build Coastguard Worker    host_supported: true,
674*c9945492SAndroid Build Coastguard Worker    device_supported: false,
675*c9945492SAndroid Build Coastguard Worker    enabled: false,
676*c9945492SAndroid Build Coastguard Worker    target: {
677*c9945492SAndroid Build Coastguard Worker        musl: {
678*c9945492SAndroid Build Coastguard Worker            enabled: true,
679*c9945492SAndroid Build Coastguard Worker        },
680*c9945492SAndroid Build Coastguard Worker    },
681*c9945492SAndroid Build Coastguard Worker    srcs: [
682*c9945492SAndroid Build Coastguard Worker        "LICENSE",
683*c9945492SAndroid Build Coastguard Worker        "COPYRIGHT",
684*c9945492SAndroid Build Coastguard Worker
685*c9945492SAndroid Build Coastguard Worker        // Headers
686*c9945492SAndroid Build Coastguard Worker        "include/**/*.h",
687*c9945492SAndroid Build Coastguard Worker        "arch/generic/bits/*.h",
688*c9945492SAndroid Build Coastguard Worker        "android/include/bits/*.h",
689*c9945492SAndroid Build Coastguard Worker        "android/include/sys/cdefs.h",
690*c9945492SAndroid Build Coastguard Worker        ":libc_musl_syscall.h",
691*c9945492SAndroid Build Coastguard Worker        ":libc_musl_alltypes.h",
692*c9945492SAndroid Build Coastguard Worker        ":libc_musl_sysroot_bits",
693*c9945492SAndroid Build Coastguard Worker
694*c9945492SAndroid Build Coastguard Worker        // Bionic kernel uapi headers
695*c9945492SAndroid Build Coastguard Worker        ":libc_musl_sysroot_bionic_headers",
696*c9945492SAndroid Build Coastguard Worker
697*c9945492SAndroid Build Coastguard Worker        ":libc_musl_sysroot_zlib_headers",
698*c9945492SAndroid Build Coastguard Worker
699*c9945492SAndroid Build Coastguard Worker        // Libraries
700*c9945492SAndroid Build Coastguard Worker        ":libc_musl",
701*c9945492SAndroid Build Coastguard Worker        ":libc_musl_static",
702*c9945492SAndroid Build Coastguard Worker        ":libz_static_for_sysroot",
703*c9945492SAndroid Build Coastguard Worker
704*c9945492SAndroid Build Coastguard Worker        // Objects
705*c9945492SAndroid Build Coastguard Worker        ":libc_musl_crti",
706*c9945492SAndroid Build Coastguard Worker        ":libc_musl_crtn",
707*c9945492SAndroid Build Coastguard Worker        ":libc_musl_crt1",
708*c9945492SAndroid Build Coastguard Worker        ":libc_musl_rcrt1",
709*c9945492SAndroid Build Coastguard Worker        ":libc_musl_Scrt1",
710*c9945492SAndroid Build Coastguard Worker        ":clang_rt.crtbegin",
711*c9945492SAndroid Build Coastguard Worker        ":clang_rt.crtend",
712*c9945492SAndroid Build Coastguard Worker
713*c9945492SAndroid Build Coastguard Worker        // Embedded linker objects and linker scripts
714*c9945492SAndroid Build Coastguard Worker        ":libc_musl_linker_object",
715*c9945492SAndroid Build Coastguard Worker        "android/relinterp.script",
716*c9945492SAndroid Build Coastguard Worker
717*c9945492SAndroid Build Coastguard Worker        // Wrapper scripts
718*c9945492SAndroid Build Coastguard Worker        ":libc_musl_clang_wrapper",
719*c9945492SAndroid Build Coastguard Worker        ":libc_musl_ld_wrapper",
720*c9945492SAndroid Build Coastguard Worker
721*c9945492SAndroid Build Coastguard Worker        // Empty static libraries
722*c9945492SAndroid Build Coastguard Worker        ":libc_musl_sysroot_static_empty",
723*c9945492SAndroid Build Coastguard Worker    ],
724*c9945492SAndroid Build Coastguard Worker    out: ["libc_musl_sysroot.zip"],
725*c9945492SAndroid Build Coastguard Worker    tools: [
726*c9945492SAndroid Build Coastguard Worker        "soong_zip",
727*c9945492SAndroid Build Coastguard Worker        "merge_zips",
728*c9945492SAndroid Build Coastguard Worker        "zip2zip",
729*c9945492SAndroid Build Coastguard Worker    ],
730*c9945492SAndroid Build Coastguard Worker    cmd: "includes=($(locations include/**/*.h)) && " +
731*c9945492SAndroid Build Coastguard Worker        "bits=($(locations arch/generic/bits/*.h)) && " +
732*c9945492SAndroid Build Coastguard Worker        "android_bits=($(locations android/include/bits/*.h)) && " +
733*c9945492SAndroid Build Coastguard Worker        "ln -s libc_musl.so $(genDir)/ld-musl.so.1 && " +
734*c9945492SAndroid Build Coastguard Worker        "echo -e 'GROUP ( libc_musl_linker_object.o )\nINCLUDE relinterp.script' > $(genDir)/Scrt1.ld && " +
735*c9945492SAndroid Build Coastguard Worker        "echo -e 'GROUP ( libc_musl.so )' > $(genDir)/libc.so && " +
736*c9945492SAndroid Build Coastguard Worker        "$(location soong_zip) -o $(genDir)/sysroot.zip " +
737*c9945492SAndroid Build Coastguard Worker        " -j " +
738*c9945492SAndroid Build Coastguard Worker        "  -f $(location LICENSE) " +
739*c9945492SAndroid Build Coastguard Worker        "  -f $(location COPYRIGHT) " +
740*c9945492SAndroid Build Coastguard Worker        // headers
741*c9945492SAndroid Build Coastguard Worker        " -P include " +
742*c9945492SAndroid Build Coastguard Worker        "  -C $$(dirname $${includes[0]}) " +
743*c9945492SAndroid Build Coastguard Worker        "  -D $$(dirname $${includes[0]}) " +
744*c9945492SAndroid Build Coastguard Worker        " -P include/bits -j " +
745*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_syscall.h) " +
746*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_alltypes.h) " +
747*c9945492SAndroid Build Coastguard Worker        "  -D $$(dirname $${bits[0]}) " +
748*c9945492SAndroid Build Coastguard Worker        "  -D $$(dirname $${android_bits[0]}) " +
749*c9945492SAndroid Build Coastguard Worker        " -P include/sys -j " +
750*c9945492SAndroid Build Coastguard Worker        "  -f $(location android/include/sys/cdefs.h) " +
751*c9945492SAndroid Build Coastguard Worker        // embedded linker crt objects
752*c9945492SAndroid Build Coastguard Worker        " -P lib -j " +
753*c9945492SAndroid Build Coastguard Worker        "  -f $(location android/relinterp.script) " +
754*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_linker_object) " +
755*c9945492SAndroid Build Coastguard Worker        // libs
756*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl) " +
757*c9945492SAndroid Build Coastguard Worker        "  -f $(genDir)/ld-musl.so.1 " +
758*c9945492SAndroid Build Coastguard Worker        "  -f $(genDir)/libc.so " +
759*c9945492SAndroid Build Coastguard Worker        // clang wrappers
760*c9945492SAndroid Build Coastguard Worker        " -P bin -j " +
761*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_clang_wrapper) " +
762*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_ld_wrapper) " +
763*c9945492SAndroid Build Coastguard Worker        " && " +
764*c9945492SAndroid Build Coastguard Worker        // libs in a separate zip so they can be renamed
765*c9945492SAndroid Build Coastguard Worker        "$(location soong_zip) -o $(genDir)/libs.zip " +
766*c9945492SAndroid Build Coastguard Worker        " -P lib -j " +
767*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_static) " +
768*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_sysroot_static_empty) " +
769*c9945492SAndroid Build Coastguard Worker        "  -f $(genDir)/Scrt1.ld " +
770*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_crti) " +
771*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_crtn) " +
772*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_crt1) " +
773*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_rcrt1) " +
774*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libc_musl_Scrt1) " +
775*c9945492SAndroid Build Coastguard Worker        "  -f $(location :clang_rt.crtbegin) " +
776*c9945492SAndroid Build Coastguard Worker        "  -f $(location :clang_rt.crtend) " +
777*c9945492SAndroid Build Coastguard Worker        "  -f $(location :libz_static_for_sysroot) " +
778*c9945492SAndroid Build Coastguard Worker        " && " +
779*c9945492SAndroid Build Coastguard Worker        "$(location zip2zip) -i $(genDir)/libs.zip -o $(genDir)/libs_renamed.zip " +
780*c9945492SAndroid Build Coastguard Worker        // rename libs from module names to desired names in sysroot
781*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_static.a:lib/libc.a " +
782*c9945492SAndroid Build Coastguard Worker        // Swap in linker script for Scrt1.o
783*c9945492SAndroid Build Coastguard Worker        " lib/Scrt1.o:lib/Scrt1-real.o " +
784*c9945492SAndroid Build Coastguard Worker        " lib/Scrt1.ld:lib/Scrt1.o " +
785*c9945492SAndroid Build Coastguard Worker        // copy empty static libs
786*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_sysroot_static_empty.a:lib/libcrypt.a " +
787*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_sysroot_static_empty.a:lib/libdl.a " +
788*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_sysroot_static_empty.a:lib/libm.a " +
789*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_sysroot_static_empty.a:lib/libpthread.a " +
790*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_sysroot_static_empty.a:lib/libresolv.a " +
791*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_sysroot_static_empty.a:lib/librt.a " +
792*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_sysroot_static_empty.a:lib/libutil.a " +
793*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_sysroot_static_empty.a:lib/libxnet.a " +
794*c9945492SAndroid Build Coastguard Worker        // rename clang crt objects to gcc names
795*c9945492SAndroid Build Coastguard Worker        " lib/clang_rt.crtbegin.o:lib/crtbegin.o " +
796*c9945492SAndroid Build Coastguard Worker        " lib/clang_rt.crtbegin.o:lib/crtbeginS.o " +
797*c9945492SAndroid Build Coastguard Worker        " lib/clang_rt.crtbegin.o:lib/crtbeginT.o " +
798*c9945492SAndroid Build Coastguard Worker        " lib/clang_rt.crtend.o:lib/crtend.o " +
799*c9945492SAndroid Build Coastguard Worker        " lib/clang_rt.crtend.o:lib/crtendS.o " +
800*c9945492SAndroid Build Coastguard Worker        // rename crt objects
801*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_crti.o:lib/crti.o " +
802*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_crtn.o:lib/crtn.o " +
803*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_crt1.o:lib/crt1.o " +
804*c9945492SAndroid Build Coastguard Worker        " lib/libc_musl_rcrt1.o:lib/rcrt1.o " +
805*c9945492SAndroid Build Coastguard Worker        // rename static libz
806*c9945492SAndroid Build Coastguard Worker        " lib/libz_static_for_sysroot.a:lib/libz.a " +
807*c9945492SAndroid Build Coastguard Worker        " && " +
808*c9945492SAndroid Build Coastguard Worker        "$(location merge_zips) -ignore-duplicates $(out) " +
809*c9945492SAndroid Build Coastguard Worker        " $(location :libc_musl_sysroot_bionic_headers) " +
810*c9945492SAndroid Build Coastguard Worker        " $(location :libc_musl_sysroot_zlib_headers) " +
811*c9945492SAndroid Build Coastguard Worker        " $(location :libc_musl_sysroot_bits) " +
812*c9945492SAndroid Build Coastguard Worker        " $(genDir)/sysroot.zip " +
813*c9945492SAndroid Build Coastguard Worker        " $(genDir)/libs_renamed.zip",
814*c9945492SAndroid Build Coastguard Worker}
815*c9945492SAndroid Build Coastguard Worker
816*c9945492SAndroid Build Coastguard Workerbuild=["sources.bp"]
817