111cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_PATH := $(call my-dir)
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertandroid_support_c_includes := $(LOCAL_PATH)/include
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertifneq ($(filter $(NDK_KNOWN_DEVICE_ABI64S),$(TARGET_ARCH_ABI)),)
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# 64-bit ABIs
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertandroid_support_sources := \
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/catclose.c \
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/catgets.c \
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/catopen.c
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertelse
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# 32-bit ABIs
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertandroid_support_sources := \
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/locale_support.c \
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/math_support.c \
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/stdlib_support.c \
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/wchar_support.c \
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/locale/duplocale.c \
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/locale/freelocale.c \
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/locale/localeconv.c \
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/locale/newlocale.c \
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/locale/uselocale.c \
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/stdio/stdio_impl.c \
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/stdio/strtod.c \
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/stdio/vfprintf.c \
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/stdio/vfwprintf.c \
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/msun/e_log2.c \
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/msun/e_log2f.c \
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/msun/s_nan.c \
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswalnum.c \
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswalpha.c \
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswblank.c \
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswcntrl.c \
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswctype.c \
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswdigit.c \
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswgraph.c \
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswlower.c \
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswprint.c \
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswpunct.c \
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswspace.c \
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswupper.c \
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/iswxdigit.c \
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/towctrans.c \
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/wcswidth.c \
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/wctrans.c \
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-ctype/wcwidth.c \
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/catclose.c \
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/catgets.c \
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/catopen.c \
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iconv.c \
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/intl.c \
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isalnum_l.c \
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isalpha_l.c \
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isblank_l.c \
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iscntrl_l.c \
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isdigit_l.c \
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isgraph_l.c \
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/islower_l.c \
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isprint_l.c \
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/ispunct_l.c \
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isspace_l.c \
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isupper_l.c \
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswalnum_l.c \
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswalpha_l.c \
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswblank_l.c \
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswcntrl_l.c \
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswctype_l.c \
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswdigit_l.c \
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswgraph_l.c \
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswlower_l.c \
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswprint_l.c \
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswpunct_l.c \
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswspace_l.c \
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswupper_l.c \
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/iswxdigit_l.c \
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/isxdigit_l.c \
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/langinfo.c \
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/strcasecmp_l.c \
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/strcoll.c \
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/strerror_l.c \
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/strfmon.c \
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/strftime_l.c \
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/strncasecmp_l.c \
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/strxfrm.c \
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/tolower_l.c \
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/toupper_l.c \
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/towctrans_l.c \
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/towlower_l.c \
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/towupper_l.c \
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/wcscoll.c \
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/wcsxfrm.c \
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/wctrans_l.c \
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-locale/wctype_l.c \
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-math/frexp.c \
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-math/frexpf.c \
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-math/frexpl.c \
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/btowc.c \
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/internal.c \
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/mblen.c \
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/mbrlen.c \
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/mbrtowc.c \
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/mbsinit.c \
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/mbsnrtowcs.c \
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/mbsrtowcs.c \
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/mbstowcs.c \
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/mbtowc.c \
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/wcrtomb.c \
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/wcsnrtombs.c \
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/wcsrtombs.c \
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/wcstombs.c \
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/wctob.c \
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-multibyte/wctomb.c \
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-stdio/printf.c \
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-stdio/snprintf.c \
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-stdio/sprintf.c \
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-stdio/vprintf.c \
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-stdio/vsprintf.c \
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-stdio/swprintf.c \
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-stdio/vwprintf.c \
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-stdio/wprintf.c \
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/wcstox/floatscan.c \
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/wcstox/intscan.c \
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/wcstox/shgetc.c \
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/wcstox/wcstol.c \
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/wcstox/wcstod.c \
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# Replaces broken implementations in x86 libm.so
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertifeq (x86,$(TARGET_ARCH_ABI))
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertandroid_support_sources += \
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-math/scalbln.c \
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-math/scalblnf.c \
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-math/scalblnl.c \
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    src/musl-math/scalbnl.c \
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertendif
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertendif  # 64-/32-bit ABIs
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertifneq ($(LIBCXX_FORCE_REBUILD),true) # Using prebuilt
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14311cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLIBCXX_LIBS := ../../cxx-stl/llvm-libc++/libs/$(TARGET_ARCH_ABI)
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinclude $(CLEAR_VARS)
14611cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_MODULE := android_support
14711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_SRC_FILES := $(LIBCXX_LIBS)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinclude $(PREBUILT_STATIC_LIBRARY)
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertelse # Building
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# This is only available as a static library for now.
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinclude $(CLEAR_VARS)
15411cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_MODULE := android_support
15511cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_SRC_FILES := $(android_support_sources)
15611cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_C_INCLUDES := $(android_support_c_includes)
15711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_CFLAGS += -Drestrict=__restrict__ -ffunction-sections -fdata-sections -fvisibility=hidden
15811cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_CPPFLAGS += -fvisibility-inlines-hidden
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# These Clang warnings are triggered by the Musl sources. The code is fine,
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# but we don't want to modify it. TODO(digit): This is potentially dangerous,
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# see if there is a way to build the Musl sources in a separate static library
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# and have the main one depend on it, or include its object files.
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertifneq ($(TARGET_TOOLCHAIN),$(subst clang,,$(TARGET_TOOLCHAIN)))
16511cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_CFLAGS += \
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  -Wno-shift-op-parentheses \
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  -Wno-string-plus-int \
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  -Wno-dangling-else \
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  -Wno-bitwise-op-parentheses \
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  -Wno-shift-negative-value
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertendif
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17311cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_CFLAGS += $(android_support_cflags)
17411cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLOCAL_EXPORT_CFLAGS := $(android_support_cflags)
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinclude $(BUILD_STATIC_LIBRARY)
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertendif # Prebuilt/building
178