OSDN Git Service

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