Android.bp revision 63a42070fca452da2d543d2c253d1844eb611ef9
1// Define the common source files for all the libc instances
2// =========================================================
3libc_common_src_files = [
4    "bionic/bindresvport.c",
5    "bionic/ether_aton.c",
6    "bionic/ether_ntoa.c",
7    "bionic/fts.c",
8    "bionic/getpriority.c",
9    "bionic/if_indextoname.c",
10    "bionic/if_nametoindex.c",
11    "bionic/initgroups.c",
12    "bionic/isatty.c",
13    "bionic/memmem.c",
14    "bionic/pututline.c",
15    "bionic/sched_cpualloc.c",
16    "bionic/sched_cpucount.c",
17    "bionic/sigblock.c",
18    "bionic/siginterrupt.c",
19    "bionic/sigsetmask.c",
20    "bionic/system_properties_compat.c",
21    "stdio/findfp.c",
22    "stdio/fread.c",
23    "stdio/refill.c",
24    "stdio/snprintf.c",
25    "stdio/sprintf.c",
26    "stdio/stdio.c",
27    "stdio/stdio_ext.cpp",
28    "stdlib/atexit.c",
29    "stdlib/exit.c",
30
31    // Fortify implementations of libc functions.
32    "bionic/__FD_chk.cpp",
33    "bionic/__fgets_chk.cpp",
34    "bionic/__fread_chk.cpp",
35    "bionic/__fwrite_chk.cpp",
36    "bionic/__getcwd_chk.cpp",
37    "bionic/__memchr_chk.cpp",
38    "bionic/__memmove_chk.cpp",
39    "bionic/__memrchr_chk.cpp",
40    "bionic/__poll_chk.cpp",
41    "bionic/__pread64_chk.cpp",
42    "bionic/__pread_chk.cpp",
43    "bionic/__pwrite64_chk.cpp",
44    "bionic/__pwrite_chk.cpp",
45    "bionic/__read_chk.cpp",
46    "bionic/__readlink_chk.cpp",
47    "bionic/__readlinkat_chk.cpp",
48    "bionic/__recvfrom_chk.cpp",
49    "bionic/__stpcpy_chk.cpp",
50    "bionic/__stpncpy_chk.cpp",
51    "bionic/__strchr_chk.cpp",
52    "bionic/__strlcat_chk.cpp",
53    "bionic/__strlcpy_chk.cpp",
54    "bionic/__strlen_chk.cpp",
55    "bionic/__strncat_chk.cpp",
56    "bionic/__strncpy_chk.cpp",
57    "bionic/__strrchr_chk.cpp",
58    "bionic/__umask_chk.cpp",
59    "bionic/__vsnprintf_chk.cpp",
60    "bionic/__vsprintf_chk.cpp",
61    "bionic/__write_chk.cpp",
62]
63
64// Various kinds of cruft.
65// ========================================================
66libc_common_src_files += [
67    "bionic/ndk_cruft.cpp",
68]
69
70libc_common_src_files_32 = [
71    "bionic/legacy_32_bit_support.cpp",
72    "bionic/time64.c",
73]
74
75// Define some common cflags
76// ========================================================
77cc_defaults {
78    name: "libc_defaults",
79    cflags: [
80        "-D_LIBC=1",
81        "-Wall",
82        "-Wextra",
83        "-Wunused",
84
85        // Try to catch typical 32-bit assumptions that break with 64-bit pointers.
86        "-Werror=pointer-to-int-cast",
87        "-Werror=int-to-pointer-cast",
88        "-Werror=type-limits",
89        "-Werror",
90    ],
91    // TODO: split out the asflags.
92    asflags: [
93        "-D_LIBC=1",
94        "-Wall",
95        "-Wextra",
96        "-Wunused",
97
98        // Try to catch typical 32-bit assumptions that break with 64-bit pointers.
99        "-Werror=pointer-to-int-cast",
100        "-Werror=int-to-pointer-cast",
101        "-Werror=type-limits",
102        "-Werror",
103    ],
104    conlyflags: ["-std=gnu99"],
105    cppflags: [],
106
107    product_variables: {
108        device_uses_jemalloc: {
109            cflags: ["-DUSE_JEMALLOC"],
110            include_dirs: ["external/jemalloc/include"],
111        },
112        device_uses_dlmalloc: {
113            cflags: ["-DUSE_DLMALLOC"],
114        },
115    },
116    // Clang/llvm has incompatible long double (fp128) for x86_64.
117    // https://llvm.org/bugs/show_bug.cgi?id=23897
118    arch: {
119        x86_64: {
120            clang: false,
121        },
122    },
123
124    stl: "none",
125    system_shared_libs: [],
126    sanitize: ["never"],
127    native_coverage: false,
128}
129
130// ANDROIDMK TRANSLATION ERROR: unsupported directive
131// ifeq ($(strip $(DEBUG_BIONIC_LIBC)),true)
132//libc_common_cflags += ["-DDEBUG"]
133// ANDROIDMK TRANSLATION ERROR: unsupported directive
134// endif
135
136// ========================================================
137// libc_stack_protector.a - stack protector code
138// ========================================================
139//
140// The stack protector code needs to be compiled
141// with -fno-stack-protector, since it modifies the
142// stack canary.
143
144cc_library_static {
145
146    srcs: ["bionic/__stack_chk_fail.cpp"],
147    defaults: ["libc_defaults"],
148    cflags: ["-fno-stack-protector"],
149    name: "libc_stack_protector",
150}
151
152// ========================================================
153// libc_tzcode.a - upstream 'tzcode' code
154// ========================================================
155
156cc_library_static {
157
158    defaults: ["libc_defaults"],
159    srcs: [
160        "tzcode/asctime.c",
161        "tzcode/difftime.c",
162        "tzcode/localtime.c",
163        "tzcode/strftime.c",
164        "tzcode/strptime.c",
165        "upstream-openbsd/lib/libc/time/wcsftime.c", // tzcode doesn't include wcsftime, so we use the OpenBSD one.
166    ],
167
168    cflags: [
169        "-fvisibility=hidden",
170        "-Wno-unused-parameter",
171        // Don't use ridiculous amounts of stack.
172        "-DALL_STATE",
173        // Include tzsetwall, timelocal, timegm, time2posix, and posix2time.
174        "-DSTD_INSPIRED",
175        // Obviously, we want to be thread-safe.
176        "-DTHREAD_SAFE",
177        // The name of the tm_gmtoff field in our struct tm.
178        "-DTM_GMTOFF=tm_gmtoff",
179        // Where we store our tzdata.
180        "-DTZDIR=\\\"/system/usr/share/zoneinfo\\\"",
181        // Include timezone and daylight globals.
182        "-DUSG_COMPAT=1",
183        // Use the empty string (instead of "   ") as the timezone abbreviation
184        // fallback.
185        "-DWILDABBR=\\\"\\\"",
186        "-DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU",
187        "-Dlint",
188    ],
189
190    local_include_dirs: ["tzcode/"],
191    name: "libc_tzcode",
192}
193
194// ========================================================
195// libc_dns.a - modified NetBSD DNS code
196// ========================================================
197
198cc_library_static {
199
200    defaults: ["libc_defaults"],
201    srcs: [
202        "dns/net/gethnamaddr.c",
203        "dns/net/getservbyname.c",
204        "dns/net/getservbyport.c",
205        "dns/net/getaddrinfo.c",
206        "dns/net/getnameinfo.c",
207        "dns/net/sethostent.c",
208        "dns/net/getservent.c",
209        "dns/net/nsdispatch.c",
210        "dns/net/base64.c",
211        "dns/resolv/res_state.c",
212        "dns/resolv/res_init.c",
213        "dns/resolv/res_mkquery.c",
214        "dns/resolv/res_data.c",
215        "dns/resolv/res_debug.c",
216        "dns/resolv/herror.c",
217        "dns/resolv/res_cache.c",
218        "dns/resolv/res_query.c",
219        "dns/resolv/res_comp.c",
220        "dns/resolv/res_send.c",
221        "dns/nameser/ns_name.c",
222        "dns/nameser/ns_print.c",
223        "dns/nameser/ns_parse.c",
224        "dns/nameser/ns_ttl.c",
225        "dns/nameser/ns_netint.c",
226        "dns/nameser/ns_samedomain.c",
227
228        "upstream-netbsd/lib/libc/isc/ev_streams.c",
229        "upstream-netbsd/lib/libc/isc/ev_timers.c",
230        "upstream-netbsd/lib/libc/resolv/mtctxres.c",
231        // We use the OpenBSD res_random.
232        "upstream-openbsd/lib/libc/net/res_random.c",
233    ],
234
235    cflags: [
236        "-Dres_randomid=__res_randomid",
237        "-DANDROID_CHANGES",
238        "-DINET6",
239        "-fvisibility=hidden",
240        "-Wno-unused-parameter",
241        "-include netbsd-compat.h",
242    ],
243
244    local_include_dirs: [
245        "dns/include",
246        "private",
247        "upstream-netbsd/lib/libc/include",
248        "upstream-netbsd/android/include",
249    ],
250
251    name: "libc_dns",
252}
253
254// ========================================================
255// libc_freebsd.a - upstream FreeBSD C library code
256// ========================================================
257//
258// These files are built with the freebsd-compat.h header file
259// automatically included.
260
261cc_library_static {
262    defaults: ["libc_defaults"],
263    srcs: [
264        "upstream-freebsd/lib/libc/gen/ldexp.c",
265        "upstream-freebsd/lib/libc/gen/sleep.c",
266        "upstream-freebsd/lib/libc/gen/usleep.c",
267        "upstream-freebsd/lib/libc/stdlib/getopt_long.c",
268        "upstream-freebsd/lib/libc/stdlib/qsort.c",
269        "upstream-freebsd/lib/libc/stdlib/quick_exit.c",
270        "upstream-freebsd/lib/libc/stdlib/realpath.c",
271        "upstream-freebsd/lib/libc/string/wcpcpy.c",
272        "upstream-freebsd/lib/libc/string/wcpncpy.c",
273        "upstream-freebsd/lib/libc/string/wcscasecmp.c",
274        "upstream-freebsd/lib/libc/string/wcscat.c",
275        "upstream-freebsd/lib/libc/string/wcschr.c",
276        "upstream-freebsd/lib/libc/string/wcscmp.c",
277        "upstream-freebsd/lib/libc/string/wcscpy.c",
278        "upstream-freebsd/lib/libc/string/wcscspn.c",
279        "upstream-freebsd/lib/libc/string/wcsdup.c",
280        "upstream-freebsd/lib/libc/string/wcslcat.c",
281        "upstream-freebsd/lib/libc/string/wcslen.c",
282        "upstream-freebsd/lib/libc/string/wcsncasecmp.c",
283        "upstream-freebsd/lib/libc/string/wcsncat.c",
284        "upstream-freebsd/lib/libc/string/wcsncmp.c",
285        "upstream-freebsd/lib/libc/string/wcsncpy.c",
286        "upstream-freebsd/lib/libc/string/wcsnlen.c",
287        "upstream-freebsd/lib/libc/string/wcspbrk.c",
288        "upstream-freebsd/lib/libc/string/wcsrchr.c",
289        "upstream-freebsd/lib/libc/string/wcsspn.c",
290        "upstream-freebsd/lib/libc/string/wcstok.c",
291        "upstream-freebsd/lib/libc/string/wmemchr.c",
292        "upstream-freebsd/lib/libc/string/wmemcmp.c",
293        "upstream-freebsd/lib/libc/string/wmemset.c",
294        "upstream-freebsd/lib/libc/string/wmemmove.c",
295    ],
296    arch: {
297        arm64: {
298            exclude_srcs: [
299                "upstream-freebsd/lib/libc/string/wmemmove.c",
300            ],
301        },
302        x86: {
303            exclude_srcs: [
304                "upstream-freebsd/lib/libc/string/wcschr.c",
305                "upstream-freebsd/lib/libc/string/wcscmp.c",
306                "upstream-freebsd/lib/libc/string/wcslen.c",
307                "upstream-freebsd/lib/libc/string/wcsrchr.c",
308            ],
309            atom: {
310                exclude_srcs: [
311                    "upstream-freebsd/lib/libc/string/wmemcmp.c",
312                ],
313            },
314            ssse3: {
315                exclude_srcs: [
316                    "upstream-freebsd/lib/libc/string/wcscat.c",
317                    "upstream-freebsd/lib/libc/string/wcscpy.c",
318                ],
319            },
320            sse4: {
321                exclude_srcs: [
322                    "upstream-freebsd/lib/libc/string/wmemcmp.c",
323                ],
324            },
325        },
326    },
327
328    cflags: [
329        "-Wno-sign-compare",
330        "-Wno-uninitialized",
331        "-include freebsd-compat.h",
332    ],
333
334    local_include_dirs: [
335        "upstream-freebsd/android/include",
336    ],
337
338    name: "libc_freebsd",
339}
340
341// ========================================================
342// libc_netbsd.a - upstream NetBSD C library code
343// ========================================================
344//
345// These files are built with the netbsd-compat.h header file
346// automatically included.
347
348cc_library_static {
349
350    defaults: ["libc_defaults"],
351    srcs: [
352        "upstream-netbsd/common/lib/libc/stdlib/random.c",
353        "upstream-netbsd/lib/libc/gen/ftw.c",
354        "upstream-netbsd/lib/libc/gen/nftw.c",
355        "upstream-netbsd/lib/libc/gen/nice.c",
356        "upstream-netbsd/lib/libc/gen/popen.c",
357        "upstream-netbsd/lib/libc/gen/psignal.c",
358        "upstream-netbsd/lib/libc/gen/utime.c",
359        "upstream-netbsd/lib/libc/gen/utmp.c",
360        "upstream-netbsd/lib/libc/inet/nsap_addr.c",
361        "upstream-netbsd/lib/libc/regex/regcomp.c",
362        "upstream-netbsd/lib/libc/regex/regerror.c",
363        "upstream-netbsd/lib/libc/regex/regexec.c",
364        "upstream-netbsd/lib/libc/regex/regfree.c",
365        "upstream-netbsd/lib/libc/stdlib/bsearch.c",
366        "upstream-netbsd/lib/libc/stdlib/div.c",
367        "upstream-netbsd/lib/libc/stdlib/drand48.c",
368        "upstream-netbsd/lib/libc/stdlib/erand48.c",
369        "upstream-netbsd/lib/libc/stdlib/jrand48.c",
370        "upstream-netbsd/lib/libc/stdlib/lcong48.c",
371        "upstream-netbsd/lib/libc/stdlib/ldiv.c",
372        "upstream-netbsd/lib/libc/stdlib/lldiv.c",
373        "upstream-netbsd/lib/libc/stdlib/lrand48.c",
374        "upstream-netbsd/lib/libc/stdlib/mrand48.c",
375        "upstream-netbsd/lib/libc/stdlib/nrand48.c",
376        "upstream-netbsd/lib/libc/stdlib/_rand48.c",
377        "upstream-netbsd/lib/libc/stdlib/rand_r.c",
378        "upstream-netbsd/lib/libc/stdlib/reallocarr.c",
379        "upstream-netbsd/lib/libc/stdlib/seed48.c",
380        "upstream-netbsd/lib/libc/stdlib/srand48.c",
381        "upstream-netbsd/lib/libc/string/memccpy.c",
382        "upstream-netbsd/lib/libc/string/strcasestr.c",
383        "upstream-netbsd/lib/libc/string/strcoll.c",
384        "upstream-netbsd/lib/libc/string/strxfrm.c",
385    ],
386    multilib: {
387        lib32: {
388            // LP32 cruft
389            srcs: ["upstream-netbsd/common/lib/libc/hash/sha1/sha1.c"],
390        },
391    },
392    cflags: [
393        "-Wno-sign-compare",
394        "-Wno-uninitialized",
395        "-DPOSIX_MISTAKE",
396        "-include netbsd-compat.h",
397    ],
398
399    local_include_dirs: [
400        "upstream-netbsd/android/include",
401        "upstream-netbsd/lib/libc/include",
402    ],
403
404    name: "libc_netbsd",
405}
406
407// ========================================================
408// libc_openbsd_ndk.a - upstream OpenBSD C library code
409// that can be safely included in the libc_ndk.a (doesn't
410// contain any troublesome global data or constructors).
411// ========================================================
412//
413// These files are built with the openbsd-compat.h header file
414// automatically included.
415
416cc_library_static {
417    name: "libc_openbsd_ndk",
418    defaults: ["libc_defaults"],
419    srcs: [
420        "upstream-openbsd/lib/libc/compat-43/killpg.c",
421        "upstream-openbsd/lib/libc/gen/alarm.c",
422        "upstream-openbsd/lib/libc/gen/ctype_.c",
423        "upstream-openbsd/lib/libc/gen/daemon.c",
424        "upstream-openbsd/lib/libc/gen/err.c",
425        "upstream-openbsd/lib/libc/gen/errx.c",
426        "upstream-openbsd/lib/libc/gen/exec.c",
427        "upstream-openbsd/lib/libc/gen/fnmatch.c",
428        "upstream-openbsd/lib/libc/gen/ftok.c",
429        "upstream-openbsd/lib/libc/gen/getprogname.c",
430        "upstream-openbsd/lib/libc/gen/isctype.c",
431        "upstream-openbsd/lib/libc/gen/setprogname.c",
432        "upstream-openbsd/lib/libc/gen/time.c",
433        "upstream-openbsd/lib/libc/gen/tolower_.c",
434        "upstream-openbsd/lib/libc/gen/toupper_.c",
435        "upstream-openbsd/lib/libc/gen/verr.c",
436        "upstream-openbsd/lib/libc/gen/verrx.c",
437        "upstream-openbsd/lib/libc/gen/vwarn.c",
438        "upstream-openbsd/lib/libc/gen/vwarnx.c",
439        "upstream-openbsd/lib/libc/gen/warn.c",
440        "upstream-openbsd/lib/libc/gen/warnx.c",
441        "upstream-openbsd/lib/libc/locale/btowc.c",
442        "upstream-openbsd/lib/libc/locale/mbrlen.c",
443        "upstream-openbsd/lib/libc/locale/mbstowcs.c",
444        "upstream-openbsd/lib/libc/locale/mbtowc.c",
445        "upstream-openbsd/lib/libc/locale/wcscoll.c",
446        "upstream-openbsd/lib/libc/locale/wcstod.c",
447        "upstream-openbsd/lib/libc/locale/wcstof.c",
448        "upstream-openbsd/lib/libc/locale/wcstoimax.c",
449        "upstream-openbsd/lib/libc/locale/wcstol.c",
450        "upstream-openbsd/lib/libc/locale/wcstold.c",
451        "upstream-openbsd/lib/libc/locale/wcstoll.c",
452        "upstream-openbsd/lib/libc/locale/wcstombs.c",
453        "upstream-openbsd/lib/libc/locale/wcstoul.c",
454        "upstream-openbsd/lib/libc/locale/wcstoull.c",
455        "upstream-openbsd/lib/libc/locale/wcstoumax.c",
456        "upstream-openbsd/lib/libc/locale/wcsxfrm.c",
457        "upstream-openbsd/lib/libc/locale/wctob.c",
458        "upstream-openbsd/lib/libc/locale/wctomb.c",
459        "upstream-openbsd/lib/libc/net/htonl.c",
460        "upstream-openbsd/lib/libc/net/htons.c",
461        "upstream-openbsd/lib/libc/net/inet_lnaof.c",
462        "upstream-openbsd/lib/libc/net/inet_makeaddr.c",
463        "upstream-openbsd/lib/libc/net/inet_netof.c",
464        "upstream-openbsd/lib/libc/net/inet_ntoa.c",
465        "upstream-openbsd/lib/libc/net/inet_ntop.c",
466        "upstream-openbsd/lib/libc/net/inet_pton.c",
467        "upstream-openbsd/lib/libc/net/ntohl.c",
468        "upstream-openbsd/lib/libc/net/ntohs.c",
469        "upstream-openbsd/lib/libc/stdio/asprintf.c",
470        "upstream-openbsd/lib/libc/stdio/clrerr.c",
471        "upstream-openbsd/lib/libc/stdio/dprintf.c",
472        "upstream-openbsd/lib/libc/stdio/fclose.c",
473        "upstream-openbsd/lib/libc/stdio/fdopen.c",
474        "upstream-openbsd/lib/libc/stdio/feof.c",
475        "upstream-openbsd/lib/libc/stdio/ferror.c",
476        "upstream-openbsd/lib/libc/stdio/fflush.c",
477        "upstream-openbsd/lib/libc/stdio/fgetc.c",
478        "upstream-openbsd/lib/libc/stdio/fgetln.c",
479        "upstream-openbsd/lib/libc/stdio/fgetpos.c",
480        "upstream-openbsd/lib/libc/stdio/fgets.c",
481        "upstream-openbsd/lib/libc/stdio/fgetwc.c",
482        "upstream-openbsd/lib/libc/stdio/fgetws.c",
483        "upstream-openbsd/lib/libc/stdio/fileno.c",
484        "upstream-openbsd/lib/libc/stdio/flags.c",
485        "upstream-openbsd/lib/libc/stdio/fmemopen.c",
486        "upstream-openbsd/lib/libc/stdio/fopen.c",
487        "upstream-openbsd/lib/libc/stdio/fprintf.c",
488        "upstream-openbsd/lib/libc/stdio/fpurge.c",
489        "upstream-openbsd/lib/libc/stdio/fputc.c",
490        "upstream-openbsd/lib/libc/stdio/fputs.c",
491        "upstream-openbsd/lib/libc/stdio/fputwc.c",
492        "upstream-openbsd/lib/libc/stdio/fputws.c",
493        "upstream-openbsd/lib/libc/stdio/freopen.c",
494        "upstream-openbsd/lib/libc/stdio/fscanf.c",
495        "upstream-openbsd/lib/libc/stdio/fseek.c",
496        "upstream-openbsd/lib/libc/stdio/fsetpos.c",
497        "upstream-openbsd/lib/libc/stdio/ftell.c",
498        "upstream-openbsd/lib/libc/stdio/funopen.c",
499        "upstream-openbsd/lib/libc/stdio/fvwrite.c",
500        "upstream-openbsd/lib/libc/stdio/fwalk.c",
501        "upstream-openbsd/lib/libc/stdio/fwide.c",
502        "upstream-openbsd/lib/libc/stdio/fwprintf.c",
503        "upstream-openbsd/lib/libc/stdio/fwrite.c",
504        "upstream-openbsd/lib/libc/stdio/fwscanf.c",
505        "upstream-openbsd/lib/libc/stdio/getc.c",
506        "upstream-openbsd/lib/libc/stdio/getchar.c",
507        "upstream-openbsd/lib/libc/stdio/getdelim.c",
508        "upstream-openbsd/lib/libc/stdio/getline.c",
509        "upstream-openbsd/lib/libc/stdio/gets.c",
510        "upstream-openbsd/lib/libc/stdio/getwc.c",
511        "upstream-openbsd/lib/libc/stdio/getwchar.c",
512        "upstream-openbsd/lib/libc/stdio/makebuf.c",
513        "upstream-openbsd/lib/libc/stdio/mktemp.c",
514        "upstream-openbsd/lib/libc/stdio/open_memstream.c",
515        "upstream-openbsd/lib/libc/stdio/open_wmemstream.c",
516        "upstream-openbsd/lib/libc/stdio/perror.c",
517        "upstream-openbsd/lib/libc/stdio/printf.c",
518        "upstream-openbsd/lib/libc/stdio/putc.c",
519        "upstream-openbsd/lib/libc/stdio/putchar.c",
520        "upstream-openbsd/lib/libc/stdio/puts.c",
521        "upstream-openbsd/lib/libc/stdio/putwc.c",
522        "upstream-openbsd/lib/libc/stdio/putwchar.c",
523        "upstream-openbsd/lib/libc/stdio/remove.c",
524        "upstream-openbsd/lib/libc/stdio/rewind.c",
525        "upstream-openbsd/lib/libc/stdio/rget.c",
526        "upstream-openbsd/lib/libc/stdio/scanf.c",
527        "upstream-openbsd/lib/libc/stdio/setbuf.c",
528        "upstream-openbsd/lib/libc/stdio/setbuffer.c",
529        "upstream-openbsd/lib/libc/stdio/setvbuf.c",
530        "upstream-openbsd/lib/libc/stdio/sscanf.c",
531        "upstream-openbsd/lib/libc/stdio/swprintf.c",
532        "upstream-openbsd/lib/libc/stdio/swscanf.c",
533        "upstream-openbsd/lib/libc/stdio/tempnam.c",
534        "upstream-openbsd/lib/libc/stdio/tmpnam.c",
535        "upstream-openbsd/lib/libc/stdio/ungetc.c",
536        "upstream-openbsd/lib/libc/stdio/ungetwc.c",
537        "upstream-openbsd/lib/libc/stdio/vasprintf.c",
538        "upstream-openbsd/lib/libc/stdio/vdprintf.c",
539        "upstream-openbsd/lib/libc/stdio/vfprintf.c",
540        "upstream-openbsd/lib/libc/stdio/vfscanf.c",
541        "upstream-openbsd/lib/libc/stdio/vfwprintf.c",
542        "upstream-openbsd/lib/libc/stdio/vfwscanf.c",
543        "upstream-openbsd/lib/libc/stdio/vprintf.c",
544        "upstream-openbsd/lib/libc/stdio/vscanf.c",
545        "upstream-openbsd/lib/libc/stdio/vsnprintf.c",
546        "upstream-openbsd/lib/libc/stdio/vsprintf.c",
547        "upstream-openbsd/lib/libc/stdio/vsscanf.c",
548        "upstream-openbsd/lib/libc/stdio/vswprintf.c",
549        "upstream-openbsd/lib/libc/stdio/vswscanf.c",
550        "upstream-openbsd/lib/libc/stdio/vwprintf.c",
551        "upstream-openbsd/lib/libc/stdio/vwscanf.c",
552        "upstream-openbsd/lib/libc/stdio/wbuf.c",
553        "upstream-openbsd/lib/libc/stdio/wprintf.c",
554        "upstream-openbsd/lib/libc/stdio/wscanf.c",
555        "upstream-openbsd/lib/libc/stdio/wsetup.c",
556        "upstream-openbsd/lib/libc/stdlib/abs.c",
557        "upstream-openbsd/lib/libc/stdlib/atoi.c",
558        "upstream-openbsd/lib/libc/stdlib/atol.c",
559        "upstream-openbsd/lib/libc/stdlib/atoll.c",
560        "upstream-openbsd/lib/libc/stdlib/getenv.c",
561        "upstream-openbsd/lib/libc/stdlib/insque.c",
562        "upstream-openbsd/lib/libc/stdlib/imaxabs.c",
563        "upstream-openbsd/lib/libc/stdlib/imaxdiv.c",
564        "upstream-openbsd/lib/libc/stdlib/labs.c",
565        "upstream-openbsd/lib/libc/stdlib/llabs.c",
566        "upstream-openbsd/lib/libc/stdlib/lsearch.c",
567        "upstream-openbsd/lib/libc/stdlib/reallocarray.c",
568        "upstream-openbsd/lib/libc/stdlib/remque.c",
569        "upstream-openbsd/lib/libc/stdlib/setenv.c",
570        "upstream-openbsd/lib/libc/stdlib/strtoimax.c",
571        "upstream-openbsd/lib/libc/stdlib/strtol.c",
572        "upstream-openbsd/lib/libc/stdlib/strtoll.c",
573        "upstream-openbsd/lib/libc/stdlib/strtoul.c",
574        "upstream-openbsd/lib/libc/stdlib/strtoull.c",
575        "upstream-openbsd/lib/libc/stdlib/strtoumax.c",
576        "upstream-openbsd/lib/libc/stdlib/system.c",
577        "upstream-openbsd/lib/libc/stdlib/tfind.c",
578        "upstream-openbsd/lib/libc/stdlib/tsearch.c",
579        "upstream-openbsd/lib/libc/string/strcasecmp.c",
580        "upstream-openbsd/lib/libc/string/strcspn.c",
581        "upstream-openbsd/lib/libc/string/strdup.c",
582        "upstream-openbsd/lib/libc/string/strndup.c",
583        "upstream-openbsd/lib/libc/string/strpbrk.c",
584        "upstream-openbsd/lib/libc/string/strsep.c",
585        "upstream-openbsd/lib/libc/string/strspn.c",
586        "upstream-openbsd/lib/libc/string/strstr.c",
587        "upstream-openbsd/lib/libc/string/strtok.c",
588        "upstream-openbsd/lib/libc/string/wmemcpy.c",
589        "upstream-openbsd/lib/libc/string/wcslcpy.c",
590        "upstream-openbsd/lib/libc/string/wcsstr.c",
591        "upstream-openbsd/lib/libc/string/wcswidth.c",
592    ],
593
594    cflags: [
595        "-Wno-sign-compare",
596        "-Wno-uninitialized",
597        "-Wno-unused-parameter",
598        "-include openbsd-compat.h",
599    ],
600
601    local_include_dirs: [
602        "private",
603        "stdio",
604        "upstream-openbsd/android/include",
605        "upstream-openbsd/lib/libc/include",
606        "upstream-openbsd/lib/libc/gdtoa/",
607    ],
608}
609
610// ========================================================
611// libc_openbsd.a - upstream OpenBSD C library code
612// ========================================================
613//
614// These files are built with the openbsd-compat.h header file
615// automatically included.
616cc_library_static {
617    defaults: ["libc_defaults"],
618    srcs: [
619        // These two depend on getentropy_linux.c, which isn't in libc_ndk.a.
620        "upstream-openbsd/lib/libc/crypt/arc4random.c",
621        "upstream-openbsd/lib/libc/crypt/arc4random_uniform.c",
622
623        // May be overriden by per-arch optimized versions
624        "upstream-openbsd/lib/libc/string/memchr.c",
625        "upstream-openbsd/lib/libc/string/memmove.c",
626        "upstream-openbsd/lib/libc/string/memrchr.c",
627        "upstream-openbsd/lib/libc/string/stpcpy.c",
628        "upstream-openbsd/lib/libc/string/stpncpy.c",
629        "upstream-openbsd/lib/libc/string/strcat.c",
630        "upstream-openbsd/lib/libc/string/strcpy.c",
631        "upstream-openbsd/lib/libc/string/strlcat.c",
632        "upstream-openbsd/lib/libc/string/strlcpy.c",
633        "upstream-openbsd/lib/libc/string/strncat.c",
634        "upstream-openbsd/lib/libc/string/strncmp.c",
635        "upstream-openbsd/lib/libc/string/strncpy.c",
636    ],
637    multilib: {
638        lib32: {
639            // LP32 cruft
640            srcs: ["upstream-openbsd/lib/libc/stdio/putw.c"],
641        },
642    },
643
644    arch: {
645        arm: {
646            exclude_srcs: [
647                "upstream-openbsd/lib/libc/string/strcpy.c",
648            ],
649            cortex_a7: {
650                exclude_srcs: [
651                    "upstream-openbsd/lib/libc/string/memmove.c",
652                    "upstream-openbsd/lib/libc/string/stpcpy.c",
653                    "upstream-openbsd/lib/libc/string/strcat.c",
654                ],
655            },
656            cortex_a53: {
657                exclude_srcs: [
658                    "upstream-openbsd/lib/libc/string/memmove.c",
659                    "upstream-openbsd/lib/libc/string/stpcpy.c",
660                    "upstream-openbsd/lib/libc/string/strcat.c",
661                ],
662            },
663            cortex_a53_a57: {
664                exclude_srcs: [
665                    "upstream-openbsd/lib/libc/string/memmove.c",
666                    "upstream-openbsd/lib/libc/string/stpcpy.c",
667                    "upstream-openbsd/lib/libc/string/strcat.c",
668                ],
669            },
670            cortex_a8: {
671                exclude_srcs: [
672                    "upstream-openbsd/lib/libc/string/memmove.c",
673                    "upstream-openbsd/lib/libc/string/stpcpy.c",
674                    "upstream-openbsd/lib/libc/string/strcat.c",
675                ],
676            },
677            cortex_a9: {
678                exclude_srcs: [
679                    "upstream-openbsd/lib/libc/string/memmove.c",
680                    "upstream-openbsd/lib/libc/string/stpcpy.c",
681                    "upstream-openbsd/lib/libc/string/strcat.c",
682                ],
683            },
684            cortex_a15: {
685                exclude_srcs: [
686                    "upstream-openbsd/lib/libc/string/memmove.c",
687                    "upstream-openbsd/lib/libc/string/stpcpy.c",
688                    "upstream-openbsd/lib/libc/string/strcat.c",
689                ],
690            },
691            denver: {
692                exclude_srcs: [
693                    "upstream-openbsd/lib/libc/string/memmove.c",
694                    "upstream-openbsd/lib/libc/string/stpcpy.c",
695                    "upstream-openbsd/lib/libc/string/strcat.c",
696                ],
697            },
698            krait: {
699                exclude_srcs: [
700                    "upstream-openbsd/lib/libc/string/memmove.c",
701                    "upstream-openbsd/lib/libc/string/stpcpy.c",
702                    "upstream-openbsd/lib/libc/string/strcat.c",
703                ],
704            },
705        },
706        arm64: {
707            exclude_srcs: [
708                "upstream-openbsd/lib/libc/string/memchr.c",
709                "upstream-openbsd/lib/libc/string/memmove.c",
710                "upstream-openbsd/lib/libc/string/stpcpy.c",
711                "upstream-openbsd/lib/libc/string/strcpy.c",
712                "upstream-openbsd/lib/libc/string/strncmp.c",
713            ],
714        },
715
716        x86: {
717            exclude_srcs: [
718                "upstream-openbsd/lib/libc/string/memchr.c",
719                "upstream-openbsd/lib/libc/string/memmove.c",
720                "upstream-openbsd/lib/libc/string/memrchr.c",
721                "upstream-openbsd/lib/libc/string/stpcpy.c",
722                "upstream-openbsd/lib/libc/string/stpncpy.c",
723                "upstream-openbsd/lib/libc/string/strcat.c",
724                "upstream-openbsd/lib/libc/string/strcpy.c",
725                "upstream-openbsd/lib/libc/string/strncmp.c",
726                "upstream-openbsd/lib/libc/string/strncpy.c",
727            ],
728            ssse3: {
729                exclude_srcs: [
730                    "upstream-openbsd/lib/libc/string/strlcat.c",
731                    "upstream-openbsd/lib/libc/string/strlcpy.c",
732                    "upstream-openbsd/lib/libc/string/strncat.c",
733                ],
734            },
735        },
736
737        x86_64: {
738            exclude_srcs: [
739                "upstream-openbsd/lib/libc/string/memmove.c",
740                "upstream-openbsd/lib/libc/string/stpcpy.c",
741                "upstream-openbsd/lib/libc/string/stpncpy.c",
742                "upstream-openbsd/lib/libc/string/strcat.c",
743                "upstream-openbsd/lib/libc/string/strcpy.c",
744                "upstream-openbsd/lib/libc/string/strlcat.c",
745                "upstream-openbsd/lib/libc/string/strlcpy.c",
746                "upstream-openbsd/lib/libc/string/strncat.c",
747                "upstream-openbsd/lib/libc/string/strncmp.c",
748                "upstream-openbsd/lib/libc/string/strncpy.c",
749            ],
750        },
751    },
752
753    cflags: [
754        "-Wno-sign-compare",
755        "-Wno-uninitialized",
756        "-Wno-unused-parameter",
757        "-include openbsd-compat.h",
758    ],
759
760    local_include_dirs: [
761        "private",
762        "stdio",
763        "upstream-openbsd/android/include",
764        "upstream-openbsd/lib/libc/include",
765        "upstream-openbsd/lib/libc/gdtoa/",
766    ],
767
768    name: "libc_openbsd",
769}
770
771// ========================================================
772// libc_gdtoa.a - upstream OpenBSD C library gdtoa code
773// ========================================================
774//
775// These files are built with the openbsd-compat.h header file
776// automatically included.
777
778cc_library_static {
779    defaults: ["libc_defaults"],
780    srcs: [
781        "upstream-openbsd/android/gdtoa_support.cpp",
782        "upstream-openbsd/lib/libc/gdtoa/dmisc.c",
783        "upstream-openbsd/lib/libc/gdtoa/dtoa.c",
784        "upstream-openbsd/lib/libc/gdtoa/gdtoa.c",
785        "upstream-openbsd/lib/libc/gdtoa/gethex.c",
786        "upstream-openbsd/lib/libc/gdtoa/gmisc.c",
787        "upstream-openbsd/lib/libc/gdtoa/hd_init.c",
788        "upstream-openbsd/lib/libc/gdtoa/hdtoa.c",
789        "upstream-openbsd/lib/libc/gdtoa/hexnan.c",
790        "upstream-openbsd/lib/libc/gdtoa/ldtoa.c",
791        "upstream-openbsd/lib/libc/gdtoa/misc.c",
792        "upstream-openbsd/lib/libc/gdtoa/smisc.c",
793        "upstream-openbsd/lib/libc/gdtoa/strtod.c",
794        "upstream-openbsd/lib/libc/gdtoa/strtodg.c",
795        "upstream-openbsd/lib/libc/gdtoa/strtof.c",
796        "upstream-openbsd/lib/libc/gdtoa/strtord.c",
797        "upstream-openbsd/lib/libc/gdtoa/sum.c",
798        "upstream-openbsd/lib/libc/gdtoa/ulp.c",
799    ],
800    multilib: {
801        lib64: {
802            srcs: ["upstream-openbsd/lib/libc/gdtoa/strtorQ.c"],
803        },
804    },
805
806    cflags: [
807        "-Wno-sign-compare",
808        "-Wno-uninitialized",
809        "-fvisibility=hidden",
810        "-include openbsd-compat.h",
811    ],
812
813    local_include_dirs: [
814        "private",
815        "upstream-openbsd/android/include",
816        "upstream-openbsd/lib/libc/include",
817    ],
818
819    name: "libc_gdtoa",
820}
821
822// ========================================================
823// libc_bionic.a - home-grown C library code
824// ========================================================
825
826cc_library_static {
827    defaults: ["libc_defaults"],
828    srcs: [
829        // The following implementations depend on pthread data, so we can't
830        // include them in libc_ndk.a.
831        "bionic/__cxa_thread_atexit_impl.cpp",
832        "bionic/fork.cpp",
833
834        // The data that backs getauxval is initialized in the libc init
835        // functions which are invoked by the linker. If this file is included
836        // in libc_ndk.a, only one of the copies of the global data will be
837        // initialized, resulting in nullptr dereferences.
838        "bionic/getauxval.cpp",
839
840        // These four require getauxval, which isn't available on older
841        // platforms.
842        "bionic/getentropy_linux.c",
843        "bionic/sysconf.cpp",
844        "bionic/vdso.cpp",
845        "bionic/setjmp_cookie.cpp",
846
847        "bionic/__memcpy_chk.cpp",
848        "bionic/__memset_chk.cpp",
849        "bionic/__strcat_chk.cpp",
850        "bionic/__strcpy_chk.cpp",
851        "bionic/strchr.cpp",
852        "bionic/strnlen.c",
853        "bionic/strrchr.cpp",
854    ],
855    cflags: ["-Wframe-larger-than=2048"],
856
857    arch: {
858        arm: {
859            srcs: [
860                "arch-arm/bionic/abort_arm.S",
861                "arch-arm/bionic/atomics_arm.c",
862                "arch-arm/bionic/__bionic_clone.S",
863                "arch-arm/bionic/_exit_with_stack_teardown.S",
864                "arch-arm/bionic/libgcc_compat.c",
865                "arch-arm/bionic/popcount_tab.c",
866                "arch-arm/bionic/__restore.S",
867                "arch-arm/bionic/setjmp.S",
868                "arch-arm/bionic/syscall.S",
869                "arch-arm/bionic/vfork.S",
870
871                "arch-arm/generic/bionic/memcmp.S",
872                "arch-arm/generic/bionic/memcpy.S",
873                "arch-arm/generic/bionic/memset.S",
874                "arch-arm/generic/bionic/strcmp.S",
875                "arch-arm/generic/bionic/strcpy.S",
876                "arch-arm/generic/bionic/strlen.c",
877            ],
878            exclude_srcs: [
879                "bionic/__memcpy_chk.cpp",
880                "bionic/__memset_chk.cpp",
881            ],
882            cortex_a7: {
883                srcs: [
884                    "arch-arm/cortex-a7/bionic/memset.S",
885
886                    "arch-arm/cortex-a15/bionic/memcpy.S",
887                    "arch-arm/cortex-a15/bionic/stpcpy.S",
888                    "arch-arm/cortex-a15/bionic/strcat.S",
889                    "arch-arm/cortex-a15/bionic/__strcat_chk.S",
890                    "arch-arm/cortex-a15/bionic/strcmp.S",
891                    "arch-arm/cortex-a15/bionic/strcpy.S",
892                    "arch-arm/cortex-a15/bionic/__strcpy_chk.S",
893                    "arch-arm/cortex-a15/bionic/strlen.S",
894
895                    "arch-arm/denver/bionic/memmove.S",
896                ],
897                exclude_srcs: [
898                    "arch-arm/generic/bionic/memcpy.S",
899                    "arch-arm/generic/bionic/memset.S",
900                    "arch-arm/generic/bionic/strcmp.S",
901                    "arch-arm/generic/bionic/strcpy.S",
902                    "arch-arm/generic/bionic/strlen.c",
903                    "bionic/__strcat_chk.cpp",
904                    "bionic/__strcpy_chk.cpp",
905                ],
906            },
907            cortex_a53: {
908                srcs: [
909                    "arch-arm/cortex-a53/bionic/memcpy.S",
910                    "arch-arm/cortex-a53/bionic/__strcat_chk.S",
911                    "arch-arm/cortex-a53/bionic/__strcpy_chk.S",
912
913                    "arch-arm/cortex-a7/bionic/memset.S",
914
915                    "arch-arm/cortex-a15/bionic/stpcpy.S",
916                    "arch-arm/cortex-a15/bionic/strcat.S",
917                    "arch-arm/cortex-a15/bionic/strcmp.S",
918                    "arch-arm/cortex-a15/bionic/strcpy.S",
919                    "arch-arm/cortex-a15/bionic/strlen.S",
920
921                    "arch-arm/denver/bionic/memmove.S",
922                ],
923                exclude_srcs: [
924                    "arch-arm/generic/bionic/memcpy.S",
925                    "arch-arm/generic/bionic/memset.S",
926                    "arch-arm/generic/bionic/strcmp.S",
927                    "arch-arm/generic/bionic/strcpy.S",
928                    "arch-arm/generic/bionic/strlen.c",
929                    "bionic/__strcat_chk.cpp",
930                    "bionic/__strcpy_chk.cpp",
931                ],
932            },
933            cortex_a53_a57: {
934                srcs: [
935                    "arch-arm/cortex-a15/bionic/memcpy.S",
936                    "arch-arm/cortex-a15/bionic/memset.S",
937                    "arch-arm/cortex-a15/bionic/stpcpy.S",
938                    "arch-arm/cortex-a15/bionic/strcat.S",
939                    "arch-arm/cortex-a15/bionic/__strcat_chk.S",
940                    "arch-arm/cortex-a15/bionic/strcmp.S",
941                    "arch-arm/cortex-a15/bionic/strcpy.S",
942                    "arch-arm/cortex-a15/bionic/__strcpy_chk.S",
943                    "arch-arm/cortex-a15/bionic/strlen.S",
944
945                    "arch-arm/denver/bionic/memmove.S",
946                ],
947                exclude_srcs: [
948                    "arch-arm/generic/bionic/memcpy.S",
949                    "arch-arm/generic/bionic/memset.S",
950                    "arch-arm/generic/bionic/strcmp.S",
951                    "arch-arm/generic/bionic/strcpy.S",
952                    "arch-arm/generic/bionic/strlen.c",
953                    "bionic/__strcat_chk.cpp",
954                    "bionic/__strcpy_chk.cpp",
955                ],
956            },
957            cortex_a8: {
958                srcs: [
959                    "arch-arm/cortex-a15/bionic/memcpy.S",
960                    "arch-arm/cortex-a15/bionic/memset.S",
961                    "arch-arm/cortex-a15/bionic/stpcpy.S",
962                    "arch-arm/cortex-a15/bionic/strcat.S",
963                    "arch-arm/cortex-a15/bionic/__strcat_chk.S",
964                    "arch-arm/cortex-a15/bionic/strcmp.S",
965                    "arch-arm/cortex-a15/bionic/strcpy.S",
966                    "arch-arm/cortex-a15/bionic/__strcpy_chk.S",
967                    "arch-arm/cortex-a15/bionic/strlen.S",
968
969                    "arch-arm/denver/bionic/memmove.S",
970                ],
971                exclude_srcs: [
972                    "arch-arm/generic/bionic/memcpy.S",
973                    "arch-arm/generic/bionic/memset.S",
974                    "arch-arm/generic/bionic/strcmp.S",
975                    "arch-arm/generic/bionic/strcpy.S",
976                    "arch-arm/generic/bionic/strlen.c",
977                    "bionic/__strcat_chk.cpp",
978                    "bionic/__strcpy_chk.cpp",
979                ],
980            },
981            cortex_a9: {
982                srcs: [
983                    "arch-arm/cortex-a9/bionic/memcpy.S",
984                    "arch-arm/cortex-a9/bionic/memset.S",
985                    "arch-arm/cortex-a9/bionic/stpcpy.S",
986                    "arch-arm/cortex-a9/bionic/strcat.S",
987                    "arch-arm/cortex-a9/bionic/__strcat_chk.S",
988                    "arch-arm/cortex-a9/bionic/strcmp.S",
989                    "arch-arm/cortex-a9/bionic/strcpy.S",
990                    "arch-arm/cortex-a9/bionic/__strcpy_chk.S",
991                    "arch-arm/cortex-a9/bionic/strlen.S",
992
993                    "arch-arm/denver/bionic/memmove.S",
994                ],
995                exclude_srcs: [
996                    "arch-arm/generic/bionic/memcpy.S",
997                    "arch-arm/generic/bionic/memset.S",
998                    "arch-arm/generic/bionic/strcmp.S",
999                    "arch-arm/generic/bionic/strcpy.S",
1000                    "arch-arm/generic/bionic/strlen.c",
1001                    "bionic/__strcat_chk.cpp",
1002                    "bionic/__strcpy_chk.cpp",
1003                ],
1004            },
1005            cortex_a15: {
1006                srcs: [
1007                    "arch-arm/cortex-a15/bionic/memcpy.S",
1008                    "arch-arm/cortex-a15/bionic/memset.S",
1009                    "arch-arm/cortex-a15/bionic/stpcpy.S",
1010                    "arch-arm/cortex-a15/bionic/strcat.S",
1011                    "arch-arm/cortex-a15/bionic/__strcat_chk.S",
1012                    "arch-arm/cortex-a15/bionic/strcmp.S",
1013                    "arch-arm/cortex-a15/bionic/strcpy.S",
1014                    "arch-arm/cortex-a15/bionic/__strcpy_chk.S",
1015                    "arch-arm/cortex-a15/bionic/strlen.S",
1016
1017                    "arch-arm/denver/bionic/memmove.S",
1018                ],
1019                exclude_srcs: [
1020                    "arch-arm/generic/bionic/memcpy.S",
1021                    "arch-arm/generic/bionic/memset.S",
1022                    "arch-arm/generic/bionic/strcmp.S",
1023                    "arch-arm/generic/bionic/strcpy.S",
1024                    "arch-arm/generic/bionic/strlen.c",
1025                    "bionic/__strcat_chk.cpp",
1026                    "bionic/__strcpy_chk.cpp",
1027                ],
1028            },
1029            denver: {
1030                srcs: [
1031                    "arch-arm/denver/bionic/memcpy.S",
1032                    "arch-arm/denver/bionic/memmove.S",
1033                    "arch-arm/denver/bionic/memset.S",
1034                    "arch-arm/denver/bionic/__strcat_chk.S",
1035                    "arch-arm/denver/bionic/__strcpy_chk.S",
1036
1037                    // Use cortex-a15 versions of strcat/strcpy/strlen.
1038                    "arch-arm/cortex-a15/bionic/stpcpy.S",
1039                    "arch-arm/cortex-a15/bionic/strcat.S",
1040                    "arch-arm/cortex-a15/bionic/strcmp.S",
1041                    "arch-arm/cortex-a15/bionic/strcpy.S",
1042                    "arch-arm/cortex-a15/bionic/strlen.S",
1043                ],
1044                exclude_srcs: [
1045                    "arch-arm/generic/bionic/memcpy.S",
1046                    "arch-arm/generic/bionic/memset.S",
1047                    "arch-arm/generic/bionic/strcmp.S",
1048                    "arch-arm/generic/bionic/strcpy.S",
1049                    "arch-arm/generic/bionic/strlen.c",
1050                    "bionic/__strcat_chk.cpp",
1051                    "bionic/__strcpy_chk.cpp",
1052                ],
1053            },
1054            krait: {
1055                srcs: [
1056                    "arch-arm/krait/bionic/memcpy.S",
1057                    "arch-arm/krait/bionic/memset.S",
1058                    "arch-arm/krait/bionic/strcmp.S",
1059                    "arch-arm/krait/bionic/__strcat_chk.S",
1060                    "arch-arm/krait/bionic/__strcpy_chk.S",
1061
1062                    // Use cortex-a15 versions of strcat/strcpy/strlen.
1063                    "arch-arm/cortex-a15/bionic/stpcpy.S",
1064                    "arch-arm/cortex-a15/bionic/strcat.S",
1065                    "arch-arm/cortex-a15/bionic/strcpy.S",
1066                    "arch-arm/cortex-a15/bionic/strlen.S",
1067
1068                    "arch-arm/denver/bionic/memmove.S",
1069                ],
1070                exclude_srcs: [
1071                    "arch-arm/generic/bionic/memcpy.S",
1072                    "arch-arm/generic/bionic/memset.S",
1073                    "arch-arm/generic/bionic/strcmp.S",
1074                    "arch-arm/generic/bionic/strcpy.S",
1075                    "arch-arm/generic/bionic/strlen.c",
1076                    "bionic/__strcat_chk.cpp",
1077                    "bionic/__strcpy_chk.cpp",
1078                ],
1079            },
1080
1081        },
1082        arm64: {
1083            srcs: [
1084                "arch-arm64/bionic/__bionic_clone.S",
1085                "arch-arm64/bionic/_exit_with_stack_teardown.S",
1086                "arch-arm64/bionic/setjmp.S",
1087                "arch-arm64/bionic/__set_tls.c",
1088                "arch-arm64/bionic/syscall.S",
1089                "arch-arm64/bionic/vfork.S",
1090
1091                "arch-arm64/generic/bionic/memchr.S",
1092                "arch-arm64/generic/bionic/memcmp.S",
1093                "arch-arm64/generic/bionic/memcpy.S",
1094                "arch-arm64/generic/bionic/memmove.S",
1095                "arch-arm64/generic/bionic/memset.S",
1096                "arch-arm64/generic/bionic/stpcpy.S",
1097                "arch-arm64/generic/bionic/strchr.S",
1098                "arch-arm64/generic/bionic/strcmp.S",
1099                "arch-arm64/generic/bionic/strcpy.S",
1100                "arch-arm64/generic/bionic/strlen.S",
1101                "arch-arm64/generic/bionic/strncmp.S",
1102                "arch-arm64/generic/bionic/strnlen.S",
1103                "arch-arm64/generic/bionic/wmemmove.S",
1104            ],
1105            exclude_srcs: [
1106                "bionic/__memcpy_chk.cpp",
1107                "bionic/strchr.cpp",
1108                "bionic/strnlen.c",
1109            ],
1110            denver64: {
1111                srcs: [
1112                    "arch-arm64/denver64/bionic/memcpy.S",
1113                    "arch-arm64/denver64/bionic/memset.S",
1114                ],
1115                exclude_srcs: [
1116                    "arch-arm64/generic/bionic/memcpy.S",
1117                    "arch-arm64/generic/bionic/memset.S",
1118                ],
1119            },
1120        },
1121
1122        mips: {
1123            srcs: [
1124                "arch-mips/bionic/__bionic_clone.S",
1125                "arch-mips/bionic/bzero.S",
1126                "arch-mips/bionic/cacheflush.cpp",
1127                "arch-mips/bionic/_exit_with_stack_teardown.S",
1128                "arch-mips/bionic/setjmp.S",
1129                "arch-mips/bionic/syscall.S",
1130                "arch-mips/bionic/vfork.S",
1131
1132                "arch-mips/string/memcmp.c",
1133                "arch-mips/string/memcpy.S",
1134                "arch-mips/string/memset.S",
1135                "arch-mips/string/strcmp.S",
1136                "arch-mips/string/strlen.c",
1137            ],
1138            rev6: {
1139                srcs: [
1140                    "arch-mips/string/mips_strlen.c",
1141                ],
1142                exclude_srcs: [
1143                    "arch-mips/string/strlen.c",
1144                ],
1145            },
1146        },
1147        mips64: {
1148            srcs: [
1149                "arch-mips64/bionic/__bionic_clone.S",
1150                "arch-mips64/bionic/_exit_with_stack_teardown.S",
1151                "arch-mips64/bionic/setjmp.S",
1152                "arch-mips64/bionic/syscall.S",
1153                "arch-mips64/bionic/vfork.S",
1154                "arch-mips64/bionic/stat.cpp",
1155
1156                "arch-mips/string/memcmp.c",
1157                "arch-mips/string/memcpy.S",
1158                "arch-mips/string/memset.S",
1159                "arch-mips/string/strcmp.S",
1160                "arch-mips/string/strlen.c",
1161            ],
1162        },
1163
1164        x86: {
1165            srcs: [
1166                "arch-x86/bionic/__bionic_clone.S",
1167                "arch-x86/bionic/_exit_with_stack_teardown.S",
1168                "arch-x86/bionic/libgcc_compat.c",
1169                "arch-x86/bionic/__restore.S",
1170                "arch-x86/bionic/setjmp.S",
1171                "arch-x86/bionic/__set_tls.c",
1172                "arch-x86/bionic/syscall.S",
1173                "arch-x86/bionic/vfork.S",
1174
1175                "arch-x86/generic/string/memcmp.S",
1176                "arch-x86/generic/string/strcmp.S",
1177                "arch-x86/generic/string/strncmp.S",
1178                "arch-x86/generic/string/strcat.S",
1179                "arch-x86/atom/string/sse2-memchr-atom.S",
1180                "arch-x86/atom/string/sse2-memrchr-atom.S",
1181                "arch-x86/atom/string/sse2-strchr-atom.S",
1182                "arch-x86/atom/string/sse2-strnlen-atom.S",
1183                "arch-x86/atom/string/sse2-strrchr-atom.S",
1184                "arch-x86/atom/string/sse2-wcschr-atom.S",
1185                "arch-x86/atom/string/sse2-wcsrchr-atom.S",
1186                "arch-x86/atom/string/sse2-wcslen-atom.S",
1187                "arch-x86/atom/string/sse2-wcscmp-atom.S",
1188                "arch-x86/silvermont/string/sse2-bcopy-slm.S",
1189                "arch-x86/silvermont/string/sse2-bzero-slm.S",
1190                "arch-x86/silvermont/string/sse2-memcpy-slm.S",
1191                "arch-x86/silvermont/string/sse2-memmove-slm.S",
1192                "arch-x86/silvermont/string/sse2-memset-slm.S",
1193                "arch-x86/silvermont/string/sse2-stpcpy-slm.S",
1194                "arch-x86/silvermont/string/sse2-stpncpy-slm.S",
1195                "arch-x86/silvermont/string/sse2-strcpy-slm.S",
1196                "arch-x86/silvermont/string/sse2-strlen-slm.S",
1197                "arch-x86/silvermont/string/sse2-strncpy-slm.S",
1198            ],
1199
1200            exclude_srcs: [
1201                "bionic/strchr.cpp",
1202                "bionic/strnlen.c",
1203                "bionic/strrchr.cpp",
1204            ],
1205            atom: {
1206                srcs: [
1207                    "arch-x86/atom/string/sse2-bzero-atom.S",
1208                    "arch-x86/atom/string/sse2-memset-atom.S",
1209                    "arch-x86/atom/string/sse2-strlen-atom.S",
1210                    "arch-x86/atom/string/ssse3-bcopy-atom.S",
1211                    "arch-x86/atom/string/ssse3-memcmp-atom.S",
1212                    "arch-x86/atom/string/ssse3-memmove-atom.S",
1213                    "arch-x86/atom/string/ssse3-strncpy-atom.S",
1214                    "arch-x86/atom/string/ssse3-wmemcmp-atom.S",
1215                ],
1216                exclude_srcs: [
1217                    "arch-x86/generic/string/memcmp.S",
1218                    "arch-x86/silvermont/string/sse2-bcopy-slm.S",
1219                    "arch-x86/silvermont/string/sse2-bzero-slm.S",
1220                    "arch-x86/silvermont/string/sse2-memcpy-slm.S",
1221                    "arch-x86/silvermont/string/sse2-memmove-slm.S",
1222                    "arch-x86/silvermont/string/sse2-memset-slm.S",
1223                    "arch-x86/silvermont/string/sse2-strcpy-slm.S",
1224                    "arch-x86/silvermont/string/sse2-strlen-slm.S",
1225                    "arch-x86/silvermont/string/sse2-strncpy-slm.S",
1226                ],
1227            },
1228            ssse3: {
1229                srcs: [
1230                    "arch-x86/atom/string/ssse3-strncat-atom.S",
1231                    "arch-x86/atom/string/ssse3-strlcat-atom.S",
1232                    "arch-x86/atom/string/ssse3-strlcpy-atom.S",
1233                    "arch-x86/atom/string/ssse3-strcat-atom.S",
1234                    "arch-x86/atom/string/ssse3-strcmp-atom.S",
1235                    "arch-x86/atom/string/ssse3-strncmp-atom.S",
1236                    "arch-x86/atom/string/ssse3-wcscat-atom.S",
1237                    "arch-x86/atom/string/ssse3-wcscpy-atom.S",
1238                ],
1239                exclude_srcs: [
1240                    "arch-x86/generic/string/strcmp.S",
1241                    "arch-x86/generic/string/strncmp.S",
1242                    "arch-x86/generic/string/strcat.S",
1243                ],
1244            },
1245            sse4: {
1246                srcs: [
1247                    "arch-x86/silvermont/string/sse4-memcmp-slm.S",
1248                    "arch-x86/silvermont/string/sse4-wmemcmp-slm.S",
1249                ],
1250                exclude_srcs: [
1251                    "arch-x86/generic/string/memcmp.S",
1252                ],
1253            },
1254        },
1255        x86_64: {
1256            srcs: [
1257                "arch-x86_64/bionic/__bionic_clone.S",
1258                "arch-x86_64/bionic/_exit_with_stack_teardown.S",
1259                "arch-x86_64/bionic/__restore_rt.S",
1260                "arch-x86_64/bionic/setjmp.S",
1261                "arch-x86_64/bionic/__set_tls.c",
1262                "arch-x86_64/bionic/syscall.S",
1263                "arch-x86_64/bionic/vfork.S",
1264
1265                "arch-x86_64/string/sse2-memcpy-slm.S",
1266                "arch-x86_64/string/sse2-memmove-slm.S",
1267                "arch-x86_64/string/sse2-memset-slm.S",
1268                "arch-x86_64/string/sse2-stpcpy-slm.S",
1269                "arch-x86_64/string/sse2-stpncpy-slm.S",
1270                "arch-x86_64/string/sse2-strcat-slm.S",
1271                "arch-x86_64/string/sse2-strcpy-slm.S",
1272                "arch-x86_64/string/sse2-strlcat-slm.S",
1273                "arch-x86_64/string/sse2-strlcpy-slm.S",
1274                "arch-x86_64/string/sse2-strlen-slm.S",
1275                "arch-x86_64/string/sse2-strncat-slm.S",
1276                "arch-x86_64/string/sse2-strncpy-slm.S",
1277                "arch-x86_64/string/sse4-memcmp-slm.S",
1278                "arch-x86_64/string/ssse3-strcmp-slm.S",
1279                "arch-x86_64/string/ssse3-strncmp-slm.S",
1280            ],
1281        },
1282    },
1283
1284    cppflags: ["-Wold-style-cast"],
1285    include_dirs: ["bionic/libstdc++/include"],
1286    name: "libc_bionic",
1287}
1288
1289// ========================================================
1290// libc_bionic_ndk.a- The portions of libc_bionic that can
1291// be safely used in libc_ndk.a (no troublesome global data
1292// or constructors).
1293// ========================================================
1294cc_library_static {
1295    defaults: ["libc_defaults"],
1296    srcs: [
1297        "bionic/abort.cpp",
1298        "bionic/accept.cpp",
1299        "bionic/accept4.cpp",
1300        "bionic/access.cpp",
1301        "bionic/arpa_inet.cpp",
1302        "bionic/assert.cpp",
1303        "bionic/atof.cpp",
1304        "bionic/bionic_systrace.cpp",
1305        "bionic/bionic_time_conversions.cpp",
1306        "bionic/brk.cpp",
1307        "bionic/c16rtomb.cpp",
1308        "bionic/c32rtomb.cpp",
1309        "bionic/chmod.cpp",
1310        "bionic/chown.cpp",
1311        "bionic/clearenv.cpp",
1312        "bionic/clock.cpp",
1313        "bionic/clock_getcpuclockid.cpp",
1314        "bionic/clock_nanosleep.cpp",
1315        "bionic/clone.cpp",
1316        "bionic/close.cpp",
1317        "bionic/__cmsg_nxthdr.cpp",
1318        "bionic/connect.cpp",
1319        "bionic/ctype.cpp",
1320        "bionic/dirent.cpp",
1321        "bionic/dup2.cpp",
1322        "bionic/epoll_create.cpp",
1323        "bionic/epoll_pwait.cpp",
1324        "bionic/epoll_wait.cpp",
1325        "bionic/__errno.cpp",
1326        "bionic/error.cpp",
1327        "bionic/eventfd_read.cpp",
1328        "bionic/eventfd_write.cpp",
1329        "bionic/faccessat.cpp",
1330        "bionic/fchmod.cpp",
1331        "bionic/fchmodat.cpp",
1332        "bionic/ffs.cpp",
1333        "bionic/fgetxattr.cpp",
1334        "bionic/flistxattr.cpp",
1335        "bionic/flockfile.cpp",
1336        "bionic/fpclassify.cpp",
1337        "bionic/fsetxattr.cpp",
1338        "bionic/ftruncate.cpp",
1339        "bionic/futimens.cpp",
1340        "bionic/getcwd.cpp",
1341        "bionic/gethostname.cpp",
1342        "bionic/getpgrp.cpp",
1343        "bionic/getpid.cpp",
1344        "bionic/gettid.cpp",
1345        "bionic/__gnu_basename.cpp",
1346        "bionic/ifaddrs.cpp",
1347        "bionic/inotify_init.cpp",
1348        "bionic/ioctl.cpp",
1349        "bionic/lchown.cpp",
1350        "bionic/lfs64_support.cpp",
1351        "bionic/__libc_current_sigrtmax.cpp",
1352        "bionic/__libc_current_sigrtmin.cpp",
1353        "bionic/libc_init_common.cpp",
1354        "bionic/libc_logging.cpp",
1355        "bionic/libgen.cpp",
1356        "bionic/link.cpp",
1357        "bionic/locale.cpp",
1358        "bionic/lstat.cpp",
1359        "bionic/malloc_info.cpp",
1360        "bionic/mbrtoc16.cpp",
1361        "bionic/mbrtoc32.cpp",
1362        "bionic/mbstate.cpp",
1363        "bionic/mempcpy.cpp",
1364        "bionic/mkdir.cpp",
1365        "bionic/mkfifo.cpp",
1366        "bionic/mknod.cpp",
1367        "bionic/mntent.cpp",
1368        "bionic/mremap.cpp",
1369        "bionic/NetdClientDispatch.cpp",
1370        "bionic/open.cpp",
1371        "bionic/pathconf.cpp",
1372        "bionic/pause.cpp",
1373        "bionic/pipe.cpp",
1374        "bionic/poll.cpp",
1375        "bionic/posix_fadvise.cpp",
1376        "bionic/posix_fallocate.cpp",
1377        "bionic/posix_madvise.cpp",
1378        "bionic/posix_timers.cpp",
1379        "bionic/ptrace.cpp",
1380        "bionic/pty.cpp",
1381        "bionic/raise.cpp",
1382        "bionic/rand.cpp",
1383        "bionic/readlink.cpp",
1384        "bionic/reboot.cpp",
1385        "bionic/recv.cpp",
1386        "bionic/rename.cpp",
1387        "bionic/rmdir.cpp",
1388        "bionic/scandir.cpp",
1389        "bionic/sched_getaffinity.cpp",
1390        "bionic/sched_getcpu.cpp",
1391        "bionic/semaphore.cpp",
1392        "bionic/send.cpp",
1393        "bionic/setegid.cpp",
1394        "bionic/__set_errno.cpp",
1395        "bionic/seteuid.cpp",
1396        "bionic/setpgrp.cpp",
1397        "bionic/sigaction.cpp",
1398        "bionic/sigaddset.cpp",
1399        "bionic/sigdelset.cpp",
1400        "bionic/sigemptyset.cpp",
1401        "bionic/sigfillset.cpp",
1402        "bionic/sigismember.cpp",
1403        "bionic/signal.cpp",
1404        "bionic/signalfd.cpp",
1405        "bionic/sigpending.cpp",
1406        "bionic/sigprocmask.cpp",
1407        "bionic/sigqueue.cpp",
1408        "bionic/sigsuspend.cpp",
1409        "bionic/sigtimedwait.cpp",
1410        "bionic/sigwait.cpp",
1411        "bionic/sigwaitinfo.cpp",
1412        "bionic/socket.cpp",
1413        "bionic/stat.cpp",
1414        "bionic/statvfs.cpp",
1415        "bionic/strchrnul.cpp",
1416        "bionic/strerror.cpp",
1417        "bionic/strerror_r.cpp",
1418        "bionic/strsignal.cpp",
1419        "bionic/strtold.cpp",
1420        "bionic/stubs.cpp",
1421        "bionic/symlink.cpp",
1422        "bionic/sysinfo.cpp",
1423        "bionic/syslog.cpp",
1424        "bionic/sys_siglist.c",
1425        "bionic/sys_signame.c",
1426        "bionic/system_properties.cpp",
1427        "bionic/tdestroy.cpp",
1428        "bionic/termios.cpp",
1429        "bionic/thread_private.cpp",
1430        "bionic/tmpfile.cpp",
1431        "bionic/umount.cpp",
1432        "bionic/unlink.cpp",
1433        "bionic/utimes.cpp",
1434        "bionic/wait.cpp",
1435        "bionic/wchar.cpp",
1436        "bionic/wctype.cpp",
1437        "bionic/wmempcpy.cpp",
1438    ],
1439    cflags: ["-Wframe-larger-than=2048"],
1440
1441    multilib: {
1442        lib32: {
1443            // LP32 cruft
1444            srcs: ["bionic/mmap.cpp"],
1445        },
1446    },
1447
1448    cppflags: ["-Wold-style-cast"],
1449    local_include_dirs: ["stdio"],
1450    include_dirs: ["bionic/libstdc++/include"],
1451    name: "libc_bionic_ndk",
1452}
1453
1454// ========================================================
1455// libc_pthread.a - pthreads parts that previously lived in
1456// libc_bionic.a. Relocated to their own library because
1457// they can't be included in libc_ndk.a (as they layout of
1458// pthread_t has changed over the years and has ABI
1459// compatibility issues).
1460// ========================================================
1461
1462cc_library_static {
1463    defaults: ["libc_defaults"],
1464    srcs: [
1465        "bionic/pthread_atfork.cpp",
1466        "bionic/pthread_attr.cpp",
1467        "bionic/pthread_barrier.cpp",
1468        "bionic/pthread_cond.cpp",
1469        "bionic/pthread_create.cpp",
1470        "bionic/pthread_detach.cpp",
1471        "bionic/pthread_equal.cpp",
1472        "bionic/pthread_exit.cpp",
1473        "bionic/pthread_getcpuclockid.cpp",
1474        "bionic/pthread_getschedparam.cpp",
1475        "bionic/pthread_gettid_np.cpp",
1476        "bionic/pthread_internal.cpp",
1477        "bionic/pthread_join.cpp",
1478        "bionic/pthread_key.cpp",
1479        "bionic/pthread_kill.cpp",
1480        "bionic/pthread_mutex.cpp",
1481        "bionic/pthread_once.cpp",
1482        "bionic/pthread_rwlock.cpp",
1483        "bionic/pthread_self.cpp",
1484        "bionic/pthread_setname_np.cpp",
1485        "bionic/pthread_setschedparam.cpp",
1486        "bionic/pthread_sigmask.cpp",
1487        "bionic/pthread_spinlock.cpp",
1488    ],
1489    cflags: ["-Wframe-larger-than=2048"],
1490
1491    cppflags: ["-Wold-style-cast"],
1492    include_dirs: ["bionic/libstdc++/include"],
1493    name: "libc_pthread",
1494}
1495
1496// ========================================================
1497// libc_cxa.a - Things traditionally in libstdc++
1498// ========================================================
1499
1500cc_library_static {
1501    defaults: ["libc_defaults"],
1502    srcs: [
1503        "bionic/__cxa_guard.cpp",
1504        "bionic/__cxa_pure_virtual.cpp",
1505        "bionic/new.cpp",
1506    ],
1507    cflags: ["-fvisibility=hidden"],
1508    include_dirs: ["bionic/libstdc++/include"],
1509    name: "libc_cxa",
1510    clang: true, // GCC refuses to hide new/delete
1511
1512    // b/17574078: Need to disable coverage until we have a prebuilt libprofile_rt.
1513    // Since this is a static library built with clang, it needs to link
1514    // libprofile_rt when it is linked into the final binary. Since the final binary
1515    // is built with GCC, it won't link libprofile_rt. We can't very easily just add
1516    // libprofile_rt to all link lines the way we've done for libgcov because
1517    // libprofile_rt isn't prebuilt, and it would be tricky to write a rule that
1518    // would make sure libprofile_rt is built.
1519    native_coverage: false,
1520}
1521
1522// ========================================================
1523// libc_syscalls.a
1524// ========================================================
1525
1526cc_library_static {
1527    arch: {
1528        arm: {
1529            srcs: ["arch-arm/syscalls/**/*.S"],
1530        },
1531        arm64: {
1532            srcs: ["arch-arm64/syscalls/**/*.S"],
1533        },
1534        mips: {
1535            srcs: ["arch-mips/syscalls/**/*.S"],
1536        },
1537        mips64: {
1538            srcs: ["arch-mips64/syscalls/**/*.S"],
1539        },
1540        x86: {
1541            srcs: ["arch-x86/syscalls/**/*.S"],
1542        },
1543        x86_64: {
1544            srcs: ["arch-x86_64/syscalls/**/*.S"],
1545        },
1546    },
1547    name: "libc_syscalls",
1548}
1549
1550// ========================================================
1551// libc_aeabi.a
1552// This is an LP32 ARM-only library that needs to be built with -fno-builtin
1553// to avoid infinite recursion. For the other architectures we just build an
1554// empty library to keep this makefile simple.
1555// ========================================================
1556
1557cc_library_static {
1558    defaults: ["libc_defaults"],
1559    arch: {
1560        arm: {
1561            srcs: ["arch-arm/bionic/__aeabi.c"],
1562        },
1563    },
1564    name: "libc_aeabi",
1565    cflags: ["-fno-builtin"],
1566}
1567
1568// ========================================================
1569// libc_ndk.a
1570// Compatibility library for the NDK. This library contains
1571// all the parts of libc that are safe to statically link.
1572// We can't safely statically link things that can only run
1573// on a certain version of the OS. Examples include
1574// anything that talks to netd (a large portion of the DNS
1575// code) and anything that is dependent on the layout of a
1576// data structure that has changed across releases (such as
1577// pthread_t).
1578// ========================================================
1579
1580cc_library_static {
1581    name: "libc_ndk",
1582    defaults: ["libc_defaults"],
1583    srcs: libc_common_src_files + ["bionic/malloc_debug_common.cpp"],
1584    multilib: {
1585        lib32: {
1586            srcs: libc_common_src_files_32,
1587        },
1588    },
1589    arch: {
1590        arm: {
1591            srcs: [
1592                "arch-arm/bionic/exidx_dynamic.c",
1593                "arch-common/bionic/crtbegin_so.c",
1594                "arch-arm/bionic/atexit_legacy.c",
1595                "arch-common/bionic/crtend_so.S",
1596            ],
1597            whole_static_libs: ["libc_aeabi"],
1598        },
1599    },
1600
1601    cflags: [
1602        "-fvisibility=hidden",
1603        "-DLIBC_STATIC",
1604    ],
1605
1606    whole_static_libs: [
1607        "libc_bionic_ndk",
1608        "libc_cxa",
1609        "libc_freebsd",
1610        "libc_gdtoa",
1611        "libc_malloc",
1612        "libc_netbsd",
1613        "libc_openbsd_ndk",
1614        "libc_stack_protector",
1615        "libc_syscalls",
1616        "libc_tzcode",
1617        "libm",
1618    ],
1619}
1620
1621// ========================================================
1622// libc_common.a
1623// ========================================================
1624
1625cc_library_static {
1626    defaults: ["libc_defaults"],
1627    srcs: libc_common_src_files,
1628    multilib: {
1629        lib32: {
1630            srcs: libc_common_src_files_32,
1631        },
1632    },
1633    name: "libc_common",
1634
1635    whole_static_libs: [
1636        "libc_bionic",
1637        "libc_bionic_ndk",
1638        "libc_cxa",
1639        "libc_dns",
1640        "libc_freebsd",
1641        "libc_gdtoa",
1642        "libc_malloc",
1643        "libc_netbsd",
1644        "libc_openbsd",
1645        "libc_openbsd_ndk",
1646        "libc_pthread",
1647        "libc_stack_protector",
1648        "libc_syscalls",
1649        "libc_tzcode",
1650    ],
1651
1652    arch: {
1653        arm: {
1654            whole_static_libs: ["libc_aeabi"],
1655        },
1656    },
1657}
1658
1659// ========================================================
1660// libc_nomalloc.a
1661// ========================================================
1662//
1663// This is a version of the static C library that does not
1664// include malloc. It's useful in situations when the user wants
1665// to provide their own malloc implementation, or wants to
1666// explicitly disallow the use of malloc, such as in the
1667// dynamic linker.
1668
1669cc_library_static {
1670    defaults: ["libc_defaults"],
1671    srcs: [
1672        "bionic/dl_iterate_phdr_static.cpp",
1673        "bionic/libc_init_static.cpp",
1674    ],
1675
1676    arch: {
1677        arm: {
1678            srcs: ["arch-arm/bionic/exidx_static.c"],
1679        },
1680    },
1681
1682    cflags: ["-DLIBC_STATIC"],
1683
1684    name: "libc_nomalloc",
1685
1686    whole_static_libs: ["libc_common"],
1687}
1688
1689// ========================================================
1690// libc_malloc.a: the _prefixed_ malloc functions (like dlcalloc).
1691// ========================================================
1692cc_library_static {
1693    defaults: ["libc_defaults"],
1694    product_variables: {
1695        device_uses_jemalloc: {
1696            srcs: ["bionic/jemalloc_wrapper.cpp"],
1697            whole_static_libs: ["libjemalloc"],
1698        },
1699        device_uses_dlmalloc: {
1700            srcs: ["bionic/dlmalloc.c"],
1701        },
1702    },
1703    cflags: ["-fvisibility=hidden"],
1704
1705    name: "libc_malloc",
1706}
1707
1708// ========================================================
1709// libc.a + libc.so
1710// ========================================================
1711cc_library {
1712    defaults: ["libc_defaults"],
1713    name: "libc",
1714    product_variables: {
1715        platform_sdk_version: {
1716            asflags: ["-DPLATFORM_SDK_VERSION=%d"],
1717        },
1718    },
1719    srcs: ["bionic/malloc_debug_common.cpp"],
1720    static: {
1721        srcs: [
1722            "bionic/dl_iterate_phdr_static.cpp",
1723            "bionic/libc_init_static.cpp",
1724        ],
1725        cflags: ["-DLIBC_STATIC"],
1726    },
1727    shared: {
1728        srcs: [
1729            "arch-common/bionic/crtbegin_so.c",
1730            "arch-common/bionic/crtbrand.S",
1731            "bionic/libc_init_dynamic.cpp",
1732            "bionic/NetdClient.cpp",
1733            "arch-common/bionic/crtend_so.S",
1734        ],
1735    },
1736
1737    required: ["tzdata"],
1738
1739    // Leave the symbols in the shared library so that stack unwinders can produce
1740    // meaningful name resolution.
1741    strip: "keep_symbols",
1742
1743    // WARNING: The only library libc.so should depend on is libdl.so!  If you add other libraries,
1744    // make sure to add -Wl,--exclude-libs=libgcc.a to the LOCAL_LDFLAGS for those libraries.  This
1745    // ensures that symbols that are pulled into those new libraries from libgcc.a are not declared
1746    // external; if that were the case, then libc would not pull those symbols from libgcc.a as it
1747    // should, instead relying on the external symbols from the dependent libraries.  That would
1748    // create a "cloaked" dependency on libgcc.a in libc though the libraries, which is not what
1749    // you wanted!
1750
1751    shared_libs: ["libdl"],
1752    whole_static_libs: ["libc_common"],
1753
1754    // We'd really like to do this for all architectures, but since this wasn't done
1755    // before, these symbols must continue to be exported on LP32 for binary
1756    // compatibility.
1757    multilib: {
1758        lib64: {
1759            ldflags: ["-Wl,--exclude-libs,libgcc.a"],
1760        },
1761    },
1762
1763    nocrt: true,
1764
1765    arch: {
1766        arm: {
1767            //TODO: This is to work around b/24465209. Remove after root cause is fixed
1768            ldflags: ["-Wl,--hash-style=both"],
1769
1770            // Don't re-export new/delete and friends, even if the compiler really wants to.
1771            version_script: "libc.arm.map",
1772            product_variables: {
1773                brillo: {
1774                    version_script: "libc.arm.brillo.map",
1775                },
1776            },
1777
1778            shared: {
1779                srcs: ["arch-arm/bionic/exidx_dynamic.c"],
1780            },
1781            static: {
1782                srcs: ["arch-arm/bionic/exidx_static.c"],
1783            },
1784
1785            // special for arm
1786            cflags: ["-DCRT_LEGACY_WORKAROUND"],
1787            srcs: [
1788                "arch-arm/bionic/atexit_legacy.c",
1789            ],
1790        },
1791        arm64: {
1792            // Don't re-export new/delete and friends, even if the compiler really wants to.
1793            version_script: "libc.arm64.map",
1794        },
1795        mips: {
1796            // Don't re-export new/delete and friends, even if the compiler really wants to.
1797            version_script: "libc.mips.map",
1798            product_variables: {
1799                brillo: {
1800                    version_script: "libc.mips.brillo.map",
1801                },
1802            },
1803        },
1804        mips64: {
1805            // Don't re-export new/delete and friends, even if the compiler really wants to.
1806            version_script: "libc.mips64.map",
1807        },
1808        x86: {
1809            //TODO: This is to work around b/24465209. Remove after root cause is fixed
1810            ldflags: ["-Wl,--hash-style=both"],
1811
1812            // Don't re-export new/delete and friends, even if the compiler really wants to.
1813            version_script: "libc.x86.map",
1814            product_variables: {
1815                brillo: {
1816                    version_script: "libc.x86.brillo.map",
1817                },
1818            },
1819        },
1820        x86_64: {
1821            // Don't re-export new/delete and friends, even if the compiler really wants to.
1822            version_script: "libc.x86_64.map",
1823        },
1824    },
1825}
1826
1827// For all builds, except for the -user build we will enable memory
1828// allocation checking (including memory leaks, buffer overwrites, etc.)
1829// Note that all these checks are also controlled by env. settings
1830// that can enable, or disable specific checks. Note also that some of
1831// the checks are available only in emulator and are implemeted in
1832// libc_malloc_qemu_instrumented.so.
1833// ANDROIDMK TRANSLATION ERROR: unsupported directive
1834// ifneq ($(TARGET_BUILD_VARIANT),user)
1835// ========================================================
1836// libc_malloc_debug_leak.so
1837// ========================================================
1838cc_library_shared {
1839    defaults: ["libc_defaults"],
1840
1841    srcs: [
1842        "bionic/debug_backtrace.cpp",
1843        "bionic/debug_mapinfo.cpp",
1844        "bionic/libc_logging.cpp",
1845        "bionic/malloc_debug_leak.cpp",
1846        "bionic/malloc_debug_check.cpp",
1847    ],
1848
1849    name: "libc_malloc_debug_leak",
1850
1851    shared_libs: [
1852        "libc",
1853        "libdl",
1854    ],
1855    // Only need this for arm since libc++ uses its own unwind code that
1856    // doesn't mix with the other default unwind code.
1857    arch: {
1858        arm: {
1859            static_libs: [
1860                "libunwind_llvm",
1861                "libc++abi",
1862            ],
1863            ldflags: ["-Wl,--exclude-libs,libunwind_llvm.a"],
1864        },
1865    },
1866    allow_undefined_symbols: true,
1867
1868    // Don't re-export new/delete and friends, even if the compiler really wants to.
1869    version_script: "version_script.txt",
1870
1871    // Don't install on release build
1872    tags: [
1873        "eng",
1874        "debug",
1875    ],
1876}
1877
1878// ========================================================
1879// libc_malloc_debug_qemu.so
1880// ========================================================
1881cc_library_shared {
1882    defaults: ["libc_defaults"],
1883    cflags: ["-DMALLOC_QEMU_INSTRUMENT"],
1884
1885    srcs: [
1886        "bionic/libc_logging.cpp",
1887        "bionic/malloc_debug_qemu.cpp",
1888    ],
1889
1890    name: "libc_malloc_debug_qemu",
1891
1892    shared_libs: [
1893        "libc",
1894        "libdl",
1895    ],
1896
1897    // Don't re-export new/delete and friends, even if the compiler really wants to.
1898    version_script: "version_script.txt",
1899
1900    // Don't install on release build
1901    tags: [
1902        "eng",
1903        "debug",
1904    ],
1905}
1906
1907// ANDROIDMK TRANSLATION ERROR: unsupported directive
1908// endif
1909//!user
1910
1911// ========================================================
1912// libstdc++.so + libstdc++.a
1913// ========================================================
1914cc_library {
1915    defaults: ["libc_defaults"],
1916    include_dirs: ["bionic/libstdc++/include"],
1917    srcs: [
1918        "bionic/__cxa_guard.cpp",
1919        "bionic/__cxa_pure_virtual.cpp",
1920        "bionic/new.cpp",
1921        "bionic/libc_logging.cpp",
1922    ],
1923    name: "libstdc++",
1924    system_shared_libs: ["libc"],
1925
1926    //TODO: This is to work around b/24465209. Remove after root cause is fixed
1927    arch: {
1928        arm: {
1929            ldflags: ["-Wl,--hash-style=both"],
1930        },
1931        x86: {
1932            ldflags: ["-Wl,--hash-style=both"],
1933        },
1934    },
1935}
1936
1937cc_defaults {
1938    name: "crt_defaults",
1939
1940    no_default_compiler_flags: true,
1941
1942    arch: {
1943        arm: {
1944            local_include_dirs: ["arch-arm/include"],
1945        },
1946        arm64: {
1947            local_include_dirs: ["arch-arm64/include"],
1948        },
1949        mips: {
1950            local_include_dirs: ["arch-mips/include"],
1951        },
1952        mips64: {
1953            local_include_dirs: ["arch-mips64/include"],
1954        },
1955        x86: {
1956            local_include_dirs: ["arch-x86/include"],
1957        },
1958        x86_64: {
1959            local_include_dirs: ["arch-x86_64/include"],
1960        },
1961    },
1962    clang: false,
1963}
1964
1965cc_defaults {
1966    name: "crt_so_defaults",
1967
1968    arch: {
1969        mips: {
1970            cflags: ["-fPIC"],
1971        },
1972        mips64: {
1973            cflags: ["-fPIC"],
1974        },
1975        x86: {
1976            cflags: ["-fPIC"],
1977        },
1978        x86_64: {
1979            cflags: ["-fPIC"],
1980        },
1981    },
1982}
1983
1984// Android.mk:start
1985// # crt obj files
1986// # ========================================================
1987// # crtbrand.c needs <stdint.h> and a #define for the platform SDK version.
1988// libc_crt_target_cflags := \
1989//    -I$(LOCAL_PATH)/include \
1990//    -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION) \
1991//
1992// my_2nd_arch_prefix :=
1993// include $(LOCAL_PATH)/arch-$(TARGET_ARCH)/$(TARGET_ARCH).mk
1994// include $(LOCAL_PATH)/crt.mk
1995// ifdef TARGET_2ND_ARCH
1996// my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
1997// include $(LOCAL_PATH)/arch-$(TARGET_2ND_ARCH)/$(TARGET_2ND_ARCH).mk
1998// include $(LOCAL_PATH)/crt.mk
1999// my_2nd_arch_prefix :=
2000// endif
2001//
2002// include $(call all-makefiles-under,$(LOCAL_PATH))
2003// Android.mk:end
2004cc_object {
2005    name: "crtbrand",
2006    local_include_dirs: ["include"],
2007    product_variables: {
2008        platform_sdk_version: {
2009            asflags: ["-DPLATFORM_SDK_VERSION=%d"],
2010        },
2011    },
2012    srcs: ["arch-common/bionic/crtbrand.S"],
2013
2014    defaults: [
2015        "crt_defaults",
2016        "crt_so_defaults",
2017    ],
2018}
2019
2020// Android.mk:ignore
2021cc_object {
2022    name: "crtbegin_so1",
2023    local_include_dirs: ["include"],
2024    srcs: ["arch-common/bionic/crtbegin_so.c"],
2025
2026    defaults: [
2027        "crt_defaults",
2028        "crt_so_defaults",
2029    ],
2030}
2031
2032// Android.mk:ignore
2033cc_object {
2034    name: "crtbegin_so",
2035
2036    defaults: [
2037        "crt_defaults",
2038        "crt_so_defaults",
2039    ],
2040    deps: [
2041        "crtbegin_so1",
2042        "crtbrand",
2043    ],
2044}
2045
2046// Android.mk:ignore
2047cc_object {
2048    name: "crtend_so",
2049    local_include_dirs: ["include"],
2050    srcs: ["arch-common/bionic/crtend_so.S"],
2051
2052    defaults: [
2053        "crt_defaults",
2054        "crt_so_defaults",
2055    ],
2056}
2057
2058// Android.mk:ignore
2059cc_object {
2060    name: "crtbegin_static1",
2061    local_include_dirs: ["include"],
2062    srcs: ["arch-common/bionic/crtbegin.c"],
2063
2064    arch: {
2065        arm64: {
2066            srcs: [
2067                "arch-arm64/bionic/crtbegin.c",
2068            ],
2069            exclude_srcs: [
2070                "arch-common/bionic/crtbegin.c",
2071            ],
2072        },
2073        mips: {
2074            srcs: [
2075                "arch-mips/bionic/crtbegin.c",
2076            ],
2077            exclude_srcs: [
2078                "arch-common/bionic/crtbegin.c",
2079            ],
2080        },
2081        mips64: {
2082            srcs: [
2083                "arch-mips64/bionic/crtbegin.c",
2084            ],
2085            exclude_srcs: [
2086                "arch-common/bionic/crtbegin.c",
2087            ],
2088        },
2089    },
2090
2091    defaults: ["crt_defaults"],
2092}
2093
2094// Android.mk:ignore
2095cc_object {
2096    name: "crtbegin_static",
2097
2098    deps: [
2099        "crtbegin_static1",
2100        "crtbrand",
2101    ],
2102    defaults: ["crt_defaults"],
2103}
2104
2105// Android.mk:ignore
2106cc_object {
2107    name: "crtbegin_dynamic1",
2108    local_include_dirs: ["include"],
2109    srcs: ["arch-common/bionic/crtbegin.c"],
2110
2111    arch: {
2112        arm64: {
2113            srcs: [
2114                "arch-arm64/bionic/crtbegin.c",
2115            ],
2116            exclude_srcs: [
2117                "arch-common/bionic/crtbegin.c",
2118            ],
2119        },
2120        mips: {
2121            srcs: [
2122                "arch-mips/bionic/crtbegin.c",
2123            ],
2124            exclude_srcs: [
2125                "arch-common/bionic/crtbegin.c",
2126            ],
2127        },
2128        mips64: {
2129            srcs: [
2130                "arch-mips64/bionic/crtbegin.c",
2131            ],
2132            exclude_srcs: [
2133                "arch-common/bionic/crtbegin.c",
2134            ],
2135        },
2136    },
2137    defaults: ["crt_defaults"],
2138}
2139
2140// Android.mk:ignore
2141cc_object {
2142    name: "crtbegin_dynamic",
2143
2144    deps: [
2145        "crtbegin_dynamic1",
2146        "crtbrand",
2147    ],
2148    defaults: ["crt_defaults"],
2149}
2150
2151// Android.mk:ignore
2152cc_object {
2153    // We rename crtend.o to crtend_android.o to avoid a
2154    // name clash between gcc and bionic.
2155    name: "crtend_android",
2156    local_include_dirs: ["include"],
2157    srcs: ["arch-common/bionic/crtend.S"],
2158
2159    defaults: ["crt_defaults"],
2160}
2161