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