diff options
Diffstat (limited to 'libc/Android.mk')
-rw-r--r-- | libc/Android.mk | 574 |
1 files changed, 359 insertions, 215 deletions
diff --git a/libc/Android.mk b/libc/Android.mk index 984187f1a..5c625d126 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -1,7 +1,12 @@ -LOCAL_PATH:= $(call my-dir) +LOCAL_PATH := $(call my-dir) include $(LOCAL_PATH)/arch-$(TARGET_ARCH)/syscalls.mk +# Make everything depend on any changes to included makefiles. +libc_common_additional_dependencies := \ + $(LOCAL_PATH)/arch-$(TARGET_ARCH)/syscalls.mk \ + $(LOCAL_PATH)/Android.mk \ + # Define the common source files for all the libc instances # ========================================================= libc_common_src_files := \ @@ -45,7 +50,6 @@ libc_common_src_files := \ stdio/wbuf.c \ stdlib/atexit.c \ stdlib/ctype_.c \ - stdlib/exit.c \ stdlib/getenv.c \ stdlib/putenv.c \ stdlib/setenv.c \ @@ -73,18 +77,13 @@ libc_common_src_files := \ bionic/atol.c \ bionic/atoll.c \ bionic/bindresvport.c \ - bionic/bionic_clone.c \ bionic/clearenv.c \ - bionic/cpuacct.c \ bionic/daemon.c \ bionic/err.c \ bionic/ether_aton.c \ bionic/ether_ntoa.c \ - bionic/fcntl.c \ bionic/fdprintf.c \ bionic/flockfile.c \ - bionic/fork.c \ - bionic/fstatfs.c \ bionic/ftime.c \ bionic/ftok.c \ bionic/fts.c \ @@ -100,43 +99,27 @@ libc_common_src_files := \ bionic/isatty.c \ bionic/issetugid.c \ bionic/ldexp.c \ - bionic/lseek64.c \ bionic/md5.c \ bionic/memmem.c \ bionic/memswap.c \ bionic/name_mem.c \ - bionic/openat.c \ - bionic/open.c \ bionic/pathconf.c \ bionic/perror.c \ - bionic/pread.c \ - bionic/pselect.c \ bionic/ptsname.c \ bionic/ptsname_r.c \ bionic/pututline.c \ - bionic/pwrite.c \ bionic/reboot.c \ bionic/recv.c \ bionic/sched_cpualloc.c \ bionic/sched_cpucount.c \ - bionic/sched_getcpu.c \ bionic/semaphore.c \ bionic/send.c \ - bionic/setegid.c \ - bionic/seteuid.c \ bionic/setpgrp.c \ - bionic/setresuid.c \ - bionic/setreuid.c \ - bionic/setuid.c \ bionic/sigblock.c \ bionic/siginterrupt.c \ bionic/siglist.c \ - bionic/signal.c \ bionic/signame.c \ bionic/sigsetmask.c \ - bionic/sigsuspend.c \ - bionic/sleep.c \ - bionic/statfs.c \ bionic/strndup.c \ bionic/strntoimax.c \ bionic/strntoumax.c \ @@ -145,48 +128,61 @@ libc_common_src_files := \ bionic/system_properties_compat.c \ bionic/tcgetpgrp.c \ bionic/tcsetpgrp.c \ - bionic/thread_atexit.c \ bionic/time64.c \ bionic/umount.c \ bionic/unlockpt.c \ - bionic/usleep.c \ bionic/utmp.c \ bionic/wcscoll.c \ - netbsd/gethnamaddr.c \ - netbsd/inet/nsap_addr.c \ - netbsd/resolv/__dn_comp.c \ - netbsd/resolv/__res_close.c \ - netbsd/resolv/__res_send.c \ - netbsd/resolv/herror.c \ - netbsd/resolv/res_comp.c \ - netbsd/resolv/res_data.c \ - netbsd/resolv/res_debug.c \ - netbsd/resolv/res_init.c \ - netbsd/resolv/res_mkquery.c \ - netbsd/resolv/res_query.c \ - netbsd/resolv/res_send.c \ - netbsd/resolv/res_state.c \ - netbsd/resolv/res_cache.c \ - netbsd/net/nsdispatch.c \ - netbsd/net/getaddrinfo.c \ - netbsd/net/getnameinfo.c \ - netbsd/net/getservbyname.c \ - netbsd/net/getservent.c \ - netbsd/net/base64.c \ - netbsd/net/getservbyport.c \ - netbsd/nameser/ns_name.c \ - netbsd/nameser/ns_parse.c \ - netbsd/nameser/ns_ttl.c \ - netbsd/nameser/ns_netint.c \ - netbsd/nameser/ns_print.c \ - netbsd/nameser/ns_samedomain.c \ + + +libc_dns_src_files += \ + netbsd/gethnamaddr.c \ + netbsd/inet/nsap_addr.c \ + netbsd/nameser/ns_name.c \ + netbsd/nameser/ns_netint.c \ + netbsd/nameser/ns_parse.c \ + netbsd/nameser/ns_print.c \ + netbsd/nameser/ns_samedomain.c \ + netbsd/nameser/ns_ttl.c \ + netbsd/net/base64.c \ + netbsd/net/getaddrinfo.c \ + netbsd/net/getnameinfo.c \ + netbsd/net/getservbyname.c \ + netbsd/net/getservbyport.c \ + netbsd/net/getservent.c \ + netbsd/net/nsdispatch.c \ + netbsd/resolv/__dn_comp.c \ + netbsd/resolv/herror.c \ + netbsd/resolv/res_cache.c \ + netbsd/resolv/__res_close.c \ + netbsd/resolv/res_comp.c \ + netbsd/resolv/res_data.c \ + netbsd/resolv/res_debug.c \ + netbsd/resolv/res_init.c \ + netbsd/resolv/res_mkquery.c \ + netbsd/resolv/res_query.c \ + netbsd/resolv/__res_send.c \ + netbsd/resolv/res_send.c \ + netbsd/resolv/res_state.c \ + + +# These are used by the 32-bit targets, but not the 64-bit ones. +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm mips x86)) +libc_common_src_files += \ + bionic/legacy_32_bit_support.cpp \ + bionic/ndk_cruft.cpp \ + +endif # Fortify implementations of libc functions. libc_common_src_files += \ + bionic/__FD_chk.cpp \ bionic/__fgets_chk.cpp \ bionic/__memcpy_chk.cpp \ bionic/__memmove_chk.cpp \ bionic/__memset_chk.cpp \ + bionic/__read_chk.cpp \ + bionic/__recvfrom_chk.cpp \ bionic/__strcat_chk.cpp \ bionic/__strchr_chk.cpp \ bionic/__strcpy_chk.cpp \ @@ -202,50 +198,109 @@ libc_common_src_files += \ libc_bionic_src_files := \ bionic/abort.cpp \ + bionic/access.cpp \ bionic/assert.cpp \ + bionic/bionic_time_conversions.cpp \ bionic/brk.cpp \ + bionic/chmod.cpp \ + bionic/chown.cpp \ + bionic/clone.cpp \ bionic/dirent.cpp \ - bionic/__errno.c \ + bionic/dup2.cpp \ + bionic/epoll_create.cpp \ + bionic/epoll_wait.cpp \ + bionic/epoll_pwait.cpp \ + bionic/__errno.cpp \ bionic/eventfd_read.cpp \ bionic/eventfd_write.cpp \ + bionic/ffs.cpp \ + bionic/fork.cpp \ bionic/futimens.cpp \ bionic/getauxval.cpp \ bionic/getcwd.cpp \ + bionic/inotify_init.cpp \ + bionic/lchown.cpp \ bionic/libc_init_common.cpp \ bionic/libc_logging.cpp \ bionic/libgen.cpp \ - bionic/mmap.cpp \ + bionic/link.cpp \ + bionic/lstat.cpp \ + bionic/mkdir.cpp \ + bionic/mkfifo.cpp \ + bionic/mknod.cpp \ + bionic/open.cpp \ + bionic/pause.cpp \ + bionic/pipe.cpp \ + bionic/poll.cpp \ + bionic/pthread_atfork.cpp \ bionic/pthread_attr.cpp \ + bionic/pthread_cond.cpp \ + bionic/pthread_create.cpp \ bionic/pthread_detach.cpp \ bionic/pthread_equal.cpp \ + bionic/pthread_exit.cpp \ bionic/pthread_getcpuclockid.cpp \ bionic/pthread_getschedparam.cpp \ bionic/pthread_internals.cpp \ bionic/pthread_join.cpp \ + bionic/pthread_key.cpp \ bionic/pthread_kill.cpp \ + bionic/pthread_mutex.cpp \ + bionic/pthread_once.cpp \ + bionic/pthread_rwlock.cpp \ bionic/pthread_self.cpp \ bionic/pthread_setname_np.cpp \ bionic/pthread_setschedparam.cpp \ bionic/pthread_sigmask.cpp \ + bionic/ptrace.cpp \ bionic/raise.cpp \ + bionic/readlink.cpp \ + bionic/rename.cpp \ + bionic/rmdir.cpp \ bionic/sbrk.cpp \ bionic/scandir.cpp \ bionic/sched_getaffinity.cpp \ + bionic/sched_getcpu.cpp \ + bionic/setegid.cpp \ bionic/__set_errno.cpp \ + bionic/seteuid.cpp \ bionic/setlocale.cpp \ bionic/signalfd.cpp \ + bionic/sigaction.cpp \ + bionic/sigaddset.cpp \ + bionic/sigdelset.cpp \ + bionic/sigemptyset.cpp \ + bionic/sigfillset.cpp \ + bionic/sigismember.cpp \ + bionic/signal.cpp \ + bionic/sigpending.cpp \ + bionic/sigprocmask.cpp \ + bionic/sigsuspend.cpp \ bionic/sigwait.cpp \ + bionic/stat.cpp \ bionic/statvfs.cpp \ bionic/strerror.cpp \ bionic/strerror_r.cpp \ bionic/strsignal.cpp \ bionic/stubs.cpp \ + bionic/symlink.cpp \ bionic/sysconf.cpp \ + bionic/thread_atexit.cpp \ bionic/tdestroy.cpp \ + bionic/timer.cpp \ bionic/tmpfile.cpp \ + bionic/unlink.cpp \ + bionic/utimes.cpp \ bionic/wait.cpp \ bionic/wchar.cpp \ +# These are shared by all the 32-bit targets, but not the 64-bit ones. +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm mips x86)) +libc_bionic_src_files += \ + bionic/mmap.cpp \ + +endif + libc_tzcode_src_files := \ tzcode/asctime.c \ tzcode/difftime.c \ @@ -254,6 +309,8 @@ libc_tzcode_src_files := \ tzcode/strptime.c \ libc_upstream_freebsd_src_files := \ + upstream-freebsd/lib/libc/gen/sleep.c \ + upstream-freebsd/lib/libc/gen/usleep.c \ upstream-freebsd/lib/libc/stdio/clrerr.c \ upstream-freebsd/lib/libc/stdio/fclose.c \ upstream-freebsd/lib/libc/stdio/fdopen.c \ @@ -342,6 +399,7 @@ libc_upstream_netbsd_src_files := \ upstream-netbsd/libc/stdlib/div.c \ upstream-netbsd/libc/stdlib/drand48.c \ upstream-netbsd/libc/stdlib/erand48.c \ + upstream-netbsd/libc/stdlib/exit.c \ upstream-netbsd/libc/stdlib/jrand48.c \ upstream-netbsd/libc/stdlib/ldiv.c \ upstream-netbsd/libc/stdlib/lldiv.c \ @@ -359,104 +417,134 @@ libc_upstream_netbsd_src_files := \ upstream-netbsd/libc/string/strcasestr.c \ upstream-netbsd/libc/string/strcoll.c \ upstream-netbsd/libc/string/strxfrm.c \ + upstream-netbsd/libc/thread-stub/__isthreaded.c \ upstream-netbsd/libc/unistd/killpg.c \ # Architecture specific source files go here # ========================================================= ifeq ($(TARGET_ARCH),arm) libc_common_src_files += \ - bionic/memmove.c.arm \ - string/bcopy.c \ - string/strncmp.c \ - string/strncat.c \ - string/strncpy.c \ - bionic/strchr.cpp \ - string/strrchr.c \ - bionic/memchr.c \ - bionic/memrchr.c \ - string/index.c \ - bionic/strnlen.c \ - string/strlcat.c \ - string/strlcpy.c \ - upstream-freebsd/lib/libc/string/wcschr.c \ - upstream-freebsd/lib/libc/string/wcsrchr.c \ - upstream-freebsd/lib/libc/string/wcscmp.c \ - upstream-freebsd/lib/libc/string/wcscpy.c \ - upstream-freebsd/lib/libc/string/wmemcmp.c \ - upstream-freebsd/lib/libc/string/wcslen.c \ - upstream-freebsd/lib/libc/string/wcscat.c - -# These files need to be arm so that gdbserver -# can set breakpoints in them without messing -# up any thumb code. -libc_common_src_files += \ - bionic/pthread-atfork.c.arm \ - bionic/pthread-rwlocks.c.arm \ - bionic/pthread-timers.c.arm \ - bionic/ptrace.c.arm - -libc_static_common_src_files += \ - bionic/pthread.c.arm \ - bionic/pthread_create.cpp.arm \ - bionic/pthread_key.cpp.arm \ + bionic/memchr.c \ + bionic/memmove.c.arm \ + bionic/memrchr.c \ + bionic/strchr.cpp \ + bionic/strnlen.c \ + string/bcopy.c \ + string/index.c \ + string/strlcat.c \ + string/strlcpy.c \ + string/strncat.c \ + string/strncmp.c \ + string/strncpy.c \ + string/strrchr.c \ + upstream-freebsd/lib/libc/string/wcscat.c \ + upstream-freebsd/lib/libc/string/wcschr.c \ + upstream-freebsd/lib/libc/string/wcscmp.c \ + upstream-freebsd/lib/libc/string/wcscpy.c \ + upstream-freebsd/lib/libc/string/wcslen.c \ + upstream-freebsd/lib/libc/string/wcsrchr.c \ + upstream-freebsd/lib/libc/string/wmemcmp.c \ endif # arm -ifeq ($(TARGET_ARCH),x86) +ifeq ($(TARGET_ARCH), arm64) +#TODO: Replace C stubs with optimised assembly libc_common_src_files += \ - bionic/pthread-atfork.c \ - bionic/pthread-rwlocks.c \ - bionic/pthread-timers.c \ - bionic/ptrace.c \ - -libc_static_common_src_files += \ - bionic/pthread.c \ - bionic/pthread_create.cpp \ - bionic/pthread_key.cpp \ - -endif # x86 + bionic/memchr.c \ + bionic/memcmp.c \ + bionic/memcpy.c \ + bionic/memmove.c \ + bionic/memrchr.c \ + bionic/memset.c \ + bionic/strchr.cpp \ + bionic/strnlen.c \ + string/bcopy.c \ + string/index.c \ + string/memcmp16.c \ + string/strcat.c \ + string/strcmp.c \ + string/strcpy.c \ + string/strlcat.c \ + string/strlcpy.c \ + string/strlen.c \ + string/strncat.c \ + string/strncmp.c \ + string/strncpy.c \ + string/strrchr.c \ + upstream-freebsd/lib/libc/string/wcscat.c \ + upstream-freebsd/lib/libc/string/wcschr.c \ + upstream-freebsd/lib/libc/string/wcscmp.c \ + upstream-freebsd/lib/libc/string/wcscpy.c \ + upstream-freebsd/lib/libc/string/wcslen.c \ + upstream-freebsd/lib/libc/string/wcsrchr.c \ + upstream-freebsd/lib/libc/string/wmemcmp.c \ + +endif # arm64 ifeq ($(TARGET_ARCH),mips) libc_common_src_files += \ - bionic/memcmp.c \ - string/bcopy.c \ - string/strcmp.c \ - string/strcpy.c \ - string/strncmp.c \ - string/strcat.c \ - string/strncat.c \ - string/strncpy.c \ - bionic/strchr.cpp \ - string/strrchr.c \ - bionic/memchr.c \ - bionic/memrchr.c \ - string/index.c \ - bionic/strnlen.c \ - string/strlcat.c \ - string/strlcpy.c \ - upstream-freebsd/lib/libc/string/wcschr.c \ - upstream-freebsd/lib/libc/string/wcsrchr.c \ - upstream-freebsd/lib/libc/string/wcscmp.c \ - upstream-freebsd/lib/libc/string/wcscpy.c \ - upstream-freebsd/lib/libc/string/wmemcmp.c \ - upstream-freebsd/lib/libc/string/wcslen.c \ - upstream-freebsd/lib/libc/string/wcscat.c - -libc_common_src_files += \ - bionic/pthread-atfork.c \ - bionic/pthread-rwlocks.c \ - bionic/pthread-timers.c \ - bionic/ptrace.c - -libc_static_common_src_files += \ - bionic/pthread.c \ - bionic/pthread_create.cpp \ - bionic/pthread_key.cpp \ + bionic/memchr.c \ + bionic/memcmp.c \ + bionic/memrchr.c \ + bionic/strchr.cpp \ + bionic/strnlen.c \ + string/bcopy.c \ + string/index.c \ + string/strcat.c \ + string/strcmp.c \ + string/strcpy.c \ + string/strlcat.c \ + string/strlcpy.c \ + string/strncat.c \ + string/strncmp.c \ + string/strncpy.c \ + string/strrchr.c \ + upstream-freebsd/lib/libc/string/wcscat.c \ + upstream-freebsd/lib/libc/string/wcschr.c \ + upstream-freebsd/lib/libc/string/wcscmp.c \ + upstream-freebsd/lib/libc/string/wcscpy.c \ + upstream-freebsd/lib/libc/string/wcslen.c \ + upstream-freebsd/lib/libc/string/wcsrchr.c \ + upstream-freebsd/lib/libc/string/wmemcmp.c \ endif # mips -ifeq ($(strip $(TARGET_CPU_VARIANT)),) -$(warning TARGET_CPU_VARIANT is not defined) +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86_64)) +libc_common_src_files += \ + bionic/memchr.c \ + bionic/memcmp.c \ + bionic/memcpy.c \ + bionic/memmove.c \ + bionic/memrchr.c \ + bionic/memset.c \ + bionic/strchr.cpp \ + bionic/strnlen.c \ + string/bcopy.c \ + string/index.c \ + string/strcat.c \ + string/strcmp.c \ + string/strcpy.c \ + string/strlcat.c \ + string/strlcpy.c \ + string/strlen.c \ + string/strncat.c \ + string/strncmp.c \ + string/strncpy.c \ + string/strrchr.c \ + upstream-freebsd/lib/libc/string/wcscat.c \ + upstream-freebsd/lib/libc/string/wcschr.c \ + upstream-freebsd/lib/libc/string/wcscmp.c \ + upstream-freebsd/lib/libc/string/wcscpy.c \ + upstream-freebsd/lib/libc/string/wcslen.c \ + upstream-freebsd/lib/libc/string/wcsrchr.c \ + upstream-freebsd/lib/libc/string/wmemcmp.c \ + +endif # x86_64 + +ifeq ($(TARGET_ARCH),arm) + ifeq ($(strip $(TARGET_CPU_VARIANT)),) + $(warning TARGET_ARCH is arm, but TARGET_CPU_VARIANT is not defined) + endif endif ########################################################### @@ -482,25 +570,30 @@ _LIBC_ARCH_COMMON_SRC_FILES := _LIBC_ARCH_CPU_VARIANT_SRC_FILES := _LIBC_ARCH_STATIC_SRC_FILES := _LIBC_ARCH_DYNAMIC_SRC_FILES := -include bionic/libc/arch-$(TARGET_ARCH)/$(TARGET_ARCH).mk +_LIBC_ARCH_ADDITIONAL_DEPENDENCIES := -libc_common_src_files += $(_LIBC_ARCH_COMMON_SRC_FILES) -libc_common_src_files += $(_LIBC_ARCH_CPU_VARIANT_SRC_FILES) +libc_common_additional_dependencies += \ + $(LOCAL_PATH)/arch-$(TARGET_ARCH)/$(TARGET_ARCH).mk +include $(LOCAL_PATH)/arch-$(TARGET_ARCH)/$(TARGET_ARCH).mk + +libc_bionic_src_files += $(_LIBC_ARCH_COMMON_SRC_FILES) +libc_bionic_src_files += $(_LIBC_ARCH_CPU_VARIANT_SRC_FILES) libc_arch_static_src_files := $(_LIBC_ARCH_STATIC_SRC_FILES) libc_arch_dynamic_src_files := $(_LIBC_ARCH_DYNAMIC_SRC_FILES) +libc_common_additional_dependencies += $(_LIBC_ARCH_ADDITIONAL_DEPENDENCIES) # Define some common cflags # ======================================================== libc_common_cflags := \ - -DWITH_ERRLIST \ -DANDROID_CHANGES \ -D_LIBC=1 \ - -DFLOATING_POINT \ - -DINET6 \ - -I$(LOCAL_PATH)/private \ - -DPOSIX_MISTAKE \ - -DLOG_ON_HEAP_ERROR \ - -Wall -Wextra + -Wall -Wextra \ + +# Try to catch typical 32-bit assumptions that break with 64-bit pointers. +libc_common_cflags += \ + -Werror=pointer-to-int-cast \ + -Werror=int-to-pointer-cast \ + -Werror=type-limits \ ifeq ($(strip $(DEBUG_BIONIC_LIBC)),true) libc_common_cflags += -DDEBUG @@ -513,31 +606,36 @@ ifneq ($(BOARD_MALLOC_ALIGNMENT),) libc_common_cflags += -DMALLOC_ALIGNMENT=$(BOARD_MALLOC_ALIGNMENT) endif +# crtbrand.c needs <stdint.h> and a #define for the platform SDK version. +libc_crt_target_cflags := \ + -I$(LOCAL_PATH)/include \ + -I$(LOCAL_PATH)/arch-$(TARGET_ARCH)/include \ + -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION) \ + ifeq ($(TARGET_ARCH),arm) libc_common_cflags += -DSOFTFLOAT libc_common_cflags += -fstrict-aliasing - libc_crt_target_cflags := -mthumb-interwork -endif # !arm - -ifeq ($(TARGET_ARCH),x86) - libc_common_cflags += -DSOFTFLOAT - libc_crt_target_cflags := - ifeq ($(ARCH_X86_HAVE_SSE2),true) - libc_crt_target_cflags += -DUSE_SSE2=1 - endif - ifeq ($(ARCH_X86_HAVE_SSSE3),true) - libc_crt_target_cflags += -DUSE_SSSE3=1 - endif -endif # x86 + libc_crt_target_cflags += -mthumb-interwork +endif # arm ifeq ($(TARGET_ARCH),mips) ifneq ($(ARCH_MIPS_HAS_FPU),true) libc_common_cflags += -DSOFTFLOAT endif libc_common_cflags += -fstrict-aliasing - libc_crt_target_cflags := $(TARGET_GLOBAL_CFLAGS) + libc_crt_target_cflags += $(TARGET_GLOBAL_CFLAGS) endif # mips +ifeq ($(TARGET_ARCH),x86) + libc_crt_target_cflags += -m32 + libc_crt_target_ldflags := -melf_i386 +endif # x86 + +ifeq ($(TARGET_ARCH),x86_64) + libc_crt_target_cflags += -m64 + libc_crt_target_ldflags := -melf_x86_64 +endif # x86_64 + # Define ANDROID_SMP appropriately. ifeq ($(TARGET_CPU_SMP),true) libc_common_cflags += -DANDROID_SMP=1 @@ -545,10 +643,13 @@ else libc_common_cflags += -DANDROID_SMP=0 endif -# crtbrand.c needs <stdint.h> and a #define for the platform SDK version. -libc_crt_target_cflags += \ - -I$(LOCAL_PATH)/include \ - -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION) +# Define some common conlyflags +libc_common_conlyflags := \ + -std=gnu99 + +# Define some common cppflags +libc_common_cppflags := \ + -std=gnu++11 # Define some common includes # ======================================================== @@ -558,17 +659,11 @@ libc_common_c_includes := \ $(LOCAL_PATH)/stdio \ external/safe-iop/include -# Needed to access private/__dso_handle.h from -# crtbegin_xxx.S and crtend_xxx.S -libc_crt_target_cflags += \ - -I$(LOCAL_PATH)/private \ - -I$(LOCAL_PATH)/arch-$(TARGET_ARCH)/include - # Define the libc run-time (crt) support object files that must be built, # which are needed to build all other objects (shared/static libs and # executables) # ========================================================================== -# ARM, MIPS, and x86 all need crtbegin_so/crtend_so. +# ARM, Arm64, MIPS, and x86 all need crtbegin_so/crtend_so. # # For x86, the .init section must point to a function that calls all # entries in the .ctors section. (on ARM this is done through the @@ -578,18 +673,24 @@ libc_crt_target_cflags += \ # that will call __cxa_finalize(&__dso_handle) in order to ensure that # static C++ destructors are properly called on dlclose(). # +libc_crt_target_crtbegin_file := $(LOCAL_PATH)/arch-common/bionic/crtbegin.c +libc_crt_target_crtbegin_so_file := $(LOCAL_PATH)/arch-common/bionic/crtbegin_so.c + ifeq ($(TARGET_ARCH),arm) libc_crt_target_so_cflags := endif +ifeq ($(TARGET_ARCH),arm64) + libc_crt_target_so_cflags := + libc_crt_target_crtbegin_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin.c +endif ifeq ($(TARGET_ARCH),mips) libc_crt_target_so_cflags := -fPIC + libc_crt_target_crtbegin_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin.c endif -ifeq ($(TARGET_ARCH),x86) +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) libc_crt_target_so_cflags := -fPIC endif libc_crt_target_so_cflags += $(libc_crt_target_cflags) -libc_crt_target_crtbegin_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin.c -libc_crt_target_crtbegin_so_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_so.c # See the comment in crtbrand.c for the reason why we need to generate # crtbrand.s before generating crtbrand.o. @@ -619,7 +720,7 @@ $(GEN): $(libc_crt_target_crtbegin_so_file) ALL_GENERATED_SOURCES += $(GEN) GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o -$(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtend_so.S +$(GEN): $(LOCAL_PATH)/arch-common/bionic/crtend_so.S @mkdir -p $(dir $@) $(hide) $(TARGET_CC) $(libc_crt_target_so_cflags) \ -MD -MF $(@:%.o=%.d) -o $@ -c $< @@ -651,7 +752,7 @@ ALL_GENERATED_SOURCES += $(GEN) GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o $(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o @mkdir -p $(dir $@) - $(hide) $(TARGET_LD) -r -o $@ $^ + $(hide) $(TARGET_LD) $(libc_crt_target_ldflags) -r -o $@ $^ ALL_GENERATED_SOURCES += $(GEN) GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o @@ -666,13 +767,13 @@ ALL_GENERATED_SOURCES += $(GEN) GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o $(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o @mkdir -p $(dir $@) - $(hide) $(TARGET_LD) -r -o $@ $^ + $(hide) $(TARGET_LD) $(libc_crt_target_ldflags) -r -o $@ $^ ALL_GENERATED_SOURCES += $(GEN) # We rename crtend.o to crtend_android.o to avoid a # name clash between gcc and bionic. GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o -$(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtend.S +$(GEN): $(LOCAL_PATH)/arch-common/bionic/crtend.S @mkdir -p $(dir $@) $(hide) $(TARGET_CC) $(libc_crt_target_cflags) \ -MD -MF $(@:%.o=%.d) -o $@ -c $< @@ -697,9 +798,11 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := bionic/__stack_chk_fail.cpp LOCAL_CFLAGS := $(libc_common_cflags) -fno-stack-protector -Werror +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libbionic_ssp -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := include $(BUILD_STATIC_LIBRARY) @@ -714,14 +817,38 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := $(libc_tzcode_src_files) LOCAL_CFLAGS := \ $(libc_common_cflags) \ - -std=gnu99 \ -DSTD_INSPIRED=1 \ -DTZDIR=\"/system/usr/share/zoneinfo\" \ -DTM_GMTOFF=tm_gmtoff \ -DUSG_COMPAT=1 +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_tzcode -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) +LOCAL_SYSTEM_SHARED_LIBRARIES := + +include $(BUILD_STATIC_LIBRARY) + + +# ======================================================== +# libc_dns.a - modified NetBSD DNS code +# ======================================================== + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(libc_dns_src_files) +LOCAL_CFLAGS := \ + $(libc_common_cflags) \ + -DINET6 \ + -I$(LOCAL_PATH)/private \ + -I$(LOCAL_PATH)/upstream-netbsd/libc/include # for NetBSD private headers + +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) +LOCAL_C_INCLUDES := $(libc_common_c_includes) +LOCAL_MODULE := libc_dns +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := include $(BUILD_STATIC_LIBRARY) @@ -742,9 +869,11 @@ LOCAL_CFLAGS := \ -I$(LOCAL_PATH)/upstream-freebsd \ -I$(LOCAL_PATH)/upstream-freebsd/libc/include \ -include upstream-freebsd/freebsd-compat.h +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_freebsd -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := include $(BUILD_STATIC_LIBRARY) @@ -762,12 +891,15 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := $(libc_upstream_netbsd_src_files) LOCAL_CFLAGS := \ $(libc_common_cflags) \ + -DPOSIX_MISTAKE \ -I$(LOCAL_PATH)/upstream-netbsd \ -I$(LOCAL_PATH)/upstream-netbsd/libc/include \ -include upstream-netbsd/netbsd-compat.h +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_netbsd -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := include $(BUILD_STATIC_LIBRARY) @@ -776,16 +908,22 @@ include $(BUILD_STATIC_LIBRARY) # ======================================================== # libc_bionic.a - home-grown C library code # ======================================================== -# + include $(CLEAR_VARS) LOCAL_SRC_FILES := $(libc_bionic_src_files) LOCAL_CFLAGS := $(libc_common_cflags) -Werror +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_bionic -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := +# Set -DPTHREAD_DEBUG_ENABLED=true to enable support for pthread deadlock prediction. +# Since this code is experimental it is disabled by default. +LOCAL_CFLAGS += $(libc_common_cflags) -DPTHREAD_DEBUG_ENABLED=false + include $(BUILD_STATIC_LIBRARY) @@ -796,18 +934,20 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(libc_common_src_files) -LOCAL_CFLAGS := $(libc_common_cflags) \ - -std=gnu99 \ - -I$(LOCAL_PATH)/upstream-netbsd/libc/include # for netbsd private headers +LOCAL_CFLAGS := $(libc_common_cflags) +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_common -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_WHOLE_STATIC_LIBRARIES := \ libbionic_ssp \ libc_bionic \ + libc_dns \ libc_freebsd \ libc_netbsd \ - libc_tzcode + libc_tzcode \ + LOCAL_SYSTEM_SHARED_LIBRARIES := # TODO: split out the asflags. @@ -835,11 +975,12 @@ LOCAL_SRC_FILES := \ LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_CFLAGS := $(libc_common_cflags) \ - -DLIBC_STATIC \ - -std=gnu99 + -DLIBC_STATIC +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_MODULE := libc_nomalloc -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_WHOLE_STATIC_LIBRARIES := libc_common LOCAL_SYSTEM_SHARED_LIBRARIES := @@ -859,11 +1000,12 @@ LOCAL_SRC_FILES := \ bionic/libc_init_static.cpp LOCAL_CFLAGS := $(libc_common_cflags) \ - -DLIBC_STATIC \ - -std=gnu99 + -DLIBC_STATIC +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_WHOLE_STATIC_LIBRARIES := libc_common LOCAL_SYSTEM_SHARED_LIBRARIES := @@ -875,36 +1017,34 @@ include $(BUILD_STATIC_LIBRARY) # ======================================================== include $(CLEAR_VARS) -# pthread deadlock prediction: -# set -DPTHREAD_DEBUG -DPTHREAD_DEBUG_ENABLED=1 to enable support for -# pthread deadlock prediction. -# Since this code is experimental it is disabled by default. -# see libc/bionic/pthread_debug.c for details - -LOCAL_CFLAGS := $(libc_common_cflags) -std=gnu99 -DPTHREAD_DEBUG -DPTHREAD_DEBUG_ENABLED=0 +LOCAL_CFLAGS := $(libc_common_cflags) +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_SRC_FILES := \ - $(libc_arch_dynamic_src_files) \ - $(libc_static_common_src_files) \ - bionic/dlmalloc.c \ - bionic/malloc_debug_common.cpp \ - bionic/pthread_debug.cpp \ - bionic/libc_init_dynamic.cpp + $(libc_arch_dynamic_src_files) \ + $(libc_static_common_src_files) \ + bionic/dlmalloc.c \ + bionic/malloc_debug_common.cpp \ + bionic/debug_mapinfo.cpp \ + bionic/debug_stacktrace.cpp \ + bionic/pthread_debug.cpp \ + bionic/libc_init_dynamic.cpp \ ifeq ($(TARGET_ARCH),arm) LOCAL_NO_CRT := true LOCAL_CFLAGS += -DCRT_LEGACY_WORKAROUND LOCAL_SRC_FILES := \ - arch-arm/bionic/crtbegin_so.c \ + arch-common/bionic/crtbegin_so.c \ arch-arm/bionic/atexit_legacy.c \ $(LOCAL_SRC_FILES) \ - arch-arm/bionic/crtend_so.S + arch-common/bionic/crtend_so.S endif LOCAL_MODULE:= libc -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_REQUIRED_MODULES := tzdata # WARNING: The only library libc.so should depend on is libdl.so! If you add other libraries, @@ -938,6 +1078,8 @@ include $(CLEAR_VARS) LOCAL_CFLAGS := \ $(libc_common_cflags) \ -DMALLOC_LEAK_CHECK +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) @@ -948,7 +1090,7 @@ LOCAL_SRC_FILES := \ bionic/malloc_debug_check.cpp \ LOCAL_MODULE:= libc_malloc_debug_leak -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SHARED_LIBRARIES := libc libdl LOCAL_WHOLE_STATIC_LIBRARIES := libc_common @@ -969,6 +1111,8 @@ include $(CLEAR_VARS) LOCAL_CFLAGS := \ $(libc_common_cflags) \ -DMALLOC_QEMU_INSTRUMENT +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) @@ -976,7 +1120,7 @@ LOCAL_SRC_FILES := \ bionic/malloc_debug_qemu.cpp LOCAL_MODULE:= libc_malloc_debug_qemu -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SHARED_LIBRARIES := libc libdl LOCAL_WHOLE_STATIC_LIBRARIES := libc_common |