1 LOCAL_PATH := $(call my-dir) 2 3 android_support_export_c_includes := $(LOCAL_PATH)/include 4 5 ifneq ($(filter $(NDK_KNOWN_DEVICE_ABI64S),$(TARGET_ARCH_ABI)),) 6 is_lp64 := true 7 else 8 is_lp64 := 9 endif 10 11 ifneq ($(LIBCXX_FORCE_REBUILD),true) # Using prebuilt 12 13 LIBCXX_LIBS := ../../cxx-stl/llvm-libc++/libs/$(TARGET_ARCH_ABI) 14 15 include $(CLEAR_VARS) 16 LOCAL_MODULE := android_support 17 LOCAL_SRC_FILES := $(LIBCXX_LIBS)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION) 18 LOCAL_EXPORT_C_INCLUDES := $(android_support_export_c_includes) 19 include $(PREBUILT_STATIC_LIBRARY) 20 21 else # Building 22 23 android_support_c_includes := $(android_support_export_c_includes) 24 android_support_cflags := \ 25 -Drestrict=__restrict__ \ 26 -ffunction-sections \ 27 -fdata-sections \ 28 -fvisibility=hidden \ 29 30 ifeq ($(is_lp64),true) 31 # 64-bit ABIs 32 33 # We don't need this file on LP32 because libc++ has its own fallbacks for these 34 # functions. We can't use those fallbacks for LP64 because the file contains all 35 # the strto*_l functions. LP64 had some of those in L, so the inlines in libc++ 36 # collide with the out-of-line declarations in bionic. 37 android_support_sources := \ 38 src/locale_support.cpp \ 39 40 else 41 # 32-bit ABIs 42 43 BIONIC_PATH := ../../../../bionic 44 45 android_support_c_includes += \ 46 $(BIONIC_PATH)/libc \ 47 $(BIONIC_PATH)/libc/upstream-openbsd/android/include \ 48 $(BIONIC_PATH)/libm \ 49 $(BIONIC_PATH)/libm/upstream-freebsd/android/include \ 50 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src \ 51 52 android_support_cflags += \ 53 -include freebsd-compat.h \ 54 -include openbsd-compat.h \ 55 -D__BIONIC_BUILD_FOR_ANDROID_SUPPORT \ 56 57 android_support_sources := \ 58 $(BIONIC_PATH)/libc/bionic/c32rtomb.cpp \ 59 $(BIONIC_PATH)/libc/bionic/locale.cpp \ 60 $(BIONIC_PATH)/libc/bionic/mbrtoc32.cpp \ 61 $(BIONIC_PATH)/libc/bionic/wchar.cpp \ 62 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcscat.c \ 63 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcschr.c \ 64 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcslen.c \ 65 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsncmp.c \ 66 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsncpy.c \ 67 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcspbrk.c \ 68 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsrchr.c \ 69 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsspn.c \ 70 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsstr.c \ 71 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcstok.c \ 72 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemchr.c \ 73 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemcmp.c \ 74 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemcpy.c \ 75 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemmove.c \ 76 $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemset.c \ 77 $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/locale/mbtowc.c \ 78 $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/stdlib/imaxabs.c \ 79 $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/stdlib/imaxdiv.c \ 80 $(BIONIC_PATH)/libm/digittoint.c \ 81 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_acos.c \ 82 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_acosh.c \ 83 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_asin.c \ 84 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_atan2.c \ 85 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_atanh.c \ 86 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_cosh.c \ 87 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_exp.c \ 88 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_hypot.c \ 89 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_lgamma.c \ 90 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log.c \ 91 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log10.c \ 92 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log2.c \ 93 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log2f.c \ 94 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_logf.c \ 95 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_remainder.c \ 96 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_sinh.c \ 97 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_sqrt.c \ 98 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_cos.c \ 99 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_exp.c \ 100 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_rem_pio2.c \ 101 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_sin.c \ 102 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_tan.c \ 103 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_asinh.c \ 104 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_atan.c \ 105 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_cbrt.c \ 106 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_cos.c \ 107 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_erf.c \ 108 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_exp2.c \ 109 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_expm1.c \ 110 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_frexp.c \ 111 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_frexpf.c \ 112 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_log1p.c \ 113 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_logb.c \ 114 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_nextafter.c \ 115 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_remquo.c \ 116 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_rint.c \ 117 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_sin.c \ 118 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_tan.c \ 119 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_tanh.c \ 120 src/iswblank.cpp \ 121 src/posix_memalign.cpp \ 122 src/swprintf.cpp \ 123 src/wcstox.cpp \ 124 125 ifeq (x86,$(TARGET_ARCH_ABI)) 126 # Replaces broken implementations in x86 libm.so 127 android_support_sources += \ 128 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_scalbln.c \ 129 $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_scalbn.c \ 130 131 # fake_long_double.c doesn't define this for x86. 132 # TODO: seems like we don't pass .S files to the assembler? 133 #android_support_c_includes += $(BIONIC_PATH)/libc/arch-x86/include 134 #android_support_sources += $(BIONIC_PATH)/libm/x86/lrint.S 135 endif 136 137 endif # 64-/32-bit ABIs 138 139 # This is only available as a static library for now. 140 include $(CLEAR_VARS) 141 LOCAL_MODULE := android_support 142 LOCAL_SRC_FILES := $(android_support_sources) 143 LOCAL_C_INCLUDES := $(android_support_c_includes) 144 LOCAL_CFLAGS := $(android_support_cflags) 145 146 LOCAL_CPPFLAGS := \ 147 -fvisibility-inlines-hidden \ 148 -std=c++11 \ 149 -Werror \ 150 151 LOCAL_EXPORT_C_INCLUDES := $(android_support_export_c_includes) 152 153 include $(BUILD_STATIC_LIBRARY) 154 155 endif # Prebuilt/building 156