Home | History | Annotate | Download | only in libc
      1 LOCAL_PATH := $(call my-dir)
      2 
      3 bionic_coverage ?= false
      4 
      5 # Make everything depend on any changes to included makefiles.
      6 libc_common_additional_dependencies := $(LOCAL_PATH)/Android.mk
      7 
      8 # Load config for TARGET_ARCH
      9 my_2nd_arch_prefix :=
     10 include $(LOCAL_PATH)/arch-$(TARGET_ARCH)/$(TARGET_ARCH).mk
     11 libc_common_additional_dependencies += \
     12     $(LOCAL_PATH)/arch-$(TARGET_ARCH)/$(TARGET_ARCH).mk
     13 
     14 
     15 ifdef TARGET_2ND_ARCH
     16 # Load config for TARGET_2ND_ARCH
     17 my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
     18 include $(LOCAL_PATH)/arch-$(TARGET_2ND_ARCH)/$(TARGET_2ND_ARCH).mk
     19 my_2nd_arch_prefix :=
     20 libc_common_additional_dependencies += \
     21     $(LOCAL_PATH)/arch-$(TARGET_2ND_ARCH)/$(TARGET_2ND_ARCH).mk
     22 endif
     23 
     24 # crt obj files
     25 # ========================================================
     26 # crtbrand.c needs <stdint.h> and a #define for the platform SDK version.
     27 libc_crt_target_cflags := \
     28     -I$(LOCAL_PATH)/include \
     29     -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION) \
     30 
     31 my_2nd_arch_prefix :=
     32 include $(LOCAL_PATH)/crt.mk
     33 ifdef TARGET_2ND_ARCH
     34 my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
     35 include $(LOCAL_PATH)/crt.mk
     36 my_2nd_arch_prefix :=
     37 endif
     38 
     39 # Define the common source files for all the libc instances
     40 # =========================================================
     41 libc_common_src_files := \
     42     bionic/ether_aton.c \
     43     bionic/ether_ntoa.c \
     44     bionic/fts.c \
     45     bionic/getpriority.c \
     46     bionic/initgroups.c \
     47     bionic/isatty.c \
     48     bionic/memmem.c \
     49     bionic/pututline.c \
     50     bionic/sched_cpualloc.c \
     51     bionic/sched_cpucount.c \
     52     bionic/sigblock.c \
     53     bionic/siginterrupt.c \
     54     bionic/sigsetmask.c \
     55     bionic/system_properties_compat.c \
     56     stdio/fread.c \
     57     stdio/refill.c \
     58     stdio/snprintf.c\
     59     stdio/sprintf.c \
     60     stdio/stdio.cpp \
     61     stdio/stdio_ext.cpp \
     62     stdlib/atexit.c \
     63     stdlib/exit.c \
     64 
     65 # Fortify implementations of libc functions.
     66 libc_common_src_files += \
     67     bionic/__FD_chk.cpp \
     68     bionic/__fgets_chk.cpp \
     69     bionic/__fread_chk.cpp \
     70     bionic/__fwrite_chk.cpp \
     71     bionic/__getcwd_chk.cpp \
     72     bionic/__memchr_chk.cpp \
     73     bionic/__memmove_chk.cpp \
     74     bionic/__memrchr_chk.cpp \
     75     bionic/__poll_chk.cpp \
     76     bionic/__pread64_chk.cpp \
     77     bionic/__pread_chk.cpp \
     78     bionic/__pwrite64_chk.cpp \
     79     bionic/__pwrite_chk.cpp \
     80     bionic/__read_chk.cpp \
     81     bionic/__readlink_chk.cpp \
     82     bionic/__readlinkat_chk.cpp \
     83     bionic/__recvfrom_chk.cpp \
     84     bionic/__stpcpy_chk.cpp \
     85     bionic/__stpncpy_chk.cpp \
     86     bionic/__strchr_chk.cpp \
     87     bionic/__strlcat_chk.cpp \
     88     bionic/__strlcpy_chk.cpp \
     89     bionic/__strlen_chk.cpp \
     90     bionic/__strncat_chk.cpp \
     91     bionic/__strncpy_chk.cpp \
     92     bionic/__strrchr_chk.cpp \
     93     bionic/__umask_chk.cpp \
     94     bionic/__vsnprintf_chk.cpp \
     95     bionic/__vsprintf_chk.cpp \
     96     bionic/__write_chk.cpp
     97 
     98 libc_bionic_ndk_src_files := \
     99     bionic/abort.cpp \
    100     bionic/accept.cpp \
    101     bionic/accept4.cpp \
    102     bionic/access.cpp \
    103     bionic/arpa_inet.cpp \
    104     bionic/assert.cpp \
    105     bionic/atof.cpp \
    106     bionic/bionic_netlink.cpp \
    107     bionic/bionic_systrace.cpp \
    108     bionic/bionic_time_conversions.cpp \
    109     bionic/brk.cpp \
    110     bionic/c16rtomb.cpp \
    111     bionic/c32rtomb.cpp \
    112     bionic/chmod.cpp \
    113     bionic/chown.cpp \
    114     bionic/clearenv.cpp \
    115     bionic/clock.cpp \
    116     bionic/clock_getcpuclockid.cpp \
    117     bionic/clock_nanosleep.cpp \
    118     bionic/clone.cpp \
    119     bionic/close.cpp \
    120     bionic/__cmsg_nxthdr.cpp \
    121     bionic/connect.cpp \
    122     bionic/ctype.cpp \
    123     bionic/dirent.cpp \
    124     bionic/dup2.cpp \
    125     bionic/epoll_create.cpp \
    126     bionic/epoll_pwait.cpp \
    127     bionic/epoll_wait.cpp \
    128     bionic/__errno.cpp \
    129     bionic/error.cpp \
    130     bionic/eventfd_read.cpp \
    131     bionic/eventfd_write.cpp \
    132     bionic/faccessat.cpp \
    133     bionic/fchmod.cpp \
    134     bionic/fchmodat.cpp \
    135     bionic/ffs.cpp \
    136     bionic/fgetxattr.cpp \
    137     bionic/flistxattr.cpp \
    138     bionic/flockfile.cpp \
    139     bionic/fpclassify.cpp \
    140     bionic/fsetxattr.cpp \
    141     bionic/ftruncate.cpp \
    142     bionic/futimens.cpp \
    143     bionic/getcwd.cpp \
    144     bionic/gethostname.cpp \
    145     bionic/getpgrp.cpp \
    146     bionic/getpid.cpp \
    147     bionic/gettid.cpp \
    148     bionic/__gnu_basename.cpp \
    149     bionic/ifaddrs.cpp \
    150     bionic/inotify_init.cpp \
    151     bionic/ioctl.cpp \
    152     bionic/lchown.cpp \
    153     bionic/lfs64_support.cpp \
    154     bionic/__libc_current_sigrtmax.cpp \
    155     bionic/__libc_current_sigrtmin.cpp \
    156     bionic/libc_init_common.cpp \
    157     bionic/libc_logging.cpp \
    158     bionic/libgen.cpp \
    159     bionic/link.cpp \
    160     bionic/locale.cpp \
    161     bionic/lockf.cpp \
    162     bionic/lstat.cpp \
    163     bionic/malloc_info.cpp \
    164     bionic/mbrtoc16.cpp \
    165     bionic/mbrtoc32.cpp \
    166     bionic/mbstate.cpp \
    167     bionic/mempcpy.cpp \
    168     bionic/mkdir.cpp \
    169     bionic/mkfifo.cpp \
    170     bionic/mknod.cpp \
    171     bionic/mntent.cpp \
    172     bionic/mremap.cpp \
    173     bionic/NetdClientDispatch.cpp \
    174     bionic/net_if.cpp \
    175     bionic/netinet_in.cpp \
    176     bionic/open.cpp \
    177     bionic/pathconf.cpp \
    178     bionic/pause.cpp \
    179     bionic/pipe.cpp \
    180     bionic/poll.cpp \
    181     bionic/posix_fadvise.cpp \
    182     bionic/posix_fallocate.cpp \
    183     bionic/posix_madvise.cpp \
    184     bionic/posix_timers.cpp \
    185     bionic/ptrace.cpp \
    186     bionic/pty.cpp \
    187     bionic/raise.cpp \
    188     bionic/rand.cpp \
    189     bionic/readlink.cpp \
    190     bionic/reboot.cpp \
    191     bionic/recv.cpp \
    192     bionic/rename.cpp \
    193     bionic/rmdir.cpp \
    194     bionic/scandir.cpp \
    195     bionic/sched_getaffinity.cpp \
    196     bionic/sched_getcpu.cpp \
    197     bionic/semaphore.cpp \
    198     bionic/send.cpp \
    199     bionic/setegid.cpp \
    200     bionic/__set_errno.cpp \
    201     bionic/seteuid.cpp \
    202     bionic/setpgrp.cpp \
    203     bionic/sigaction.cpp \
    204     bionic/sigaddset.cpp \
    205     bionic/sigdelset.cpp \
    206     bionic/sigemptyset.cpp \
    207     bionic/sigfillset.cpp \
    208     bionic/sigismember.cpp \
    209     bionic/signal.cpp \
    210     bionic/signalfd.cpp \
    211     bionic/sigpending.cpp \
    212     bionic/sigprocmask.cpp \
    213     bionic/sigqueue.cpp \
    214     bionic/sigsuspend.cpp \
    215     bionic/sigtimedwait.cpp \
    216     bionic/sigwait.cpp \
    217     bionic/sigwaitinfo.cpp \
    218     bionic/socket.cpp \
    219     bionic/stat.cpp \
    220     bionic/statvfs.cpp \
    221     bionic/strchrnul.cpp \
    222     bionic/strerror.cpp \
    223     bionic/strerror_r.cpp \
    224     bionic/strsignal.cpp \
    225     bionic/strtold.cpp \
    226     bionic/stubs.cpp \
    227     bionic/symlink.cpp \
    228     bionic/sysinfo.cpp \
    229     bionic/syslog.cpp \
    230     bionic/sys_siglist.c \
    231     bionic/sys_signame.c \
    232     bionic/system_properties.cpp \
    233     bionic/tdestroy.cpp \
    234     bionic/termios.cpp \
    235     bionic/thread_private.cpp \
    236     bionic/tmpfile.cpp \
    237     bionic/umount.cpp \
    238     bionic/unlink.cpp \
    239     bionic/utimes.cpp \
    240     bionic/wait.cpp \
    241     bionic/wchar.cpp \
    242     bionic/wctype.cpp \
    243     bionic/wmempcpy.cpp \
    244 
    245 libc_bionic_src_files :=
    246 
    247 # The following implementations depend on pthread data, so we can't include
    248 # them in libc_ndk.a.
    249 libc_bionic_src_files += \
    250     bionic/__cxa_thread_atexit_impl.cpp \
    251     bionic/fork.cpp \
    252 
    253 # The data that backs getauxval is initialized in the libc init functions which
    254 # are invoked by the linker. If this file is included in libc_ndk.a, only one of
    255 # the copies of the global data will be initialized, resulting in nullptr
    256 # dereferences.
    257 libc_bionic_src_files += bionic/getauxval.cpp
    258 
    259 # These four require getauxval, which isn't available on older platforms.
    260 libc_bionic_src_files += bionic/getentropy_linux.c
    261 libc_bionic_src_files += bionic/sysconf.cpp
    262 libc_bionic_src_files += bionic/vdso.cpp
    263 libc_bionic_src_files += bionic/setjmp_cookie.cpp
    264 
    265 libc_bionic_src_files += \
    266     bionic/__memcpy_chk.cpp \
    267     bionic/__memset_chk.cpp \
    268     bionic/__strcat_chk.cpp \
    269     bionic/__strcpy_chk.cpp \
    270     bionic/strchr.cpp \
    271     bionic/strnlen.c \
    272     bionic/strrchr.cpp \
    273 
    274 libc_cxa_src_files := \
    275     bionic/__cxa_guard.cpp \
    276     bionic/__cxa_pure_virtual.cpp \
    277     bionic/new.cpp \
    278 
    279 libc_upstream_freebsd_src_files := \
    280     upstream-freebsd/lib/libc/gen/ldexp.c \
    281     upstream-freebsd/lib/libc/gen/sleep.c \
    282     upstream-freebsd/lib/libc/gen/usleep.c \
    283     upstream-freebsd/lib/libc/stdlib/getopt_long.c \
    284     upstream-freebsd/lib/libc/stdlib/qsort.c \
    285     upstream-freebsd/lib/libc/stdlib/quick_exit.c \
    286     upstream-freebsd/lib/libc/stdlib/realpath.c \
    287     upstream-freebsd/lib/libc/string/wcpcpy.c \
    288     upstream-freebsd/lib/libc/string/wcpncpy.c \
    289     upstream-freebsd/lib/libc/string/wcscasecmp.c \
    290     upstream-freebsd/lib/libc/string/wcscat.c \
    291     upstream-freebsd/lib/libc/string/wcschr.c \
    292     upstream-freebsd/lib/libc/string/wcscmp.c \
    293     upstream-freebsd/lib/libc/string/wcscpy.c \
    294     upstream-freebsd/lib/libc/string/wcscspn.c \
    295     upstream-freebsd/lib/libc/string/wcsdup.c \
    296     upstream-freebsd/lib/libc/string/wcslcat.c \
    297     upstream-freebsd/lib/libc/string/wcslen.c \
    298     upstream-freebsd/lib/libc/string/wcsncasecmp.c \
    299     upstream-freebsd/lib/libc/string/wcsncat.c \
    300     upstream-freebsd/lib/libc/string/wcsncmp.c \
    301     upstream-freebsd/lib/libc/string/wcsncpy.c \
    302     upstream-freebsd/lib/libc/string/wcsnlen.c \
    303     upstream-freebsd/lib/libc/string/wcspbrk.c \
    304     upstream-freebsd/lib/libc/string/wcsrchr.c \
    305     upstream-freebsd/lib/libc/string/wcsspn.c \
    306     upstream-freebsd/lib/libc/string/wcstok.c \
    307     upstream-freebsd/lib/libc/string/wmemchr.c \
    308     upstream-freebsd/lib/libc/string/wmemcmp.c \
    309     upstream-freebsd/lib/libc/string/wmemmove.c \
    310     upstream-freebsd/lib/libc/string/wmemset.c \
    311 
    312 libc_upstream_netbsd_src_files := \
    313     upstream-netbsd/common/lib/libc/stdlib/random.c \
    314     upstream-netbsd/lib/libc/gen/ftw.c \
    315     upstream-netbsd/lib/libc/gen/nftw.c \
    316     upstream-netbsd/lib/libc/gen/nice.c \
    317     upstream-netbsd/lib/libc/gen/popen.c \
    318     upstream-netbsd/lib/libc/gen/psignal.c \
    319     upstream-netbsd/lib/libc/gen/utime.c \
    320     upstream-netbsd/lib/libc/gen/utmp.c \
    321     upstream-netbsd/lib/libc/inet/nsap_addr.c \
    322     upstream-netbsd/lib/libc/regex/regcomp.c \
    323     upstream-netbsd/lib/libc/regex/regerror.c \
    324     upstream-netbsd/lib/libc/regex/regexec.c \
    325     upstream-netbsd/lib/libc/regex/regfree.c \
    326     upstream-netbsd/lib/libc/stdlib/bsearch.c \
    327     upstream-netbsd/lib/libc/stdlib/div.c \
    328     upstream-netbsd/lib/libc/stdlib/drand48.c \
    329     upstream-netbsd/lib/libc/stdlib/erand48.c \
    330     upstream-netbsd/lib/libc/stdlib/jrand48.c \
    331     upstream-netbsd/lib/libc/stdlib/lcong48.c \
    332     upstream-netbsd/lib/libc/stdlib/ldiv.c \
    333     upstream-netbsd/lib/libc/stdlib/lldiv.c \
    334     upstream-netbsd/lib/libc/stdlib/lrand48.c \
    335     upstream-netbsd/lib/libc/stdlib/mrand48.c \
    336     upstream-netbsd/lib/libc/stdlib/nrand48.c \
    337     upstream-netbsd/lib/libc/stdlib/_rand48.c \
    338     upstream-netbsd/lib/libc/stdlib/rand_r.c \
    339     upstream-netbsd/lib/libc/stdlib/reallocarr.c \
    340     upstream-netbsd/lib/libc/stdlib/seed48.c \
    341     upstream-netbsd/lib/libc/stdlib/srand48.c \
    342     upstream-netbsd/lib/libc/string/memccpy.c \
    343     upstream-netbsd/lib/libc/string/strcasestr.c \
    344     upstream-netbsd/lib/libc/string/strcoll.c \
    345     upstream-netbsd/lib/libc/string/strxfrm.c \
    346 
    347 libc_upstream_openbsd_gdtoa_src_files := \
    348     upstream-openbsd/android/gdtoa_support.cpp \
    349     upstream-openbsd/lib/libc/gdtoa/dmisc.c \
    350     upstream-openbsd/lib/libc/gdtoa/dtoa.c \
    351     upstream-openbsd/lib/libc/gdtoa/gdtoa.c \
    352     upstream-openbsd/lib/libc/gdtoa/gethex.c \
    353     upstream-openbsd/lib/libc/gdtoa/gmisc.c \
    354     upstream-openbsd/lib/libc/gdtoa/hd_init.c \
    355     upstream-openbsd/lib/libc/gdtoa/hdtoa.c \
    356     upstream-openbsd/lib/libc/gdtoa/hexnan.c \
    357     upstream-openbsd/lib/libc/gdtoa/ldtoa.c \
    358     upstream-openbsd/lib/libc/gdtoa/misc.c \
    359     upstream-openbsd/lib/libc/gdtoa/smisc.c \
    360     upstream-openbsd/lib/libc/gdtoa/strtod.c \
    361     upstream-openbsd/lib/libc/gdtoa/strtodg.c \
    362     upstream-openbsd/lib/libc/gdtoa/strtof.c \
    363     upstream-openbsd/lib/libc/gdtoa/strtord.c \
    364     upstream-openbsd/lib/libc/gdtoa/sum.c \
    365     upstream-openbsd/lib/libc/gdtoa/ulp.c \
    366 
    367 libc_upstream_openbsd_gdtoa_src_files_32 := \
    368     $(libc_upstream_openbsd_gdtoa_src_files) \
    369 
    370 libc_upstream_openbsd_gdtoa_src_files_64 := \
    371     $(libc_upstream_openbsd_gdtoa_src_files) \
    372     upstream-openbsd/lib/libc/gdtoa/strtorQ.c \
    373 
    374 # These two depend on getentropy_linux.c, which isn't in libc_ndk.a.
    375 libc_upstream_openbsd_src_files := \
    376     upstream-openbsd/lib/libc/crypt/arc4random.c \
    377     upstream-openbsd/lib/libc/crypt/arc4random_uniform.c \
    378 
    379 libc_upstream_openbsd_src_files += \
    380     upstream-openbsd/lib/libc/string/memchr.c \
    381     upstream-openbsd/lib/libc/string/memmove.c \
    382     upstream-openbsd/lib/libc/string/memrchr.c \
    383     upstream-openbsd/lib/libc/string/stpcpy.c \
    384     upstream-openbsd/lib/libc/string/stpncpy.c \
    385     upstream-openbsd/lib/libc/string/strcat.c \
    386     upstream-openbsd/lib/libc/string/strcpy.c \
    387     upstream-openbsd/lib/libc/string/strlcat.c \
    388     upstream-openbsd/lib/libc/string/strlcpy.c \
    389     upstream-openbsd/lib/libc/string/strncat.c \
    390     upstream-openbsd/lib/libc/string/strncmp.c \
    391     upstream-openbsd/lib/libc/string/strncpy.c \
    392 
    393 libc_upstream_openbsd_ndk_src_files := \
    394     upstream-openbsd/lib/libc/compat-43/killpg.c \
    395     upstream-openbsd/lib/libc/gen/alarm.c \
    396     upstream-openbsd/lib/libc/gen/ctype_.c \
    397     upstream-openbsd/lib/libc/gen/daemon.c \
    398     upstream-openbsd/lib/libc/gen/err.c \
    399     upstream-openbsd/lib/libc/gen/errx.c \
    400     upstream-openbsd/lib/libc/gen/exec.c \
    401     upstream-openbsd/lib/libc/gen/fnmatch.c \
    402     upstream-openbsd/lib/libc/gen/ftok.c \
    403     upstream-openbsd/lib/libc/gen/getprogname.c \
    404     upstream-openbsd/lib/libc/gen/isctype.c \
    405     upstream-openbsd/lib/libc/gen/setprogname.c \
    406     upstream-openbsd/lib/libc/gen/time.c \
    407     upstream-openbsd/lib/libc/gen/tolower_.c \
    408     upstream-openbsd/lib/libc/gen/toupper_.c \
    409     upstream-openbsd/lib/libc/gen/verr.c \
    410     upstream-openbsd/lib/libc/gen/verrx.c \
    411     upstream-openbsd/lib/libc/gen/vwarn.c \
    412     upstream-openbsd/lib/libc/gen/vwarnx.c \
    413     upstream-openbsd/lib/libc/gen/warn.c \
    414     upstream-openbsd/lib/libc/gen/warnx.c \
    415     upstream-openbsd/lib/libc/locale/btowc.c \
    416     upstream-openbsd/lib/libc/locale/mbrlen.c \
    417     upstream-openbsd/lib/libc/locale/mbstowcs.c \
    418     upstream-openbsd/lib/libc/locale/mbtowc.c \
    419     upstream-openbsd/lib/libc/locale/wcscoll.c \
    420     upstream-openbsd/lib/libc/locale/wcstod.c \
    421     upstream-openbsd/lib/libc/locale/wcstof.c \
    422     upstream-openbsd/lib/libc/locale/wcstoimax.c \
    423     upstream-openbsd/lib/libc/locale/wcstol.c \
    424     upstream-openbsd/lib/libc/locale/wcstold.c \
    425     upstream-openbsd/lib/libc/locale/wcstoll.c \
    426     upstream-openbsd/lib/libc/locale/wcstombs.c \
    427     upstream-openbsd/lib/libc/locale/wcstoul.c \
    428     upstream-openbsd/lib/libc/locale/wcstoull.c \
    429     upstream-openbsd/lib/libc/locale/wcstoumax.c \
    430     upstream-openbsd/lib/libc/locale/wcsxfrm.c \
    431     upstream-openbsd/lib/libc/locale/wctob.c \
    432     upstream-openbsd/lib/libc/locale/wctomb.c \
    433     upstream-openbsd/lib/libc/net/htonl.c \
    434     upstream-openbsd/lib/libc/net/htons.c \
    435     upstream-openbsd/lib/libc/net/inet_lnaof.c \
    436     upstream-openbsd/lib/libc/net/inet_makeaddr.c \
    437     upstream-openbsd/lib/libc/net/inet_netof.c \
    438     upstream-openbsd/lib/libc/net/inet_ntoa.c \
    439     upstream-openbsd/lib/libc/net/inet_ntop.c \
    440     upstream-openbsd/lib/libc/net/inet_pton.c \
    441     upstream-openbsd/lib/libc/net/ntohl.c \
    442     upstream-openbsd/lib/libc/net/ntohs.c \
    443     upstream-openbsd/lib/libc/net/res_random.c \
    444     upstream-openbsd/lib/libc/stdio/asprintf.c \
    445     upstream-openbsd/lib/libc/stdio/clrerr.c \
    446     upstream-openbsd/lib/libc/stdio/dprintf.c \
    447     upstream-openbsd/lib/libc/stdio/feof.c \
    448     upstream-openbsd/lib/libc/stdio/ferror.c \
    449     upstream-openbsd/lib/libc/stdio/fflush.c \
    450     upstream-openbsd/lib/libc/stdio/fgetc.c \
    451     upstream-openbsd/lib/libc/stdio/fgetln.c \
    452     upstream-openbsd/lib/libc/stdio/fgets.c \
    453     upstream-openbsd/lib/libc/stdio/fgetwc.c \
    454     upstream-openbsd/lib/libc/stdio/fgetws.c \
    455     upstream-openbsd/lib/libc/stdio/flags.c \
    456     upstream-openbsd/lib/libc/stdio/fmemopen.c \
    457     upstream-openbsd/lib/libc/stdio/fprintf.c \
    458     upstream-openbsd/lib/libc/stdio/fpurge.c \
    459     upstream-openbsd/lib/libc/stdio/fputc.c \
    460     upstream-openbsd/lib/libc/stdio/fputs.c \
    461     upstream-openbsd/lib/libc/stdio/fputwc.c \
    462     upstream-openbsd/lib/libc/stdio/fputws.c \
    463     upstream-openbsd/lib/libc/stdio/fscanf.c \
    464     upstream-openbsd/lib/libc/stdio/fvwrite.c \
    465     upstream-openbsd/lib/libc/stdio/fwalk.c \
    466     upstream-openbsd/lib/libc/stdio/fwide.c \
    467     upstream-openbsd/lib/libc/stdio/fwprintf.c \
    468     upstream-openbsd/lib/libc/stdio/fwrite.c \
    469     upstream-openbsd/lib/libc/stdio/fwscanf.c \
    470     upstream-openbsd/lib/libc/stdio/getc.c \
    471     upstream-openbsd/lib/libc/stdio/getchar.c \
    472     upstream-openbsd/lib/libc/stdio/getdelim.c \
    473     upstream-openbsd/lib/libc/stdio/getline.c \
    474     upstream-openbsd/lib/libc/stdio/gets.c \
    475     upstream-openbsd/lib/libc/stdio/getwc.c \
    476     upstream-openbsd/lib/libc/stdio/getwchar.c \
    477     upstream-openbsd/lib/libc/stdio/makebuf.c \
    478     upstream-openbsd/lib/libc/stdio/mktemp.c \
    479     upstream-openbsd/lib/libc/stdio/open_memstream.c \
    480     upstream-openbsd/lib/libc/stdio/open_wmemstream.c \
    481     upstream-openbsd/lib/libc/stdio/perror.c \
    482     upstream-openbsd/lib/libc/stdio/printf.c \
    483     upstream-openbsd/lib/libc/stdio/putc.c \
    484     upstream-openbsd/lib/libc/stdio/putchar.c \
    485     upstream-openbsd/lib/libc/stdio/puts.c \
    486     upstream-openbsd/lib/libc/stdio/putwc.c \
    487     upstream-openbsd/lib/libc/stdio/putwchar.c \
    488     upstream-openbsd/lib/libc/stdio/remove.c \
    489     upstream-openbsd/lib/libc/stdio/rewind.c \
    490     upstream-openbsd/lib/libc/stdio/rget.c \
    491     upstream-openbsd/lib/libc/stdio/scanf.c \
    492     upstream-openbsd/lib/libc/stdio/setbuf.c \
    493     upstream-openbsd/lib/libc/stdio/setbuffer.c \
    494     upstream-openbsd/lib/libc/stdio/setvbuf.c \
    495     upstream-openbsd/lib/libc/stdio/sscanf.c \
    496     upstream-openbsd/lib/libc/stdio/swprintf.c \
    497     upstream-openbsd/lib/libc/stdio/swscanf.c \
    498     upstream-openbsd/lib/libc/stdio/tempnam.c \
    499     upstream-openbsd/lib/libc/stdio/tmpnam.c \
    500     upstream-openbsd/lib/libc/stdio/ungetc.c \
    501     upstream-openbsd/lib/libc/stdio/ungetwc.c \
    502     upstream-openbsd/lib/libc/stdio/vasprintf.c \
    503     upstream-openbsd/lib/libc/stdio/vdprintf.c \
    504     upstream-openbsd/lib/libc/stdio/vfprintf.c \
    505     upstream-openbsd/lib/libc/stdio/vfscanf.c \
    506     upstream-openbsd/lib/libc/stdio/vfwprintf.c \
    507     upstream-openbsd/lib/libc/stdio/vfwscanf.c \
    508     upstream-openbsd/lib/libc/stdio/vprintf.c \
    509     upstream-openbsd/lib/libc/stdio/vscanf.c \
    510     upstream-openbsd/lib/libc/stdio/vsnprintf.c \
    511     upstream-openbsd/lib/libc/stdio/vsprintf.c \
    512     upstream-openbsd/lib/libc/stdio/vsscanf.c \
    513     upstream-openbsd/lib/libc/stdio/vswprintf.c \
    514     upstream-openbsd/lib/libc/stdio/vswscanf.c \
    515     upstream-openbsd/lib/libc/stdio/vwprintf.c \
    516     upstream-openbsd/lib/libc/stdio/vwscanf.c \
    517     upstream-openbsd/lib/libc/stdio/wbuf.c \
    518     upstream-openbsd/lib/libc/stdio/wprintf.c \
    519     upstream-openbsd/lib/libc/stdio/wscanf.c \
    520     upstream-openbsd/lib/libc/stdio/wsetup.c \
    521     upstream-openbsd/lib/libc/stdlib/abs.c \
    522     upstream-openbsd/lib/libc/stdlib/atoi.c \
    523     upstream-openbsd/lib/libc/stdlib/atol.c \
    524     upstream-openbsd/lib/libc/stdlib/atoll.c \
    525     upstream-openbsd/lib/libc/stdlib/getenv.c \
    526     upstream-openbsd/lib/libc/stdlib/insque.c \
    527     upstream-openbsd/lib/libc/stdlib/imaxabs.c \
    528     upstream-openbsd/lib/libc/stdlib/imaxdiv.c \
    529     upstream-openbsd/lib/libc/stdlib/labs.c \
    530     upstream-openbsd/lib/libc/stdlib/llabs.c \
    531     upstream-openbsd/lib/libc/stdlib/lsearch.c \
    532     upstream-openbsd/lib/libc/stdlib/reallocarray.c \
    533     upstream-openbsd/lib/libc/stdlib/remque.c \
    534     upstream-openbsd/lib/libc/stdlib/setenv.c \
    535     upstream-openbsd/lib/libc/stdlib/strtoimax.c \
    536     upstream-openbsd/lib/libc/stdlib/strtol.c \
    537     upstream-openbsd/lib/libc/stdlib/strtoll.c \
    538     upstream-openbsd/lib/libc/stdlib/strtoul.c \
    539     upstream-openbsd/lib/libc/stdlib/strtoull.c \
    540     upstream-openbsd/lib/libc/stdlib/strtoumax.c \
    541     upstream-openbsd/lib/libc/stdlib/system.c \
    542     upstream-openbsd/lib/libc/stdlib/tfind.c \
    543     upstream-openbsd/lib/libc/stdlib/tsearch.c \
    544     upstream-openbsd/lib/libc/string/strcasecmp.c \
    545     upstream-openbsd/lib/libc/string/strcspn.c \
    546     upstream-openbsd/lib/libc/string/strdup.c \
    547     upstream-openbsd/lib/libc/string/strndup.c \
    548     upstream-openbsd/lib/libc/string/strpbrk.c \
    549     upstream-openbsd/lib/libc/string/strsep.c \
    550     upstream-openbsd/lib/libc/string/strspn.c \
    551     upstream-openbsd/lib/libc/string/strstr.c \
    552     upstream-openbsd/lib/libc/string/strtok.c \
    553     upstream-openbsd/lib/libc/string/wmemcpy.c \
    554     upstream-openbsd/lib/libc/string/wcslcpy.c \
    555     upstream-openbsd/lib/libc/string/wcsstr.c \
    556     upstream-openbsd/lib/libc/string/wcswidth.c \
    557 
    558 libc_pthread_src_files := \
    559     bionic/pthread_atfork.cpp \
    560     bionic/pthread_attr.cpp \
    561     bionic/pthread_barrier.cpp \
    562     bionic/pthread_cond.cpp \
    563     bionic/pthread_create.cpp \
    564     bionic/pthread_detach.cpp \
    565     bionic/pthread_equal.cpp \
    566     bionic/pthread_exit.cpp \
    567     bionic/pthread_getcpuclockid.cpp \
    568     bionic/pthread_getschedparam.cpp \
    569     bionic/pthread_gettid_np.cpp \
    570     bionic/pthread_internal.cpp \
    571     bionic/pthread_join.cpp \
    572     bionic/pthread_key.cpp \
    573     bionic/pthread_kill.cpp \
    574     bionic/pthread_mutex.cpp \
    575     bionic/pthread_once.cpp \
    576     bionic/pthread_rwlock.cpp \
    577     bionic/pthread_self.cpp \
    578     bionic/pthread_setname_np.cpp \
    579     bionic/pthread_setschedparam.cpp \
    580     bionic/pthread_sigmask.cpp \
    581     bionic/pthread_spinlock.cpp \
    582 
    583 libc_arch_static_src_files := \
    584     bionic/dl_iterate_phdr_static.cpp \
    585 
    586 # Various kinds of cruft.
    587 # ========================================================
    588 libc_common_src_files += \
    589     bionic/ndk_cruft.cpp \
    590 
    591 libc_bionic_ndk_src_files_32 += \
    592     bionic/mmap.cpp \
    593 
    594 libc_common_src_files_32 += \
    595     bionic/legacy_32_bit_support.cpp \
    596     bionic/time64.c \
    597 
    598 libc_netbsd_src_files_32 += \
    599     upstream-netbsd/common/lib/libc/hash/sha1/sha1.c \
    600 
    601 libc_openbsd_src_files_32 += \
    602     upstream-openbsd/lib/libc/stdio/putw.c \
    603 
    604 
    605 # Define some common cflags
    606 # ========================================================
    607 libc_common_cflags := \
    608     -D_LIBC=1 \
    609     -Wall -Wextra -Wunused \
    610 
    611 use_clang := $(USE_CLANG_PLATFORM_BUILD)
    612 
    613 # Clang/llvm has incompatible long double (fp128) for x86_64.
    614 # https://llvm.org/bugs/show_bug.cgi?id=23897
    615 ifeq ($(TARGET_ARCH),x86_64)
    616   use_clang := false
    617 endif
    618 
    619 # b/25291096, Clang/llvm compiled libc.so for mips/mips64 failed to boot.
    620 ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),mips mips64))
    621   use_clang := false
    622 endif
    623 
    624 ifeq ($(use_clang),)
    625   use_clang := true
    626 endif
    627 
    628 # Try to catch typical 32-bit assumptions that break with 64-bit pointers.
    629 libc_common_cflags += \
    630     -Werror=pointer-to-int-cast \
    631     -Werror=int-to-pointer-cast \
    632     -Werror=type-limits \
    633     -Werror \
    634 
    635 ifeq ($(strip $(DEBUG_BIONIC_LIBC)),true)
    636   libc_common_cflags += -DDEBUG
    637 endif
    638 
    639 libc_malloc_src := bionic/jemalloc_wrapper.cpp
    640 libc_common_c_includes += external/jemalloc/include
    641 
    642 # Define some common conlyflags
    643 libc_common_conlyflags := \
    644     -std=gnu99
    645 
    646 # Define some common cppflags
    647 libc_common_cppflags := \
    648 
    649 # Define some common includes
    650 # ========================================================
    651 libc_common_c_includes += \
    652     $(LOCAL_PATH)/stdio   \
    653 
    654 # ========================================================
    655 # Add in the arch or 32-bit specific flags
    656 # Must be called with $(eval).
    657 # $(1): the LOCAL_ variable name
    658 # $(2): the bionic variable name to pull in
    659 define patch-up-arch-specific-flags
    660 $(1)_$(TARGET_ARCH) += $($(2)_$(TARGET_ARCH))
    661 $(1)_32 += $($(2)_32)
    662 ifdef TARGET_2ND_ARCH
    663 $(1)_$(TARGET_2ND_ARCH) += $($(2)_$(TARGET_2ND_ARCH))
    664 endif
    665 endef
    666 
    667 
    668 # ========================================================
    669 # libc_stack_protector.a - stack protector code
    670 # ========================================================
    671 #
    672 # Code that implements the stack protector (or that runs
    673 # before TLS has been set up) needs to be compiled with
    674 # -fno-stack-protector, since it accesses the stack canary
    675 # TLS slot.
    676 
    677 include $(CLEAR_VARS)
    678 
    679 LOCAL_SRC_FILES := \
    680     bionic/__libc_init_main_thread.cpp \
    681     bionic/__stack_chk_fail.cpp \
    682 
    683 LOCAL_SRC_FILES_arm64 := arch-arm64/bionic/__set_tls.c
    684 LOCAL_SRC_FILES_x86 := arch-x86/bionic/__set_tls.c
    685 LOCAL_SRC_FILES_x86_64 := arch-x86_64/bionic/__set_tls.c
    686 
    687 LOCAL_CFLAGS := $(libc_common_cflags) -fno-stack-protector
    688 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    689 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    690 LOCAL_C_INCLUDES := $(libc_common_c_includes)
    691 LOCAL_MODULE := libc_stack_protector
    692 LOCAL_CLANG := $(use_clang)
    693 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    694 LOCAL_CXX_STL := none
    695 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    696 LOCAL_SANITIZE := never
    697 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    698 
    699 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    700 include $(BUILD_STATIC_LIBRARY)
    701 
    702 
    703 # libc_init_static.cpp also needs to be built without stack protector,
    704 # because it's responsible for setting up TLS for static executables.
    705 # This isn't the case for dynamic executables because the dynamic linker
    706 # has already set up the main thread's TLS.
    707 
    708 include $(CLEAR_VARS)
    709 
    710 LOCAL_SRC_FILES := bionic/libc_init_static.cpp
    711 LOCAL_CFLAGS := $(libc_common_cflags) -fno-stack-protector
    712 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    713 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    714 LOCAL_C_INCLUDES := $(libc_common_c_includes)
    715 LOCAL_MODULE := libc_init_static
    716 LOCAL_CLANG := $(use_clang)
    717 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    718 LOCAL_CXX_STL := none
    719 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    720 LOCAL_SANITIZE := never
    721 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    722 
    723 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    724 include $(BUILD_STATIC_LIBRARY)
    725 
    726 
    727 # ========================================================
    728 # libc_tzcode.a - upstream 'tzcode' code
    729 # ========================================================
    730 
    731 include $(CLEAR_VARS)
    732 
    733 LOCAL_SRC_FILES := $(call all-c-files-under,tzcode)
    734 # tzcode doesn't include wcsftime, so we use the OpenBSD one.
    735 LOCAL_SRC_FILES += upstream-openbsd/lib/libc/time/wcsftime.c
    736 
    737 LOCAL_CFLAGS := $(libc_common_cflags) \
    738     -fvisibility=hidden \
    739     -Wno-unused-parameter \
    740 
    741 # Don't use ridiculous amounts of stack.
    742 LOCAL_CFLAGS += -DALL_STATE
    743 # Include tzsetwall, timelocal, timegm, time2posix, and posix2time.
    744 LOCAL_CFLAGS += -DSTD_INSPIRED
    745 # Obviously, we want to be thread-safe.
    746 LOCAL_CFLAGS += -DTHREAD_SAFE
    747 # The name of the tm_gmtoff field in our struct tm.
    748 LOCAL_CFLAGS += -DTM_GMTOFF=tm_gmtoff
    749 # Where we store our tzdata.
    750 LOCAL_CFLAGS += -DTZDIR=\"/system/usr/share/zoneinfo\"
    751 # Include timezone and daylight globals.
    752 LOCAL_CFLAGS += -DUSG_COMPAT=1
    753 # Use the empty string (instead of "   ") as the timezone abbreviation fallback.
    754 LOCAL_CFLAGS += -DWILDABBR=\"\"
    755 LOCAL_CFLAGS += -DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU
    756 LOCAL_CFLAGS += -Dlint
    757 
    758 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    759 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    760 LOCAL_C_INCLUDES := $(libc_common_c_includes) $(LOCAL_PATH)/tzcode/
    761 LOCAL_MODULE := libc_tzcode
    762 LOCAL_CLANG := $(use_clang)
    763 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    764 LOCAL_CXX_STL := none
    765 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    766 LOCAL_SANITIZE := never
    767 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    768 
    769 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    770 include $(BUILD_STATIC_LIBRARY)
    771 
    772 
    773 # ========================================================
    774 # libc_dns.a - modified NetBSD DNS code
    775 # ========================================================
    776 
    777 include $(CLEAR_VARS)
    778 
    779 LOCAL_SRC_FILES := \
    780     $(call all-c-files-under,dns) \
    781     upstream-netbsd/lib/libc/isc/ev_streams.c \
    782     upstream-netbsd/lib/libc/isc/ev_timers.c \
    783     upstream-netbsd/lib/libc/resolv/mtctxres.c \
    784 
    785 LOCAL_CFLAGS += \
    786     $(libc_common_cflags) \
    787     -DANDROID_CHANGES \
    788     -DINET6 \
    789     -fvisibility=hidden \
    790     -Wno-unused-parameter \
    791     -include netbsd-compat.h \
    792 
    793 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    794 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    795 LOCAL_C_INCLUDES := $(libc_common_c_includes) \
    796     $(LOCAL_PATH)/dns/include \
    797     $(LOCAL_PATH)/private \
    798     $(LOCAL_PATH)/upstream-netbsd/lib/libc/include \
    799     $(LOCAL_PATH)/upstream-netbsd/android/include \
    800 
    801 LOCAL_MODULE := libc_dns
    802 LOCAL_CLANG := $(use_clang)
    803 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    804 LOCAL_CXX_STL := none
    805 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    806 LOCAL_SANITIZE := never
    807 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    808 
    809 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    810 include $(BUILD_STATIC_LIBRARY)
    811 
    812 
    813 # ========================================================
    814 # libc_freebsd.a - upstream FreeBSD C library code
    815 # ========================================================
    816 #
    817 # These files are built with the freebsd-compat.h header file
    818 # automatically included.
    819 
    820 include $(CLEAR_VARS)
    821 
    822 LOCAL_SRC_FILES := $(libc_upstream_freebsd_src_files)
    823 LOCAL_CFLAGS := \
    824     $(libc_common_cflags) \
    825     -Wno-sign-compare -Wno-uninitialized \
    826     -include freebsd-compat.h \
    827 
    828 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    829 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    830 LOCAL_C_INCLUDES := $(libc_common_c_includes) \
    831     $(LOCAL_PATH)/upstream-freebsd/android/include \
    832     $(LOCAL_PATH)/upstream-freebsd/lib/libc/include \
    833 
    834 LOCAL_MODULE := libc_freebsd
    835 LOCAL_CLANG := $(use_clang)
    836 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    837 LOCAL_CXX_STL := none
    838 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    839 LOCAL_SANITIZE := never
    840 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    841 
    842 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    843 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES_EXCLUDE,libc_freebsd_src_files_exclude))
    844 include $(BUILD_STATIC_LIBRARY)
    845 
    846 
    847 # ========================================================
    848 # libc_netbsd.a - upstream NetBSD C library code
    849 # ========================================================
    850 #
    851 # These files are built with the netbsd-compat.h header file
    852 # automatically included.
    853 
    854 include $(CLEAR_VARS)
    855 
    856 LOCAL_SRC_FILES := $(libc_upstream_netbsd_src_files)
    857 LOCAL_CFLAGS := \
    858     $(libc_common_cflags) \
    859     -Wno-sign-compare \
    860     -Wno-uninitialized \
    861     -Wno-unused-parameter \
    862     -DPOSIX_MISTAKE \
    863     -include netbsd-compat.h \
    864 
    865 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    866 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    867 LOCAL_C_INCLUDES := $(libc_common_c_includes) \
    868     $(LOCAL_PATH)/upstream-netbsd/android/include \
    869     $(LOCAL_PATH)/upstream-netbsd/lib/libc/include \
    870 
    871 LOCAL_MODULE := libc_netbsd
    872 LOCAL_CLANG := $(use_clang)
    873 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    874 LOCAL_CXX_STL := none
    875 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    876 LOCAL_SANITIZE := never
    877 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    878 
    879 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    880 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_netbsd_src_files))
    881 include $(BUILD_STATIC_LIBRARY)
    882 
    883 
    884 # ========================================================
    885 # libc_openbsd_ndk.a - upstream OpenBSD C library code
    886 # that can be safely included in the libc_ndk.a (doesn't
    887 # contain any troublesome global data or constructors).
    888 # ========================================================
    889 #
    890 # These files are built with the openbsd-compat.h header file
    891 # automatically included.
    892 
    893 include $(CLEAR_VARS)
    894 
    895 LOCAL_SRC_FILES := $(libc_upstream_openbsd_ndk_src_files)
    896 LOCAL_CLANG := $(use_clang)
    897 
    898 LOCAL_CFLAGS := \
    899     $(libc_common_cflags) \
    900     -Wno-sign-compare \
    901     -Wno-uninitialized \
    902     -Wno-unused-parameter \
    903     -include openbsd-compat.h \
    904 
    905 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    906 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    907 LOCAL_C_INCLUDES := $(libc_common_c_includes) \
    908     $(LOCAL_PATH)/private \
    909     $(LOCAL_PATH)/upstream-openbsd/android/include \
    910     $(LOCAL_PATH)/upstream-openbsd/lib/libc/include \
    911     $(LOCAL_PATH)/upstream-openbsd/lib/libc/gdtoa/ \
    912 
    913 LOCAL_MODULE := libc_openbsd_ndk
    914 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    915 LOCAL_CXX_STL := none
    916 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    917 LOCAL_SANITIZE := never
    918 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    919 
    920 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    921 include $(BUILD_STATIC_LIBRARY)
    922 
    923 
    924 # ========================================================
    925 # libc_openbsd.a - upstream OpenBSD C library code
    926 # ========================================================
    927 #
    928 # These files are built with the openbsd-compat.h header file
    929 # automatically included.
    930 
    931 include $(CLEAR_VARS)
    932 
    933 LOCAL_SRC_FILES := $(libc_upstream_openbsd_src_files)
    934 LOCAL_CLANG := $(use_clang)
    935 
    936 LOCAL_CFLAGS := \
    937     $(libc_common_cflags) \
    938     -Wno-sign-compare \
    939     -Wno-uninitialized \
    940     -Wno-unused-parameter \
    941     -include openbsd-compat.h \
    942 
    943 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    944 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    945 LOCAL_C_INCLUDES := $(libc_common_c_includes) \
    946     $(LOCAL_PATH)/private \
    947     $(LOCAL_PATH)/upstream-openbsd/android/include \
    948     $(LOCAL_PATH)/upstream-openbsd/lib/libc/include \
    949     $(LOCAL_PATH)/upstream-openbsd/lib/libc/gdtoa/ \
    950 
    951 LOCAL_MODULE := libc_openbsd
    952 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    953 LOCAL_CXX_STL := none
    954 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    955 LOCAL_SANITIZE := never
    956 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    957 
    958 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    959 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_openbsd_src_files))
    960 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES_EXCLUDE,libc_openbsd_src_files_exclude))
    961 include $(BUILD_STATIC_LIBRARY)
    962 
    963 
    964 # ========================================================
    965 # libc_gdtoa.a - upstream OpenBSD C library gdtoa code
    966 # ========================================================
    967 #
    968 # These files are built with the openbsd-compat.h header file
    969 # automatically included.
    970 
    971 include $(CLEAR_VARS)
    972 
    973 LOCAL_SRC_FILES_32 := $(libc_upstream_openbsd_gdtoa_src_files_32)
    974 LOCAL_SRC_FILES_64 := $(libc_upstream_openbsd_gdtoa_src_files_64)
    975 LOCAL_CLANG := $(use_clang)
    976 
    977 LOCAL_CFLAGS := \
    978     $(libc_common_cflags) \
    979     -Wno-sign-compare -Wno-uninitialized \
    980     -fvisibility=hidden \
    981     -include openbsd-compat.h \
    982 
    983 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
    984 LOCAL_CPPFLAGS := $(libc_common_cppflags)
    985 LOCAL_C_INCLUDES := $(libc_common_c_includes) \
    986     $(LOCAL_PATH)/private \
    987     $(LOCAL_PATH)/upstream-openbsd/android/include \
    988     $(LOCAL_PATH)/upstream-openbsd/lib/libc/include \
    989 
    990 LOCAL_MODULE := libc_gdtoa
    991 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
    992 LOCAL_CXX_STL := none
    993 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    994 LOCAL_SANITIZE := never
    995 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
    996 
    997 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
    998 include $(BUILD_STATIC_LIBRARY)
    999 
   1000 
   1001 # ========================================================
   1002 # libc_bionic.a - home-grown C library code
   1003 # ========================================================
   1004 
   1005 include $(CLEAR_VARS)
   1006 
   1007 LOCAL_SRC_FILES := $(libc_bionic_src_files)
   1008 LOCAL_CFLAGS := $(libc_common_cflags) \
   1009     -Wframe-larger-than=2048 \
   1010 
   1011 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1012 LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
   1013 LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
   1014 LOCAL_MODULE := libc_bionic
   1015 LOCAL_CLANG := $(use_clang)
   1016 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1017 LOCAL_CXX_STL := none
   1018 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1019 LOCAL_SANITIZE := never
   1020 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1021 
   1022 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
   1023 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_bionic_src_files))
   1024 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES_EXCLUDE,libc_bionic_src_files_exclude))
   1025 include $(BUILD_STATIC_LIBRARY)
   1026 
   1027 
   1028 # ========================================================
   1029 # libc_bionic_ndk.a - The portions of libc_bionic that can
   1030 # be safely used in libc_ndk.a (no troublesome global data
   1031 # or constructors).
   1032 # ========================================================
   1033 
   1034 include $(CLEAR_VARS)
   1035 
   1036 LOCAL_SRC_FILES := $(libc_bionic_ndk_src_files)
   1037 LOCAL_CFLAGS := $(libc_common_cflags) \
   1038     -Wframe-larger-than=2048 \
   1039 
   1040 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1041 LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
   1042 LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
   1043 LOCAL_MODULE := libc_bionic_ndk
   1044 LOCAL_CLANG := $(use_clang)
   1045 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1046 LOCAL_CXX_STL := none
   1047 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1048 LOCAL_SANITIZE := never
   1049 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1050 
   1051 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
   1052 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_bionic_ndk_src_files))
   1053 include $(BUILD_STATIC_LIBRARY)
   1054 
   1055 
   1056 # ========================================================
   1057 # libc_pthread.a - pthreads parts that previously lived in
   1058 # libc_bionic.a. Relocated to their own library because
   1059 # they can't be included in libc_ndk.a (as they layout of
   1060 # pthread_t has changed over the years and has ABI
   1061 # compatibility issues).
   1062 # ========================================================
   1063 
   1064 include $(CLEAR_VARS)
   1065 
   1066 LOCAL_SRC_FILES := $(libc_pthread_src_files)
   1067 LOCAL_CFLAGS := $(libc_common_cflags) \
   1068     -Wframe-larger-than=2048 \
   1069 
   1070 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1071 LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
   1072 LOCAL_C_INCLUDES := $(libc_common_c_includes)
   1073 LOCAL_MODULE := libc_pthread
   1074 LOCAL_CLANG := $(use_clang)
   1075 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1076 LOCAL_CXX_STL := none
   1077 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1078 LOCAL_SANITIZE := never
   1079 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1080 
   1081 include $(BUILD_STATIC_LIBRARY)
   1082 
   1083 
   1084 # ========================================================
   1085 # libc_cxa.a - Things traditionally in libstdc++
   1086 # ========================================================
   1087 
   1088 include $(CLEAR_VARS)
   1089 
   1090 LOCAL_SRC_FILES := $(libc_cxa_src_files)
   1091 LOCAL_CFLAGS := $(libc_common_cflags) \
   1092     -fvisibility=hidden \
   1093 
   1094 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1095 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1096 LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
   1097 LOCAL_MODULE := libc_cxa
   1098 LOCAL_CLANG := true # GCC refuses to hide new/delete
   1099 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1100 LOCAL_CXX_STL := none
   1101 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1102 LOCAL_SANITIZE := never
   1103 # b/17574078: Need to disable coverage until we have a prebuilt libprofile_rt.
   1104 # Since this is a static library built with clang, it needs to link
   1105 # libprofile_rt when it is linked into the final binary. Since the final binary
   1106 # is built with GCC, it won't link libprofile_rt. We can't very easily just add
   1107 # libprofile_rt to all link lines the way we've done for libgcov because
   1108 # libprofile_rt isn't prebuilt, and it would be tricky to write a rule that
   1109 # would make sure libprofile_rt is built.
   1110 LOCAL_NATIVE_COVERAGE := false
   1111 
   1112 include $(BUILD_STATIC_LIBRARY)
   1113 
   1114 
   1115 # ========================================================
   1116 # libc_syscalls.a
   1117 # ========================================================
   1118 
   1119 include $(CLEAR_VARS)
   1120 
   1121 LOCAL_SRC_FILES_$(TARGET_ARCH) := $(call all-S-files-under,arch-$(TARGET_ARCH)/syscalls)
   1122 ifdef TARGET_2ND_ARCH
   1123 LOCAL_SRC_FILES_$(TARGET_2ND_ARCH) := $(call all-S-files-under,arch-$(TARGET_2ND_ARCH)/syscalls)
   1124 endif
   1125 LOCAL_MODULE := libc_syscalls
   1126 LOCAL_CLANG := $(use_clang)
   1127 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1128 LOCAL_CXX_STL := none
   1129 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1130 LOCAL_SANITIZE := never
   1131 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1132 
   1133 include $(BUILD_STATIC_LIBRARY)
   1134 
   1135 
   1136 # ========================================================
   1137 # libc_aeabi.a
   1138 # This is an LP32 ARM-only library that needs to be built with -fno-builtin
   1139 # to avoid infinite recursion. For the other architectures we just build an
   1140 # empty library to keep this makefile simple.
   1141 # ========================================================
   1142 
   1143 include $(CLEAR_VARS)
   1144 
   1145 LOCAL_SRC_FILES_arm := arch-arm/bionic/__aeabi.c
   1146 LOCAL_MODULE := libc_aeabi
   1147 LOCAL_CLANG := $(use_clang)
   1148 LOCAL_CFLAGS := $(libc_common_cflags) -fno-builtin
   1149 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1150 LOCAL_CXX_STL := none
   1151 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1152 LOCAL_SANITIZE := never
   1153 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1154 
   1155 include $(BUILD_STATIC_LIBRARY)
   1156 
   1157 # ========================================================
   1158 # libc_ndk.a
   1159 # Compatibility library for the NDK. This library contains
   1160 # all the parts of libc that are safe to statically link.
   1161 # We can't safely statically link things that can only run
   1162 # on a certain version of the OS. Examples include
   1163 # anything that talks to netd (a large portion of the DNS
   1164 # code) and anything that is dependent on the layout of a
   1165 # data structure that has changed across releases (such as
   1166 # pthread_t).
   1167 # ========================================================
   1168 
   1169 include $(CLEAR_VARS)
   1170 
   1171 LOCAL_MODULE := libc_ndk
   1172 LOCAL_CLANG := $(use_clang)
   1173 LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
   1174 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1175 LOCAL_CFLAGS := $(libc_common_cflags) -fvisibility=hidden -O0
   1176 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1177 LOCAL_C_INCLUDES := $(libc_common_c_includes)
   1178 LOCAL_SANITIZE := never
   1179 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1180 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1181 
   1182 LOCAL_SRC_FILES := \
   1183     $(libc_common_src_files) \
   1184     $(libc_arch_dynamic_src_files) \
   1185     $(libc_ndk_stub_src_files) \
   1186     bionic/malloc_common.cpp \
   1187 
   1188 LOCAL_SRC_FILES_arm += \
   1189     arch-common/bionic/crtbegin_so.c \
   1190     arch-arm/bionic/atexit_legacy.c \
   1191     arch-common/bionic/crtend_so.S \
   1192 
   1193 LOCAL_CFLAGS := $(libc_common_cflags) \
   1194     -DLIBC_STATIC \
   1195 
   1196 LOCAL_WHOLE_STATIC_LIBRARIES := \
   1197     libc_bionic_ndk \
   1198     libc_cxa \
   1199     libc_freebsd \
   1200     libc_gdtoa \
   1201     libc_malloc \
   1202     libc_netbsd \
   1203     libc_openbsd_ndk \
   1204     libc_stack_protector \
   1205     libc_syscalls \
   1206     libc_tzcode \
   1207     libm \
   1208     libjemalloc \
   1209 
   1210 LOCAL_WHOLE_STATIC_LIBRARIES_arm := libc_aeabi
   1211 LOCAL_CXX_STL := none
   1212 
   1213 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
   1214 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_common_src_files))
   1215 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_arch_dynamic_src_files))
   1216 $(eval $(call patch-up-arch-specific-flags,LOCAL_ASFLAGS,LOCAL_CFLAGS))
   1217 
   1218 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1219 include $(BUILD_STATIC_LIBRARY)
   1220 
   1221 # ========================================================
   1222 # libc_common.a
   1223 # ========================================================
   1224 
   1225 include $(CLEAR_VARS)
   1226 
   1227 LOCAL_SRC_FILES := $(libc_common_src_files)
   1228 LOCAL_CFLAGS := $(libc_common_cflags)
   1229 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1230 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1231 LOCAL_C_INCLUDES := $(libc_common_c_includes)
   1232 LOCAL_MODULE := libc_common
   1233 LOCAL_CLANG := $(use_clang)
   1234 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1235 LOCAL_WHOLE_STATIC_LIBRARIES := \
   1236     libc_bionic \
   1237     libc_bionic_ndk \
   1238     libc_cxa \
   1239     libc_dns \
   1240     libc_freebsd \
   1241     libc_gdtoa \
   1242     libc_malloc \
   1243     libc_netbsd \
   1244     libc_openbsd \
   1245     libc_openbsd_ndk \
   1246     libc_pthread \
   1247     libc_stack_protector \
   1248     libc_syscalls \
   1249     libc_tzcode \
   1250 
   1251 LOCAL_WHOLE_STATIC_LIBRARIES_arm := libc_aeabi
   1252 
   1253 LOCAL_CXX_STL := none
   1254 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1255 
   1256 # TODO: split out the asflags.
   1257 LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
   1258 LOCAL_SANITIZE := never
   1259 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1260 
   1261 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
   1262 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_common_src_files))
   1263 $(eval $(call patch-up-arch-specific-flags,LOCAL_ASFLAGS,LOCAL_CFLAGS))
   1264 include $(BUILD_STATIC_LIBRARY)
   1265 
   1266 
   1267 # ========================================================
   1268 # libc_nomalloc.a
   1269 # ========================================================
   1270 #
   1271 # This is a version of the static C library that does not
   1272 # include malloc. It's useful in situations when the user wants
   1273 # to provide their own malloc implementation, or wants to
   1274 # explicitly disallow the use of malloc, such as in the
   1275 # dynamic linker.
   1276 
   1277 include $(CLEAR_VARS)
   1278 
   1279 LOCAL_SRC_FILES := \
   1280     $(libc_arch_static_src_files) \
   1281 
   1282 LOCAL_C_INCLUDES := $(libc_common_c_includes)
   1283 LOCAL_CFLAGS := $(libc_common_cflags) \
   1284     -DLIBC_STATIC \
   1285 
   1286 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1287 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1288 
   1289 LOCAL_MODULE := libc_nomalloc
   1290 LOCAL_CLANG := $(use_clang)
   1291 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1292 LOCAL_WHOLE_STATIC_LIBRARIES := libc_common libc_init_static
   1293 LOCAL_CXX_STL := none
   1294 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1295 LOCAL_SANITIZE := never
   1296 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1297 
   1298 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
   1299 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_arch_static_src_files))
   1300 include $(BUILD_STATIC_LIBRARY)
   1301 
   1302 
   1303 # ========================================================
   1304 # libc_malloc.a: the _prefixed_ malloc functions (like dlcalloc).
   1305 # ========================================================
   1306 
   1307 include $(CLEAR_VARS)
   1308 LOCAL_SRC_FILES := $(libc_malloc_src)
   1309 LOCAL_CFLAGS := $(libc_common_cflags) \
   1310     -fvisibility=hidden \
   1311 
   1312 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1313 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1314 LOCAL_C_INCLUDES := $(libc_common_c_includes)
   1315 LOCAL_MODULE := libc_malloc
   1316 LOCAL_CLANG := $(use_clang)
   1317 LOCAL_CXX_STL := none
   1318 LOCAL_SANITIZE := never
   1319 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1320 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1321 include $(BUILD_STATIC_LIBRARY)
   1322 
   1323 
   1324 # ========================================================
   1325 # libc.a
   1326 # ========================================================
   1327 include $(CLEAR_VARS)
   1328 
   1329 LOCAL_SRC_FILES := \
   1330     $(libc_arch_static_src_files) \
   1331     bionic/malloc_common.cpp \
   1332     bionic/libc_init_static.cpp \
   1333 
   1334 LOCAL_CFLAGS := $(libc_common_cflags) \
   1335     -DLIBC_STATIC \
   1336 
   1337 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1338 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1339 LOCAL_C_INCLUDES := $(libc_common_c_includes)
   1340 LOCAL_MODULE := libc
   1341 LOCAL_CLANG := $(use_clang)
   1342 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1343 LOCAL_WHOLE_STATIC_LIBRARIES := libc_common libc_init_static libjemalloc
   1344 
   1345 LOCAL_CXX_STL := none
   1346 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1347 LOCAL_SANITIZE := never
   1348 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1349 
   1350 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
   1351 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_arch_static_src_files))
   1352 include $(BUILD_STATIC_LIBRARY)
   1353 
   1354 
   1355 # ========================================================
   1356 # libc.so
   1357 # ========================================================
   1358 include $(CLEAR_VARS)
   1359 
   1360 LOCAL_CFLAGS := $(libc_common_cflags)
   1361 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1362 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1363 
   1364 LOCAL_C_INCLUDES := $(libc_common_c_includes)
   1365 LOCAL_SRC_FILES := \
   1366     arch-common/bionic/crtbegin_so.c \
   1367     arch-common/bionic/crtbrand.S \
   1368     $(libc_arch_dynamic_src_files) \
   1369     bionic/malloc_common.cpp \
   1370     bionic/libc_init_dynamic.cpp \
   1371     bionic/NetdClient.cpp \
   1372     arch-common/bionic/crtend_so.S \
   1373 
   1374 LOCAL_MODULE := libc
   1375 LOCAL_CLANG := $(use_clang)
   1376 LOCAL_REQUIRED_MODULES := tzdata
   1377 LOCAL_ADDITIONAL_DEPENDENCIES := \
   1378     $(libc_common_additional_dependencies) \
   1379     $(LOCAL_PATH)/libc.arm.map \
   1380     $(LOCAL_PATH)/libc.arm64.map \
   1381     $(LOCAL_PATH)/libc.mips.map \
   1382     $(LOCAL_PATH)/libc.mips64.map \
   1383     $(LOCAL_PATH)/libc.x86.map \
   1384     $(LOCAL_PATH)/libc.x86_64.map \
   1385     $(LOCAL_PATH)/libc.arm.brillo.map \
   1386     $(LOCAL_PATH)/libc.mips.brillo.map \
   1387     $(LOCAL_PATH)/libc.x86.brillo.map \
   1388 
   1389 # Leave the symbols in the shared library so that stack unwinders can produce
   1390 # meaningful name resolution.
   1391 LOCAL_STRIP_MODULE := keep_symbols
   1392 
   1393 # Do not pack libc.so relocations; see http://b/20645321 for details.
   1394 LOCAL_PACK_MODULE_RELOCATIONS := false
   1395 
   1396 # WARNING: The only library libc.so should depend on is libdl.so!  If you add other libraries,
   1397 # make sure to add -Wl,--exclude-libs=libgcc.a to the LOCAL_LDFLAGS for those libraries.  This
   1398 # ensures that symbols that are pulled into those new libraries from libgcc.a are not declared
   1399 # external; if that were the case, then libc would not pull those symbols from libgcc.a as it
   1400 # should, instead relying on the external symbols from the dependent libraries.  That would
   1401 # create a "cloaked" dependency on libgcc.a in libc though the libraries, which is not what
   1402 # you wanted!
   1403 
   1404 LOCAL_SHARED_LIBRARIES := libdl
   1405 LOCAL_WHOLE_STATIC_LIBRARIES := libc_common libjemalloc
   1406 
   1407 LOCAL_CXX_STL := none
   1408 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1409 
   1410 # TODO: This is to work around b/24465209. Remove after root cause is fixed
   1411 LOCAL_LDFLAGS_arm := -Wl,--hash-style=both
   1412 LOCAL_LDFLAGS_x86 := -Wl,--hash-style=both
   1413 
   1414 # Don't re-export new/delete and friends, even if the compiler really wants to.
   1415 ifdef BRILLO
   1416 LOCAL_LDFLAGS_arm    += -Wl,--version-script,$(LOCAL_PATH)/libc.arm.brillo.map
   1417 LOCAL_LDFLAGS_mips   += -Wl,--version-script,$(LOCAL_PATH)/libc.mips.brillo.map
   1418 LOCAL_LDFLAGS_x86    += -Wl,--version-script,$(LOCAL_PATH)/libc.x86.brillo.map
   1419 else
   1420 LOCAL_LDFLAGS_arm    += -Wl,--version-script,$(LOCAL_PATH)/libc.arm.map
   1421 LOCAL_LDFLAGS_mips   += -Wl,--version-script,$(LOCAL_PATH)/libc.mips.map
   1422 LOCAL_LDFLAGS_x86    += -Wl,--version-script,$(LOCAL_PATH)/libc.x86.map
   1423 endif
   1424 
   1425 LOCAL_LDFLAGS_arm64  += -Wl,--version-script,$(LOCAL_PATH)/libc.arm64.map
   1426 LOCAL_LDFLAGS_mips64 += -Wl,--version-script,$(LOCAL_PATH)/libc.mips64.map
   1427 LOCAL_LDFLAGS_x86_64 += -Wl,--version-script,$(LOCAL_PATH)/libc.x86_64.map
   1428 
   1429 # We'd really like to do this for all architectures, but since this wasn't done
   1430 # before, these symbols must continue to be exported on LP32 for binary
   1431 # compatibility.
   1432 LOCAL_LDFLAGS_64 := -Wl,--exclude-libs,libgcc.a
   1433 
   1434 # Unfortunately --exclude-libs clobbers our version script, so we have to
   1435 # prevent the build system from using this flag.
   1436 LOCAL_NO_EXCLUDE_LIBS := true
   1437 
   1438 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
   1439 $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_arch_dynamic_src_files))
   1440 
   1441 LOCAL_NO_CRT := true
   1442 LOCAL_ASFLAGS += $(libc_crt_target_cflags)
   1443 
   1444 # special for arm
   1445 LOCAL_CFLAGS_arm += -DCRT_LEGACY_WORKAROUND
   1446 LOCAL_SRC_FILES_arm += \
   1447     arch-arm/bionic/atexit_legacy.c
   1448 
   1449 LOCAL_SANITIZE := never
   1450 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1451 
   1452 include $(BUILD_SHARED_LIBRARY)
   1453 
   1454 # ========================================================
   1455 # libc_logging.a
   1456 # ========================================================
   1457 include $(CLEAR_VARS)
   1458 
   1459 LOCAL_CFLAGS := $(libc_common_cflags)
   1460 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
   1461 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1462 LOCAL_C_INCLUDES := $(libc_common_c_includes)
   1463 
   1464 LOCAL_SRC_FILES := \
   1465     bionic/libc_logging.cpp \
   1466 
   1467 LOCAL_MODULE := libc_logging
   1468 
   1469 LOCAL_CLANG := $(use_clang)
   1470 LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
   1471 LOCAL_SYSTEM_SHARED_LIBRARIES :=
   1472 
   1473 LOCAL_SANITIZE := never
   1474 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1475 
   1476 $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
   1477 include $(BUILD_STATIC_LIBRARY)
   1478 
   1479 # ========================================================
   1480 # libstdc++.so
   1481 # ========================================================
   1482 libstdcxx_common_src_files := \
   1483     bionic/__cxa_guard.cpp \
   1484     bionic/__cxa_pure_virtual.cpp \
   1485     bionic/new.cpp \
   1486 
   1487 include $(CLEAR_VARS)
   1488 LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
   1489 LOCAL_CFLAGS := $(libc_common_cflags)
   1490 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1491 
   1492 # TODO: This is to work around b/24465209. Remove after root cause is fixed
   1493 LOCAL_LDFLAGS_arm := -Wl,--hash-style=both
   1494 LOCAL_LDFLAGS_x86 := -Wl,--hash-style=both
   1495 
   1496 LOCAL_SRC_FILES := $(libstdcxx_common_src_files)
   1497 LOCAL_MODULE:= libstdc++
   1498 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
   1499 LOCAL_CXX_STL := none
   1500 LOCAL_SYSTEM_SHARED_LIBRARIES := libc
   1501 LOCAL_STATIC_LIBRARIES := libc_logging
   1502 LOCAL_SANITIZE := never
   1503 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1504 include $(BUILD_SHARED_LIBRARY)
   1505 
   1506 # ========================================================
   1507 # libstdc++.a
   1508 # ========================================================
   1509 include $(CLEAR_VARS)
   1510 LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
   1511 LOCAL_CFLAGS := $(libc_common_cflags)
   1512 LOCAL_CPPFLAGS := $(libc_common_cppflags)
   1513 LOCAL_SRC_FILES := $(libstdcxx_common_src_files)
   1514 LOCAL_MODULE:= libstdc++
   1515 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
   1516 LOCAL_CXX_STL := none
   1517 LOCAL_SYSTEM_SHARED_LIBRARIES := libc
   1518 LOCAL_SANITIZE := never
   1519 LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
   1520 include $(BUILD_STATIC_LIBRARY)
   1521