Android.mk revision 95b6e9a2552f005857c81626638dfd98cc8665df
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 gcc_personality_v0.c since it depends on libunwind.
25libcompiler_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 \
34  lib/ashldi3.c \
35  lib/ashlti3.c \
36  lib/ashrdi3.c \
37  lib/ashrti3.c \
38  lib/clear_cache.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# ARM64-specific runtimes
173libcompiler_rt_arm64_SRC_FILES :=
174
175# MIPS-specific runtimes
176libcompiler_rt_mips_SRC_FILES := # nothing to add
177
178# X86-specific runtimes
179libcompiler_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
195# 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
204# 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),
215             $(if $(findstring $(1),x86_64),$(call get-libcompiler-rt-x86_64-source-files),
216                 $(if $(findstring $(1),x32),$(call get-libcompiler-rt-x86-source-files),
217                    $(if $(findstring $(1),arm64),$(call get-libcompiler-rt-arm64-source-files),
218  $(error Unsupported ARCH $(1))))))))
219endef
220
221# $(1): source list
222# $(2): arch
223#
224# If lib/<arch>/X.[cS] is included in the source list, we should filter out lib/X.c
225# 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
228  $(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))
232endef
233
234define get-libcompiler-rt-arm-common-source-files
235  $(call filter-libcompiler-rt-common-source-files,
236      $(libcompiler_rt_common_SRC_FILES) \
237      $(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))
257endef
258
259define 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
265define get-libcompiler-rt-mips-source-files
266  $(call filter-libcompiler-rt-common-source-files,
267      $(libcompiler_rt_common_SRC_FILES) \
268      $(libcompiler_rt_mips_SRC_FILES),mips)
269endef
270
271define get-libcompiler-rt-x86-source-files
272  $(call filter-libcompiler-rt-common-source-files,
273      $(libcompiler_rt_common_SRC_FILES) \
274      $(libcompiler_rt_x86_SRC_FILES),i386)
275endef
276
277define 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
283#=====================================================================
284# Device Static Library: libcompiler_rt-extras
285#=====================================================================
286
287include $(CLEAR_VARS)
288
289LOCAL_MODULE := libcompiler_rt-extras
290LOCAL_MODULE_TAGS := optional
291LOCAL_MODULE_CLASS := STATIC_LIBRARIES
292LOCAL_CLANG := true
293LOCAL_SRC_FILES := $(libcompiler_rt_extras_SRC_FILES)
294LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
295
296include $(BUILD_STATIC_LIBRARY)
297
298# Don't build compiler-rt without clang
299ifneq ($(WITHOUT_TARGET_CLANG), true)
300
301#=====================================================================
302# Device Static Library: libcompiler_rt
303#=====================================================================
304
305include $(CLEAR_VARS)
306
307ifeq ($(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)
316LOCAL_SRC_FILES_arm64 := $(call get-libcompiler-rt-source-files,arm64)
317LOCAL_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)
320LOCAL_MODULE_TARGET_ARCH := arm arm64 mips x86 x86_64
321LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
322
323include $(BUILD_STATIC_LIBRARY)
324
325#=====================================================================
326# Host Static Library: libcompiler_rt
327#=====================================================================
328
329include $(CLEAR_VARS)
330
331LOCAL_MODULE := libcompiler_rt
332LOCAL_ASFLAGS := -integrated-as
333LOCAL_CLANG := true
334LOCAL_SRC_FILES := $(call get-libcompiler-rt-source-files,x86_64)
335LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
336
337include $(BUILD_HOST_STATIC_LIBRARY)
338
339#=====================================================================
340# Device Static Library: libprofile_rt
341#=====================================================================
342
343include $(CLEAR_VARS)
344
345LOCAL_MODULE = libprofile_rt
346LOCAL_SRC_FILES = lib/profile/GCDAProfiling.c
347
348include $(BUILD_STATIC_LIBRARY)
349
350#=====================================================================
351# Device Shared Library: libcompiler_rt
352#=====================================================================
353
354include $(CLEAR_VARS)
355
356LOCAL_MODULE := libcompiler_rt
357LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
358LOCAL_WHOLE_STATIC_LIBRARIES := libcompiler_rt
359LOCAL_MODULE_TARGET_ARCH := arm arm64 mips x86 x86_64
360
361include $(BUILD_SHARED_LIBRARY)
362
363# Build ASan
364include $(LOCAL_PATH)/lib/asan/Android.mk
365
366#=====================================================================
367# Host Shared Library: libcompiler_rt
368#=====================================================================
369
370include $(CLEAR_VARS)
371
372LOCAL_MODULE := libcompiler_rt
373LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
374LOCAL_WHOLE_STATIC_LIBRARIES := libcompiler_rt
375LOCAL_CPPFLAGS := -nostdinc++
376LOCAL_LDFLAGS := -nodefaultlibs
377LOCAL_LDLIBS := -lc -lm
378
379include $(BUILD_HOST_SHARED_LIBRARY)
380
381endif
382