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
18//=====================================================================
19// Static Library: libcompiler_rt-extras
20//=====================================================================
21
22cc_library_static {
23    name: "libcompiler_rt-extras",
24    host_supported: true,
25    static_ndk_lib: true,
26    vendor_available: true,
27    recovery_available: true,
28    sdk_version: "minimum",
29    // The following list contains functions that are not available in libgcc.a, so
30    // we potentially need them when using a Clang-built component (e.g., -ftrapv
31    // with 64-bit integer multiplies. See http://llvm.org/bugs/show_bug.cgi?id=14469.)
32    srcs: ["lib/builtins/mulodi4.c"],
33    sanitize: {
34        never: true,
35    },
36    stl: "none",
37
38    cflags: [
39        "-Wno-unused-parameter",
40        "-Wno-visibility",
41        "-Wno-incompatible-pointer-types",
42        "-Werror",
43    ],
44
45    arch: {
46        mips: {
47            srcs: ["lib/builtins/clear_cache.c"],
48        },
49        mips64: {
50            srcs: ["lib/builtins/clear_cache.c"],
51        },
52        // Clang generates call to __unorddf2 builtin when compiling s_fmal.c
53        // in bionic.  Generate this builtin from compiler-rt for arm64 and
54        // x86_64 (where the corresponding libgcc does not have this builtin.
55        arm64: {
56            srcs: ["lib/builtins/comparedf2.c"],
57        },
58        x86_64: {
59            srcs: ["lib/builtins/comparedf2.c"],
60        },
61    },
62
63    target: {
64        linux_bionic: {
65            enabled: true,
66        },
67        windows: {
68            enabled: true,
69        },
70    },
71}
72
73//=====================================================================
74// Device and Host Static Library: libcompiler_rt
75//=====================================================================
76
77cc_library {
78    name: "libcompiler_rt",
79    vendor_available: false,
80    vndk: {
81        enabled: true,
82        support_system_process: true,
83    },
84    host_supported: true,
85    // The following list contains platform-independent functionalities.
86    //
87    // Skip apple_versioning.c since it is unused.
88    // Skip atomic.c since it needs to be built separately according to the docs.
89    srcs: [
90        "lib/builtins/enable_execute_stack.c",
91        "lib/builtins/absvdi2.c",
92        "lib/builtins/absvsi2.c",
93        "lib/builtins/absvti2.c",
94        "lib/builtins/adddf3.c",
95        "lib/builtins/addsf3.c",
96        "lib/builtins/addtf3.c",
97        "lib/builtins/addvdi3.c",
98        "lib/builtins/addvsi3.c",
99        "lib/builtins/addvti3.c",
100        "lib/builtins/ashldi3.c",
101        "lib/builtins/ashlti3.c",
102        "lib/builtins/ashrdi3.c",
103        "lib/builtins/ashrti3.c",
104        "lib/builtins/clear_cache.c",
105        "lib/builtins/clzdi2.c",
106        "lib/builtins/clzsi2.c",
107        "lib/builtins/clzti2.c",
108        "lib/builtins/cmpdi2.c",
109        "lib/builtins/cmpti2.c",
110        "lib/builtins/comparedf2.c",
111        "lib/builtins/comparesf2.c",
112        "lib/builtins/comparetf2.c",
113        "lib/builtins/ctzdi2.c",
114        "lib/builtins/ctzsi2.c",
115        "lib/builtins/ctzti2.c",
116        "lib/builtins/divdc3.c",
117        "lib/builtins/divdf3.c",
118        "lib/builtins/divdi3.c",
119        "lib/builtins/divmoddi4.c",
120        "lib/builtins/divmodsi4.c",
121        "lib/builtins/divsc3.c",
122        "lib/builtins/divsf3.c",
123        "lib/builtins/divsi3.c",
124        "lib/builtins/divtf3.c",
125        "lib/builtins/divti3.c",
126        "lib/builtins/divxc3.c",
127        "lib/builtins/eprintf.c",
128        "lib/builtins/extenddftf2.c",
129        "lib/builtins/extendhfsf2.c",
130        "lib/builtins/extendsfdf2.c",
131        "lib/builtins/extendsftf2.c",
132        "lib/builtins/ffsdi2.c",
133        "lib/builtins/ffsti2.c",
134        "lib/builtins/fixdfdi.c",
135        "lib/builtins/fixdfsi.c",
136        "lib/builtins/fixdfti.c",
137        "lib/builtins/fixsfdi.c",
138        "lib/builtins/fixsfsi.c",
139        "lib/builtins/fixsfti.c",
140        "lib/builtins/fixtfdi.c",
141        "lib/builtins/fixtfsi.c",
142        "lib/builtins/fixtfti.c",
143        "lib/builtins/fixunsdfdi.c",
144        "lib/builtins/fixunsdfsi.c",
145        "lib/builtins/fixunsdfti.c",
146        "lib/builtins/fixunssfdi.c",
147        "lib/builtins/fixunssfsi.c",
148        "lib/builtins/fixunssfti.c",
149        "lib/builtins/fixunstfdi.c",
150        "lib/builtins/fixunstfsi.c",
151        "lib/builtins/fixunstfti.c",
152        "lib/builtins/fixunsxfdi.c",
153        "lib/builtins/fixunsxfsi.c",
154        "lib/builtins/fixunsxfti.c",
155        "lib/builtins/fixxfdi.c",
156        "lib/builtins/fixxfti.c",
157        "lib/builtins/floatdidf.c",
158        "lib/builtins/floatdisf.c",
159        "lib/builtins/floatdixf.c",
160        "lib/builtins/floatsidf.c",
161        "lib/builtins/floatsisf.c",
162        "lib/builtins/floatsitf.c",
163        "lib/builtins/floattidf.c",
164        "lib/builtins/floattisf.c",
165        "lib/builtins/floattixf.c",
166        "lib/builtins/floatundidf.c",
167        "lib/builtins/floatundisf.c",
168        "lib/builtins/floatundixf.c",
169        "lib/builtins/floatunsidf.c",
170        "lib/builtins/floatunsisf.c",
171        "lib/builtins/floatunsitf.c",
172        "lib/builtins/floatuntidf.c",
173        "lib/builtins/floatuntisf.c",
174        "lib/builtins/floatuntixf.c",
175        "lib/builtins/gcc_personality_v0.c",
176        "lib/builtins/int_util.c",
177        "lib/builtins/lshrdi3.c",
178        "lib/builtins/lshrti3.c",
179        "lib/builtins/moddi3.c",
180        "lib/builtins/modsi3.c",
181        "lib/builtins/modti3.c",
182        "lib/builtins/muldc3.c",
183        "lib/builtins/muldf3.c",
184        "lib/builtins/muldi3.c",
185        "lib/builtins/mulodi4.c",
186        "lib/builtins/mulosi4.c",
187        "lib/builtins/muloti4.c",
188        "lib/builtins/mulsc3.c",
189        "lib/builtins/mulsf3.c",
190        "lib/builtins/multf3.c",
191        "lib/builtins/multi3.c",
192        "lib/builtins/mulvdi3.c",
193        "lib/builtins/mulvsi3.c",
194        "lib/builtins/mulvti3.c",
195        "lib/builtins/mulxc3.c",
196        "lib/builtins/negdf2.c",
197        "lib/builtins/negdi2.c",
198        "lib/builtins/negsf2.c",
199        "lib/builtins/negti2.c",
200        "lib/builtins/negvdi2.c",
201        "lib/builtins/negvsi2.c",
202        "lib/builtins/negvti2.c",
203        "lib/builtins/paritydi2.c",
204        "lib/builtins/paritysi2.c",
205        "lib/builtins/parityti2.c",
206        "lib/builtins/popcountdi2.c",
207        "lib/builtins/popcountsi2.c",
208        "lib/builtins/popcountti2.c",
209        "lib/builtins/powidf2.c",
210        "lib/builtins/powisf2.c",
211        "lib/builtins/powitf2.c",
212        "lib/builtins/powixf2.c",
213        "lib/builtins/subdf3.c",
214        "lib/builtins/subsf3.c",
215        "lib/builtins/subtf3.c",
216        "lib/builtins/subvdi3.c",
217        "lib/builtins/subvsi3.c",
218        "lib/builtins/subvti3.c",
219        "lib/builtins/trampoline_setup.c",
220        "lib/builtins/truncdfhf2.c",
221        "lib/builtins/truncdfsf2.c",
222        "lib/builtins/truncsfhf2.c",
223        "lib/builtins/trunctfdf2.c",
224        "lib/builtins/trunctfsf2.c",
225        "lib/builtins/ucmpdi2.c",
226        "lib/builtins/ucmpti2.c",
227        "lib/builtins/udivdi3.c",
228        "lib/builtins/udivmoddi4.c",
229        "lib/builtins/udivmodsi4.c",
230        "lib/builtins/udivmodti4.c",
231        "lib/builtins/udivsi3.c",
232        "lib/builtins/udivti3.c",
233        "lib/builtins/umoddi3.c",
234        "lib/builtins/umodsi3.c",
235        "lib/builtins/umodti3.c",
236    ],
237
238    cflags: [
239        "-Wno-unused-parameter",
240        "-Wno-visibility",
241        "-Wno-incompatible-pointer-types",
242        "-Werror",
243    ],
244
245    arch: {
246        arm: {
247            cflags: ["-D__ARM_EABI__"],
248            srcs: [
249                "lib/builtins/arm/aeabi_dcmp.S",
250                "lib/builtins/arm/aeabi_div0.c",
251                "lib/builtins/arm/aeabi_fcmp.S",
252                "lib/builtins/arm/aeabi_idivmod.S",
253                "lib/builtins/arm/aeabi_ldivmod.S",
254                "lib/builtins/arm/aeabi_memcmp.S",
255                "lib/builtins/arm/aeabi_memcpy.S",
256                "lib/builtins/arm/aeabi_memmove.S",
257                "lib/builtins/arm/aeabi_memset.S",
258                "lib/builtins/arm/aeabi_uidivmod.S",
259                "lib/builtins/arm/aeabi_uldivmod.S",
260                "lib/builtins/arm/comparesf2.S",
261                "lib/builtins/arm/divmodsi4.S",
262                "lib/builtins/arm/divsi3.S",
263                "lib/builtins/arm/modsi3.S",
264                "lib/builtins/arm/udivmodsi4.S",
265                "lib/builtins/arm/udivsi3.S",
266                "lib/builtins/arm/umodsi3.S",
267                "lib/builtins/arm/adddf3vfp.S",
268                "lib/builtins/arm/addsf3vfp.S",
269                "lib/builtins/arm/divdf3vfp.S",
270                "lib/builtins/arm/divsf3vfp.S",
271                "lib/builtins/arm/eqdf2vfp.S",
272                "lib/builtins/arm/eqsf2vfp.S",
273                "lib/builtins/arm/extendsfdf2vfp.S",
274                "lib/builtins/arm/fixdfsivfp.S",
275                "lib/builtins/arm/fixsfsivfp.S",
276                "lib/builtins/arm/fixunsdfsivfp.S",
277                "lib/builtins/arm/fixunssfsivfp.S",
278                "lib/builtins/arm/floatsidfvfp.S",
279                "lib/builtins/arm/floatsisfvfp.S",
280                "lib/builtins/arm/floatunssidfvfp.S",
281                "lib/builtins/arm/floatunssisfvfp.S",
282                "lib/builtins/arm/gedf2vfp.S",
283                "lib/builtins/arm/gesf2vfp.S",
284                "lib/builtins/arm/gtdf2vfp.S",
285                "lib/builtins/arm/gtsf2vfp.S",
286                "lib/builtins/arm/ledf2vfp.S",
287                "lib/builtins/arm/lesf2vfp.S",
288                "lib/builtins/arm/ltdf2vfp.S",
289                "lib/builtins/arm/ltsf2vfp.S",
290                "lib/builtins/arm/muldf3vfp.S",
291                "lib/builtins/arm/mulsf3vfp.S",
292                "lib/builtins/arm/nedf2vfp.S",
293                "lib/builtins/arm/negdf2vfp.S",
294                "lib/builtins/arm/negsf2vfp.S",
295                "lib/builtins/arm/nesf2vfp.S",
296                "lib/builtins/arm/subdf3vfp.S",
297                "lib/builtins/arm/subsf3vfp.S",
298                "lib/builtins/arm/truncdfsf2vfp.S",
299                "lib/builtins/arm/unorddf2vfp.S",
300                "lib/builtins/arm/unordsf2vfp.S",
301            ],
302            exclude_srcs: [
303                "lib/builtins/comparesf2.c",
304                "lib/builtins/divmodsi4.c",
305                "lib/builtins/divsi3.c",
306                "lib/builtins/modsi3.c",
307                "lib/builtins/udivmodsi4.c",
308                "lib/builtins/udivsi3.c",
309                "lib/builtins/umodsi3.c",
310            ],
311        },
312        mips64: {
313            cflags: [
314                "-DCRT_HAS_128BIT",
315            ],
316        },
317        x86: {
318            srcs: [
319                "lib/builtins/i386/ashldi3.S",
320                "lib/builtins/i386/ashrdi3.S",
321                "lib/builtins/i386/divdi3.S",
322                "lib/builtins/i386/floatdidf.S",
323                "lib/builtins/i386/floatdisf.S",
324                "lib/builtins/i386/floatdixf.S",
325                "lib/builtins/i386/floatundidf.S",
326                "lib/builtins/i386/floatundisf.S",
327                "lib/builtins/i386/floatundixf.S",
328                "lib/builtins/i386/lshrdi3.S",
329                "lib/builtins/i386/moddi3.S",
330                "lib/builtins/i386/muldi3.S",
331                "lib/builtins/i386/udivdi3.S",
332                "lib/builtins/i386/umoddi3.S",
333            ],
334            exclude_srcs: [
335                "lib/builtins/ashldi3.c",
336                "lib/builtins/ashrdi3.c",
337                "lib/builtins/divdi3.c",
338                "lib/builtins/floatdidf.c",
339                "lib/builtins/floatdisf.c",
340                "lib/builtins/floatdixf.c",
341                "lib/builtins/floatundidf.c",
342                "lib/builtins/floatundisf.c",
343                "lib/builtins/floatundixf.c",
344                "lib/builtins/lshrdi3.c",
345                "lib/builtins/moddi3.c",
346                "lib/builtins/muldi3.c",
347                "lib/builtins/udivdi3.c",
348                "lib/builtins/umoddi3.c",
349            ],
350        },
351        x86_64: {
352            srcs: [
353                "lib/builtins/x86_64/floatundixf.S",
354                "lib/builtins/x86_64/floatdisf.c",
355                "lib/builtins/x86_64/floatdidf.c",
356                "lib/builtins/x86_64/floatdixf.c",
357                "lib/builtins/x86_64/floatundisf.S",
358                "lib/builtins/x86_64/floatundidf.S",
359            ],
360            exclude_srcs: [
361                "lib/builtins/floatundixf.c",
362                "lib/builtins/floatdisf.c",
363                "lib/builtins/floatdidf.c",
364                "lib/builtins/floatdixf.c",
365                "lib/builtins/floatundisf.c",
366                "lib/builtins/floatundidf.c",
367            ],
368        },
369    },
370
371    sdk_version: "21",
372    target: {
373        android: {
374            shared_libs: ["liblog"],
375            static_libs: ["liblzma"],
376        },
377        android_arm: {
378            static_libs: ["libunwind_llvm"],
379            ldflags: ["-Wl,--exclude-libs,libunwind_llvm.a"],
380        },
381        android_arm64: {
382            static_libs: ["libunwindbacktrace", "libunwind_static"],
383            ldflags: ["-Wl,--exclude-libs,libunwindbacktrace.a:libunwind.a"],
384        },
385        android_mips: {
386            static_libs: ["libunwindbacktrace", "libunwind_static"],
387            ldflags: ["-Wl,--exclude-libs,libunwindbacktrace.a:libunwind.a"],
388        },
389        android_mips64: {
390            static_libs: ["libunwindbacktrace", "libunwind_static"],
391            ldflags: ["-Wl,--exclude-libs,libunwindbacktrace.a:libunwind.a"],
392        },
393        android_x86: {
394            static_libs: ["libunwindbacktrace", "libunwind_static"],
395            ldflags: ["-Wl,--exclude-libs,libunwindbacktrace.a:libunwind.a"],
396        },
397        android_x86_64: {
398            srcs: ["lib/builtins/ppc/floatditf.c"],
399            static_libs: ["libunwindbacktrace", "libunwind_static"],
400            ldflags: ["-Wl,--exclude-libs,libunwindbacktrace.a:libunwind.a"],
401        },
402        linux_glibc: {
403            static_libs: ["libunwindbacktrace", "libunwind_static"],
404            shared_libs: ["liblzma"],
405        },
406        windows: {
407            enabled: true,
408            // Only build enable_execute_stack.c on non-Windows hosts.
409            exclude_srcs: ["lib/builtins/enable_execute_stack.c"],
410        },
411    },
412
413    asflags: ["-integrated-as"],
414    no_libgcc: true,
415
416    sanitize: {
417        never: true,
418    },
419    stl: "none",
420}
421
422cc_defaults {
423    name: "asan_arch_defaults",
424
425    vendor_available: true,
426    enabled: false,
427    target: {
428        android_arm: {
429            enabled: true,
430        },
431        android_arm64: {
432            enabled: true,
433        },
434        android_mips: {
435            enabled: true,
436        },
437        android_mips64: {
438            enabled: true,
439        },
440        android_x86: {
441            enabled: true,
442        },
443        android_x86_64: {
444            enabled: true,
445        },
446        linux_glibc: {
447            enabled: true,
448        },
449    },
450}
451
452subdirs=["lib/*"]
453