blob: e1d57130b655331bba4904631581749714b60ff9 [file] [log] [blame]
Evgeniy Stepanovdc3865b2012-03-13 15:38:23 +04001#
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)
Shih-wei Liao139a1062013-01-26 11:29:30 -080019
20# The following list contains platform-independent functionalities.
21#
Shih-wei Liaocec07262013-01-26 22:12:04 -080022# Skip apple_versioning.c since it is unused.
Shih-wei Liao139a1062013-01-26 11:29:30 -080023# Skip atomic.c since it needs to be built separately according to the docs.
Shih-wei Liao4d402312013-01-26 23:20:02 -080024# Skip gcc_personality_v0.c since it depends on libunwind.
Shih-wei Liao139a1062013-01-26 11:29:30 -080025libcompiler_rt_common_SRC_FILES := \
26 lib/absvdi2.c \
27 lib/absvsi2.c \
28 lib/absvti2.c \
29 lib/adddf3.c \
30 lib/addsf3.c \
31 lib/addvdi3.c \
32 lib/addvsi3.c \
33 lib/addvti3.c \
Shih-wei Liao139a1062013-01-26 11:29:30 -080034 lib/ashldi3.c \
35 lib/ashlti3.c \
36 lib/ashrdi3.c \
37 lib/ashrti3.c \
Narayan Kamath1a34dac2014-03-14 13:18:47 +000038 lib/clear_cache.c \
Shih-wei Liao139a1062013-01-26 11:29:30 -080039 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 \
Shih-wei Liao139a1062013-01-26 11:29:30 -080097 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 \
Shih-wei Liaof5c93a02013-01-26 23:02:34 -0800106 lib/mulodi4.c \
Shih-wei Liao139a1062013-01-26 11:29:30 -0800107 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 := \
Shih-wei Liaoe1c8a832013-02-07 07:33:11 -0800154 lib/arm/aeabi_dcmp.S \
155 lib/arm/aeabi_fcmp.S \
Shih-wei Liaofe42f082013-01-26 23:26:12 -0800156 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 \
Shih-wei Liaoece62642013-02-07 07:49:51 -0800163 lib/arm/aeabi_uldivmod.S \
Shih-wei Liao6fd582c2013-01-27 00:41:48 -0800164 lib/arm/comparesf2.S \
Shih-wei Liao6fd582c2013-01-27 00:41:48 -0800165 lib/arm/divmodsi4.S \
Shih-wei Liao6fd582c2013-01-27 00:41:48 -0800166 lib/arm/divsi3.S \
Shih-wei Liao6fd582c2013-01-27 00:41:48 -0800167 lib/arm/modsi3.S \
Shih-wei Liao6fd582c2013-01-27 00:41:48 -0800168 lib/arm/udivmodsi4.S \
169 lib/arm/udivsi3.S \
Shih-wei Liaoece62642013-02-07 07:49:51 -0800170 lib/arm/umodsi3.S
Shih-wei Liao139a1062013-01-26 11:29:30 -0800171
Tim Murray6731c552014-03-10 11:10:47 -0700172# ARM64-specific runtimes
173libcompiler_rt_arm64_SRC_FILES :=
174
Shih-wei Liao139a1062013-01-26 11:29:30 -0800175# MIPS-specific runtimes
176libcompiler_rt_mips_SRC_FILES := # nothing to add
177
178# X86-specific runtimes
Shih-wei Liao139a1062013-01-26 11:29:30 -0800179libcompiler_rt_x86_SRC_FILES := \
180 lib/i386/ashldi3.S \
181 lib/i386/ashrdi3.S \
182 lib/i386/divdi3.S \
183 lib/i386/floatdidf.S \
184 lib/i386/floatdisf.S \
185 lib/i386/floatdixf.S \
186 lib/i386/floatundidf.S \
187 lib/i386/floatundisf.S \
188 lib/i386/floatundixf.S \
189 lib/i386/lshrdi3.S \
190 lib/i386/moddi3.S \
191 lib/i386/muldi3.S \
192 lib/i386/udivdi3.S \
193 lib/i386/umoddi3.S
194
Alexey Volkov99395062014-01-17 17:44:56 +0400195# X86_64-specific runtimes
196libcompiler_rt_x86_64_SRC_FILES := \
197 lib/x86_64/floatundixf.S \
198 lib/x86_64/floatdisf.c \
199 lib/x86_64/floatdidf.c \
200 lib/x86_64/floatdixf.c \
201 lib/x86_64/floatundisf.S \
202 lib/x86_64/floatundidf.S
203
Shih-wei Liao139a1062013-01-26 11:29:30 -0800204# The following list contains functions that are not available in libgcc.a, so
205# we potentially need them when using a Clang-built component (e.g., -ftrapv
206# with 64-bit integer multiplies. See http://llvm.org/bugs/show_bug.cgi?id=14469.)
207libcompiler_rt_extras_SRC_FILES := \
208 lib/mulodi4.c
209
210# $(1): arch
211define get-libcompiler-rt-source-files
212 $(if $(findstring $(1),arm),$(call get-libcompiler-rt-arm-source-files),
213 $(if $(findstring $(1),mips),$(call get-libcompiler-rt-mips-source-files),
214 $(if $(findstring $(1),x86),$(call get-libcompiler-rt-x86-source-files),
Alexey Volkov99395062014-01-17 17:44:56 +0400215 $(if $(findstring $(1),x86_64),$(call get-libcompiler-rt-x86_64-source-files),
Pavel Chupin5534fc32013-07-25 20:31:56 +0400216 $(if $(findstring $(1),x32),$(call get-libcompiler-rt-x86-source-files),
Tim Murray6731c552014-03-10 11:10:47 -0700217 $(if $(findstring $(1),arm64),$(call get-libcompiler-rt-arm64-source-files),
218 $(error Unsupported ARCH $(1))))))))
Shih-wei Liao139a1062013-01-26 11:29:30 -0800219endef
220
221# $(1): source list
222# $(2): arch
223#
Alexey Volkov99395062014-01-17 17:44:56 +0400224# If lib/<arch>/X.[cS] is included in the source list, we should filter out lib/X.c
Shih-wei Liao139a1062013-01-26 11:29:30 -0800225# in the result source list (i.e., use the one optimized for the arch.) Otherwise
226# there'll be multiple definitions for one symbol.
227define filter-libcompiler-rt-common-source-files
Alexey Volkov99395062014-01-17 17:44:56 +0400228 $(filter-out $(patsubst lib/$(strip $(2))/%.S,lib/%.c,\
229 $(filter lib/$(strip $(2))/%.S,$(1))) \
230 $(patsubst lib/$(strip $(2))/%.c,lib/%.c,\
231 $(filter lib/$(strip $(2))/%.c,$(1))),$(1))
Shih-wei Liao139a1062013-01-26 11:29:30 -0800232endef
233
Shih-wei Liaoece62642013-02-07 07:49:51 -0800234define get-libcompiler-rt-arm-common-source-files
Shih-wei Liao139a1062013-01-26 11:29:30 -0800235 $(call filter-libcompiler-rt-common-source-files,
Shih-wei Liaoc8f55192013-02-07 22:00:08 -0800236 $(libcompiler_rt_common_SRC_FILES) \
Shih-wei Liaoece62642013-02-07 07:49:51 -0800237 $(libcompiler_rt_arm_SRC_FILES), arm)
238endef
239
240# $(1): common runtime list
241#
242# Add ARM runtimes implemented in VFP
243define add-libcompiler-rt-arm-vfp-source-files
244 $(filter-out $(addprefix lib/,adddf3.c addsf3.c comparedf2.c comparesf2.c \
245 arm/comparesf2.S divdf3.c divsf3.c extendsfdf2.c \
246 fixdfsi.c fixsfsi.c fixunsdfsi.c fixunssfsi.c \
247 floatsidf.c floatsisf.c floatunsidf.c floatunsisf.c \
248 muldf3.c mulsf3.c negdf2.c negsf2.c subdf3.c \
249 subsf3.c truncdfsf2.c),$(1)) lib/arm/vfp_alias.S
250endef
251
252define get-libcompiler-rt-arm-source-files
253 $(if $(findstring $(ARCH_ARM_HAVE_VFP),true),
254 $(call add-libcompiler-rt-arm-vfp-source-files,
255 $(call get-libcompiler-rt-arm-common-source-files)),
256 $(call get-libcompiler-rt-arm-common-source-files))
Shih-wei Liao139a1062013-01-26 11:29:30 -0800257endef
258
Tim Murray6731c552014-03-10 11:10:47 -0700259define get-libcompiler-rt-arm64-source-files
260 $(call filter-libcompiler-rt-common-source-files,
261 $(libcompiler_rt_common_SRC_FILES) \
262 $(libcompiler_rt_arm64_SRC_FILES),arm64)
263endef
264
Shih-wei Liao139a1062013-01-26 11:29:30 -0800265define get-libcompiler-rt-mips-source-files
266 $(call filter-libcompiler-rt-common-source-files,
Shih-wei Liaoc8f55192013-02-07 22:00:08 -0800267 $(libcompiler_rt_common_SRC_FILES) \
Shih-wei Liao139a1062013-01-26 11:29:30 -0800268 $(libcompiler_rt_mips_SRC_FILES),mips)
269endef
270
271define get-libcompiler-rt-x86-source-files
272 $(call filter-libcompiler-rt-common-source-files,
Shih-wei Liaoc8f55192013-02-07 22:00:08 -0800273 $(libcompiler_rt_common_SRC_FILES) \
Shih-wei Liao139a1062013-01-26 11:29:30 -0800274 $(libcompiler_rt_x86_SRC_FILES),i386)
275endef
276
Alexey Volkov99395062014-01-17 17:44:56 +0400277define get-libcompiler-rt-x86_64-source-files
278 $(call filter-libcompiler-rt-common-source-files,
279 $(libcompiler_rt_common_SRC_FILES) \
280 $(libcompiler_rt_x86_64_SRC_FILES),x86_64)
281endef
282
Evgeniy Stepanovdc3865b2012-03-13 15:38:23 +0400283#=====================================================================
Shih-wei Liao7f489a32013-02-07 03:34:40 -0800284# Device Static Library: libcompiler_rt-extras
Evgeniy Stepanovdc3865b2012-03-13 15:38:23 +0400285#=====================================================================
286
Evgeniy Stepanovdc3865b2012-03-13 15:38:23 +0400287include $(CLEAR_VARS)
288
Shih-wei Liao7f489a32013-02-07 03:34:40 -0800289LOCAL_MODULE := libcompiler_rt-extras
Evgeniy Stepanovdc3865b2012-03-13 15:38:23 +0400290LOCAL_MODULE_TAGS := optional
291LOCAL_MODULE_CLASS := STATIC_LIBRARIES
292LOCAL_CLANG := true
Shih-wei Liao139a1062013-01-26 11:29:30 -0800293LOCAL_SRC_FILES := $(libcompiler_rt_extras_SRC_FILES)
Stephen Hines97ac43c2013-01-18 17:46:14 -0800294LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
Evgeniy Stepanovdc3865b2012-03-13 15:38:23 +0400295
Evgeniy Stepanovdc3865b2012-03-13 15:38:23 +0400296include $(BUILD_STATIC_LIBRARY)
297
Colin Cross47ca89c2014-03-14 20:12:30 -0700298# Don't build compiler-rt without clang
299ifneq ($(WITHOUT_TARGET_CLANG), true)
300
Shih-wei Liao139a1062013-01-26 11:29:30 -0800301#=====================================================================
Shih-wei Liao7f489a32013-02-07 03:34:40 -0800302# Device Static Library: libcompiler_rt
Shih-wei Liao139a1062013-01-26 11:29:30 -0800303#=====================================================================
Colin Cross75d873d2014-02-04 16:24:23 -0800304
305include $(CLEAR_VARS)
306
Colin Cross75d873d2014-02-04 16:24:23 -0800307ifeq ($(TARGET_ARCH),mips64)
308$(warning TODOMips64: Enable compiler-rt build)
309endif
310
311LOCAL_MODULE := libcompiler_rt
312LOCAL_CFLAGS_arm += -D__ARM_EABI__
313LOCAL_ASFLAGS := -integrated-as
314LOCAL_CLANG := true
315LOCAL_SRC_FILES_arm := $(call get-libcompiler-rt-source-files,arm)
Tim Murray6731c552014-03-10 11:10:47 -0700316LOCAL_SRC_FILES_arm64 := $(call get-libcompiler-rt-source-files,arm64)
Colin Cross75d873d2014-02-04 16:24:23 -0800317LOCAL_SRC_FILES_mips := $(call get-libcompiler-rt-source-files,mips)
318LOCAL_SRC_FILES_x86 := $(call get-libcompiler-rt-source-files,x86)
319LOCAL_SRC_FILES_x86_64 := $(call get-libcompiler-rt-source-files,x86_64)
Tim Murray6731c552014-03-10 11:10:47 -0700320LOCAL_MODULE_TARGET_ARCH := arm arm64 mips x86 x86_64
Colin Cross75d873d2014-02-04 16:24:23 -0800321LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
322
323include $(BUILD_STATIC_LIBRARY)
324
Shih-wei Liaofba76912013-01-27 00:56:26 -0800325#=====================================================================
326# Device Shared Library: libcompiler_rt
327#=====================================================================
Serban Constantinescue3c30bf2013-10-20 15:36:30 +0100328
Colin Cross75d873d2014-02-04 16:24:23 -0800329include $(CLEAR_VARS)
330
331LOCAL_MODULE := libcompiler_rt
332LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
333LOCAL_WHOLE_STATIC_LIBRARIES := libcompiler_rt
Tim Murray6731c552014-03-10 11:10:47 -0700334LOCAL_MODULE_TARGET_ARCH := arm arm64 mips x86 x86_64
Colin Cross75d873d2014-02-04 16:24:23 -0800335
336include $(BUILD_SHARED_LIBRARY)
Shih-wei Liaofba76912013-01-27 00:56:26 -0800337
Shih-wei Liao139a1062013-01-26 11:29:30 -0800338# Build ASan
339include $(LOCAL_PATH)/lib/asan/Android.mk
Tim Murray4b4f5572014-03-14 17:46:31 -0700340
Colin Cross47ca89c2014-03-14 20:12:30 -0700341endif