| # |
| # Copyright (C) 2012 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| # |
| |
| LOCAL_PATH := $(call my-dir) |
| |
| # The following list contains platform-independent functionalities. |
| # |
| # Skip apple_versioning.c since it is unused. |
| # Skip atomic.c since it needs to be built separately according to the docs. |
| # Skip gcc_personality_v0.c since it depends on libunwind. |
| libcompiler_rt_common_SRC_FILES := \ |
| lib/absvdi2.c \ |
| lib/absvsi2.c \ |
| lib/absvti2.c \ |
| lib/adddf3.c \ |
| lib/addsf3.c \ |
| lib/addvdi3.c \ |
| lib/addvsi3.c \ |
| lib/addvti3.c \ |
| lib/ashldi3.c \ |
| lib/ashlti3.c \ |
| lib/ashrdi3.c \ |
| lib/ashrti3.c \ |
| lib/clear_cache.c \ |
| lib/clzdi2.c \ |
| lib/clzsi2.c \ |
| lib/clzti2.c \ |
| lib/cmpdi2.c \ |
| lib/cmpti2.c \ |
| lib/comparedf2.c \ |
| lib/comparesf2.c \ |
| lib/ctzdi2.c \ |
| lib/ctzsi2.c \ |
| lib/ctzti2.c \ |
| lib/divdc3.c \ |
| lib/divdf3.c \ |
| lib/divdi3.c \ |
| lib/divmoddi4.c \ |
| lib/divmodsi4.c \ |
| lib/divsc3.c \ |
| lib/divsf3.c \ |
| lib/divsi3.c \ |
| lib/divti3.c \ |
| lib/divxc3.c \ |
| lib/enable_execute_stack.c \ |
| lib/eprintf.c \ |
| lib/extendsfdf2.c \ |
| lib/ffsdi2.c \ |
| lib/ffsti2.c \ |
| lib/fixdfdi.c \ |
| lib/fixdfsi.c \ |
| lib/fixdfti.c \ |
| lib/fixsfdi.c \ |
| lib/fixsfsi.c \ |
| lib/fixsfti.c \ |
| lib/fixunsdfdi.c \ |
| lib/fixunsdfsi.c \ |
| lib/fixunsdfti.c \ |
| lib/fixunssfdi.c \ |
| lib/fixunssfsi.c \ |
| lib/fixunssfti.c \ |
| lib/fixunsxfdi.c \ |
| lib/fixunsxfsi.c \ |
| lib/fixunsxfti.c \ |
| lib/fixxfdi.c \ |
| lib/fixxfti.c \ |
| lib/floatdidf.c \ |
| lib/floatdisf.c \ |
| lib/floatdixf.c \ |
| lib/floatsidf.c \ |
| lib/floatsisf.c \ |
| lib/floattidf.c \ |
| lib/floattisf.c \ |
| lib/floattixf.c \ |
| lib/floatundidf.c \ |
| lib/floatundisf.c \ |
| lib/floatundixf.c \ |
| lib/floatunsidf.c \ |
| lib/floatunsisf.c \ |
| lib/floatuntidf.c \ |
| lib/floatuntisf.c \ |
| lib/floatuntixf.c \ |
| lib/int_util.c \ |
| lib/lshrdi3.c \ |
| lib/lshrti3.c \ |
| lib/moddi3.c \ |
| lib/modsi3.c \ |
| lib/modti3.c \ |
| lib/muldc3.c \ |
| lib/muldf3.c \ |
| lib/muldi3.c \ |
| lib/mulodi4.c \ |
| lib/mulosi4.c \ |
| lib/muloti4.c \ |
| lib/mulsc3.c \ |
| lib/mulsf3.c \ |
| lib/multi3.c \ |
| lib/mulvdi3.c \ |
| lib/mulvsi3.c \ |
| lib/mulvti3.c \ |
| lib/mulxc3.c \ |
| lib/negdf2.c \ |
| lib/negdi2.c \ |
| lib/negsf2.c \ |
| lib/negti2.c \ |
| lib/negvdi2.c \ |
| lib/negvsi2.c \ |
| lib/negvti2.c \ |
| lib/paritydi2.c \ |
| lib/paritysi2.c \ |
| lib/parityti2.c \ |
| lib/popcountdi2.c \ |
| lib/popcountsi2.c \ |
| lib/popcountti2.c \ |
| lib/powidf2.c \ |
| lib/powisf2.c \ |
| lib/powitf2.c \ |
| lib/powixf2.c \ |
| lib/subdf3.c \ |
| lib/subsf3.c \ |
| lib/subvdi3.c \ |
| lib/subvsi3.c \ |
| lib/subvti3.c \ |
| lib/trampoline_setup.c \ |
| lib/truncdfsf2.c \ |
| lib/ucmpdi2.c \ |
| lib/ucmpti2.c \ |
| lib/udivdi3.c \ |
| lib/udivmoddi4.c \ |
| lib/udivmodsi4.c \ |
| lib/udivmodti4.c \ |
| lib/udivsi3.c \ |
| lib/udivti3.c \ |
| lib/umoddi3.c \ |
| lib/umodsi3.c \ |
| lib/umodti3.c |
| |
| # ARM-specific runtimes |
| libcompiler_rt_arm_SRC_FILES := \ |
| lib/arm/aeabi_dcmp.S \ |
| lib/arm/aeabi_fcmp.S \ |
| lib/arm/aeabi_idivmod.S \ |
| lib/arm/aeabi_ldivmod.S \ |
| lib/arm/aeabi_memcmp.S \ |
| lib/arm/aeabi_memcpy.S \ |
| lib/arm/aeabi_memmove.S \ |
| lib/arm/aeabi_memset.S \ |
| lib/arm/aeabi_uidivmod.S \ |
| lib/arm/aeabi_uldivmod.S \ |
| lib/arm/comparesf2.S \ |
| lib/arm/divmodsi4.S \ |
| lib/arm/divsi3.S \ |
| lib/arm/modsi3.S \ |
| lib/arm/udivmodsi4.S \ |
| lib/arm/udivsi3.S \ |
| lib/arm/umodsi3.S |
| |
| # ARM64-specific runtimes |
| libcompiler_rt_arm64_SRC_FILES := |
| |
| # MIPS-specific runtimes |
| libcompiler_rt_mips_SRC_FILES := # nothing to add |
| |
| # X86-specific runtimes |
| libcompiler_rt_x86_SRC_FILES := \ |
| lib/i386/ashldi3.S \ |
| lib/i386/ashrdi3.S \ |
| lib/i386/divdi3.S \ |
| lib/i386/floatdidf.S \ |
| lib/i386/floatdisf.S \ |
| lib/i386/floatdixf.S \ |
| lib/i386/floatundidf.S \ |
| lib/i386/floatundisf.S \ |
| lib/i386/floatundixf.S \ |
| lib/i386/lshrdi3.S \ |
| lib/i386/moddi3.S \ |
| lib/i386/muldi3.S \ |
| lib/i386/udivdi3.S \ |
| lib/i386/umoddi3.S |
| |
| # X86_64-specific runtimes |
| libcompiler_rt_x86_64_SRC_FILES := \ |
| lib/x86_64/floatundixf.S \ |
| lib/x86_64/floatdisf.c \ |
| lib/x86_64/floatdidf.c \ |
| lib/x86_64/floatdixf.c \ |
| lib/x86_64/floatundisf.S \ |
| lib/x86_64/floatundidf.S |
| |
| # The following list contains functions that are not available in libgcc.a, so |
| # we potentially need them when using a Clang-built component (e.g., -ftrapv |
| # with 64-bit integer multiplies. See http://llvm.org/bugs/show_bug.cgi?id=14469.) |
| libcompiler_rt_extras_SRC_FILES := \ |
| lib/mulodi4.c |
| |
| # $(1): arch |
| define get-libcompiler-rt-source-files |
| $(if $(findstring $(1),arm),$(call get-libcompiler-rt-arm-source-files), |
| $(if $(findstring $(1),mips),$(call get-libcompiler-rt-mips-source-files), |
| $(if $(findstring $(1),x86),$(call get-libcompiler-rt-x86-source-files), |
| $(if $(findstring $(1),x86_64),$(call get-libcompiler-rt-x86_64-source-files), |
| $(if $(findstring $(1),x32),$(call get-libcompiler-rt-x86-source-files), |
| $(if $(findstring $(1),arm64),$(call get-libcompiler-rt-arm64-source-files), |
| $(error Unsupported ARCH $(1)))))))) |
| endef |
| |
| # $(1): source list |
| # $(2): arch |
| # |
| # If lib/<arch>/X.[cS] is included in the source list, we should filter out lib/X.c |
| # in the result source list (i.e., use the one optimized for the arch.) Otherwise |
| # there'll be multiple definitions for one symbol. |
| define filter-libcompiler-rt-common-source-files |
| $(filter-out $(patsubst lib/$(strip $(2))/%.S,lib/%.c,\ |
| $(filter lib/$(strip $(2))/%.S,$(1))) \ |
| $(patsubst lib/$(strip $(2))/%.c,lib/%.c,\ |
| $(filter lib/$(strip $(2))/%.c,$(1))),$(1)) |
| endef |
| |
| define get-libcompiler-rt-arm-common-source-files |
| $(call filter-libcompiler-rt-common-source-files, |
| $(libcompiler_rt_common_SRC_FILES) \ |
| $(libcompiler_rt_arm_SRC_FILES), arm) |
| endef |
| |
| # $(1): common runtime list |
| # |
| # Add ARM runtimes implemented in VFP |
| define add-libcompiler-rt-arm-vfp-source-files |
| $(filter-out $(addprefix lib/,adddf3.c addsf3.c comparedf2.c comparesf2.c \ |
| arm/comparesf2.S divdf3.c divsf3.c extendsfdf2.c \ |
| fixdfsi.c fixsfsi.c fixunsdfsi.c fixunssfsi.c \ |
| floatsidf.c floatsisf.c floatunsidf.c floatunsisf.c \ |
| muldf3.c mulsf3.c negdf2.c negsf2.c subdf3.c \ |
| subsf3.c truncdfsf2.c),$(1)) lib/arm/vfp_alias.S |
| endef |
| |
| define get-libcompiler-rt-arm-source-files |
| $(if $(findstring $(ARCH_ARM_HAVE_VFP),true), |
| $(call add-libcompiler-rt-arm-vfp-source-files, |
| $(call get-libcompiler-rt-arm-common-source-files)), |
| $(call get-libcompiler-rt-arm-common-source-files)) |
| endef |
| |
| define get-libcompiler-rt-arm64-source-files |
| $(call filter-libcompiler-rt-common-source-files, |
| $(libcompiler_rt_common_SRC_FILES) \ |
| $(libcompiler_rt_arm64_SRC_FILES),arm64) |
| endef |
| |
| define get-libcompiler-rt-mips-source-files |
| $(call filter-libcompiler-rt-common-source-files, |
| $(libcompiler_rt_common_SRC_FILES) \ |
| $(libcompiler_rt_mips_SRC_FILES),mips) |
| endef |
| |
| define get-libcompiler-rt-x86-source-files |
| $(call filter-libcompiler-rt-common-source-files, |
| $(libcompiler_rt_common_SRC_FILES) \ |
| $(libcompiler_rt_x86_SRC_FILES),i386) |
| endef |
| |
| define get-libcompiler-rt-x86_64-source-files |
| $(call filter-libcompiler-rt-common-source-files, |
| $(libcompiler_rt_common_SRC_FILES) \ |
| $(libcompiler_rt_x86_64_SRC_FILES),x86_64) |
| endef |
| |
| #===================================================================== |
| # Device Static Library: libcompiler_rt-extras |
| #===================================================================== |
| |
| include $(CLEAR_VARS) |
| |
| LOCAL_MODULE := libcompiler_rt-extras |
| LOCAL_MODULE_TAGS := optional |
| LOCAL_MODULE_CLASS := STATIC_LIBRARIES |
| LOCAL_CLANG := true |
| LOCAL_SRC_FILES := $(libcompiler_rt_extras_SRC_FILES) |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| |
| include $(BUILD_STATIC_LIBRARY) |
| |
| # Don't build compiler-rt without clang |
| ifneq ($(WITHOUT_TARGET_CLANG), true) |
| |
| #===================================================================== |
| # Device Static Library: libcompiler_rt |
| #===================================================================== |
| |
| include $(CLEAR_VARS) |
| |
| ifeq ($(TARGET_ARCH),mips64) |
| $(warning TODOMips64: Enable compiler-rt build) |
| endif |
| |
| LOCAL_MODULE := libcompiler_rt |
| LOCAL_CFLAGS_arm += -D__ARM_EABI__ |
| LOCAL_ASFLAGS := -integrated-as |
| LOCAL_CLANG := true |
| LOCAL_SRC_FILES_arm := $(call get-libcompiler-rt-source-files,arm) |
| LOCAL_SRC_FILES_arm64 := $(call get-libcompiler-rt-source-files,arm64) |
| LOCAL_SRC_FILES_mips := $(call get-libcompiler-rt-source-files,mips) |
| LOCAL_SRC_FILES_x86 := $(call get-libcompiler-rt-source-files,x86) |
| LOCAL_SRC_FILES_x86_64 := $(call get-libcompiler-rt-source-files,x86_64) |
| LOCAL_MODULE_TARGET_ARCH := arm arm64 mips x86 x86_64 |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| |
| include $(BUILD_STATIC_LIBRARY) |
| |
| #===================================================================== |
| # Device Shared Library: libcompiler_rt |
| #===================================================================== |
| |
| include $(CLEAR_VARS) |
| |
| LOCAL_MODULE := libcompiler_rt |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| LOCAL_WHOLE_STATIC_LIBRARIES := libcompiler_rt |
| LOCAL_MODULE_TARGET_ARCH := arm arm64 mips x86 x86_64 |
| |
| include $(BUILD_SHARED_LIBRARY) |
| |
| # Build ASan |
| include $(LOCAL_PATH)/lib/asan/Android.mk |
| |
| endif |