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