1a3cf0ef5SEd Schouten# $FreeBSD$ 2a3cf0ef5SEd Schouten 3a3cf0ef5SEd Schouten.include <bsd.own.mk> 4a3cf0ef5SEd Schouten 5a3cf0ef5SEd SchoutenLIB= compiler_rt 6a3cf0ef5SEd SchoutenNO_PIC= 7a3cf0ef5SEd SchoutenWARNS?= 2 8a3cf0ef5SEd Schouten 9a1896337SEd SchoutenCFLAGS+=${PICFLAG} -fvisibility=hidden -DVISIBILITY_HIDDEN 10a3cf0ef5SEd Schouten 11a3cf0ef5SEd Schouten.if ${MACHINE_CPUARCH} == "amd64" 12a3cf0ef5SEd SchoutenCRTARCH=x86_64 13a3cf0ef5SEd Schouten.else 14a3cf0ef5SEd SchoutenCRTARCH=${MACHINE_CPUARCH} 15a3cf0ef5SEd Schouten.endif 16a3cf0ef5SEd Schouten 17a3cf0ef5SEd SchoutenCRTSRC=${.CURDIR}/../../contrib/compiler-rt/lib 18a3cf0ef5SEd Schouten 19a3cf0ef5SEd Schouten.PATH: ${CRTSRC}/${CRTARCH} ${CRTSRC} 20a3cf0ef5SEd Schouten 21a3cf0ef5SEd SchoutenSRCF= absvdi2 \ 22a3cf0ef5SEd Schouten absvsi2 \ 23a3cf0ef5SEd Schouten absvti2 \ 24a3cf0ef5SEd Schouten addvdi3 \ 25a3cf0ef5SEd Schouten addvsi3 \ 26a3cf0ef5SEd Schouten addvti3 \ 27a3cf0ef5SEd Schouten ashldi3 \ 28a3cf0ef5SEd Schouten ashlti3 \ 29a3cf0ef5SEd Schouten ashrdi3 \ 30a3cf0ef5SEd Schouten ashrti3 \ 31a3cf0ef5SEd Schouten clzdi2 \ 32a3cf0ef5SEd Schouten clzsi2 \ 33a3cf0ef5SEd Schouten clzti2 \ 34a3cf0ef5SEd Schouten cmpdi2 \ 35a3cf0ef5SEd Schouten cmpti2 \ 36a3cf0ef5SEd Schouten comparedf2 \ 37a3cf0ef5SEd Schouten comparesf2 \ 38a3cf0ef5SEd Schouten ctzdi2 \ 39a3cf0ef5SEd Schouten ctzsi2 \ 40a3cf0ef5SEd Schouten ctzti2 \ 41a3cf0ef5SEd Schouten divdc3 \ 42a3cf0ef5SEd Schouten divdi3 \ 43ef8821e5SEd Schouten divmoddi4 \ 44ef8821e5SEd Schouten divmodsi4 \ 45a3cf0ef5SEd Schouten divsc3 \ 46a3cf0ef5SEd Schouten divti3 \ 47a3cf0ef5SEd Schouten divxc3 \ 48a3cf0ef5SEd Schouten enable_execute_stack \ 49a3cf0ef5SEd Schouten eprintf \ 50a3cf0ef5SEd Schouten ffsdi2 \ 51a3cf0ef5SEd Schouten ffsti2 \ 52a3cf0ef5SEd Schouten fixdfdi \ 53a3cf0ef5SEd Schouten fixdfti \ 54a3cf0ef5SEd Schouten fixsfdi \ 55a3cf0ef5SEd Schouten fixsfti \ 56a3cf0ef5SEd Schouten fixunsdfdi \ 57a3cf0ef5SEd Schouten fixunsdfsi \ 58a3cf0ef5SEd Schouten fixunsdfti \ 59a3cf0ef5SEd Schouten fixunssfdi \ 60a3cf0ef5SEd Schouten fixunssfsi \ 61a3cf0ef5SEd Schouten fixunssfti \ 62a3cf0ef5SEd Schouten fixunsxfdi \ 63a3cf0ef5SEd Schouten fixunsxfsi \ 64a3cf0ef5SEd Schouten fixunsxfti \ 65a3cf0ef5SEd Schouten fixxfdi \ 66a3cf0ef5SEd Schouten fixxfti \ 67a3cf0ef5SEd Schouten floatdidf \ 68a3cf0ef5SEd Schouten floatdisf \ 69a3cf0ef5SEd Schouten floatdixf \ 70a3cf0ef5SEd Schouten floattidf \ 71a3cf0ef5SEd Schouten floattisf \ 72a3cf0ef5SEd Schouten floattixf \ 73a3cf0ef5SEd Schouten floatundidf \ 74a3cf0ef5SEd Schouten floatundisf \ 75a3cf0ef5SEd Schouten floatundixf \ 76a3cf0ef5SEd Schouten floatunsidf \ 77a3cf0ef5SEd Schouten floatunsisf \ 78a3cf0ef5SEd Schouten floatuntidf \ 79a3cf0ef5SEd Schouten floatuntisf \ 80a3cf0ef5SEd Schouten floatuntixf \ 817686ff74SEd Schouten int_util \ 82a3cf0ef5SEd Schouten lshrdi3 \ 83a3cf0ef5SEd Schouten lshrti3 \ 84a3cf0ef5SEd Schouten moddi3 \ 85a3cf0ef5SEd Schouten modti3 \ 86a3cf0ef5SEd Schouten muldc3 \ 87a3cf0ef5SEd Schouten muldi3 \ 887686ff74SEd Schouten mulodi4 \ 897686ff74SEd Schouten mulosi4 \ 907686ff74SEd Schouten muloti4 \ 91a3cf0ef5SEd Schouten mulsc3 \ 92a3cf0ef5SEd Schouten multi3 \ 93a3cf0ef5SEd Schouten mulvdi3 \ 94a3cf0ef5SEd Schouten mulvsi3 \ 95a3cf0ef5SEd Schouten mulvti3 \ 96a3cf0ef5SEd Schouten mulxc3 \ 97a3cf0ef5SEd Schouten negdf2 \ 98a3cf0ef5SEd Schouten negdi2 \ 99a3cf0ef5SEd Schouten negsf2 \ 100a3cf0ef5SEd Schouten negti2 \ 101a3cf0ef5SEd Schouten negvdi2 \ 102a3cf0ef5SEd Schouten negvsi2 \ 103a3cf0ef5SEd Schouten negvti2 \ 104a3cf0ef5SEd Schouten paritydi2 \ 105a3cf0ef5SEd Schouten paritysi2 \ 106a3cf0ef5SEd Schouten parityti2 \ 107a3cf0ef5SEd Schouten popcountdi2 \ 108a3cf0ef5SEd Schouten popcountsi2 \ 109a3cf0ef5SEd Schouten popcountti2 \ 110a3cf0ef5SEd Schouten powidf2 \ 111a3cf0ef5SEd Schouten powisf2 \ 112a3cf0ef5SEd Schouten powitf2 \ 113a3cf0ef5SEd Schouten powixf2 \ 114a3cf0ef5SEd Schouten subvdi3 \ 115a3cf0ef5SEd Schouten subvsi3 \ 116a3cf0ef5SEd Schouten subvti3 \ 117a3cf0ef5SEd Schouten trampoline_setup \ 118a3cf0ef5SEd Schouten ucmpdi2 \ 119a3cf0ef5SEd Schouten ucmpti2 \ 120a3cf0ef5SEd Schouten udivdi3 \ 121a3cf0ef5SEd Schouten udivmoddi4 \ 122ef8821e5SEd Schouten udivmodsi4 \ 123a3cf0ef5SEd Schouten udivmodti4 \ 124a3cf0ef5SEd Schouten udivti3 \ 125a3cf0ef5SEd Schouten umoddi3 \ 126a3cf0ef5SEd Schouten umodti3 127a3cf0ef5SEd Schouten 128e376173cSAndrew Turner# Don't build clear_cache on ARM with clang as it is a builtin there. 129e376173cSAndrew Turner.if ${MACHINE_CPUARCH} != "arm" || ${COMPILER_TYPE} != "clang" 130e376173cSAndrew TurnerSRCF+= clear_cache 131e376173cSAndrew Turner.endif 132e376173cSAndrew Turner 133a3cf0ef5SEd Schouten# These are already shipped by libc.a on arm and mips 134a3cf0ef5SEd Schouten.if ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips" 135a3cf0ef5SEd SchoutenSRCF+= adddf3 \ 136a3cf0ef5SEd Schouten addsf3 \ 137a3cf0ef5SEd Schouten divdf3 \ 138a3cf0ef5SEd Schouten divsf3 \ 139a3cf0ef5SEd Schouten extendsfdf2 \ 140a3cf0ef5SEd Schouten fixdfsi \ 141a3cf0ef5SEd Schouten fixsfsi \ 142a3cf0ef5SEd Schouten floatsidf \ 143a3cf0ef5SEd Schouten floatsisf \ 144a3cf0ef5SEd Schouten muldf3 \ 145a3cf0ef5SEd Schouten mulsf3 \ 146ef8821e5SEd Schouten subdf3 \ 147ef8821e5SEd Schouten subsf3 \ 148bb41cbb2SAndrew Turner truncdfsf2 149bb41cbb2SAndrew Turner.endif 150bb41cbb2SAndrew Turner 151bb41cbb2SAndrew Turner.if ${MACHINE_CPUARCH} != "mips" && \ 152bb41cbb2SAndrew Turner (${MACHINE_CPUARCH} != "arm" || ${MK_ARM_EABI} != "no") 153bb41cbb2SAndrew TurnerSRCF+= divsi3 \ 154bb41cbb2SAndrew Turner modsi3 \ 155a3cf0ef5SEd Schouten udivsi3 \ 156a3cf0ef5SEd Schouten umodsi3 157a3cf0ef5SEd Schouten.endif 158a3cf0ef5SEd Schouten 1590315980bSEd Schouten# FreeBSD-specific atomic intrinsics. 160*e737464fSEd Schouten.if ${MACHINE_CPUARCH} == "arm" 1616d57c750SEd SchoutenSRCF+= __sync_fetch_and_add_4 \ 1626d57c750SEd Schouten __sync_fetch_and_and_4 \ 1636d57c750SEd Schouten __sync_fetch_and_or_4 \ 1646d57c750SEd Schouten __sync_fetch_and_sub_4 \ 1656d57c750SEd Schouten __sync_fetch_and_xor_4 \ 1666d57c750SEd Schouten __sync_lock_test_and_set_4 \ 1672493d5e6SEd Schouten __sync_synchronize \ 1686d57c750SEd Schouten __sync_val_compare_and_swap_4 169*e737464fSEd Schouten.elif ${MACHINE_CPUARCH} == "mips" 170*e737464fSEd Schouten.PATH: ${.CURDIR}/../../sys/mips/mips 171*e737464fSEd Schouten 172*e737464fSEd SchoutenSRCF+= stdatomic 1736d57c750SEd Schouten.endif 1746d57c750SEd Schouten 175a3cf0ef5SEd Schouten.for file in ${SRCF} 176a3cf0ef5SEd Schouten. if ${MACHINE_CPUARCH} != "arm" && exists(${CRTSRC}/${CRTARCH}/${file}.S) 177a3cf0ef5SEd SchoutenSRCS+= ${file}.S 178a3cf0ef5SEd Schouten. else 179a3cf0ef5SEd SchoutenSRCS+= ${file}.c 180a3cf0ef5SEd Schouten. endif 181a3cf0ef5SEd Schouten.endfor 182a3cf0ef5SEd Schouten 18379ef2c64SAndrew Turner.if ${MACHINE_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no" 18479ef2c64SAndrew TurnerSRCS+= aeabi_idivmod.S \ 18579ef2c64SAndrew Turner aeabi_ldivmod.S \ 186d74bcf9dSAndrew Turner aeabi_memcmp.S \ 187d74bcf9dSAndrew Turner aeabi_memcpy.S \ 188d74bcf9dSAndrew Turner aeabi_memmove.S \ 189d74bcf9dSAndrew Turner aeabi_memset.S \ 19079ef2c64SAndrew Turner aeabi_uidivmod.S \ 19179ef2c64SAndrew Turner aeabi_uldivmod.S 19279ef2c64SAndrew Turner.endif 19379ef2c64SAndrew Turner 194a3cf0ef5SEd Schouten.if ${MK_INSTALLLIB} != "no" 195a3cf0ef5SEd SchoutenSYMLINKS+=libcompiler_rt.a ${LIBDIR}/libgcc.a 196a3cf0ef5SEd Schouten.endif 197a3cf0ef5SEd Schouten.if ${MK_PROFILE} != "no" 198a3cf0ef5SEd SchoutenSYMLINKS+=libcompiler_rt_p.a ${LIBDIR}/libgcc_p.a 199a3cf0ef5SEd Schouten.endif 200a3cf0ef5SEd Schouten 201c42c9d56SKonstantin Belousov.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" || \ 202c42c9d56SKonstantin Belousov ${MACHINE_CPUARCH} == "powerpc" 203153344e7SKonstantin BelousovAFLAGS+=--noexecstack 204127060d2SKonstantin BelousovACFLAGS+=-Wa,--noexecstack 205153344e7SKonstantin Belousov.endif 206153344e7SKonstantin Belousov 207153344e7SKonstantin Belousov 208a3cf0ef5SEd Schouten.include <bsd.lib.mk> 209