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