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