Revert builtins fp16 support: tests do not pass on Mac
[lldb.git] / compiler-rt / lib / builtins / CMakeLists.txt
1 # 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
5 if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
6   cmake_minimum_required(VERSION 3.13.4)
7
8   project(CompilerRTBuiltins C ASM)
9   set(COMPILER_RT_STANDALONE_BUILD TRUE)
10   set(COMPILER_RT_BUILTINS_STANDALONE_BUILD TRUE)
11   list(INSERT CMAKE_MODULE_PATH 0
12     "${CMAKE_SOURCE_DIR}/../../cmake"
13     "${CMAKE_SOURCE_DIR}/../../cmake/Modules")
14   include(base-config-ix)
15   include(CompilerRTUtils)
16
17   load_llvm_config()
18   construct_compiler_rt_default_triple()
19
20   if(APPLE)
21     include(CompilerRTDarwinUtils)
22   endif()
23   if(APPLE)
24     include(UseLibtool)
25   endif()
26   include(AddCompilerRT)
27
28   if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
29     set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> -X32_64 qc <TARGET> <LINK_FLAGS> <OBJECTS>")
30     set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> -X32_64 qc <TARGET> <LINK_FLAGS> <OBJECTS>")
31     set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> -X32_64 q <TARGET> <LINK_FLAGS> <OBJECTS>")
32     set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> -X32_64 q <TARGET> <LINK_FLAGS> <OBJECTS>")
33     set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -X32_64 <TARGET>")
34     set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -X32_64 <TARGET>")
35   endif()
36 endif()
37
38 if (COMPILER_RT_STANDALONE_BUILD)
39   # When compiler-rt is being built standalone, possibly as a cross-compilation
40   # target, the target may or may not want position independent code. This
41   # option provides an avenue through which the flag may be controlled when an
42   # LLVM configuration is not being utilized.
43   option(COMPILER_RT_BUILTINS_ENABLE_PIC
44     "Turns on or off -fPIC for the builtin library source"
45     ON)
46 endif()
47
48 include(builtin-config-ix)
49
50 # TODO: Need to add a mechanism for logging errors when builtin source files are
51 # added to a sub-directory and not this CMakeLists file.
52 set(GENERIC_SOURCES
53   absvdi2.c
54   absvsi2.c
55   absvti2.c
56   adddf3.c
57   addsf3.c
58   addvdi3.c
59   addvsi3.c
60   addvti3.c
61   apple_versioning.c
62   ashldi3.c
63   ashlti3.c
64   ashrdi3.c
65   ashrti3.c
66   bswapdi2.c
67   bswapsi2.c
68   clzdi2.c
69   clzsi2.c
70   clzti2.c
71   cmpdi2.c
72   cmpti2.c
73   comparedf2.c
74   comparesf2.c
75   ctzdi2.c
76   ctzsi2.c
77   ctzti2.c
78   divdc3.c
79   divdf3.c
80   divdi3.c
81   divmoddi4.c
82   divmodsi4.c
83   divmodti4.c
84   divsc3.c
85   divsf3.c
86   divsi3.c
87   divti3.c
88   extendsfdf2.c
89   extendhfsf2.c
90   ffsdi2.c
91   ffssi2.c
92   ffsti2.c
93   fixdfdi.c
94   fixdfsi.c
95   fixdfti.c
96   fixsfdi.c
97   fixsfsi.c
98   fixsfti.c
99   fixunsdfdi.c
100   fixunsdfsi.c
101   fixunsdfti.c
102   fixunssfdi.c
103   fixunssfsi.c
104   fixunssfti.c
105   floatdidf.c
106   floatdisf.c
107   floatsidf.c
108   floatsisf.c
109   floattidf.c
110   floattisf.c
111   floatundidf.c
112   floatundisf.c
113   floatunsidf.c
114   floatunsisf.c
115   floatuntidf.c
116   floatuntisf.c
117   fp_mode.c
118   int_util.c
119   lshrdi3.c
120   lshrti3.c
121   moddi3.c
122   modsi3.c
123   modti3.c
124   muldc3.c
125   muldf3.c
126   muldi3.c
127   mulodi4.c
128   mulosi4.c
129   muloti4.c
130   mulsc3.c
131   mulsf3.c
132   multi3.c
133   mulvdi3.c
134   mulvsi3.c
135   mulvti3.c
136   negdf2.c
137   negdi2.c
138   negsf2.c
139   negti2.c
140   negvdi2.c
141   negvsi2.c
142   negvti2.c
143   os_version_check.c
144   paritydi2.c
145   paritysi2.c
146   parityti2.c
147   popcountdi2.c
148   popcountsi2.c
149   popcountti2.c
150   powidf2.c
151   powisf2.c
152   subdf3.c
153   subsf3.c
154   subvdi3.c
155   subvsi3.c
156   subvti3.c
157   trampoline_setup.c
158   truncdfhf2.c
159   truncdfsf2.c
160   truncsfhf2.c
161   ucmpdi2.c
162   ucmpti2.c
163   udivdi3.c
164   udivmoddi4.c
165   udivmodsi4.c
166   udivmodti4.c
167   udivsi3.c
168   udivti3.c
169   umoddi3.c
170   umodsi3.c
171   umodti3.c
172 )
173
174 # TODO: Several "tf" files (and divtc3.c, but not multc3.c) are in
175 # GENERIC_SOURCES instead of here.
176 set(GENERIC_TF_SOURCES
177   addtf3.c
178   comparetf2.c
179   divtc3.c
180   divtf3.c
181   extenddftf2.c
182   extendsftf2.c
183   fixtfdi.c
184   fixtfsi.c
185   fixtfti.c
186   fixunstfdi.c
187   fixunstfsi.c
188   fixunstfti.c
189   floatditf.c
190   floatsitf.c
191   floattitf.c
192   floatunditf.c
193   floatunsitf.c
194   floatuntitf.c
195   multc3.c
196   multf3.c
197   powitf2.c
198   subtf3.c
199   trunctfdf2.c
200   trunctfsf2.c
201 )
202
203 option(COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN
204   "Skip the atomic builtin (these should normally be provided by a shared library)"
205   On)
206
207 if(NOT FUCHSIA AND NOT COMPILER_RT_BAREMETAL_BUILD)
208   set(GENERIC_SOURCES
209     ${GENERIC_SOURCES}
210     emutls.c
211     enable_execute_stack.c
212     eprintf.c
213   )
214 endif()
215
216 if(COMPILER_RT_HAS_ATOMIC_KEYWORD AND NOT COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN)
217   set(GENERIC_SOURCES
218     ${GENERIC_SOURCES}
219     atomic.c
220   )
221 endif()
222
223 if(APPLE)
224   set(GENERIC_SOURCES
225     ${GENERIC_SOURCES}
226     atomic_flag_clear.c
227     atomic_flag_clear_explicit.c
228     atomic_flag_test_and_set.c
229     atomic_flag_test_and_set_explicit.c
230     atomic_signal_fence.c
231     atomic_thread_fence.c
232   )
233 endif()
234
235 if (HAVE_UNWIND_H)
236   set(GENERIC_SOURCES
237     ${GENERIC_SOURCES}
238     gcc_personality_v0.c
239   )
240 endif ()
241
242 if (NOT FUCHSIA)
243   set(GENERIC_SOURCES
244     ${GENERIC_SOURCES}
245     clear_cache.c
246   )
247 endif()
248
249 # These files are used on 32-bit and 64-bit x86.
250 set(x86_ARCH_SOURCES
251   cpu_model.c
252   )
253
254 if (NOT MSVC)
255   set(x86_ARCH_SOURCES
256     ${x86_ARCH_SOURCES}
257     i386/fp_mode.c
258   )
259 endif ()
260
261 # Implement extended-precision builtins, assuming long double is 80 bits.
262 # long double is not 80 bits on Android or MSVC.
263 set(x86_80_BIT_SOURCES
264   divxc3.c
265   fixxfdi.c
266   fixxfti.c
267   fixunsxfdi.c
268   fixunsxfsi.c
269   fixunsxfti.c
270   floatdixf.c
271   floattixf.c
272   floatundixf.c
273   floatuntixf.c
274   mulxc3.c
275   powixf2.c
276 )
277
278 if (NOT MSVC)
279   set(x86_64_SOURCES
280     ${GENERIC_SOURCES}
281     ${GENERIC_TF_SOURCES}
282     ${x86_ARCH_SOURCES}
283     x86_64/floatdidf.c
284     x86_64/floatdisf.c
285     x86_64/floatundidf.S
286     x86_64/floatundisf.S
287   )
288
289   if (NOT ANDROID)
290     set(x86_64_SOURCES
291       ${x86_64_SOURCES}
292       ${x86_80_BIT_SOURCES}
293       x86_64/floatdixf.c
294       x86_64/floatundixf.S
295     )
296   endif()
297
298   # Darwin x86_64 Haswell
299   set(x86_64h_SOURCES ${x86_64_SOURCES})
300
301   if (WIN32)
302     set(x86_64_SOURCES
303       ${x86_64_SOURCES}
304       x86_64/chkstk.S
305       x86_64/chkstk2.S
306     )
307   endif()
308
309   set(i386_SOURCES
310     ${GENERIC_SOURCES}
311     ${x86_ARCH_SOURCES}
312     i386/ashldi3.S
313     i386/ashrdi3.S
314     i386/divdi3.S
315     i386/floatdidf.S
316     i386/floatdisf.S
317     i386/floatundidf.S
318     i386/floatundisf.S
319     i386/lshrdi3.S
320     i386/moddi3.S
321     i386/muldi3.S
322     i386/udivdi3.S
323     i386/umoddi3.S
324   )
325
326   if (NOT ANDROID)
327     set(i386_SOURCES
328       ${i386_SOURCES}
329       ${x86_80_BIT_SOURCES}
330       i386/floatdixf.S
331       i386/floatundixf.S
332     )
333   endif()
334
335   if (WIN32)
336     set(i386_SOURCES
337       ${i386_SOURCES}
338       i386/chkstk.S
339       i386/chkstk2.S
340     )
341   endif()
342 else () # MSVC
343   # Use C versions of functions when building on MSVC
344   # MSVC's assembler takes Intel syntax, not AT&T syntax.
345   # Also use only MSVC compilable builtin implementations.
346   set(x86_64_SOURCES
347     ${GENERIC_SOURCES}
348     ${x86_ARCH_SOURCES}
349     x86_64/floatdidf.c
350     x86_64/floatdisf.c
351   )
352   set(i386_SOURCES ${GENERIC_SOURCES} ${x86_ARCH_SOURCES})
353 endif () # if (NOT MSVC)
354
355 set(arm_SOURCES
356   arm/fp_mode.c
357   arm/bswapdi2.S
358   arm/bswapsi2.S
359   arm/clzdi2.S
360   arm/clzsi2.S
361   arm/comparesf2.S
362   arm/divmodsi4.S
363   arm/divsi3.S
364   arm/modsi3.S
365   arm/sync_fetch_and_add_4.S
366   arm/sync_fetch_and_add_8.S
367   arm/sync_fetch_and_and_4.S
368   arm/sync_fetch_and_and_8.S
369   arm/sync_fetch_and_max_4.S
370   arm/sync_fetch_and_max_8.S
371   arm/sync_fetch_and_min_4.S
372   arm/sync_fetch_and_min_8.S
373   arm/sync_fetch_and_nand_4.S
374   arm/sync_fetch_and_nand_8.S
375   arm/sync_fetch_and_or_4.S
376   arm/sync_fetch_and_or_8.S
377   arm/sync_fetch_and_sub_4.S
378   arm/sync_fetch_and_sub_8.S
379   arm/sync_fetch_and_umax_4.S
380   arm/sync_fetch_and_umax_8.S
381   arm/sync_fetch_and_umin_4.S
382   arm/sync_fetch_and_umin_8.S
383   arm/sync_fetch_and_xor_4.S
384   arm/sync_fetch_and_xor_8.S
385   arm/udivmodsi4.S
386   arm/udivsi3.S
387   arm/umodsi3.S
388   ${GENERIC_SOURCES}
389 )
390
391 set(thumb1_SOURCES
392   arm/divsi3.S
393   arm/udivsi3.S
394   arm/comparesf2.S
395   arm/addsf3.S
396   ${GENERIC_SOURCES}
397 )
398
399 set(arm_EABI_SOURCES
400   arm/aeabi_cdcmp.S
401   arm/aeabi_cdcmpeq_check_nan.c
402   arm/aeabi_cfcmp.S
403   arm/aeabi_cfcmpeq_check_nan.c
404   arm/aeabi_dcmp.S
405   arm/aeabi_div0.c
406   arm/aeabi_drsub.c
407   arm/aeabi_fcmp.S
408   arm/aeabi_frsub.c
409   arm/aeabi_idivmod.S
410   arm/aeabi_ldivmod.S
411   arm/aeabi_memcmp.S
412   arm/aeabi_memcpy.S
413   arm/aeabi_memmove.S
414   arm/aeabi_memset.S
415   arm/aeabi_uidivmod.S
416   arm/aeabi_uldivmod.S
417 )
418
419 set(arm_Thumb1_JT_SOURCES
420   arm/switch16.S
421   arm/switch32.S
422   arm/switch8.S
423   arm/switchu8.S
424 )
425 set(arm_Thumb1_SjLj_EH_SOURCES
426   arm/restore_vfp_d8_d15_regs.S
427   arm/save_vfp_d8_d15_regs.S
428 )
429 set(arm_Thumb1_VFPv2_DP_SOURCES
430   arm/adddf3vfp.S
431   arm/divdf3vfp.S
432   arm/eqdf2vfp.S
433   arm/extendsfdf2vfp.S
434   arm/fixdfsivfp.S
435   arm/fixunsdfsivfp.S
436   arm/floatsidfvfp.S
437   arm/floatunssidfvfp.S
438   arm/gedf2vfp.S
439   arm/gtdf2vfp.S
440   arm/ledf2vfp.S
441   arm/ltdf2vfp.S
442   arm/muldf3vfp.S
443   arm/nedf2vfp.S
444   arm/negdf2vfp.S
445   arm/subdf3vfp.S
446   arm/truncdfsf2vfp.S
447   arm/unorddf2vfp.S
448 )
449 set(arm_Thumb1_VFPv2_SP_SOURCES
450   arm/addsf3vfp.S
451   arm/divsf3vfp.S
452   arm/eqsf2vfp.S
453   arm/fixsfsivfp.S
454   arm/fixunssfsivfp.S
455   arm/floatsisfvfp.S
456   arm/floatunssisfvfp.S
457   arm/gesf2vfp.S
458   arm/gtsf2vfp.S
459   arm/lesf2vfp.S
460   arm/ltsf2vfp.S
461   arm/mulsf3vfp.S
462   arm/negsf2vfp.S
463   arm/nesf2vfp.S
464   arm/subsf3vfp.S
465   arm/unordsf2vfp.S
466 )
467 set(arm_Thumb1_icache_SOURCES
468   arm/sync_synchronize.S
469 )
470 set(arm_Thumb1_SOURCES
471   ${arm_Thumb1_JT_SOURCES}
472   ${arm_Thumb1_SjLj_EH_SOURCES}
473   ${arm_Thumb1_VFPv2_DP_SOURCES}
474   ${arm_Thumb1_VFPv2_SP_SOURCES}
475   ${arm_Thumb1_icache_SOURCES}
476 )
477
478 if(MINGW)
479   set(arm_SOURCES
480     arm/aeabi_idivmod.S
481     arm/aeabi_ldivmod.S
482     arm/aeabi_uidivmod.S
483     arm/aeabi_uldivmod.S
484     arm/chkstk.S
485     mingw_fixfloat.c
486     ${GENERIC_SOURCES}
487   )
488 elseif(NOT WIN32)
489   # TODO the EABI sources should only be added to EABI targets
490   set(arm_SOURCES
491     ${arm_SOURCES}
492     ${arm_EABI_SOURCES}
493     ${arm_Thumb1_SOURCES}
494   )
495
496   set(thumb1_SOURCES
497     ${thumb1_SOURCES}
498     ${arm_EABI_SOURCES}
499   )
500 endif()
501
502 set(aarch64_SOURCES
503   ${GENERIC_TF_SOURCES}
504   ${GENERIC_SOURCES}
505   aarch64/fp_mode.c
506 )
507
508 if (MINGW)
509   set(aarch64_SOURCES
510     ${aarch64_SOURCES}
511     aarch64/chkstk.S
512   )
513 endif()
514
515 set(armhf_SOURCES ${arm_SOURCES})
516 set(armv7_SOURCES ${arm_SOURCES})
517 set(armv7s_SOURCES ${arm_SOURCES})
518 set(armv7k_SOURCES ${arm_SOURCES})
519 set(arm64_SOURCES ${aarch64_SOURCES})
520 set(arm64e_SOURCES ${aarch64_SOURCES})
521
522 # macho_embedded archs
523 set(armv6m_SOURCES ${thumb1_SOURCES})
524 set(armv7m_SOURCES ${arm_SOURCES})
525 set(armv7em_SOURCES ${arm_SOURCES})
526
527 # hexagon arch
528 set(hexagon_SOURCES
529   hexagon/common_entry_exit_abi1.S
530   hexagon/common_entry_exit_abi2.S
531   hexagon/common_entry_exit_legacy.S
532   hexagon/dfaddsub.S
533   hexagon/dfdiv.S
534   hexagon/dffma.S
535   hexagon/dfminmax.S
536   hexagon/dfmul.S
537   hexagon/dfsqrt.S
538   hexagon/divdi3.S
539   hexagon/divsi3.S
540   hexagon/fastmath2_dlib_asm.S
541   hexagon/fastmath2_ldlib_asm.S
542   hexagon/fastmath_dlib_asm.S
543   hexagon/memcpy_forward_vp4cp4n2.S
544   hexagon/memcpy_likely_aligned.S
545   hexagon/moddi3.S
546   hexagon/modsi3.S
547   hexagon/sfdiv_opt.S
548   hexagon/sfsqrt_opt.S
549   hexagon/udivdi3.S
550   hexagon/udivmoddi4.S
551   hexagon/udivmodsi4.S
552   hexagon/udivsi3.S
553   hexagon/umoddi3.S
554   hexagon/umodsi3.S
555   ${GENERIC_SOURCES}
556   ${GENERIC_TF_SOURCES}
557 )
558
559
560 set(mips_SOURCES ${GENERIC_SOURCES})
561 set(mipsel_SOURCES ${mips_SOURCES})
562 set(mips64_SOURCES ${GENERIC_TF_SOURCES}
563                    ${mips_SOURCES})
564 set(mips64el_SOURCES ${GENERIC_TF_SOURCES}
565                      ${mips_SOURCES})
566
567 set(powerpc_SOURCES ${GENERIC_SOURCES})
568
569 set(powerpc64_SOURCES
570   ppc/divtc3.c
571   ppc/fixtfdi.c
572   ppc/fixunstfdi.c
573   ppc/floatditf.c
574   ppc/floatunditf.c
575   ppc/gcc_qadd.c
576   ppc/gcc_qdiv.c
577   ppc/gcc_qmul.c
578   ppc/gcc_qsub.c
579   ppc/multc3.c
580   ${GENERIC_SOURCES}
581 )
582 # These routines require __int128, which isn't supported on AIX.
583 if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
584   set(powerpc64_SOURCES
585     ppc/floattitf.c
586     ppc/fixtfti.c
587     ppc/fixunstfti.c
588     ${powerpc64_SOURCES}
589   )
590 endif()
591 set(powerpc64le_SOURCES ${powerpc64_SOURCES})
592
593 set(riscv_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
594 set(riscv32_SOURCES
595   riscv/mulsi3.S
596   ${riscv_SOURCES}
597 )
598 set(riscv64_SOURCES
599   riscv/muldi3.S
600   ${riscv_SOURCES}
601 )
602
603 set(sparc_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
604 set(sparcv9_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
605
606 set(wasm32_SOURCES
607   ${GENERIC_TF_SOURCES}
608   ${GENERIC_SOURCES}
609 )
610 set(wasm64_SOURCES
611   ${GENERIC_TF_SOURCES}
612   ${GENERIC_SOURCES}
613 )
614
615 set(ve_SOURCES
616   ve/grow_stack.S
617   ve/grow_stack_align.S
618   ${GENERIC_TF_SOURCES}
619   ${GENERIC_SOURCES})
620
621 add_custom_target(builtins)
622 set_target_properties(builtins PROPERTIES FOLDER "Compiler-RT Misc")
623
624 if (APPLE)
625   add_subdirectory(Darwin-excludes)
626   add_subdirectory(macho_embedded)
627   darwin_add_builtin_libraries(${BUILTIN_SUPPORTED_OS})
628 else ()
629   set(BUILTIN_CFLAGS "")
630
631   append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 BUILTIN_CFLAGS)
632
633   # These flags would normally be added to CMAKE_C_FLAGS by the llvm
634   # cmake step. Add them manually if this is a standalone build.
635   if(COMPILER_RT_STANDALONE_BUILD)
636     if(COMPILER_RT_BUILTINS_ENABLE_PIC)
637       append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC BUILTIN_CFLAGS)
638     endif()
639     append_list_if(COMPILER_RT_HAS_FNO_BUILTIN_FLAG -fno-builtin BUILTIN_CFLAGS)
640     if(NOT ANDROID)
641       append_list_if(COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG -fvisibility=hidden BUILTIN_CFLAGS)
642     endif()
643     if(NOT COMPILER_RT_DEBUG)
644       append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG -fomit-frame-pointer BUILTIN_CFLAGS)
645     endif()
646   endif()
647
648   set(BUILTIN_DEFS "")
649
650   if(NOT ANDROID)
651     append_list_if(COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG VISIBILITY_HIDDEN BUILTIN_DEFS)
652   endif()
653
654   foreach (arch ${BUILTIN_SUPPORTED_ARCH})
655     if (CAN_TARGET_${arch})
656       # For ARM archs, exclude any VFP builtins if VFP is not supported
657       if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7m|armv7em)$")
658         string(REPLACE ";" " " _TARGET_${arch}_CFLAGS "${TARGET_${arch}_CFLAGS}")
659         check_compile_definition(__VFP_FP__ "${CMAKE_C_FLAGS} ${_TARGET_${arch}_CFLAGS}" COMPILER_RT_HAS_${arch}_VFP)
660         if(NOT COMPILER_RT_HAS_${arch}_VFP)
661           list(REMOVE_ITEM ${arch}_SOURCES ${arm_Thumb1_VFPv2_DP_SOURCES} ${arm_Thumb1_VFPv2_SP_SOURCES} ${arm_Thumb1_SjLj_EH_SOURCES})
662         else()
663           # Exclude any double-precision builtins if VFP is single-precision-only
664           check_c_source_compiles("#if !(__ARM_FP & 0x8)
665                                    #error No double-precision support!
666                                    #endif
667                                    int main() { return 0; }" COMPILER_RT_HAS_${arch}_VFP_DP)
668           if(NOT COMPILER_RT_HAS_${arch}_VFP_DP)
669             list(REMOVE_ITEM ${arch}_SOURCES ${arm_Thumb1_VFPv2_DP_SOURCES})
670           endif()
671         endif()
672       endif()
673
674       # Remove a generic C builtin when an arch-specific builtin is specified.
675       filter_builtin_sources(${arch}_SOURCES ${arch})
676
677       # Needed for clear_cache on debug mode, due to r7's usage in inline asm.
678       # Release mode already sets it via -O2/3, Debug mode doesn't.
679       if (${arch} STREQUAL "armhf")
680         list(APPEND BUILTIN_CFLAGS -fomit-frame-pointer -DCOMPILER_RT_ARMHF_TARGET)
681       endif()
682
683       # For RISCV32, we must force enable int128 for compiling long
684       # double routines.
685       if("${arch}" STREQUAL "riscv32")
686         list(APPEND BUILTIN_CFLAGS -fforce-enable-int128)
687       endif()
688
689       add_compiler_rt_runtime(clang_rt.builtins
690                               STATIC
691                               ARCHS ${arch}
692                               SOURCES ${${arch}_SOURCES}
693                               DEFS ${BUILTIN_DEFS}
694                               CFLAGS ${BUILTIN_CFLAGS}
695                               PARENT_TARGET builtins)
696     endif ()
697   endforeach ()
698 endif ()
699
700 add_dependencies(compiler-rt builtins)