Android.mk revision 9939506f2e20a9989daf409ed1979f43de0a6222
1# 2# Copyright (C) 2012 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16# 17 18LOCAL_PATH := $(call my-dir) 19 20# The following list contains platform-independent functionalities. 21# 22# Skip apple_versioning.c since it is unused. 23# Skip atomic.c since it needs to be built separately according to the docs. 24# Skip clear_cache.c since it redefines a system function on Android. 25# Skip gcc_personality_v0.c since it depends on libunwind. 26libcompiler_rt_common_SRC_FILES := \ 27 lib/absvdi2.c \ 28 lib/absvsi2.c \ 29 lib/absvti2.c \ 30 lib/adddf3.c \ 31 lib/addsf3.c \ 32 lib/addvdi3.c \ 33 lib/addvsi3.c \ 34 lib/addvti3.c \ 35 lib/ashldi3.c \ 36 lib/ashlti3.c \ 37 lib/ashrdi3.c \ 38 lib/ashrti3.c \ 39 lib/clzdi2.c \ 40 lib/clzsi2.c \ 41 lib/clzti2.c \ 42 lib/cmpdi2.c \ 43 lib/cmpti2.c \ 44 lib/comparedf2.c \ 45 lib/comparesf2.c \ 46 lib/ctzdi2.c \ 47 lib/ctzsi2.c \ 48 lib/ctzti2.c \ 49 lib/divdc3.c \ 50 lib/divdf3.c \ 51 lib/divdi3.c \ 52 lib/divmoddi4.c \ 53 lib/divmodsi4.c \ 54 lib/divsc3.c \ 55 lib/divsf3.c \ 56 lib/divsi3.c \ 57 lib/divti3.c \ 58 lib/divxc3.c \ 59 lib/enable_execute_stack.c \ 60 lib/eprintf.c \ 61 lib/extendsfdf2.c \ 62 lib/ffsdi2.c \ 63 lib/ffsti2.c \ 64 lib/fixdfdi.c \ 65 lib/fixdfsi.c \ 66 lib/fixdfti.c \ 67 lib/fixsfdi.c \ 68 lib/fixsfsi.c \ 69 lib/fixsfti.c \ 70 lib/fixunsdfdi.c \ 71 lib/fixunsdfsi.c \ 72 lib/fixunsdfti.c \ 73 lib/fixunssfdi.c \ 74 lib/fixunssfsi.c \ 75 lib/fixunssfti.c \ 76 lib/fixunsxfdi.c \ 77 lib/fixunsxfsi.c \ 78 lib/fixunsxfti.c \ 79 lib/fixxfdi.c \ 80 lib/fixxfti.c \ 81 lib/floatdidf.c \ 82 lib/floatdisf.c \ 83 lib/floatdixf.c \ 84 lib/floatsidf.c \ 85 lib/floatsisf.c \ 86 lib/floattidf.c \ 87 lib/floattisf.c \ 88 lib/floattixf.c \ 89 lib/floatundidf.c \ 90 lib/floatundisf.c \ 91 lib/floatundixf.c \ 92 lib/floatunsidf.c \ 93 lib/floatunsisf.c \ 94 lib/floatuntidf.c \ 95 lib/floatuntisf.c \ 96 lib/floatuntixf.c \ 97 lib/int_util.c \ 98 lib/lshrdi3.c \ 99 lib/lshrti3.c \ 100 lib/moddi3.c \ 101 lib/modsi3.c \ 102 lib/modti3.c \ 103 lib/muldc3.c \ 104 lib/muldf3.c \ 105 lib/muldi3.c \ 106 lib/mulodi4.c \ 107 lib/mulosi4.c \ 108 lib/muloti4.c \ 109 lib/mulsc3.c \ 110 lib/mulsf3.c \ 111 lib/multi3.c \ 112 lib/mulvdi3.c \ 113 lib/mulvsi3.c \ 114 lib/mulvti3.c \ 115 lib/mulxc3.c \ 116 lib/negdf2.c \ 117 lib/negdi2.c \ 118 lib/negsf2.c \ 119 lib/negti2.c \ 120 lib/negvdi2.c \ 121 lib/negvsi2.c \ 122 lib/negvti2.c \ 123 lib/paritydi2.c \ 124 lib/paritysi2.c \ 125 lib/parityti2.c \ 126 lib/popcountdi2.c \ 127 lib/popcountsi2.c \ 128 lib/popcountti2.c \ 129 lib/powidf2.c \ 130 lib/powisf2.c \ 131 lib/powitf2.c \ 132 lib/powixf2.c \ 133 lib/subdf3.c \ 134 lib/subsf3.c \ 135 lib/subvdi3.c \ 136 lib/subvsi3.c \ 137 lib/subvti3.c \ 138 lib/trampoline_setup.c \ 139 lib/truncdfsf2.c \ 140 lib/ucmpdi2.c \ 141 lib/ucmpti2.c \ 142 lib/udivdi3.c \ 143 lib/udivmoddi4.c \ 144 lib/udivmodsi4.c \ 145 lib/udivmodti4.c \ 146 lib/udivsi3.c \ 147 lib/udivti3.c \ 148 lib/umoddi3.c \ 149 lib/umodsi3.c \ 150 lib/umodti3.c 151 152# ARM-specific runtimes 153libcompiler_rt_arm_SRC_FILES := \ 154 lib/arm/aeabi_dcmp.S \ 155 lib/arm/aeabi_fcmp.S \ 156 lib/arm/aeabi_idivmod.S \ 157 lib/arm/aeabi_ldivmod.S \ 158 lib/arm/aeabi_memcmp.S \ 159 lib/arm/aeabi_memcpy.S \ 160 lib/arm/aeabi_memmove.S \ 161 lib/arm/aeabi_memset.S \ 162 lib/arm/aeabi_uidivmod.S \ 163 lib/arm/aeabi_uldivmod.S \ 164 lib/arm/comparesf2.S \ 165 lib/arm/divmodsi4.S \ 166 lib/arm/divsi3.S \ 167 lib/arm/modsi3.S \ 168 lib/arm/udivmodsi4.S \ 169 lib/arm/udivsi3.S \ 170 lib/arm/umodsi3.S 171 172# MIPS-specific runtimes 173libcompiler_rt_mips_SRC_FILES := # nothing to add 174 175# X86-specific runtimes 176libcompiler_rt_x86_SRC_FILES := \ 177 lib/i386/ashldi3.S \ 178 lib/i386/ashrdi3.S \ 179 lib/i386/divdi3.S \ 180 lib/i386/floatdidf.S \ 181 lib/i386/floatdisf.S \ 182 lib/i386/floatdixf.S \ 183 lib/i386/floatundidf.S \ 184 lib/i386/floatundisf.S \ 185 lib/i386/floatundixf.S \ 186 lib/i386/lshrdi3.S \ 187 lib/i386/moddi3.S \ 188 lib/i386/muldi3.S \ 189 lib/i386/udivdi3.S \ 190 lib/i386/umoddi3.S 191 192# X86_64-specific runtimes 193libcompiler_rt_x86_64_SRC_FILES := \ 194 lib/x86_64/floatundixf.S \ 195 lib/x86_64/floatdisf.c \ 196 lib/x86_64/floatdidf.c \ 197 lib/x86_64/floatdixf.c \ 198 lib/x86_64/floatundisf.S \ 199 lib/x86_64/floatundidf.S 200 201# The following list contains functions that are not available in libgcc.a, so 202# we potentially need them when using a Clang-built component (e.g., -ftrapv 203# with 64-bit integer multiplies. See http://llvm.org/bugs/show_bug.cgi?id=14469.) 204libcompiler_rt_extras_SRC_FILES := \ 205 lib/mulodi4.c 206 207# $(1): arch 208define get-libcompiler-rt-source-files 209 $(if $(findstring $(1),arm),$(call get-libcompiler-rt-arm-source-files), 210 $(if $(findstring $(1),mips),$(call get-libcompiler-rt-mips-source-files), 211 $(if $(findstring $(1),x86),$(call get-libcompiler-rt-x86-source-files), 212 $(if $(findstring $(1),x86_64),$(call get-libcompiler-rt-x86_64-source-files), 213 $(if $(findstring $(1),x32),$(call get-libcompiler-rt-x86-source-files), 214 $(error Unsupported ARCH $(1))))))) 215endef 216 217# $(1): source list 218# $(2): arch 219# 220# If lib/<arch>/X.[cS] is included in the source list, we should filter out lib/X.c 221# in the result source list (i.e., use the one optimized for the arch.) Otherwise 222# there'll be multiple definitions for one symbol. 223define filter-libcompiler-rt-common-source-files 224 $(filter-out $(patsubst lib/$(strip $(2))/%.S,lib/%.c,\ 225 $(filter lib/$(strip $(2))/%.S,$(1))) \ 226 $(patsubst lib/$(strip $(2))/%.c,lib/%.c,\ 227 $(filter lib/$(strip $(2))/%.c,$(1))),$(1)) 228endef 229 230define get-libcompiler-rt-arm-common-source-files 231 $(call filter-libcompiler-rt-common-source-files, 232 $(libcompiler_rt_common_SRC_FILES) \ 233 $(libcompiler_rt_arm_SRC_FILES), arm) 234endef 235 236# $(1): common runtime list 237# 238# Add ARM runtimes implemented in VFP 239define add-libcompiler-rt-arm-vfp-source-files 240 $(filter-out $(addprefix lib/,adddf3.c addsf3.c comparedf2.c comparesf2.c \ 241 arm/comparesf2.S divdf3.c divsf3.c extendsfdf2.c \ 242 fixdfsi.c fixsfsi.c fixunsdfsi.c fixunssfsi.c \ 243 floatsidf.c floatsisf.c floatunsidf.c floatunsisf.c \ 244 muldf3.c mulsf3.c negdf2.c negsf2.c subdf3.c \ 245 subsf3.c truncdfsf2.c),$(1)) lib/arm/vfp_alias.S 246endef 247 248define get-libcompiler-rt-arm-source-files 249 $(if $(findstring $(ARCH_ARM_HAVE_VFP),true), 250 $(call add-libcompiler-rt-arm-vfp-source-files, 251 $(call get-libcompiler-rt-arm-common-source-files)), 252 $(call get-libcompiler-rt-arm-common-source-files)) 253endef 254 255define get-libcompiler-rt-mips-source-files 256 $(call filter-libcompiler-rt-common-source-files, 257 $(libcompiler_rt_common_SRC_FILES) \ 258 $(libcompiler_rt_mips_SRC_FILES),mips) 259endef 260 261define get-libcompiler-rt-x86-source-files 262 $(call filter-libcompiler-rt-common-source-files, 263 $(libcompiler_rt_common_SRC_FILES) \ 264 $(libcompiler_rt_x86_SRC_FILES),i386) 265endef 266 267define get-libcompiler-rt-x86_64-source-files 268 $(call filter-libcompiler-rt-common-source-files, 269 $(libcompiler_rt_common_SRC_FILES) \ 270 $(libcompiler_rt_x86_64_SRC_FILES),x86_64) 271endef 272 273# $(1): target or host 274# $(2): static or shared 275define build-libcompiler-rt 276 ifneq ($(1),target) 277 ifneq ($(1),host) 278 $$(error expected target or host for argument 1, received $(1)) 279 endif 280 endif 281 ifneq ($(2),static) 282 ifneq ($(2),shared) 283 $$(error expected static or shared for argument 2, received $(2)) 284 endif 285 endif 286 287 target_or_host := $(1) 288 static_or_shared := $(2) 289 290 arch := 291 ifeq ($$(target_or_host),target) 292 arch := $(TARGET_ARCH) 293 else 294 arch := $(HOST_ARCH) 295 endif 296 297 include $(CLEAR_VARS) 298 299 LOCAL_MODULE := libcompiler_rt 300 LOCAL_MODULE_TAGS := optional 301 302 ifeq ($$(static_or_shared),static) 303 LOCAL_MODULE_CLASS := STATIC_LIBRARIES 304 else 305 LOCAL_MODULE_CLASS := SHARED_LIBRARIES 306 endif 307 308 # TODO: Fix -integrated-as 309 # LOCAL_CFLAGS := -integrated-as 310 311 # Add -D__ARM_EABI__ for ARM 312 ifeq ($$(arch),arm) 313 LOCAL_CFLAGS += -D__ARM_EABI__ 314 endif 315 316 # Use MC assembler to compile assembly 317 LOCAL_ASFLAGS += -integrated-as 318 319 # Use Clang to compile libcompiler_rt 320 LOCAL_CLANG := true 321 LOCAL_SRC_FILES := $$(call get-libcompiler-rt-source-files,$$(arch)) 322 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk 323 324 ifeq ($$(target_or_host),target) 325 ifeq ($$(static_or_shared),static) 326 include $(BUILD_STATIC_LIBRARY) 327 else 328 include $(BUILD_SHARED_LIBRARY) 329 endif 330 else 331 LOCAL_IS_HOST_MODULE := true 332 ifeq ($$(static_or_shared),static) 333 include $(BUILD_HOST_STATIC_LIBRARY) 334 else 335 include $(BUILD_HOST_SHARED_LIBRARY) 336 endif 337 endif 338endef 339 340#===================================================================== 341# Device Static Library: libcompiler_rt-extras 342#===================================================================== 343 344include $(CLEAR_VARS) 345 346LOCAL_MODULE := libcompiler_rt-extras 347LOCAL_MODULE_TAGS := optional 348LOCAL_MODULE_CLASS := STATIC_LIBRARIES 349LOCAL_CLANG := true 350LOCAL_SRC_FILES := $(libcompiler_rt_extras_SRC_FILES) 351LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk 352 353include $(BUILD_STATIC_LIBRARY) 354 355#===================================================================== 356# Device Static Library: libcompiler_rt 357#===================================================================== 358#TODOAArch64: Enable compiler-rt build 359ifneq ($(TARGET_ARCH),aarch64) 360$(eval $(call build-libcompiler-rt,target,static)) 361endif 362 363#===================================================================== 364# Device Shared Library: libcompiler_rt 365#===================================================================== 366 367#TODOAArch64: Enable libcompiler_rt build 368ifneq ($(TARGET_ARCH),aarch64) 369$(eval $(call build-libcompiler-rt,target,shared)) 370endif 371 372# Build ASan 373include $(LOCAL_PATH)/lib/asan/Android.mk 374