blob: e7d2f5b29803bafd4c5cf3f751d769b8b8e0f1c9 [file] [log] [blame]
Alexey Samsonova6b264b2014-02-14 09:20:33 +00001# This directory contains a large amount of C code which provides
2# generic implementations of the core runtime library along with optimized
3# architecture-specific code in various subdirectories.
4
5set(GENERIC_SOURCES
6 absvdi2.c
7 absvsi2.c
8 absvti2.c
9 adddf3.c
10 addsf3.c
Joerg Sonnenberger361519f2014-06-19 20:24:49 +000011 addtf3.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000012 addvdi3.c
13 addvsi3.c
14 addvti3.c
15 apple_versioning.c
16 ashldi3.c
17 ashlti3.c
18 ashrdi3.c
19 ashrti3.c
20 # FIXME: atomic.c may only be compiled if host compiler understands _Atomic
21 # atomic.c
22 clear_cache.c
23 clzdi2.c
24 clzsi2.c
25 clzti2.c
26 cmpdi2.c
27 cmpti2.c
28 comparedf2.c
29 comparesf2.c
30 ctzdi2.c
31 ctzsi2.c
32 ctzti2.c
33 divdc3.c
34 divdf3.c
35 divdi3.c
36 divmoddi4.c
37 divmodsi4.c
38 divsc3.c
39 divsf3.c
40 divsi3.c
41 divti3.c
Joerg Sonnenberger361519f2014-06-19 20:24:49 +000042 divtf3.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000043 divxc3.c
44 enable_execute_stack.c
45 eprintf.c
46 extendsfdf2.c
Ahmed Bougachaf1ac8502015-05-12 18:33:42 +000047 extendhfsf2.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000048 ffsdi2.c
49 ffsti2.c
50 fixdfdi.c
51 fixdfsi.c
52 fixdfti.c
53 fixsfdi.c
54 fixsfsi.c
55 fixsfti.c
56 fixunsdfdi.c
57 fixunsdfsi.c
58 fixunsdfti.c
59 fixunssfdi.c
60 fixunssfsi.c
61 fixunssfti.c
62 fixunsxfdi.c
63 fixunsxfsi.c
64 fixunsxfti.c
65 fixxfdi.c
66 fixxfti.c
67 floatdidf.c
68 floatdisf.c
69 floatdixf.c
70 floatsidf.c
71 floatsisf.c
72 floattidf.c
73 floattisf.c
74 floattixf.c
75 floatundidf.c
76 floatundisf.c
77 floatundixf.c
78 floatunsidf.c
79 floatunsisf.c
80 floatuntidf.c
81 floatuntisf.c
82 floatuntixf.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000083 int_util.c
84 lshrdi3.c
85 lshrti3.c
86 moddi3.c
87 modsi3.c
88 modti3.c
89 muldc3.c
90 muldf3.c
91 muldi3.c
92 mulodi4.c
93 mulosi4.c
94 muloti4.c
95 mulsc3.c
96 mulsf3.c
97 multi3.c
Joerg Sonnenberger61d5d382014-06-19 20:34:03 +000098 multf3.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000099 mulvdi3.c
100 mulvsi3.c
101 mulvti3.c
102 mulxc3.c
103 negdf2.c
104 negdi2.c
105 negsf2.c
106 negti2.c
107 negvdi2.c
108 negvsi2.c
109 negvti2.c
110 paritydi2.c
111 paritysi2.c
112 parityti2.c
113 popcountdi2.c
114 popcountsi2.c
115 popcountti2.c
116 powidf2.c
117 powisf2.c
118 powitf2.c
119 powixf2.c
120 subdf3.c
121 subsf3.c
122 subvdi3.c
123 subvsi3.c
124 subvti3.c
Joerg Sonnenberger361519f2014-06-19 20:24:49 +0000125 subtf3.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000126 trampoline_setup.c
Ahmed Bougachaf1ac8502015-05-12 18:33:42 +0000127 truncdfhf2.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000128 truncdfsf2.c
Ahmed Bougachaf1ac8502015-05-12 18:33:42 +0000129 truncsfhf2.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000130 ucmpdi2.c
131 ucmpti2.c
132 udivdi3.c
133 udivmoddi4.c
134 udivmodsi4.c
135 udivmodti4.c
136 udivsi3.c
137 udivti3.c
138 umoddi3.c
139 umodsi3.c
140 umodti3.c)
141
Saleem Abdulrasoola7452e42015-01-14 15:55:17 +0000142if (HAVE_UNWIND_H)
143 set(GENERIC_SOURCES
144 ${GENERIC_SOURCES}
145 gcc_personality_v0.c)
146endif ()
147
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000148set(x86_64_SOURCES
149 x86_64/floatdidf.c
150 x86_64/floatdisf.c
151 x86_64/floatdixf.c
152 x86_64/floatundidf.S
153 x86_64/floatundisf.S
154 x86_64/floatundixf.S
155 ${GENERIC_SOURCES})
156
Reid Klecknerfbfed862015-07-17 16:23:05 +0000157if(WIN32)
158 set(x86_64_SOURCES
159 ${x86_64_SOURCES}
160 x86_64/chkstk.S)
161endif()
162
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000163set(i386_SOURCES
164 i386/ashldi3.S
165 i386/ashrdi3.S
166 i386/divdi3.S
167 i386/floatdidf.S
168 i386/floatdisf.S
169 i386/floatdixf.S
170 i386/floatundidf.S
171 i386/floatundisf.S
172 i386/floatundixf.S
173 i386/lshrdi3.S
174 i386/moddi3.S
175 i386/muldi3.S
176 i386/udivdi3.S
177 i386/umoddi3.S
178 ${GENERIC_SOURCES})
179
Reid Klecknerfbfed862015-07-17 16:23:05 +0000180if(WIN32)
181 set(i386_SOURCES
182 ${i386_SOURCES}
183 i386/chkstk.S)
184endif()
185
Evgeniy Stepanov0f7ab592014-10-01 12:55:06 +0000186set(i686_SOURCES
187 ${i386_SOURCES})
188
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000189set(arm_SOURCES
190 arm/adddf3vfp.S
191 arm/addsf3vfp.S
Josh Gao1108ae02015-08-21 00:25:37 +0000192 arm/aeabi_cdcmp.S
193 arm/aeabi_cdcmpeq_check_nan.c
194 arm/aeabi_cfcmp.S
195 arm/aeabi_cfcmpeq_check_nan.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000196 arm/aeabi_dcmp.S
Saleem Abdulrasoola0a58732014-09-06 21:34:02 +0000197 arm/aeabi_div0.c
Dan Albertb5226572015-08-18 18:10:33 +0000198 arm/aeabi_drsub.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000199 arm/aeabi_fcmp.S
Dan Albertb5226572015-08-18 18:10:33 +0000200 arm/aeabi_frsub.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000201 arm/aeabi_idivmod.S
202 arm/aeabi_ldivmod.S
203 arm/aeabi_memcmp.S
204 arm/aeabi_memcpy.S
205 arm/aeabi_memmove.S
206 arm/aeabi_memset.S
207 arm/aeabi_uidivmod.S
208 arm/aeabi_uldivmod.S
209 arm/bswapdi2.S
210 arm/bswapsi2.S
211 arm/comparesf2.S
212 arm/divdf3vfp.S
213 arm/divmodsi4.S
214 arm/divsf3vfp.S
215 arm/divsi3.S
216 arm/eqdf2vfp.S
217 arm/eqsf2vfp.S
218 arm/extendsfdf2vfp.S
219 arm/fixdfsivfp.S
220 arm/fixsfsivfp.S
221 arm/fixunsdfsivfp.S
222 arm/fixunssfsivfp.S
223 arm/floatsidfvfp.S
224 arm/floatsisfvfp.S
225 arm/floatunssidfvfp.S
226 arm/floatunssisfvfp.S
227 arm/gedf2vfp.S
228 arm/gesf2vfp.S
229 arm/gtdf2vfp.S
230 arm/gtsf2vfp.S
231 arm/ledf2vfp.S
232 arm/lesf2vfp.S
233 arm/ltdf2vfp.S
234 arm/ltsf2vfp.S
235 arm/modsi3.S
236 arm/muldf3vfp.S
237 arm/mulsf3vfp.S
238 arm/nedf2vfp.S
239 arm/negdf2vfp.S
240 arm/negsf2vfp.S
241 arm/nesf2vfp.S
242 arm/restore_vfp_d8_d15_regs.S
243 arm/save_vfp_d8_d15_regs.S
244 arm/subdf3vfp.S
245 arm/subsf3vfp.S
246 arm/switch16.S
247 arm/switch32.S
248 arm/switch8.S
249 arm/switchu8.S
Tim Northover1683caa2014-03-04 10:10:17 +0000250 arm/sync_fetch_and_add_4.S
251 arm/sync_fetch_and_add_8.S
252 arm/sync_fetch_and_and_4.S
253 arm/sync_fetch_and_and_8.S
254 arm/sync_fetch_and_max_4.S
255 arm/sync_fetch_and_max_8.S
256 arm/sync_fetch_and_min_4.S
257 arm/sync_fetch_and_min_8.S
258 arm/sync_fetch_and_nand_4.S
259 arm/sync_fetch_and_nand_8.S
260 arm/sync_fetch_and_or_4.S
261 arm/sync_fetch_and_or_8.S
262 arm/sync_fetch_and_sub_4.S
263 arm/sync_fetch_and_sub_8.S
264 arm/sync_fetch_and_umax_4.S
265 arm/sync_fetch_and_umax_8.S
266 arm/sync_fetch_and_umin_4.S
267 arm/sync_fetch_and_umin_8.S
268 arm/sync_fetch_and_xor_4.S
269 arm/sync_fetch_and_xor_8.S
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000270 arm/sync_synchronize.S
271 arm/truncdfsf2vfp.S
272 arm/udivmodsi4.S
273 arm/udivsi3.S
274 arm/umodsi3.S
275 arm/unorddf2vfp.S
276 arm/unordsf2vfp.S
277 ${GENERIC_SOURCES})
278
Sergey Dmitroukd5a00e82015-08-18 13:43:37 +0000279set(aarch64_SOURCES
280 comparetf2.c
281 extenddftf2.c
282 extendsftf2.c
283 fixtfdi.c
284 fixtfsi.c
285 fixtfti.c
286 fixunstfdi.c
287 fixunstfsi.c
288 fixunstfti.c
289 floatditf.c
290 floatsitf.c
291 floatunditf.c
292 floatunsitf.c
293 multc3.c
294 trunctfdf2.c
295 trunctfsf2.c
296 ${GENERIC_SOURCES})
297
Alexey Samsonov63a4af72014-02-18 09:33:45 +0000298add_custom_target(builtins)
299
Chris Bienemand1602602015-08-25 19:53:09 +0000300if(APPLE)
301 set(OS_OPTION OS osx)
302endif()
303
Reid Klecknerfbfed862015-07-17 16:23:05 +0000304if (NOT WIN32 OR MINGW)
Sergey Dmitroukd5a00e82015-08-18 13:43:37 +0000305 foreach (arch x86_64 i386 i686 arm aarch64)
Saleem Abdulrasoolb72a2fd2014-07-26 23:44:22 +0000306 if (CAN_TARGET_${arch})
307 # Filter out generic versions of routines that are re-implemented in
308 # architecture specific manner. This prevents multiple definitions of the
309 # same symbols, making the symbol selection non-deterministic.
310 foreach (_file ${${arch}_SOURCES})
311 if (${_file} MATCHES ${arch}/*)
312 get_filename_component(_name ${_file} NAME)
313 string(REPLACE ".S" ".c" _cname "${_name}")
314 list(REMOVE_ITEM ${arch}_SOURCES ${_cname})
315 endif ()
316 endforeach ()
317
Chris Bienemand1602602015-08-25 19:53:09 +0000318 add_compiler_rt_runtime(clang_rt.builtins
319 STATIC
320 ARCH ${arch}
321 ${OS_OPTION}
Saleem Abdulrasoolb72a2fd2014-07-26 23:44:22 +0000322 SOURCES ${${arch}_SOURCES}
Chris Bienemand1602602015-08-25 19:53:09 +0000323 CFLAGS "-std=c99"
324 PARENT_TARGET builtins)
Saleem Abdulrasoolb72a2fd2014-07-26 23:44:22 +0000325 endif ()
326 endforeach ()
327endif ()
Alexey Samsonov63a4af72014-02-18 09:33:45 +0000328
329add_dependencies(compiler-rt builtins)