summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libm/Android.mk134
1 files changed, 66 insertions, 68 deletions
diff --git a/libm/Android.mk b/libm/Android.mk
index cc2b8be..f27c62e 100644
--- a/libm/Android.mk
+++ b/libm/Android.mk
@@ -3,18 +3,19 @@ LOCAL_PATH:= $(call my-dir)
bionic_coverage := false
-# TODO: this comes from from upstream's libc, not libm, but it's an
-# implementation detail that should have hidden visibility, so it needs
-# to be in whatever library the math code is in.
-libm_common_src_files := \
- digittoint.c \
+ifneq (,$(filter $(TARGET_ARCH),x86 x86_64))
+# Clang has wrong long double sizes for x86.
+libm_clang := false
+endif
-# TODO: this is not in the BSDs.
-libm_common_src_files += \
- significandl.c \
- sincos.c \
+# -----------------------------------------------------------------------------
+# libm.a
+# -----------------------------------------------------------------------------
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libm
-libm_common_src_files += \
+LOCAL_SRC_FILES := \
upstream-freebsd/lib/msun/bsdsrc/b_exp.c \
upstream-freebsd/lib/msun/bsdsrc/b_log.c \
upstream-freebsd/lib/msun/bsdsrc/b_tgamma.c \
@@ -186,11 +187,10 @@ libm_common_src_files += \
upstream-freebsd/lib/msun/src/w_drem.c \
upstream-freebsd/lib/msun/src/w_dremf.c \
-libm_common_src_files += \
+LOCAL_SRC_FILES_32 += \
fake_long_double.c \
- signbit.c \
-libm_ld128_src_files = \
+LOCAL_SRC_FILES_64 := \
upstream-freebsd/lib/msun/src/e_acosl.c \
upstream-freebsd/lib/msun/src/e_acoshl.c \
upstream-freebsd/lib/msun/src/e_asinl.c \
@@ -234,7 +234,7 @@ libm_ld128_src_files = \
upstream-freebsd/lib/msun/src/s_tanl.c \
upstream-freebsd/lib/msun/src/s_truncl.c \
-libm_ld128_src_files += \
+LOCAL_SRC_FILES_64 += \
upstream-freebsd/lib/msun/ld128/invtrig.c \
upstream-freebsd/lib/msun/ld128/e_lgammal_r.c \
upstream-freebsd/lib/msun/ld128/k_cosl.c \
@@ -246,11 +246,46 @@ libm_ld128_src_files += \
upstream-freebsd/lib/msun/ld128/s_logl.c \
upstream-freebsd/lib/msun/ld128/s_nanl.c \
-# TODO: re-enable i387/e_sqrtf.S for x86, and maybe others.
+# TODO: this comes from from upstream's libc, not libm, but it's an
+# implementation detail that should have hidden visibility, so it needs
+# to be in whatever library the math code is in.
+LOCAL_SRC_FILES += \
+ digittoint.c \
+
+# Functionality not in the BSDs.
+LOCAL_SRC_FILES += \
+ significandl.c \
+ sincos.c \
+
+# Modified versions of BSD code.
+LOCAL_SRC_FILES += \
+ signbit.c \
+
+LOCAL_SRC_FILES_arm += \
+ arm/fenv.c \
+
+LOCAL_SRC_FILES_arm64 += \
+ arm64/fenv.c \
+
+LOCAL_SRC_FILES_mips += \
+ mips/fenv.c \
+
+LOCAL_SRC_FILES_x86 += \
+ i387/fenv.c \
+
+LOCAL_SRC_FILES_x86_64 += \
+ amd64/fenv.c \
+
+LOCAL_C_INCLUDES_x86 += $(LOCAL_PATH)/i387
-libm_common_cflags := \
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/upstream-freebsd/lib/msun/src/
+LOCAL_C_INCLUDES_64 += $(LOCAL_PATH)/upstream-freebsd/lib/msun/ld128/
+
+LOCAL_CLANG := $(libm_clang)
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS := \
-DFLT_EVAL_METHOD=0 \
- -std=c99 \
-include $(LOCAL_PATH)/freebsd-compat.h \
-Wno-missing-braces \
-Wno-parentheses \
@@ -262,61 +297,25 @@ libm_common_cflags := \
# Workaround the GCC "(long)fn -> lfn" optimization bug which will result in
# self recursions for lrint, lrintf, and lrintl.
# BUG: 14225968
-libm_common_cflags += -fno-builtin-rint -fno-builtin-rintf -fno-builtin-rintl
+LOCAL_CFLAGS += \
+ -fno-builtin-rint \
+ -fno-builtin-rintf \
+ -fno-builtin-rintl \
-libm_common_includes := $(LOCAL_PATH)/upstream-freebsd/lib/msun/src/
-
-libm_ld_includes := $(LOCAL_PATH)/upstream-freebsd/lib/msun/ld128/
-
-#
-# libm.a for target.
-#
-include $(CLEAR_VARS)
-ifneq (,$(filter $(TARGET_ARCH),x86 x86_64))
-# Clang has wrong long double sizes for x86.
-LOCAL_CLANG := false
-endif
-LOCAL_MODULE:= libm
-LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
-LOCAL_ARM_MODE := arm
-LOCAL_CFLAGS := $(libm_common_cflags)
-LOCAL_C_INCLUDES += $(libm_common_includes)
-LOCAL_SRC_FILES := $(libm_common_src_files)
-LOCAL_SYSTEM_SHARED_LIBRARIES := libc
+LOCAL_CONLY_FLAGS := \
+ -std=c99 \
LOCAL_NATIVE_COVERAGE := $(bionic_coverage)
LOCAL_ADDRESS_SANITIZER := false
-
-# arch-specific settings
-LOCAL_C_INCLUDES_arm := $(LOCAL_PATH)/arm
-LOCAL_SRC_FILES_arm := arm/fenv.c
-
-LOCAL_C_INCLUDES_arm64 := $(libm_ld_includes)
-LOCAL_SRC_FILES_arm64 := arm64/fenv.c $(libm_ld128_src_files)
-
-LOCAL_C_INCLUDES_x86 := $(LOCAL_PATH)/i387
-LOCAL_SRC_FILES_x86 := i387/fenv.c
-
-LOCAL_C_INCLUDES_x86_64 := $(libm_ld_includes)
-LOCAL_SRC_FILES_x86_64 := amd64/fenv.c $(libm_ld128_src_files)
-
-LOCAL_SRC_FILES_mips := mips/fenv.c
-
-LOCAL_C_INCLUDES_mips64 := $(libm_ld_includes)
-LOCAL_SRC_FILES_mips64 := mips/fenv.c $(libm_ld128_src_files)
-
-LOCAL_CXX_STL := none
include $(BUILD_STATIC_LIBRARY)
-#
-# libm.so for target.
-#
+# -----------------------------------------------------------------------------
+# libm.so
+# -----------------------------------------------------------------------------
include $(CLEAR_VARS)
-ifneq (,$(filter $(TARGET_ARCH),x86 x86_64))
-# Clang has wrong long double sizes for x86.
-LOCAL_CLANG := false
-endif
-LOCAL_MODULE:= libm
+
+LOCAL_MODULE := libm
+LOCAL_CLANG := $(libm_clang)
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
LOCAL_SYSTEM_SHARED_LIBRARIES := libc
LOCAL_WHOLE_STATIC_LIBRARIES := libm
@@ -329,8 +328,7 @@ LOCAL_CXX_STL := none
# We'd really like to do this for all architectures, but since this wasn't done
# before, these symbols must continue to be exported on LP32 for binary
# compatibility.
-LOCAL_LDFLAGS_arm64 := -Wl,--exclude-libs,libgcc.a
-LOCAL_LDFLAGS_mips64 := -Wl,--exclude-libs,libgcc.a
-LOCAL_LDFLAGS_x86_64 := -Wl,--exclude-libs,libgcc.a
+LOCAL_LDFLAGS_64 := -Wl,--exclude-libs,libgcc.a
+
include $(BUILD_SHARED_LIBRARY)
endif