Home | History | Annotate | Download | only in support
      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