xref: /freebsd/lib/libcompiler_rt/Makefile.inc (revision 8ddb146abcdf061be9f2c0db7e391697dafad85c)
1# $FreeBSD$
2
3CRTARCH=	${MACHINE_CPUARCH:C/amd64/x86_64/}
4
5CRTSRC=		${SRCTOP}/contrib/llvm-project/compiler-rt/lib/builtins
6
7.PATH:		${CRTSRC}/${CRTARCH}
8.PATH:		${CRTSRC}
9
10SRCF+=		absvdi2
11SRCF+=		absvsi2
12SRCF+=		absvti2
13SRCF+=		addvdi3
14SRCF+=		addvsi3
15SRCF+=		addvti3
16SRCF+=		apple_versioning
17SRCF+=		ashldi3
18SRCF+=		ashlti3
19SRCF+=		ashrdi3
20SRCF+=		ashrti3
21SRCF+=		bswapdi2
22SRCF+=		bswapsi2
23SRCF+=		clear_cache
24SRCF+=		clzdi2
25SRCF+=		clzsi2
26SRCF+=		clzti2
27SRCF+=		cmpdi2
28SRCF+=		cmpti2
29SRCF+=		ctzdi2
30SRCF+=		ctzsi2
31SRCF+=		ctzti2
32SRCF+=		divdc3
33SRCF+=		divdi3
34SRCF+=		divmoddi4
35SRCF+=		divmodsi4
36SRCF+=		divmodti4
37SRCF+=		divsc3
38SRCF+=		divsi3
39SRCF+=		divtc3
40SRCF+=		divti3
41SRCF+=		divxc3
42SRCF+=		enable_execute_stack
43SRCF+=		eprintf
44SRCF+=		extendhfsf2
45SRCF+=		ffsdi2
46SRCF+=		ffssi2
47SRCF+=		ffsti2
48SRCF+=		fixdfdi
49SRCF+=		fixdfti
50SRCF+=		fixsfdi
51SRCF+=		fixsfti
52SRCF+=		fixunsdfdi
53SRCF+=		fixunsdfsi
54SRCF+=		fixunsdfti
55SRCF+=		fixunssfdi
56SRCF+=		fixunssfsi
57SRCF+=		fixunssfti
58SRCF+=		fixunsxfdi
59SRCF+=		fixunsxfsi
60SRCF+=		fixunsxfti
61SRCF+=		fixxfdi
62SRCF+=		fixxfti
63SRCF+=		floatditf
64SRCF+=		floattidf
65SRCF+=		floattisf
66SRCF+=		floattixf
67SRCF+=		floatunditf
68SRCF+=		floatunsidf
69SRCF+=		floatunsisf
70SRCF+=		floatuntidf
71SRCF+=		floatuntisf
72SRCF+=		floatuntixf
73SRCF+=		int_util
74SRCF+=		lshrdi3
75SRCF+=		lshrti3
76SRCF+=		moddi3
77SRCF+=		modsi3
78SRCF+=		modti3
79SRCF+=		muldc3
80SRCF+=		muldi3
81SRCF+=		mulodi4
82SRCF+=		mulosi4
83SRCF+=		muloti4
84SRCF+=		mulsc3
85SRCF+=		multc3
86SRCF+=		multi3
87SRCF+=		mulvdi3
88SRCF+=		mulvsi3
89SRCF+=		mulvti3
90SRCF+=		mulxc3
91SRCF+=		negdf2
92SRCF+=		negdi2
93SRCF+=		negsf2
94SRCF+=		negti2
95SRCF+=		negvdi2
96SRCF+=		negvsi2
97SRCF+=		negvti2
98SRCF+=		paritydi2
99SRCF+=		paritysi2
100SRCF+=		parityti2
101SRCF+=		popcountdi2
102SRCF+=		popcountsi2
103SRCF+=		popcountti2
104SRCF+=		powidf2
105SRCF+=		powisf2
106SRCF+=		powitf2
107SRCF+=		powixf2
108SRCF+=		subvdi3
109SRCF+=		subvsi3
110SRCF+=		subvti3
111SRCF+=		trampoline_setup
112SRCF+=		truncdfhf2
113SRCF+=		truncsfhf2
114SRCF+=		ucmpdi2
115SRCF+=		ucmpti2
116SRCF+=		udivdi3
117SRCF+=		udivmoddi4
118SRCF+=		udivmodsi4
119SRCF+=		udivmodti4
120SRCF+=		udivsi3
121SRCF+=		udivti3
122SRCF+=		umoddi3
123SRCF+=		umodsi3
124SRCF+=		umodti3
125
126# Enable compiler-rt's atomic implementation only for clang, as it uses clang
127# specific builtins, and gcc packages usually come with their own libatomic.
128# Exclude arm which has its own implementations of atomic functions, below.
129.if "${COMPILER_TYPE}" == "clang" && ${MACHINE_CPUARCH} != "arm"
130SRCF+=		atomic
131.endif
132
133# Avoid using SSE2 instructions on i386, if unsupported.
134.if ${MACHINE_CPUARCH} == "i386" && empty(MACHINE_CPU:Msse2)
135SRCS+=		floatdidf.c
136SRCS+=		floatdisf.c
137SRCS+=		floatdixf.c
138SRCS+=		floatundidf.c
139SRCS+=		floatundisf.c
140SRCS+=		floatundixf.c
141.else
142SRCF+=		floatdidf
143SRCF+=		floatdisf
144SRCF+=		floatdixf
145SRCF+=		floatundidf
146SRCF+=		floatundisf
147SRCF+=		floatundixf
148.endif
149
150# __cpu_model support, only used on aarch64 and x86
151.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
152    ${MACHINE_CPUARCH} == "i386"
153SRCF+=		cpu_model
154.endif
155
156# The fp_mode implementation for amd64 and i386 is shared, while other
157# architectures use the regular approach.
158.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
159SRCS+=		i386/fp_mode.c
160.else
161SRCF+=		fp_mode
162.endif
163
164#
165# 128-bit quad precision long double support,
166# only used on some architectures.
167#
168.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "riscv"
169SRCF+=		addtf3
170SRCF+=		comparetf2
171SRCF+=		divtf3
172SRCF+=		extenddftf2
173SRCF+=		extendhftf2
174SRCF+=		extendsftf2
175SRCF+=		fixtfdi
176SRCF+=		fixtfsi
177SRCF+=		fixtfti
178SRCF+=		fixunstfdi
179SRCF+=		fixunstfsi
180SRCF+=		fixunstfti
181SRCF+=		floatsitf
182SRCF+=		floattitf
183SRCF+=		floatunsitf
184SRCF+=		floatuntitf
185SRCF+=		multf3
186SRCF+=		subtf3
187SRCF+=		trunctfdf2
188SRCF+=		trunctfhf2
189SRCF+=		trunctfsf2
190.endif
191
192# These are already shipped by libc.a on some architectures.
193.if ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips" && \
194    ${MACHINE_CPUARCH} != "riscv"
195SRCF+=		adddf3
196SRCF+=		addsf3
197SRCF+=		divdf3
198SRCF+=		divsf3
199SRCF+=		extendsfdf2
200SRCF+=		fixdfsi
201SRCF+=		fixsfsi
202SRCF+=		floatsidf
203SRCF+=		floatsisf
204SRCF+=		muldf3
205SRCF+=		mulsf3
206SRCF+=		subdf3
207SRCF+=		subsf3
208SRCF+=		truncdfsf2
209.endif
210
211.if ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips"
212SRCF+=		comparedf2
213SRCF+=		comparesf2
214.endif
215
216# FreeBSD-specific atomic intrinsics.
217.if ${MACHINE_CPUARCH} == "arm"
218.PATH:		${SRCTOP}/sys/arm/arm
219
220SRCF+=		stdatomic
221CFLAGS+=	-DEMIT_SYNC_ATOMICS
222.elif ${MACHINE_CPUARCH} == "mips"
223.PATH:		${SRCTOP}/sys/mips/mips
224
225SRCF+=		stdatomic
226.endif
227
228.for file in ${SRCF}
229.if ${MACHINE_ARCH:Marmv[67]*} && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "") \
230    && exists(${CRTSRC}/${CRTARCH}/${file}vfp.S)
231SRCS+=		${file}vfp.S
232. elif exists(${CRTSRC}/${CRTARCH}/${file}.S)
233SRCS+=		${file}.S
234. else
235SRCS+=		${file}.c
236. endif
237.endfor
238
239.if ${MACHINE_CPUARCH} == "arm"
240SRCS+=		aeabi_div0.c
241SRCS+=		aeabi_idivmod.S
242SRCS+=		aeabi_ldivmod.S
243SRCS+=		aeabi_memcmp.S
244SRCS+=		aeabi_memcpy.S
245SRCS+=		aeabi_memmove.S
246SRCS+=		aeabi_memset.S
247SRCS+=		aeabi_uidivmod.S
248SRCS+=		aeabi_uldivmod.S
249SRCS+=		switch16.S
250SRCS+=		switch32.S
251SRCS+=		switch8.S
252SRCS+=		switchu8.S
253SRCS+=		sync_synchronize.S
254.endif
255
256.if ${MACHINE_ARCH:Mriscv*sf}
257CFLAGS+=	-D__SOFT_FP__
258.endif
259