Home | History | Annotate | Download | only in libc
      1 LOCAL_PATH:= $(call my-dir)
      2 
      3 include $(LOCAL_PATH)/arch-$(TARGET_ARCH)/syscalls.mk
      4 
      5 # Define the common source files for all the libc instances
      6 # =========================================================
      7 libc_common_src_files := \
      8 	$(syscall_src) \
      9 	unistd/abort.c \
     10 	unistd/alarm.c \
     11 	unistd/brk.c \
     12 	unistd/creat.c \
     13 	unistd/daemon.c \
     14 	unistd/eventfd.c \
     15 	unistd/exec.c \
     16 	unistd/fcntl.c \
     17 	unistd/fnmatch.c \
     18 	unistd/fstatfs.c \
     19 	unistd/ftime.c \
     20 	unistd/ftok.c \
     21 	unistd/getcwd.c \
     22 	unistd/getdtablesize.c \
     23 	unistd/gethostname.c \
     24 	unistd/getopt_long.c \
     25 	unistd/getpgrp.c \
     26 	unistd/getpriority.c \
     27 	unistd/getpt.c \
     28 	unistd/initgroups.c \
     29 	unistd/isatty.c \
     30 	unistd/issetugid.c \
     31 	unistd/killpg.c \
     32 	unistd/lseek64.c \
     33 	unistd/mmap.c \
     34 	unistd/nice.c \
     35 	unistd/open.c \
     36 	unistd/openat.c \
     37 	unistd/opendir.c \
     38 	unistd/pathconf.c \
     39 	unistd/perror.c \
     40 	unistd/popen.c \
     41 	unistd/pread.c \
     42 	unistd/pselect.c \
     43 	unistd/ptsname.c \
     44 	unistd/ptsname_r.c \
     45 	unistd/pwrite.c \
     46 	unistd/raise.c \
     47 	unistd/reboot.c \
     48 	unistd/recv.c \
     49 	unistd/sbrk.c \
     50 	unistd/send.c \
     51 	unistd/setegid.c \
     52 	unistd/setuid.c \
     53 	unistd/seteuid.c \
     54 	unistd/setreuid.c \
     55 	unistd/setresuid.c \
     56 	unistd/setpgrp.c \
     57 	unistd/sigblock.c \
     58 	unistd/siginterrupt.c \
     59 	unistd/siglist.c \
     60 	unistd/signal.c \
     61 	unistd/signame.c \
     62 	unistd/sigsetmask.c \
     63 	unistd/sigsuspend.c \
     64 	unistd/sigwait.c \
     65 	unistd/sleep.c \
     66 	unistd/statfs.c \
     67 	unistd/strsignal.c \
     68 	unistd/syslog.c \
     69 	unistd/system.c \
     70 	unistd/tcgetpgrp.c \
     71 	unistd/tcsetpgrp.c \
     72 	unistd/time.c \
     73 	unistd/umount.c \
     74 	unistd/unlockpt.c \
     75 	unistd/usleep.c \
     76 	unistd/wait.c \
     77 	stdio/asprintf.c \
     78 	stdio/clrerr.c \
     79 	stdio/fclose.c \
     80 	stdio/fdopen.c \
     81 	stdio/feof.c \
     82 	stdio/ferror.c \
     83 	stdio/fflush.c \
     84 	stdio/fgetc.c \
     85 	stdio/fgetln.c \
     86 	stdio/fgetpos.c \
     87 	stdio/fgets.c \
     88 	stdio/fileno.c \
     89 	stdio/findfp.c \
     90 	stdio/flags.c \
     91 	stdio/flockfile.c \
     92 	stdio/fopen.c \
     93 	stdio/fprintf.c \
     94 	stdio/fpurge.c \
     95 	stdio/fputc.c \
     96 	stdio/fputs.c \
     97 	stdio/fread.c \
     98 	stdio/freopen.c \
     99 	stdio/fscanf.c \
    100 	stdio/fseek.c \
    101 	stdio/fsetpos.c \
    102 	stdio/ftell.c \
    103 	stdio/funopen.c \
    104 	stdio/fvwrite.c \
    105 	stdio/fwalk.c \
    106 	stdio/fwrite.c \
    107 	stdio/getc.c \
    108 	stdio/getchar.c \
    109 	stdio/gets.c \
    110 	stdio/makebuf.c \
    111 	stdio/mktemp.c \
    112 	stdio/printf.c \
    113 	stdio/putc.c \
    114 	stdio/putchar.c \
    115 	stdio/puts.c \
    116 	stdio/putw.c \
    117 	stdio/refill.c \
    118 	stdio/remove.c \
    119 	stdio/rewind.c \
    120 	stdio/rget.c \
    121 	stdio/scanf.c \
    122 	stdio/setbuf.c \
    123 	stdio/setbuffer.c \
    124 	stdio/setvbuf.c \
    125 	stdio/snprintf.c\
    126 	stdio/sprintf.c \
    127 	stdio/sscanf.c \
    128 	stdio/stdio.c \
    129 	stdio/tempnam.c \
    130 	stdio/tmpfile.c \
    131 	stdio/tmpnam.c \
    132 	stdio/ungetc.c \
    133 	stdio/vasprintf.c \
    134 	stdio/vfprintf.c \
    135 	stdio/vfscanf.c \
    136 	stdio/vprintf.c \
    137 	stdio/vsnprintf.c \
    138 	stdio/vsprintf.c \
    139 	stdio/vscanf.c \
    140 	stdio/vsscanf.c \
    141 	stdio/wbuf.c \
    142 	stdio/wsetup.c \
    143 	stdlib/_rand48.c \
    144 	stdlib/assert.c \
    145 	stdlib/atexit.c \
    146 	stdlib/atoi.c \
    147 	stdlib/atol.c \
    148 	stdlib/atoll.c \
    149 	stdlib/bsearch.c \
    150 	stdlib/ctype_.c \
    151 	stdlib/div.c \
    152 	stdlib/exit.c \
    153 	stdlib/getenv.c \
    154 	stdlib/jrand48.c \
    155 	stdlib/ldiv.c \
    156 	stdlib/lldiv.c \
    157 	stdlib/locale.c \
    158 	stdlib/lrand48.c \
    159 	stdlib/mrand48.c \
    160 	stdlib/nrand48.c \
    161 	stdlib/putenv.c \
    162 	stdlib/qsort.c \
    163 	stdlib/seed48.c \
    164 	stdlib/setenv.c \
    165 	stdlib/setjmperr.c \
    166 	stdlib/srand48.c \
    167 	stdlib/strntoimax.c \
    168 	stdlib/strntoumax.c \
    169 	stdlib/strtod.c \
    170 	stdlib/strtoimax.c \
    171 	stdlib/strtol.c \
    172 	stdlib/strtoll.c \
    173 	stdlib/strtoul.c \
    174 	stdlib/strtoull.c \
    175 	stdlib/strtoumax.c \
    176 	stdlib/tolower_.c \
    177 	stdlib/toupper_.c \
    178 	stdlib/wchar.c \
    179 	string/index.c \
    180 	string/memccpy.c \
    181 	string/memchr.c \
    182 	string/memmem.c \
    183 	string/memrchr.c \
    184 	string/memswap.c \
    185 	string/strcasecmp.c \
    186 	string/strcasestr.c \
    187 	string/strcat.c \
    188 	string/strchr.c \
    189 	string/strcoll.c \
    190 	string/strcspn.c \
    191 	string/strdup.c \
    192 	string/strerror.c \
    193 	string/strerror_r.c \
    194 	string/strlcat.c \
    195 	string/strlcpy.c \
    196 	string/strncat.c \
    197 	string/strncpy.c \
    198 	string/strndup.c \
    199 	string/strnlen.c \
    200 	string/strpbrk.c \
    201 	string/strrchr.c \
    202 	string/strsep.c \
    203 	string/strspn.c \
    204 	string/strstr.c \
    205 	string/strtok.c \
    206 	string/strtotimeval.c \
    207 	string/strxfrm.c \
    208 	wchar/wcpcpy.c \
    209 	wchar/wcpncpy.c \
    210 	wchar/wcscasecmp.c \
    211 	wchar/wcscat.c \
    212 	wchar/wcschr.c \
    213 	wchar/wcscmp.c \
    214 	wchar/wcscoll.c \
    215 	wchar/wcscpy.c \
    216 	wchar/wcscspn.c \
    217 	wchar/wcsdup.c \
    218 	wchar/wcslcat.c \
    219 	wchar/wcslcpy.c \
    220 	wchar/wcslen.c \
    221 	wchar/wcsncasecmp.c \
    222 	wchar/wcsncat.c \
    223 	wchar/wcsncmp.c \
    224 	wchar/wcsncpy.c \
    225 	wchar/wcsnlen.c \
    226 	wchar/wcspbrk.c \
    227 	wchar/wcsrchr.c \
    228 	wchar/wcsspn.c \
    229 	wchar/wcsstr.c \
    230 	wchar/wcstok.c \
    231 	wchar/wcswidth.c \
    232 	wchar/wcsxfrm.c \
    233 	wchar/wmemchr.c \
    234 	wchar/wmemcmp.c \
    235 	wchar/wmemcpy.c \
    236 	wchar/wmemmove.c \
    237 	wchar/wmemset.c \
    238 	inet/bindresvport.c \
    239 	inet/inet_addr.c \
    240 	inet/inet_aton.c \
    241 	inet/inet_ntoa.c \
    242 	inet/inet_ntop.c \
    243 	inet/inet_pton.c \
    244 	inet/ether_aton.c \
    245 	inet/ether_ntoa.c \
    246 	tzcode/asctime.c \
    247 	tzcode/difftime.c \
    248 	tzcode/localtime.c \
    249 	tzcode/strftime.c \
    250 	tzcode/strptime.c \
    251 	bionic/__set_errno.c \
    252 	bionic/cpuacct.c \
    253 	bionic/arc4random.c \
    254 	bionic/basename.c \
    255 	bionic/basename_r.c \
    256 	bionic/clearenv.c \
    257 	bionic/dirname.c \
    258 	bionic/dirname_r.c \
    259 	bionic/drand48.c \
    260 	bionic/erand48.c \
    261 	bionic/err.c \
    262 	bionic/fdprintf.c \
    263 	bionic/fork.c \
    264 	bionic/fts.c \
    265 	bionic/if_nametoindex.c \
    266 	bionic/if_indextoname.c \
    267 	bionic/ioctl.c \
    268 	bionic/ldexp.c \
    269 	bionic/libc_init_common.c \
    270 	bionic/logd_write.c \
    271 	bionic/md5.c \
    272 	bionic/memmove_words.c \
    273 	bionic/pututline.c \
    274 	bionic/realpath.c \
    275 	bionic/sched_getaffinity.c \
    276 	bionic/sched_getcpu.c \
    277 	bionic/sched_cpualloc.c \
    278 	bionic/sched_cpucount.c \
    279 	bionic/semaphore.c \
    280 	bionic/sha1.c \
    281 	bionic/ssp.c \
    282 	bionic/stubs.c \
    283 	bionic/system_properties.c \
    284 	bionic/time64.c \
    285 	bionic/thread_atexit.c \
    286 	bionic/utime.c \
    287 	bionic/utmp.c \
    288 	netbsd/gethnamaddr.c \
    289 	netbsd/isc/ev_timers.c \
    290 	netbsd/isc/ev_streams.c \
    291 	netbsd/inet/nsap_addr.c \
    292 	netbsd/resolv/__dn_comp.c \
    293 	netbsd/resolv/__res_close.c \
    294 	netbsd/resolv/__res_send.c \
    295 	netbsd/resolv/herror.c \
    296 	netbsd/resolv/res_comp.c \
    297 	netbsd/resolv/res_data.c \
    298 	netbsd/resolv/res_debug.c \
    299 	netbsd/resolv/res_init.c \
    300 	netbsd/resolv/res_mkquery.c \
    301 	netbsd/resolv/res_query.c \
    302 	netbsd/resolv/res_send.c \
    303 	netbsd/resolv/res_state.c \
    304 	netbsd/resolv/res_cache.c \
    305 	netbsd/net/nsdispatch.c \
    306 	netbsd/net/getaddrinfo.c \
    307 	netbsd/net/getnameinfo.c \
    308 	netbsd/net/getservbyname.c \
    309 	netbsd/net/getservent.c \
    310 	netbsd/net/base64.c \
    311 	netbsd/net/getservbyport.c \
    312 	netbsd/nameser/ns_name.c \
    313 	netbsd/nameser/ns_parse.c \
    314 	netbsd/nameser/ns_ttl.c \
    315 	netbsd/nameser/ns_netint.c \
    316 	netbsd/nameser/ns_print.c \
    317 	netbsd/nameser/ns_samedomain.c \
    318 	regex/regcomp.c \
    319 	regex/regerror.c \
    320 	regex/regexec.c \
    321 	regex/regfree.c \
    322 
    323 # The following files are common, but must be compiled
    324 # with different C flags when building a static C library.
    325 #
    326 # The reason for this is the implementation of __get_tls()
    327 # that will differ between the shared and static versions
    328 # of the library.
    329 #
    330 # See comments in private/bionic_tls.h for more details.
    331 #
    332 # NOTE: bionic/pthread.c is added later to this list
    333 #       because it needs special handling on ARM, see
    334 #       below.
    335 #
    336 libc_static_common_src_files := \
    337         unistd/sysconf.c \
    338         bionic/__errno.c \
    339 
    340 # Architecture specific source files go here
    341 # =========================================================
    342 ifeq ($(TARGET_ARCH),arm)
    343 libc_common_src_files += \
    344 	bionic/bionic_clone.c \
    345 	arch-arm/bionic/__get_pc.S \
    346 	arch-arm/bionic/__get_sp.S \
    347 	arch-arm/bionic/_exit_with_stack_teardown.S \
    348 	arch-arm/bionic/_setjmp.S \
    349 	arch-arm/bionic/atomics_arm.S \
    350 	arch-arm/bionic/clone.S \
    351 	arch-arm/bionic/eabi.c \
    352 	arch-arm/bionic/ffs.S \
    353 	arch-arm/bionic/kill.S \
    354 	arch-arm/bionic/libgcc_compat.c \
    355 	arch-arm/bionic/tkill.S \
    356 	arch-arm/bionic/memcmp.S \
    357 	arch-arm/bionic/memcmp16.S \
    358 	arch-arm/bionic/memcpy.S \
    359 	arch-arm/bionic/memset.S \
    360 	arch-arm/bionic/setjmp.S \
    361 	arch-arm/bionic/sigsetjmp.S \
    362 	arch-arm/bionic/strlen.c.arm \
    363 	arch-arm/bionic/strcpy.S \
    364 	arch-arm/bionic/strcmp.S \
    365 	arch-arm/bionic/syscall.S \
    366 	string/memmove.c.arm \
    367 	string/bcopy.c \
    368 	string/strncmp.c \
    369 	unistd/socketcalls.c
    370 
    371 # These files need to be arm so that gdbserver
    372 # can set breakpoints in them without messing
    373 # up any thumb code.
    374 libc_common_src_files += \
    375 	bionic/pthread-atfork.c.arm \
    376 	bionic/pthread-rwlocks.c.arm \
    377 	bionic/pthread-timers.c.arm \
    378 	bionic/ptrace.c.arm
    379 
    380 libc_static_common_src_files += \
    381         bionic/pthread.c.arm \
    382 
    383 # these are used by the static and dynamic versions of the libc
    384 # respectively
    385 libc_arch_static_src_files := \
    386 	arch-arm/bionic/exidx_static.c
    387 
    388 libc_arch_dynamic_src_files := \
    389 	arch-arm/bionic/exidx_dynamic.c
    390 else # !arm
    391 
    392 ifeq ($(TARGET_ARCH),x86)
    393 libc_common_src_files += \
    394 	arch-x86/bionic/__get_sp.S \
    395 	arch-x86/bionic/__get_tls.c \
    396 	arch-x86/bionic/__set_tls.c \
    397 	arch-x86/bionic/atomics_x86.S \
    398 	arch-x86/bionic/clone.S \
    399 	arch-x86/bionic/_exit_with_stack_teardown.S \
    400 	arch-x86/bionic/setjmp.S \
    401 	arch-x86/bionic/_setjmp.S \
    402 	arch-x86/bionic/sigsetjmp.S \
    403 	arch-x86/bionic/vfork.S \
    404 	arch-x86/bionic/syscall.S \
    405 	arch-x86/string/bcopy_wrapper.S \
    406 	arch-x86/string/memcpy_wrapper.S \
    407 	arch-x86/string/memmove_wrapper.S \
    408 	arch-x86/string/bzero_wrapper.S \
    409 	arch-x86/string/memcmp_wrapper.S \
    410 	arch-x86/string/memset_wrapper.S \
    411 	arch-x86/string/strcmp_wrapper.S \
    412 	arch-x86/string/strncmp_wrapper.S \
    413 	arch-x86/string/strlen_wrapper.S \
    414 	string/strcpy.c \
    415 	bionic/pthread-atfork.c \
    416 	bionic/pthread-rwlocks.c \
    417 	bionic/pthread-timers.c \
    418 	bionic/ptrace.c
    419 
    420 libc_static_common_src_files += \
    421         bionic/pthread.c \
    422 
    423 # this is needed for static versions of libc
    424 libc_arch_static_src_files := \
    425 	arch-x86/bionic/dl_iterate_phdr_static.c
    426 
    427 libc_arch_dynamic_src_files :=
    428 else # !x86
    429 
    430 ifeq ($(TARGET_ARCH),sh)
    431 libc_common_src_files += \
    432 	arch-sh/bionic/__get_pc.S \
    433 	arch-sh/bionic/__get_sp.S \
    434 	arch-sh/bionic/_exit_with_stack_teardown.S \
    435 	arch-sh/bionic/_setjmp.S \
    436 	arch-sh/bionic/atomics_sh.c \
    437 	arch-sh/bionic/atomic_cmpxchg.S \
    438 	arch-sh/bionic/clone.S \
    439 	arch-sh/bionic/pipe.S \
    440 	arch-sh/bionic/memcpy.S \
    441 	arch-sh/bionic/memset.S \
    442 	arch-sh/bionic/bzero.S \
    443 	arch-sh/bionic/setjmp.S \
    444 	arch-sh/bionic/sigsetjmp.S \
    445 	arch-sh/bionic/syscall.S \
    446 	arch-sh/bionic/memmove.S \
    447 	arch-sh/bionic/__set_tls.c \
    448 	arch-sh/bionic/__get_tls.c \
    449 	arch-sh/bionic/ffs.S \
    450 	string/bcopy.c \
    451 	string/strcmp.c \
    452 	string/strncmp.c \
    453 	string/memcmp.c \
    454 	string/strlen.c \
    455 	string/strcpy.c \
    456 	bionic/pthread-atfork.c \
    457 	bionic/pthread-rwlocks.c \
    458 	bionic/pthread-timers.c \
    459 	bionic/ptrace.c \
    460 	unistd/socketcalls.c
    461 
    462 libc_static_common_src_files += \
    463         bionic/pthread.c \
    464 
    465 endif # sh
    466 
    467 endif # !x86
    468 endif # !arm
    469 
    470 # Define some common cflags
    471 # ========================================================
    472 libc_common_cflags := \
    473 		-DWITH_ERRLIST			\
    474 		-DANDROID_CHANGES		\
    475 		-DUSE_LOCKS 			\
    476 		-DREALLOC_ZERO_BYTES_FREES 	\
    477 		-D_LIBC=1 			\
    478 		-DSOFTFLOAT                     \
    479 		-DFLOATING_POINT		\
    480 		-DINET6 \
    481 		-I$(LOCAL_PATH)/private \
    482 		-DUSE_DL_PREFIX \
    483 		-DPOSIX_MISTAKE \
    484                 -DLOG_ON_HEAP_ERROR \
    485 
    486 # these macro definitions are required to implement the
    487 # 'timezone' and 'daylight' global variables, as well as
    488 # properly update the 'tm_gmtoff' field in 'struct tm'.
    489 #
    490 libc_common_cflags += \
    491     -DTM_GMTOFF=tm_gmtoff \
    492     -DUSG_COMPAT=1
    493 
    494 ifeq ($(strip $(DEBUG_BIONIC_LIBC)),true)
    495   libc_common_cflags += -DDEBUG
    496 endif
    497 
    498 ifeq ($(TARGET_ARCH),arm)
    499   libc_common_cflags += -fstrict-aliasing
    500   libc_crt_target_cflags := -mthumb-interwork
    501   #
    502   # Define HAVE_ARM_TLS_REGISTER macro to indicate to the C library
    503   # that it should access the hardware TLS register directly in
    504   # private/bionic_tls.h
    505   #
    506   # The value must match your kernel configuration
    507   #
    508   ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
    509     libc_common_cflags += -DHAVE_ARM_TLS_REGISTER
    510   endif
    511 else # !arm
    512   ifeq ($(TARGET_ARCH),x86)
    513     libc_crt_target_cflags := -m32
    514 
    515     # Enable recent IA friendly memory routines (such as for Atom)
    516     # These will not work on the earlier x86 machines
    517     libc_common_cflags += -mtune=i686 -DUSE_SSSE3 -DUSE_SSE2
    518   endif # x86
    519 endif # !arm
    520 
    521 # Define ANDROID_SMP appropriately.
    522 ifeq ($(TARGET_CPU_SMP),true)
    523     libc_common_cflags += -DANDROID_SMP=1
    524 else
    525     libc_common_cflags += -DANDROID_SMP=0
    526 endif
    527 
    528 # Needed to access private/__dso_handle.S from
    529 # crtbegin_xxx.S and crtend_xxx.S
    530 #
    531 libc_crt_target_cflags += -I$(LOCAL_PATH)/private
    532 
    533 ifeq ($(TARGET_ARCH),arm)
    534 libc_crt_target_cflags += -DCRT_LEGACY_WORKAROUND
    535 endif
    536 
    537 # Define some common includes
    538 # ========================================================
    539 libc_common_c_includes := \
    540 		$(LOCAL_PATH)/stdlib  \
    541 		$(LOCAL_PATH)/string  \
    542 		$(LOCAL_PATH)/stdio
    543 
    544 # Needed to access private/__dso_handle.S from
    545 # crtbegin_xxx.S and crtend_xxx.S
    546 #
    547 libc_crt_target_cflags += -I$(LOCAL_PATH)/private
    548 
    549 # Define the libc run-time (crt) support object files that must be built,
    550 # which are needed to build all other objects (shared/static libs and
    551 # executables)
    552 # ==========================================================================
    553 
    554 ifneq ($(filter arm x86,$(TARGET_ARCH)),)
    555 # ARM and x86 need crtbegin_so/crtend_so.
    556 #
    557 # For x86, the .init section must point to a function that calls all
    558 # entries in the .ctors section. (on ARM this is done through the
    559 # .init_array section instead).
    560 #
    561 # For both platforms, the .fini_array section must point to a function
    562 # that will call __cxa_finalize(&__dso_handle) in order to ensure that
    563 # static C++ destructors are properly called on dlclose().
    564 #
    565 
    566 libc_crt_target_so_cflags := $(libc_crt_target_cflags)
    567 ifeq ($(TARGET_ARCH),x86)
    568     # This flag must be added for x86 targets, but not for ARM
    569     libc_crt_target_so_cflags += -fPIC
    570 endif
    571 GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_so.o
    572 $(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_so.S
    573 	@mkdir -p $(dir $@)
    574 	$(TARGET_CC) $(libc_crt_target_so_cflags) -o $@ -c $<
    575 ALL_GENERATED_SOURCES += $(GEN)
    576 
    577 GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_so.o
    578 $(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtend_so.S
    579 	@mkdir -p $(dir $@)
    580 	$(TARGET_CC) $(libc_crt_target_so_cflags) -o $@ -c $<
    581 ALL_GENERATED_SOURCES += $(GEN)
    582 endif # TARGET_ARCH == x86 || TARGET_ARCH == arm
    583 
    584 
    585 GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_static.o
    586 $(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_static.S
    587 	@mkdir -p $(dir $@)
    588 	$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
    589 ALL_GENERATED_SOURCES += $(GEN)
    590 
    591 GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_dynamic.o
    592 $(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_dynamic.S
    593 	@mkdir -p $(dir $@)
    594 	$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
    595 ALL_GENERATED_SOURCES += $(GEN)
    596 
    597 
    598 # We rename crtend.o to crtend_android.o to avoid a
    599 # name clash between gcc and bionic.
    600 GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_android.o
    601 $(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtend.S
    602 	@mkdir -p $(dir $@)
    603 	$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
    604 ALL_GENERATED_SOURCES += $(GEN)
    605 
    606 
    607 # To enable malloc leak check for statically linked programs, add
    608 # "WITH_MALLOC_CHECK_LIBC_A := true" to buildspec.mk
    609 WITH_MALLOC_CHECK_LIBC_A := $(strip $(WITH_MALLOC_CHECK_LIBC_A))
    610 
    611 # ========================================================
    612 # libc_common.a
    613 # ========================================================
    614 include $(CLEAR_VARS)
    615 
    616 LOCAL_SRC_FILES := $(libc_common_src_files)
    617 LOCAL_CFLAGS := $(libc_common_cflags)
    618 ifeq ($(TARGET_ARCH),arm)
    619 LOCAL_CFLAGS += -DCRT_LEGACY_WORKAROUND
    620 endif
    621 LOCAL_C_INCLUDES := $(libc_common_c_includes)
    622 LOCAL_MODULE := libc_common
    623 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    624 
    625 include $(BUILD_STATIC_LIBRARY)
    626 
    627 
    628 # ========================================================
    629 # libc_nomalloc.a
    630 # ========================================================
    631 #
    632 # This is a version of the static C library that does not
    633 # include malloc. It's useful in situations when calling
    634 # the user wants to provide their own malloc implementation,
    635 # or wants to explicitly disallow the use of the use of malloc,
    636 # like the dynamic loader.
    637 
    638 include $(CLEAR_VARS)
    639 
    640 LOCAL_SRC_FILES := \
    641 	$(libc_arch_static_src_files) \
    642 	$(libc_static_common_src_files) \
    643 	bionic/libc_init_static.c
    644 
    645 LOCAL_C_INCLUDES := $(libc_common_c_includes)
    646 LOCAL_CFLAGS := $(libc_common_cflags) \
    647                 -DLIBC_STATIC
    648 
    649 LOCAL_MODULE := libc_nomalloc
    650 LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
    651 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    652 
    653 include $(BUILD_STATIC_LIBRARY)
    654 
    655 
    656 # ========================================================
    657 # libc.a
    658 # ========================================================
    659 include $(CLEAR_VARS)
    660 
    661 LOCAL_SRC_FILES := \
    662 	$(libc_arch_static_src_files) \
    663 	$(libc_static_common_src_files) \
    664 	bionic/dlmalloc.c \
    665 	bionic/malloc_debug_common.c \
    666 	bionic/libc_init_static.c
    667 
    668 LOCAL_CFLAGS := $(libc_common_cflags) \
    669                 -DLIBC_STATIC
    670 LOCAL_C_INCLUDES := $(libc_common_c_includes)
    671 LOCAL_MODULE := libc
    672 LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
    673 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    674 
    675 include $(BUILD_STATIC_LIBRARY)
    676 
    677 
    678 # ========================================================
    679 # libc.so
    680 # ========================================================
    681 include $(CLEAR_VARS)
    682 
    683 LOCAL_CFLAGS := $(libc_common_cflags)
    684 LOCAL_C_INCLUDES := $(libc_common_c_includes)
    685 
    686 LOCAL_SRC_FILES := \
    687 	$(libc_arch_dynamic_src_files) \
    688 	$(libc_static_common_src_files) \
    689 	bionic/dlmalloc.c \
    690 	bionic/malloc_debug_common.c \
    691 	bionic/libc_init_dynamic.c
    692 
    693 LOCAL_MODULE:= libc
    694 
    695 # WARNING: The only library libc.so should depend on is libdl.so!  If you add other libraries,
    696 # make sure to add -Wl,--exclude-libs=libgcc.a to the LOCAL_LDFLAGS for those libraries.  This
    697 # ensures that symbols that are pulled into those new libraries from libgcc.a are not declared
    698 # external; if that were the case, then libc would not pull those symbols from libgcc.a as it
    699 # should, instead relying on the external symbols from the dependent libraries.  That would
    700 # create an "cloaked" dependency on libgcc.a in libc though the libraries, which is not what
    701 # you wanted!
    702 
    703 LOCAL_SHARED_LIBRARIES := libdl
    704 LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
    705 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    706 
    707 include $(BUILD_SHARED_LIBRARY)
    708 
    709 
    710 # For all builds, except for the -user build we will enable memory
    711 # allocation checking (including memory leaks, buffer overwrites, etc.)
    712 # Note that all these checks are also controlled by env. settings
    713 # that can enable, or disable specific checks. Note also that some of
    714 # the checks are available only in emulator and are implemeted in
    715 # libc_malloc_qemu_instrumented.so.
    716 ifneq ($(TARGET_BUILD_VARIANT),user)
    717 
    718 # ========================================================
    719 # libc_malloc_debug_leak.so
    720 # ========================================================
    721 include $(CLEAR_VARS)
    722 
    723 LOCAL_CFLAGS := \
    724 	$(libc_common_cflags) \
    725 	-DMALLOC_LEAK_CHECK
    726 
    727 LOCAL_C_INCLUDES := $(libc_common_c_includes)
    728 
    729 LOCAL_SRC_FILES := \
    730 	bionic/malloc_debug_leak.c
    731 
    732 LOCAL_MODULE:= libc_malloc_debug_leak
    733 
    734 LOCAL_SHARED_LIBRARIES := libc
    735 LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
    736 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    737 LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
    738 
    739 # Don't install on release build
    740 LOCAL_MODULE_TAGS := eng debug
    741 
    742 include $(BUILD_SHARED_LIBRARY)
    743 
    744 
    745 # ========================================================
    746 # libc_malloc_debug_qemu.so
    747 # ========================================================
    748 include $(CLEAR_VARS)
    749 
    750 LOCAL_CFLAGS := \
    751 	$(libc_common_cflags) \
    752 	-DMALLOC_QEMU_INSTRUMENT
    753 
    754 LOCAL_C_INCLUDES := $(libc_common_c_includes)
    755 
    756 LOCAL_SRC_FILES := \
    757 	bionic/malloc_debug_qemu.c
    758 
    759 LOCAL_MODULE:= libc_malloc_debug_qemu
    760 
    761 LOCAL_SHARED_LIBRARIES := libc
    762 LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
    763 LOCAL_SYSTEM_SHARED_LIBRARIES :=
    764 
    765 # Don't install on release build
    766 LOCAL_MODULE_TAGS := eng debug
    767 
    768 include $(BUILD_SHARED_LIBRARY)
    769 
    770 endif	#!user
    771 
    772 
    773 # ========================================================
    774 include $(call all-makefiles-under,$(LOCAL_PATH))
    775