blob: b236bb94843c535adc90c4a68dee0b466f88d40c [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
Chris Bieneman54445f92015-09-22 21:18:19 +000020 atomic_flag_clear.c
21 atomic_flag_clear_explicit.c
22 atomic_flag_test_and_set.c
23 atomic_flag_test_and_set_explicit.c
24 atomic_signal_fence.c
25 atomic_thread_fence.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000026 # FIXME: atomic.c may only be compiled if host compiler understands _Atomic
27 # atomic.c
28 clear_cache.c
29 clzdi2.c
30 clzsi2.c
31 clzti2.c
32 cmpdi2.c
33 cmpti2.c
34 comparedf2.c
35 comparesf2.c
36 ctzdi2.c
37 ctzsi2.c
38 ctzti2.c
39 divdc3.c
40 divdf3.c
41 divdi3.c
42 divmoddi4.c
43 divmodsi4.c
44 divsc3.c
45 divsf3.c
46 divsi3.c
47 divti3.c
Joerg Sonnenberger361519f2014-06-19 20:24:49 +000048 divtf3.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000049 divxc3.c
50 enable_execute_stack.c
51 eprintf.c
52 extendsfdf2.c
Ahmed Bougachaf1ac8502015-05-12 18:33:42 +000053 extendhfsf2.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000054 ffsdi2.c
55 ffsti2.c
56 fixdfdi.c
57 fixdfsi.c
58 fixdfti.c
59 fixsfdi.c
60 fixsfsi.c
61 fixsfti.c
62 fixunsdfdi.c
63 fixunsdfsi.c
64 fixunsdfti.c
65 fixunssfdi.c
66 fixunssfsi.c
67 fixunssfti.c
68 fixunsxfdi.c
69 fixunsxfsi.c
70 fixunsxfti.c
71 fixxfdi.c
72 fixxfti.c
73 floatdidf.c
74 floatdisf.c
75 floatdixf.c
76 floatsidf.c
77 floatsisf.c
78 floattidf.c
79 floattisf.c
80 floattixf.c
81 floatundidf.c
82 floatundisf.c
83 floatundixf.c
84 floatunsidf.c
85 floatunsisf.c
86 floatuntidf.c
87 floatuntisf.c
88 floatuntixf.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +000089 int_util.c
90 lshrdi3.c
91 lshrti3.c
92 moddi3.c
93 modsi3.c
94 modti3.c
95 muldc3.c
96 muldf3.c
97 muldi3.c
98 mulodi4.c
99 mulosi4.c
100 muloti4.c
101 mulsc3.c
102 mulsf3.c
103 multi3.c
Joerg Sonnenberger61d5d382014-06-19 20:34:03 +0000104 multf3.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000105 mulvdi3.c
106 mulvsi3.c
107 mulvti3.c
108 mulxc3.c
109 negdf2.c
110 negdi2.c
111 negsf2.c
112 negti2.c
113 negvdi2.c
114 negvsi2.c
115 negvti2.c
116 paritydi2.c
117 paritysi2.c
118 parityti2.c
119 popcountdi2.c
120 popcountsi2.c
121 popcountti2.c
122 powidf2.c
123 powisf2.c
124 powitf2.c
125 powixf2.c
126 subdf3.c
127 subsf3.c
128 subvdi3.c
129 subvsi3.c
130 subvti3.c
Joerg Sonnenberger361519f2014-06-19 20:24:49 +0000131 subtf3.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000132 trampoline_setup.c
Ahmed Bougachaf1ac8502015-05-12 18:33:42 +0000133 truncdfhf2.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000134 truncdfsf2.c
Ahmed Bougachaf1ac8502015-05-12 18:33:42 +0000135 truncsfhf2.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000136 ucmpdi2.c
137 ucmpti2.c
138 udivdi3.c
139 udivmoddi4.c
140 udivmodsi4.c
141 udivmodti4.c
142 udivsi3.c
143 udivti3.c
144 umoddi3.c
145 umodsi3.c
146 umodti3.c)
147
Chih-Hung Hsieh4814b9c2015-08-31 17:14:07 +0000148if(NOT WIN32)
149 set(GENERIC_SOURCES
150 ${GENERIC_SOURCES}
151 emutls.c)
152endif()
153
Saleem Abdulrasoola7452e42015-01-14 15:55:17 +0000154if (HAVE_UNWIND_H)
155 set(GENERIC_SOURCES
156 ${GENERIC_SOURCES}
157 gcc_personality_v0.c)
158endif ()
159
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000160set(x86_64_SOURCES
161 x86_64/floatdidf.c
162 x86_64/floatdisf.c
163 x86_64/floatdixf.c
164 x86_64/floatundidf.S
165 x86_64/floatundisf.S
166 x86_64/floatundixf.S
167 ${GENERIC_SOURCES})
Chris Bienemanb38affa2015-08-31 21:24:50 +0000168set(x86_64h_SOURCES ${x86_64_SOURCES})
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000169
Reid Klecknerfbfed862015-07-17 16:23:05 +0000170if(WIN32)
171 set(x86_64_SOURCES
172 ${x86_64_SOURCES}
173 x86_64/chkstk.S)
174endif()
175
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000176set(i386_SOURCES
177 i386/ashldi3.S
178 i386/ashrdi3.S
179 i386/divdi3.S
180 i386/floatdidf.S
181 i386/floatdisf.S
182 i386/floatdixf.S
183 i386/floatundidf.S
184 i386/floatundisf.S
185 i386/floatundixf.S
186 i386/lshrdi3.S
187 i386/moddi3.S
188 i386/muldi3.S
189 i386/udivdi3.S
190 i386/umoddi3.S
191 ${GENERIC_SOURCES})
192
Reid Klecknerfbfed862015-07-17 16:23:05 +0000193if(WIN32)
194 set(i386_SOURCES
195 ${i386_SOURCES}
196 i386/chkstk.S)
197endif()
198
Evgeniy Stepanov0f7ab592014-10-01 12:55:06 +0000199set(i686_SOURCES
200 ${i386_SOURCES})
201
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000202set(arm_SOURCES
203 arm/adddf3vfp.S
204 arm/addsf3vfp.S
Josh Gao1108ae02015-08-21 00:25:37 +0000205 arm/aeabi_cdcmp.S
206 arm/aeabi_cdcmpeq_check_nan.c
207 arm/aeabi_cfcmp.S
208 arm/aeabi_cfcmpeq_check_nan.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000209 arm/aeabi_dcmp.S
Saleem Abdulrasoola0a58732014-09-06 21:34:02 +0000210 arm/aeabi_div0.c
Dan Albertb5226572015-08-18 18:10:33 +0000211 arm/aeabi_drsub.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000212 arm/aeabi_fcmp.S
Dan Albertb5226572015-08-18 18:10:33 +0000213 arm/aeabi_frsub.c
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000214 arm/aeabi_idivmod.S
215 arm/aeabi_ldivmod.S
216 arm/aeabi_memcmp.S
217 arm/aeabi_memcpy.S
218 arm/aeabi_memmove.S
219 arm/aeabi_memset.S
220 arm/aeabi_uidivmod.S
221 arm/aeabi_uldivmod.S
222 arm/bswapdi2.S
223 arm/bswapsi2.S
224 arm/comparesf2.S
225 arm/divdf3vfp.S
226 arm/divmodsi4.S
227 arm/divsf3vfp.S
228 arm/divsi3.S
229 arm/eqdf2vfp.S
230 arm/eqsf2vfp.S
231 arm/extendsfdf2vfp.S
232 arm/fixdfsivfp.S
233 arm/fixsfsivfp.S
234 arm/fixunsdfsivfp.S
235 arm/fixunssfsivfp.S
236 arm/floatsidfvfp.S
237 arm/floatsisfvfp.S
238 arm/floatunssidfvfp.S
239 arm/floatunssisfvfp.S
240 arm/gedf2vfp.S
241 arm/gesf2vfp.S
242 arm/gtdf2vfp.S
243 arm/gtsf2vfp.S
244 arm/ledf2vfp.S
245 arm/lesf2vfp.S
246 arm/ltdf2vfp.S
247 arm/ltsf2vfp.S
248 arm/modsi3.S
249 arm/muldf3vfp.S
250 arm/mulsf3vfp.S
251 arm/nedf2vfp.S
252 arm/negdf2vfp.S
253 arm/negsf2vfp.S
254 arm/nesf2vfp.S
255 arm/restore_vfp_d8_d15_regs.S
256 arm/save_vfp_d8_d15_regs.S
257 arm/subdf3vfp.S
258 arm/subsf3vfp.S
259 arm/switch16.S
260 arm/switch32.S
261 arm/switch8.S
262 arm/switchu8.S
Tim Northover1683caa2014-03-04 10:10:17 +0000263 arm/sync_fetch_and_add_4.S
264 arm/sync_fetch_and_add_8.S
265 arm/sync_fetch_and_and_4.S
266 arm/sync_fetch_and_and_8.S
267 arm/sync_fetch_and_max_4.S
268 arm/sync_fetch_and_max_8.S
269 arm/sync_fetch_and_min_4.S
270 arm/sync_fetch_and_min_8.S
271 arm/sync_fetch_and_nand_4.S
272 arm/sync_fetch_and_nand_8.S
273 arm/sync_fetch_and_or_4.S
274 arm/sync_fetch_and_or_8.S
275 arm/sync_fetch_and_sub_4.S
276 arm/sync_fetch_and_sub_8.S
277 arm/sync_fetch_and_umax_4.S
278 arm/sync_fetch_and_umax_8.S
279 arm/sync_fetch_and_umin_4.S
280 arm/sync_fetch_and_umin_8.S
281 arm/sync_fetch_and_xor_4.S
282 arm/sync_fetch_and_xor_8.S
Alexey Samsonova6b264b2014-02-14 09:20:33 +0000283 arm/sync_synchronize.S
284 arm/truncdfsf2vfp.S
285 arm/udivmodsi4.S
286 arm/udivsi3.S
287 arm/umodsi3.S
288 arm/unorddf2vfp.S
289 arm/unordsf2vfp.S
290 ${GENERIC_SOURCES})
291
Sergey Dmitroukd5a00e82015-08-18 13:43:37 +0000292set(aarch64_SOURCES
293 comparetf2.c
294 extenddftf2.c
295 extendsftf2.c
296 fixtfdi.c
297 fixtfsi.c
298 fixtfti.c
299 fixunstfdi.c
300 fixunstfsi.c
301 fixunstfti.c
302 floatditf.c
303 floatsitf.c
304 floatunditf.c
305 floatunsitf.c
306 multc3.c
307 trunctfdf2.c
308 trunctfsf2.c
309 ${GENERIC_SOURCES})
310
Chris Bienemanb38affa2015-08-31 21:24:50 +0000311set(armv7_SOURCES ${arm_SOURCES})
312set(armv7s_SOURCES ${arm_SOURCES})
313set(arm64_SOURCES ${aarch64_SOURCES})
314
Alexey Samsonov63a4af72014-02-18 09:33:45 +0000315add_custom_target(builtins)
316
Chris Bienemanb38affa2015-08-31 21:24:50 +0000317if (APPLE)
Chris Bieneman9e6af152015-08-31 22:26:02 +0000318 foreach (os ${BUILTIN_SUPPORTED_OS})
Chris Bienemanb38affa2015-08-31 21:24:50 +0000319 list_union(DARWIN_BUILTIN_ARCHS DARWIN_${os}_ARCHS BUILTIN_SUPPORTED_ARCH)
320 set(${os}_builtin_libs)
321 set(${os}_builtin_lipo_flags)
322 foreach (arch ${DARWIN_BUILTIN_ARCHS})
323 # Filter out generic versions of routines that are re-implemented in
324 # architecture specific manner. This prevents multiple definitions of the
325 # same symbols, making the symbol selection non-deterministic.
326 foreach (_file ${${arch}_SOURCES})
327 if (${_file} MATCHES ${arch}/*)
328 get_filename_component(_name ${_file} NAME)
329 string(REPLACE ".S" ".c" _cname "${_name}")
330 list(REMOVE_ITEM ${arch}_SOURCES ${_cname})
331 endif ()
332 endforeach ()
Chris Bienemand1602602015-08-25 19:53:09 +0000333
Chris Bienemanb38affa2015-08-31 21:24:50 +0000334 add_compiler_rt_runtime(clang_rt.builtins_${arch} STATIC
335 OS ${os}
336 ARCHS ${arch}
337 SOURCES ${${arch}_SOURCES}
338 CFLAGS "-std=c99" ${DARWIN_${os}_CFLAGS} -arch ${arch}
339 PARENT_TARGET builtins)
340 list(APPEND ${os}_builtin_libs clang_rt.builtins_${arch}_${os})
341 list(APPEND ${os}_builtin_lipo_flags -arch ${arch}
342 ${COMPILER_RT_LIBRARY_OUTPUT_DIR}/libclang_rt.builtins_${arch}_${os}.a)
343 endforeach()
344
345 if(${os}_builtin_libs)
Chris Bieneman3b0b43c2015-08-31 22:22:18 +0000346 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libclang_rt.builtins_${os}.a
Chris Bienemanb38affa2015-08-31 21:24:50 +0000347 COMMAND lipo -output
Chris Bieneman3b0b43c2015-08-31 22:22:18 +0000348 ${COMPILER_RT_LIBRARY_OUTPUT_DIR}/libclang_rt.builtins_${os}.a
Chris Bienemanb38affa2015-08-31 21:24:50 +0000349 -create ${${os}_builtin_lipo_flags}
350 DEPENDS ${${os}_builtin_libs}
351 )
352 add_custom_target(clang_rt.builtins_${os}
Chris Bieneman3b0b43c2015-08-31 22:22:18 +0000353 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/libclang_rt.builtins_${os}.a)
Chris Bienemanb38affa2015-08-31 21:24:50 +0000354 add_dependencies(builtins clang_rt.builtins_${os})
355 endif()
356 endforeach()
357elseif (NOT WIN32 OR MINGW)
358 foreach (arch ${BUILTIN_SUPPORTED_ARCH})
Saleem Abdulrasoolb72a2fd2014-07-26 23:44:22 +0000359 if (CAN_TARGET_${arch})
360 # Filter out generic versions of routines that are re-implemented in
361 # architecture specific manner. This prevents multiple definitions of the
362 # same symbols, making the symbol selection non-deterministic.
363 foreach (_file ${${arch}_SOURCES})
364 if (${_file} MATCHES ${arch}/*)
365 get_filename_component(_name ${_file} NAME)
366 string(REPLACE ".S" ".c" _cname "${_name}")
367 list(REMOVE_ITEM ${arch}_SOURCES ${_cname})
368 endif ()
369 endforeach ()
370
Chris Bienemand1602602015-08-25 19:53:09 +0000371 add_compiler_rt_runtime(clang_rt.builtins
372 STATIC
Chris Bienemanb38affa2015-08-31 21:24:50 +0000373 ARCHS ${arch}
Saleem Abdulrasoolb72a2fd2014-07-26 23:44:22 +0000374 SOURCES ${${arch}_SOURCES}
Chris Bienemand1602602015-08-25 19:53:09 +0000375 CFLAGS "-std=c99"
376 PARENT_TARGET builtins)
Saleem Abdulrasoolb72a2fd2014-07-26 23:44:22 +0000377 endif ()
378 endforeach ()
379endif ()
Alexey Samsonov63a4af72014-02-18 09:33:45 +0000380
381add_dependencies(compiler-rt builtins)