xref: /freebsd/lib/libcompiler_rt/Makefile (revision bb41cbb27cf6bbfb2a749cc3b7e582d671504651)
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 \
148*bb41cbb2SAndrew Turner	truncdfsf2
149*bb41cbb2SAndrew Turner.endif
150*bb41cbb2SAndrew Turner
151*bb41cbb2SAndrew Turner.if ${MACHINE_CPUARCH} != "mips" && \
152*bb41cbb2SAndrew Turner    (${MACHINE_CPUARCH} != "arm" || ${MK_ARM_EABI} != "no")
153*bb41cbb2SAndrew TurnerSRCF+=	divsi3 \
154*bb41cbb2SAndrew Turner	modsi3 \
155a3cf0ef5SEd Schouten	udivsi3 \
156a3cf0ef5SEd Schouten	umodsi3
157a3cf0ef5SEd Schouten.endif
158a3cf0ef5SEd Schouten
159e376173cSAndrew Turner# FreeBSD-specific atomic intrinsics. Clang provides them as a builtin.
160e376173cSAndrew Turner.if (${MACHINE_CPUARCH} == "arm" && ${COMPILER_TYPE} != "clang") || \
161e376173cSAndrew Turner    ${MACHINE_CPUARCH} == "mips"
1626d57c750SEd SchoutenSRCF+=	__sync_fetch_and_add_4 \
1636d57c750SEd Schouten	__sync_fetch_and_and_4 \
1646d57c750SEd Schouten	__sync_fetch_and_or_4 \
1656d57c750SEd Schouten	__sync_fetch_and_sub_4 \
1666d57c750SEd Schouten	__sync_fetch_and_xor_4 \
1676d57c750SEd Schouten	__sync_lock_test_and_set_4 \
1686d57c750SEd Schouten	__sync_val_compare_and_swap_4
1696d57c750SEd Schouten.endif
1706d57c750SEd Schouten.if ${MACHINE_ARCH:Mmips64*} != ""
1716d57c750SEd SchoutenSRCF+=	__sync_fetch_and_add_8 \
1726d57c750SEd Schouten	__sync_fetch_and_and_8 \
1736d57c750SEd Schouten	__sync_fetch_and_or_8 \
1746d57c750SEd Schouten	__sync_fetch_and_sub_8 \
1756d57c750SEd Schouten	__sync_fetch_and_xor_8 \
1766d57c750SEd Schouten	__sync_lock_test_and_set_8 \
1776d57c750SEd Schouten	__sync_val_compare_and_swap_8
1786d57c750SEd Schouten.endif
1796d57c750SEd Schouten
180a3cf0ef5SEd Schouten.for file in ${SRCF}
181a3cf0ef5SEd Schouten. if ${MACHINE_CPUARCH} != "arm" && exists(${CRTSRC}/${CRTARCH}/${file}.S)
182a3cf0ef5SEd SchoutenSRCS+=	${file}.S
183a3cf0ef5SEd Schouten. else
184a3cf0ef5SEd SchoutenSRCS+=	${file}.c
185a3cf0ef5SEd Schouten. endif
186a3cf0ef5SEd Schouten.endfor
187a3cf0ef5SEd Schouten
18879ef2c64SAndrew Turner.if ${MACHINE_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
18979ef2c64SAndrew TurnerSRCS+=	aeabi_idivmod.S \
19079ef2c64SAndrew Turner	aeabi_ldivmod.S \
19179ef2c64SAndrew Turner	aeabi_uidivmod.S \
19279ef2c64SAndrew Turner	aeabi_uldivmod.S
19379ef2c64SAndrew Turner.endif
19479ef2c64SAndrew Turner
19545e2c46bSMarius Strobl.if ${MACHINE_CPUARCH} != "mips"
196a3cf0ef5SEd Schouten. if ${MK_INSTALLLIB} != "no"
197a3cf0ef5SEd SchoutenSYMLINKS+=libcompiler_rt.a ${LIBDIR}/libgcc.a
198a3cf0ef5SEd Schouten. endif
199a3cf0ef5SEd Schouten. if ${MK_PROFILE} != "no"
200a3cf0ef5SEd SchoutenSYMLINKS+=libcompiler_rt_p.a ${LIBDIR}/libgcc_p.a
201a3cf0ef5SEd Schouten. endif
202585d4a80SEd Schouten.endif
203a3cf0ef5SEd Schouten
204c42c9d56SKonstantin Belousov.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" || \
205c42c9d56SKonstantin Belousov    ${MACHINE_CPUARCH} == "powerpc"
206153344e7SKonstantin BelousovAFLAGS+=--noexecstack
207127060d2SKonstantin BelousovACFLAGS+=-Wa,--noexecstack
208153344e7SKonstantin Belousov.endif
209153344e7SKonstantin Belousov
210153344e7SKonstantin Belousov
211a3cf0ef5SEd Schouten.include <bsd.lib.mk>
212