xref: /aosp_15_r20/external/compiler-rt/lib/builtins/CMakeLists.txt (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot# This directory contains a large amount of C code which provides
2*7c3d14c8STreehugger Robot# generic implementations of the core runtime library along with optimized
3*7c3d14c8STreehugger Robot# architecture-specific code in various subdirectories.
4*7c3d14c8STreehugger Robot
5*7c3d14c8STreehugger Robotif (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
6*7c3d14c8STreehugger Robot  cmake_minimum_required(VERSION 3.4.3)
7*7c3d14c8STreehugger Robot
8*7c3d14c8STreehugger Robot  project(CompilerRTBuiltins C ASM)
9*7c3d14c8STreehugger Robot  set(COMPILER_RT_STANDALONE_BUILD TRUE)
10*7c3d14c8STreehugger Robot  set(COMPILER_RT_BUILTINS_STANDALONE_BUILD TRUE)
11*7c3d14c8STreehugger Robot  list(INSERT CMAKE_MODULE_PATH 0
12*7c3d14c8STreehugger Robot    "${CMAKE_SOURCE_DIR}/../../cmake"
13*7c3d14c8STreehugger Robot    "${CMAKE_SOURCE_DIR}/../../cmake/Modules")
14*7c3d14c8STreehugger Robot  include(base-config-ix)
15*7c3d14c8STreehugger Robot  include(CompilerRTUtils)
16*7c3d14c8STreehugger Robot  if(APPLE)
17*7c3d14c8STreehugger Robot    include(CompilerRTDarwinUtils)
18*7c3d14c8STreehugger Robot  endif()
19*7c3d14c8STreehugger Robot  include(AddCompilerRT)
20*7c3d14c8STreehugger Robotendif()
21*7c3d14c8STreehugger Robot
22*7c3d14c8STreehugger Robotinclude(builtin-config-ix)
23*7c3d14c8STreehugger Robot
24*7c3d14c8STreehugger Robot# TODO: Need to add a mechanism for logging errors when builtin source files are
25*7c3d14c8STreehugger Robot# added to a sub-directory and not this CMakeLists file.
26*7c3d14c8STreehugger Robotset(GENERIC_SOURCES
27*7c3d14c8STreehugger Robot  absvdi2.c
28*7c3d14c8STreehugger Robot  absvsi2.c
29*7c3d14c8STreehugger Robot  absvti2.c
30*7c3d14c8STreehugger Robot  adddf3.c
31*7c3d14c8STreehugger Robot  addsf3.c
32*7c3d14c8STreehugger Robot  addtf3.c
33*7c3d14c8STreehugger Robot  addvdi3.c
34*7c3d14c8STreehugger Robot  addvsi3.c
35*7c3d14c8STreehugger Robot  addvti3.c
36*7c3d14c8STreehugger Robot  apple_versioning.c
37*7c3d14c8STreehugger Robot  ashldi3.c
38*7c3d14c8STreehugger Robot  ashlti3.c
39*7c3d14c8STreehugger Robot  ashrdi3.c
40*7c3d14c8STreehugger Robot  ashrti3.c
41*7c3d14c8STreehugger Robot  # FIXME: atomic.c may only be compiled if host compiler understands _Atomic
42*7c3d14c8STreehugger Robot  # atomic.c
43*7c3d14c8STreehugger Robot  clear_cache.c
44*7c3d14c8STreehugger Robot  clzdi2.c
45*7c3d14c8STreehugger Robot  clzsi2.c
46*7c3d14c8STreehugger Robot  clzti2.c
47*7c3d14c8STreehugger Robot  cmpdi2.c
48*7c3d14c8STreehugger Robot  cmpti2.c
49*7c3d14c8STreehugger Robot  comparedf2.c
50*7c3d14c8STreehugger Robot  comparesf2.c
51*7c3d14c8STreehugger Robot  ctzdi2.c
52*7c3d14c8STreehugger Robot  ctzsi2.c
53*7c3d14c8STreehugger Robot  ctzti2.c
54*7c3d14c8STreehugger Robot  divdc3.c
55*7c3d14c8STreehugger Robot  divdf3.c
56*7c3d14c8STreehugger Robot  divdi3.c
57*7c3d14c8STreehugger Robot  divmoddi4.c
58*7c3d14c8STreehugger Robot  divmodsi4.c
59*7c3d14c8STreehugger Robot  divsc3.c
60*7c3d14c8STreehugger Robot  divsf3.c
61*7c3d14c8STreehugger Robot  divsi3.c
62*7c3d14c8STreehugger Robot  divtc3.c
63*7c3d14c8STreehugger Robot  divti3.c
64*7c3d14c8STreehugger Robot  divtf3.c
65*7c3d14c8STreehugger Robot  divxc3.c
66*7c3d14c8STreehugger Robot  enable_execute_stack.c
67*7c3d14c8STreehugger Robot  eprintf.c
68*7c3d14c8STreehugger Robot  extendsfdf2.c
69*7c3d14c8STreehugger Robot  extendhfsf2.c
70*7c3d14c8STreehugger Robot  ffsdi2.c
71*7c3d14c8STreehugger Robot  ffsti2.c
72*7c3d14c8STreehugger Robot  fixdfdi.c
73*7c3d14c8STreehugger Robot  fixdfsi.c
74*7c3d14c8STreehugger Robot  fixdfti.c
75*7c3d14c8STreehugger Robot  fixsfdi.c
76*7c3d14c8STreehugger Robot  fixsfsi.c
77*7c3d14c8STreehugger Robot  fixsfti.c
78*7c3d14c8STreehugger Robot  fixunsdfdi.c
79*7c3d14c8STreehugger Robot  fixunsdfsi.c
80*7c3d14c8STreehugger Robot  fixunsdfti.c
81*7c3d14c8STreehugger Robot  fixunssfdi.c
82*7c3d14c8STreehugger Robot  fixunssfsi.c
83*7c3d14c8STreehugger Robot  fixunssfti.c
84*7c3d14c8STreehugger Robot  fixunsxfdi.c
85*7c3d14c8STreehugger Robot  fixunsxfsi.c
86*7c3d14c8STreehugger Robot  fixunsxfti.c
87*7c3d14c8STreehugger Robot  fixxfdi.c
88*7c3d14c8STreehugger Robot  fixxfti.c
89*7c3d14c8STreehugger Robot  floatdidf.c
90*7c3d14c8STreehugger Robot  floatdisf.c
91*7c3d14c8STreehugger Robot  floatdixf.c
92*7c3d14c8STreehugger Robot  floatsidf.c
93*7c3d14c8STreehugger Robot  floatsisf.c
94*7c3d14c8STreehugger Robot  floattidf.c
95*7c3d14c8STreehugger Robot  floattisf.c
96*7c3d14c8STreehugger Robot  floattixf.c
97*7c3d14c8STreehugger Robot  floatundidf.c
98*7c3d14c8STreehugger Robot  floatundisf.c
99*7c3d14c8STreehugger Robot  floatundixf.c
100*7c3d14c8STreehugger Robot  floatunsidf.c
101*7c3d14c8STreehugger Robot  floatunsisf.c
102*7c3d14c8STreehugger Robot  floatuntidf.c
103*7c3d14c8STreehugger Robot  floatuntisf.c
104*7c3d14c8STreehugger Robot  floatuntixf.c
105*7c3d14c8STreehugger Robot  int_util.c
106*7c3d14c8STreehugger Robot  lshrdi3.c
107*7c3d14c8STreehugger Robot  lshrti3.c
108*7c3d14c8STreehugger Robot  moddi3.c
109*7c3d14c8STreehugger Robot  modsi3.c
110*7c3d14c8STreehugger Robot  modti3.c
111*7c3d14c8STreehugger Robot  muldc3.c
112*7c3d14c8STreehugger Robot  muldf3.c
113*7c3d14c8STreehugger Robot  muldi3.c
114*7c3d14c8STreehugger Robot  mulodi4.c
115*7c3d14c8STreehugger Robot  mulosi4.c
116*7c3d14c8STreehugger Robot  muloti4.c
117*7c3d14c8STreehugger Robot  mulsc3.c
118*7c3d14c8STreehugger Robot  mulsf3.c
119*7c3d14c8STreehugger Robot  multi3.c
120*7c3d14c8STreehugger Robot  multf3.c
121*7c3d14c8STreehugger Robot  mulvdi3.c
122*7c3d14c8STreehugger Robot  mulvsi3.c
123*7c3d14c8STreehugger Robot  mulvti3.c
124*7c3d14c8STreehugger Robot  mulxc3.c
125*7c3d14c8STreehugger Robot  negdf2.c
126*7c3d14c8STreehugger Robot  negdi2.c
127*7c3d14c8STreehugger Robot  negsf2.c
128*7c3d14c8STreehugger Robot  negti2.c
129*7c3d14c8STreehugger Robot  negvdi2.c
130*7c3d14c8STreehugger Robot  negvsi2.c
131*7c3d14c8STreehugger Robot  negvti2.c
132*7c3d14c8STreehugger Robot  paritydi2.c
133*7c3d14c8STreehugger Robot  paritysi2.c
134*7c3d14c8STreehugger Robot  parityti2.c
135*7c3d14c8STreehugger Robot  popcountdi2.c
136*7c3d14c8STreehugger Robot  popcountsi2.c
137*7c3d14c8STreehugger Robot  popcountti2.c
138*7c3d14c8STreehugger Robot  powidf2.c
139*7c3d14c8STreehugger Robot  powisf2.c
140*7c3d14c8STreehugger Robot  powitf2.c
141*7c3d14c8STreehugger Robot  powixf2.c
142*7c3d14c8STreehugger Robot  subdf3.c
143*7c3d14c8STreehugger Robot  subsf3.c
144*7c3d14c8STreehugger Robot  subvdi3.c
145*7c3d14c8STreehugger Robot  subvsi3.c
146*7c3d14c8STreehugger Robot  subvti3.c
147*7c3d14c8STreehugger Robot  subtf3.c
148*7c3d14c8STreehugger Robot  trampoline_setup.c
149*7c3d14c8STreehugger Robot  truncdfhf2.c
150*7c3d14c8STreehugger Robot  truncdfsf2.c
151*7c3d14c8STreehugger Robot  truncsfhf2.c
152*7c3d14c8STreehugger Robot  ucmpdi2.c
153*7c3d14c8STreehugger Robot  ucmpti2.c
154*7c3d14c8STreehugger Robot  udivdi3.c
155*7c3d14c8STreehugger Robot  udivmoddi4.c
156*7c3d14c8STreehugger Robot  udivmodsi4.c
157*7c3d14c8STreehugger Robot  udivmodti4.c
158*7c3d14c8STreehugger Robot  udivsi3.c
159*7c3d14c8STreehugger Robot  udivti3.c
160*7c3d14c8STreehugger Robot  umoddi3.c
161*7c3d14c8STreehugger Robot  umodsi3.c
162*7c3d14c8STreehugger Robot  umodti3.c)
163*7c3d14c8STreehugger Robot
164*7c3d14c8STreehugger Robotset(MSVC_SOURCES
165*7c3d14c8STreehugger Robot divsc3.c
166*7c3d14c8STreehugger Robot divdc3.c
167*7c3d14c8STreehugger Robot divxc3.c
168*7c3d14c8STreehugger Robot mulsc3.c
169*7c3d14c8STreehugger Robot muldc3.c
170*7c3d14c8STreehugger Robot mulxc3.c)
171*7c3d14c8STreehugger Robot
172*7c3d14c8STreehugger Robot
173*7c3d14c8STreehugger Robotif(APPLE)
174*7c3d14c8STreehugger Robot  set(GENERIC_SOURCES
175*7c3d14c8STreehugger Robot    ${GENERIC_SOURCES}
176*7c3d14c8STreehugger Robot    atomic_flag_clear.c
177*7c3d14c8STreehugger Robot    atomic_flag_clear_explicit.c
178*7c3d14c8STreehugger Robot    atomic_flag_test_and_set.c
179*7c3d14c8STreehugger Robot    atomic_flag_test_and_set_explicit.c
180*7c3d14c8STreehugger Robot    atomic_signal_fence.c
181*7c3d14c8STreehugger Robot    atomic_thread_fence.c)
182*7c3d14c8STreehugger Robotendif()
183*7c3d14c8STreehugger Robot
184*7c3d14c8STreehugger Robotif(NOT WIN32 OR MINGW)
185*7c3d14c8STreehugger Robot  set(GENERIC_SOURCES
186*7c3d14c8STreehugger Robot      ${GENERIC_SOURCES}
187*7c3d14c8STreehugger Robot      emutls.c)
188*7c3d14c8STreehugger Robotendif()
189*7c3d14c8STreehugger Robot
190*7c3d14c8STreehugger Robotif (HAVE_UNWIND_H)
191*7c3d14c8STreehugger Robot  set(GENERIC_SOURCES
192*7c3d14c8STreehugger Robot      ${GENERIC_SOURCES}
193*7c3d14c8STreehugger Robot      gcc_personality_v0.c)
194*7c3d14c8STreehugger Robotendif ()
195*7c3d14c8STreehugger Robot
196*7c3d14c8STreehugger Robotif (NOT MSVC)
197*7c3d14c8STreehugger Robot  set(x86_64_SOURCES
198*7c3d14c8STreehugger Robot      x86_64/chkstk.S
199*7c3d14c8STreehugger Robot      x86_64/chkstk2.S
200*7c3d14c8STreehugger Robot      x86_64/floatdidf.c
201*7c3d14c8STreehugger Robot      x86_64/floatdisf.c
202*7c3d14c8STreehugger Robot      x86_64/floatdixf.c
203*7c3d14c8STreehugger Robot      x86_64/floatundidf.S
204*7c3d14c8STreehugger Robot      x86_64/floatundisf.S
205*7c3d14c8STreehugger Robot      x86_64/floatundixf.S
206*7c3d14c8STreehugger Robot      ${GENERIC_SOURCES})
207*7c3d14c8STreehugger Robot  set(x86_64h_SOURCES ${x86_64_SOURCES})
208*7c3d14c8STreehugger Robot
209*7c3d14c8STreehugger Robot  if (WIN32)
210*7c3d14c8STreehugger Robot    set(x86_64_SOURCES
211*7c3d14c8STreehugger Robot        ${x86_64_SOURCES}
212*7c3d14c8STreehugger Robot        x86_64/chkstk.S
213*7c3d14c8STreehugger Robot        x86_64/chkstk2.S)
214*7c3d14c8STreehugger Robot  endif()
215*7c3d14c8STreehugger Robot
216*7c3d14c8STreehugger Robot  set(i386_SOURCES
217*7c3d14c8STreehugger Robot      i386/ashldi3.S
218*7c3d14c8STreehugger Robot      i386/ashrdi3.S
219*7c3d14c8STreehugger Robot      i386/chkstk.S
220*7c3d14c8STreehugger Robot      i386/chkstk2.S
221*7c3d14c8STreehugger Robot      i386/divdi3.S
222*7c3d14c8STreehugger Robot      i386/floatdidf.S
223*7c3d14c8STreehugger Robot      i386/floatdisf.S
224*7c3d14c8STreehugger Robot      i386/floatdixf.S
225*7c3d14c8STreehugger Robot      i386/floatundidf.S
226*7c3d14c8STreehugger Robot      i386/floatundisf.S
227*7c3d14c8STreehugger Robot      i386/floatundixf.S
228*7c3d14c8STreehugger Robot      i386/lshrdi3.S
229*7c3d14c8STreehugger Robot      i386/moddi3.S
230*7c3d14c8STreehugger Robot      i386/muldi3.S
231*7c3d14c8STreehugger Robot      i386/udivdi3.S
232*7c3d14c8STreehugger Robot      i386/umoddi3.S
233*7c3d14c8STreehugger Robot      ${GENERIC_SOURCES})
234*7c3d14c8STreehugger Robot
235*7c3d14c8STreehugger Robot  if (WIN32)
236*7c3d14c8STreehugger Robot    set(i386_SOURCES
237*7c3d14c8STreehugger Robot        ${i386_SOURCES}
238*7c3d14c8STreehugger Robot        i386/chkstk.S
239*7c3d14c8STreehugger Robot        i386/chkstk2.S)
240*7c3d14c8STreehugger Robot  endif()
241*7c3d14c8STreehugger Robot
242*7c3d14c8STreehugger Robot  set(i686_SOURCES
243*7c3d14c8STreehugger Robot      ${i386_SOURCES})
244*7c3d14c8STreehugger Robotelse () # MSVC
245*7c3d14c8STreehugger Robot  # Use C versions of functions when building on MSVC
246*7c3d14c8STreehugger Robot  # MSVC's assembler takes Intel syntax, not AT&T syntax.
247*7c3d14c8STreehugger Robot  # Also use only MSVC compilable builtin implementations.
248*7c3d14c8STreehugger Robot  set(x86_64_SOURCES
249*7c3d14c8STreehugger Robot      x86_64/floatdidf.c
250*7c3d14c8STreehugger Robot      x86_64/floatdisf.c
251*7c3d14c8STreehugger Robot      x86_64/floatdixf.c
252*7c3d14c8STreehugger Robot      ${MSVC_SOURCES})
253*7c3d14c8STreehugger Robot  set(x86_64h_SOURCES ${x86_64_SOURCES})
254*7c3d14c8STreehugger Robot  set(i386_SOURCES ${MSVC_SOURCES})
255*7c3d14c8STreehugger Robot  set(i686_SOURCES ${i386_SOURCES})
256*7c3d14c8STreehugger Robotendif () # if (NOT MSVC)
257*7c3d14c8STreehugger Robot
258*7c3d14c8STreehugger Robotset(arm_SOURCES
259*7c3d14c8STreehugger Robot  arm/adddf3vfp.S
260*7c3d14c8STreehugger Robot  arm/addsf3vfp.S
261*7c3d14c8STreehugger Robot  arm/aeabi_cdcmp.S
262*7c3d14c8STreehugger Robot  arm/aeabi_cdcmpeq_check_nan.c
263*7c3d14c8STreehugger Robot  arm/aeabi_cfcmp.S
264*7c3d14c8STreehugger Robot  arm/aeabi_cfcmpeq_check_nan.c
265*7c3d14c8STreehugger Robot  arm/aeabi_dcmp.S
266*7c3d14c8STreehugger Robot  arm/aeabi_div0.c
267*7c3d14c8STreehugger Robot  arm/aeabi_drsub.c
268*7c3d14c8STreehugger Robot  arm/aeabi_fcmp.S
269*7c3d14c8STreehugger Robot  arm/aeabi_frsub.c
270*7c3d14c8STreehugger Robot  arm/aeabi_idivmod.S
271*7c3d14c8STreehugger Robot  arm/aeabi_ldivmod.S
272*7c3d14c8STreehugger Robot  arm/aeabi_memcmp.S
273*7c3d14c8STreehugger Robot  arm/aeabi_memcpy.S
274*7c3d14c8STreehugger Robot  arm/aeabi_memmove.S
275*7c3d14c8STreehugger Robot  arm/aeabi_memset.S
276*7c3d14c8STreehugger Robot  arm/aeabi_uidivmod.S
277*7c3d14c8STreehugger Robot  arm/aeabi_uldivmod.S
278*7c3d14c8STreehugger Robot  arm/bswapdi2.S
279*7c3d14c8STreehugger Robot  arm/bswapsi2.S
280*7c3d14c8STreehugger Robot  arm/clzdi2.S
281*7c3d14c8STreehugger Robot  arm/clzsi2.S
282*7c3d14c8STreehugger Robot  arm/comparesf2.S
283*7c3d14c8STreehugger Robot  arm/divdf3vfp.S
284*7c3d14c8STreehugger Robot  arm/divmodsi4.S
285*7c3d14c8STreehugger Robot  arm/divsf3vfp.S
286*7c3d14c8STreehugger Robot  arm/divsi3.S
287*7c3d14c8STreehugger Robot  arm/eqdf2vfp.S
288*7c3d14c8STreehugger Robot  arm/eqsf2vfp.S
289*7c3d14c8STreehugger Robot  arm/extendsfdf2vfp.S
290*7c3d14c8STreehugger Robot  arm/fixdfsivfp.S
291*7c3d14c8STreehugger Robot  arm/fixsfsivfp.S
292*7c3d14c8STreehugger Robot  arm/fixunsdfsivfp.S
293*7c3d14c8STreehugger Robot  arm/fixunssfsivfp.S
294*7c3d14c8STreehugger Robot  arm/floatsidfvfp.S
295*7c3d14c8STreehugger Robot  arm/floatsisfvfp.S
296*7c3d14c8STreehugger Robot  arm/floatunssidfvfp.S
297*7c3d14c8STreehugger Robot  arm/floatunssisfvfp.S
298*7c3d14c8STreehugger Robot  arm/gedf2vfp.S
299*7c3d14c8STreehugger Robot  arm/gesf2vfp.S
300*7c3d14c8STreehugger Robot  arm/gtdf2vfp.S
301*7c3d14c8STreehugger Robot  arm/gtsf2vfp.S
302*7c3d14c8STreehugger Robot  arm/ledf2vfp.S
303*7c3d14c8STreehugger Robot  arm/lesf2vfp.S
304*7c3d14c8STreehugger Robot  arm/ltdf2vfp.S
305*7c3d14c8STreehugger Robot  arm/ltsf2vfp.S
306*7c3d14c8STreehugger Robot  arm/modsi3.S
307*7c3d14c8STreehugger Robot  arm/muldf3vfp.S
308*7c3d14c8STreehugger Robot  arm/mulsf3vfp.S
309*7c3d14c8STreehugger Robot  arm/nedf2vfp.S
310*7c3d14c8STreehugger Robot  arm/negdf2vfp.S
311*7c3d14c8STreehugger Robot  arm/negsf2vfp.S
312*7c3d14c8STreehugger Robot  arm/nesf2vfp.S
313*7c3d14c8STreehugger Robot  arm/restore_vfp_d8_d15_regs.S
314*7c3d14c8STreehugger Robot  arm/save_vfp_d8_d15_regs.S
315*7c3d14c8STreehugger Robot  arm/subdf3vfp.S
316*7c3d14c8STreehugger Robot  arm/subsf3vfp.S
317*7c3d14c8STreehugger Robot  arm/switch16.S
318*7c3d14c8STreehugger Robot  arm/switch32.S
319*7c3d14c8STreehugger Robot  arm/switch8.S
320*7c3d14c8STreehugger Robot  arm/switchu8.S
321*7c3d14c8STreehugger Robot  arm/sync_fetch_and_add_4.S
322*7c3d14c8STreehugger Robot  arm/sync_fetch_and_add_8.S
323*7c3d14c8STreehugger Robot  arm/sync_fetch_and_and_4.S
324*7c3d14c8STreehugger Robot  arm/sync_fetch_and_and_8.S
325*7c3d14c8STreehugger Robot  arm/sync_fetch_and_max_4.S
326*7c3d14c8STreehugger Robot  arm/sync_fetch_and_max_8.S
327*7c3d14c8STreehugger Robot  arm/sync_fetch_and_min_4.S
328*7c3d14c8STreehugger Robot  arm/sync_fetch_and_min_8.S
329*7c3d14c8STreehugger Robot  arm/sync_fetch_and_nand_4.S
330*7c3d14c8STreehugger Robot  arm/sync_fetch_and_nand_8.S
331*7c3d14c8STreehugger Robot  arm/sync_fetch_and_or_4.S
332*7c3d14c8STreehugger Robot  arm/sync_fetch_and_or_8.S
333*7c3d14c8STreehugger Robot  arm/sync_fetch_and_sub_4.S
334*7c3d14c8STreehugger Robot  arm/sync_fetch_and_sub_8.S
335*7c3d14c8STreehugger Robot  arm/sync_fetch_and_umax_4.S
336*7c3d14c8STreehugger Robot  arm/sync_fetch_and_umax_8.S
337*7c3d14c8STreehugger Robot  arm/sync_fetch_and_umin_4.S
338*7c3d14c8STreehugger Robot  arm/sync_fetch_and_umin_8.S
339*7c3d14c8STreehugger Robot  arm/sync_fetch_and_xor_4.S
340*7c3d14c8STreehugger Robot  arm/sync_fetch_and_xor_8.S
341*7c3d14c8STreehugger Robot  arm/sync_synchronize.S
342*7c3d14c8STreehugger Robot  arm/truncdfsf2vfp.S
343*7c3d14c8STreehugger Robot  arm/udivmodsi4.S
344*7c3d14c8STreehugger Robot  arm/udivsi3.S
345*7c3d14c8STreehugger Robot  arm/umodsi3.S
346*7c3d14c8STreehugger Robot  arm/unorddf2vfp.S
347*7c3d14c8STreehugger Robot  arm/unordsf2vfp.S
348*7c3d14c8STreehugger Robot  ${GENERIC_SOURCES})
349*7c3d14c8STreehugger Robot
350*7c3d14c8STreehugger Robotset(aarch64_SOURCES
351*7c3d14c8STreehugger Robot  comparetf2.c
352*7c3d14c8STreehugger Robot  extenddftf2.c
353*7c3d14c8STreehugger Robot  extendsftf2.c
354*7c3d14c8STreehugger Robot  fixtfdi.c
355*7c3d14c8STreehugger Robot  fixtfsi.c
356*7c3d14c8STreehugger Robot  fixtfti.c
357*7c3d14c8STreehugger Robot  fixunstfdi.c
358*7c3d14c8STreehugger Robot  fixunstfsi.c
359*7c3d14c8STreehugger Robot  fixunstfti.c
360*7c3d14c8STreehugger Robot  floatditf.c
361*7c3d14c8STreehugger Robot  floatsitf.c
362*7c3d14c8STreehugger Robot  floatunditf.c
363*7c3d14c8STreehugger Robot  floatunsitf.c
364*7c3d14c8STreehugger Robot  multc3.c
365*7c3d14c8STreehugger Robot  trunctfdf2.c
366*7c3d14c8STreehugger Robot  trunctfsf2.c
367*7c3d14c8STreehugger Robot  ${GENERIC_SOURCES})
368*7c3d14c8STreehugger Robot
369*7c3d14c8STreehugger Robotset(armhf_SOURCES ${arm_SOURCES})
370*7c3d14c8STreehugger Robotset(armv7_SOURCES ${arm_SOURCES})
371*7c3d14c8STreehugger Robotset(armv7s_SOURCES ${arm_SOURCES})
372*7c3d14c8STreehugger Robotset(armv7k_SOURCES ${arm_SOURCES})
373*7c3d14c8STreehugger Robotset(arm64_SOURCES ${aarch64_SOURCES})
374*7c3d14c8STreehugger Robot
375*7c3d14c8STreehugger Robot# macho_embedded archs
376*7c3d14c8STreehugger Robotset(armv6m_SOURCES ${GENERIC_SOURCES})
377*7c3d14c8STreehugger Robotset(armv7m_SOURCES ${arm_SOURCES})
378*7c3d14c8STreehugger Robotset(armv7em_SOURCES ${arm_SOURCES})
379*7c3d14c8STreehugger Robot
380*7c3d14c8STreehugger Robotset(mips_SOURCES ${GENERIC_SOURCES})
381*7c3d14c8STreehugger Robotset(mipsel_SOURCES ${mips_SOURCES})
382*7c3d14c8STreehugger Robotset(mips64_SOURCES ${mips_SOURCES})
383*7c3d14c8STreehugger Robotset(mips64el_SOURCES ${mips_SOURCES})
384*7c3d14c8STreehugger Robot
385*7c3d14c8STreehugger Robotset(wasm32_SOURCES ${GENERIC_SOURCES})
386*7c3d14c8STreehugger Robotset(wasm64_SOURCES ${GENERIC_SOURCES})
387*7c3d14c8STreehugger Robot
388*7c3d14c8STreehugger Robotadd_custom_target(builtins)
389*7c3d14c8STreehugger Robotset_target_properties(builtins PROPERTIES FOLDER "Compiler-RT Misc")
390*7c3d14c8STreehugger Robot
391*7c3d14c8STreehugger Robotif (APPLE)
392*7c3d14c8STreehugger Robot  add_subdirectory(Darwin-excludes)
393*7c3d14c8STreehugger Robot  add_subdirectory(macho_embedded)
394*7c3d14c8STreehugger Robot  darwin_add_builtin_libraries(${BUILTIN_SUPPORTED_OS})
395*7c3d14c8STreehugger Robotelse ()
396*7c3d14c8STreehugger Robot  append_string_if(COMPILER_RT_HAS_STD_C99_FLAG -std=c99 maybe_stdc99)
397*7c3d14c8STreehugger Robot
398*7c3d14c8STreehugger Robot  foreach (arch ${BUILTIN_SUPPORTED_ARCH})
399*7c3d14c8STreehugger Robot    if (CAN_TARGET_${arch})
400*7c3d14c8STreehugger Robot      # Filter out generic versions of routines that are re-implemented in
401*7c3d14c8STreehugger Robot      # architecture specific manner.  This prevents multiple definitions of the
402*7c3d14c8STreehugger Robot      # same symbols, making the symbol selection non-deterministic.
403*7c3d14c8STreehugger Robot      foreach (_file ${${arch}_SOURCES})
404*7c3d14c8STreehugger Robot        if (${_file} MATCHES ${arch}/*)
405*7c3d14c8STreehugger Robot          get_filename_component(_name ${_file} NAME)
406*7c3d14c8STreehugger Robot          string(REPLACE ".S" ".c" _cname "${_name}")
407*7c3d14c8STreehugger Robot          list(REMOVE_ITEM ${arch}_SOURCES ${_cname})
408*7c3d14c8STreehugger Robot        endif ()
409*7c3d14c8STreehugger Robot      endforeach ()
410*7c3d14c8STreehugger Robot
411*7c3d14c8STreehugger Robot      add_compiler_rt_runtime(clang_rt.builtins
412*7c3d14c8STreehugger Robot                              STATIC
413*7c3d14c8STreehugger Robot                              ARCHS ${arch}
414*7c3d14c8STreehugger Robot                              SOURCES ${${arch}_SOURCES}
415*7c3d14c8STreehugger Robot                              CFLAGS ${maybe_stdc99}
416*7c3d14c8STreehugger Robot                              PARENT_TARGET builtins)
417*7c3d14c8STreehugger Robot    endif ()
418*7c3d14c8STreehugger Robot  endforeach ()
419*7c3d14c8STreehugger Robotendif ()
420*7c3d14c8STreehugger Robot
421*7c3d14c8STreehugger Robotadd_dependencies(compiler-rt builtins)
422