1# $FreeBSD: stable/10/lib/libcompiler_rt/Makefile 323189 2017-09-05 17:32:14Z dim $
2
3.include <bsd.own.mk>
4
5LIB=	compiler_rt
6NO_PIC=
7WARNS?=	2
8
9CFLAGS+=${PICFLAG} -fvisibility=hidden -DVISIBILITY_HIDDEN
10
11.if ${MACHINE_CPUARCH} == "amd64"
12CRTARCH=x86_64
13.else
14CRTARCH=${MACHINE_CPUARCH}
15.endif
16
17CRTSRC=${.CURDIR}/../../contrib/compiler-rt/lib
18
19.PATH: ${CRTSRC}/${CRTARCH} ${CRTSRC}
20
21SRCF=	absvdi2 \
22	absvsi2 \
23	absvti2 \
24	addvdi3 \
25	addvsi3 \
26	addvti3 \
27	ashldi3 \
28	ashlti3 \
29	ashrdi3 \
30	ashrti3 \
31	clear_cache \
32	clzdi2 \
33	clzsi2 \
34	clzti2 \
35	cmpdi2 \
36	cmpti2 \
37	comparedf2 \
38	comparesf2 \
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	ffsdi2 \
52	ffsti2 \
53	fixdfdi \
54	fixdfti \
55	fixsfdi \
56	fixsfti \
57	fixunsdfdi \
58	fixunsdfsi \
59	fixunsdfti \
60	fixunssfdi \
61	fixunssfsi \
62	fixunssfti \
63	fixunsxfdi \
64	fixunsxfsi \
65	fixunsxfti \
66	fixxfdi \
67	fixxfti \
68	floattidf \
69	floattisf \
70	floattixf \
71	floatunsidf \
72	floatunsisf \
73	floatuntidf \
74	floatuntisf \
75	floatuntixf \
76	int_util \
77	lshrdi3 \
78	lshrti3 \
79	moddi3 \
80	modti3 \
81	muldc3 \
82	muldi3 \
83	mulodi4 \
84	mulosi4 \
85	muloti4 \
86	mulsc3 \
87	multi3 \
88	mulvdi3 \
89	mulvsi3 \
90	mulvti3 \
91	mulxc3 \
92	negdf2 \
93	negdi2 \
94	negsf2 \
95	negti2 \
96	negvdi2 \
97	negvsi2 \
98	negvti2 \
99	paritydi2 \
100	paritysi2 \
101	parityti2 \
102	popcountdi2 \
103	popcountsi2 \
104	popcountti2 \
105	powidf2 \
106	powisf2 \
107	powitf2 \
108	powixf2 \
109	subvdi3 \
110	subvsi3 \
111	subvti3 \
112	trampoline_setup \
113	ucmpdi2 \
114	ucmpti2 \
115	udivdi3 \
116	udivmoddi4 \
117	udivmodsi4 \
118	udivmodti4 \
119	udivti3 \
120	umoddi3 \
121	umodti3
122
123# Avoid using SSE2 instructions on i386, if unsupported.
124.if ${MACHINE_CPUARCH} == "i386" && empty(MACHINE_CPU:Msse2)
125SRCS+=		floatdidf.c
126SRCS+=		floatdisf.c
127SRCS+=		floatdixf.c
128SRCS+=		floatundidf.c
129SRCS+=		floatundisf.c
130SRCS+=		floatundixf.c
131.else
132SRCF+=		floatdidf
133SRCF+=		floatdisf
134SRCF+=		floatdixf
135SRCF+=		floatundidf
136SRCF+=		floatundisf
137SRCF+=		floatundixf
138.endif
139
140# These are already shipped by libc.a on arm and mips
141.if ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips"
142SRCF+=	adddf3 \
143	addsf3 \
144	divdf3 \
145	divsf3 \
146	extendsfdf2 \
147	fixdfsi \
148	fixsfsi \
149	floatsidf \
150	floatsisf \
151	muldf3 \
152	mulsf3 \
153	subdf3 \
154	subsf3 \
155	truncdfsf2
156.endif
157
158.if ${MACHINE_CPUARCH} != "mips" && \
159    (${MACHINE_CPUARCH} != "arm" || ${MK_ARM_EABI} != "no")
160SRCF+=	divsi3 \
161	modsi3 \
162	udivsi3 \
163	umodsi3
164.endif
165
166# FreeBSD-specific atomic intrinsics.
167.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "armv6"
168.PATH: ${.CURDIR}/../../sys/arm/arm
169
170SRCF+=	stdatomic
171CFLAGS+=	-DEMIT_SYNC_ATOMICS
172.elif ${MACHINE_CPUARCH} == "mips"
173.PATH: ${.CURDIR}/../../sys/mips/mips
174
175SRCF+=	stdatomic
176.endif
177
178.for file in ${SRCF}
179. if ${MACHINE_CPUARCH} != "arm" && exists(${CRTSRC}/${CRTARCH}/${file}.S)
180SRCS+=	${file}.S
181. else
182SRCS+=	${file}.c
183. endif
184.endfor
185
186.if ${MACHINE_CPUARCH} == "arm" && ${MK_ARM_EABI} != "no"
187SRCS+=	aeabi_idivmod.S \
188	aeabi_ldivmod.S \
189	aeabi_memcmp.S \
190	aeabi_memcpy.S \
191	aeabi_memmove.S \
192	aeabi_memset.S \
193	aeabi_uidivmod.S \
194	aeabi_uldivmod.S
195.endif
196
197.if ${MK_INSTALLLIB} != "no"
198SYMLINKS+=libcompiler_rt.a ${LIBDIR}/libgcc.a
199.endif
200.if ${MK_PROFILE} != "no"
201SYMLINKS+=libcompiler_rt_p.a ${LIBDIR}/libgcc_p.a
202.endif
203
204.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" || \
205    ${MACHINE_CPUARCH} == "powerpc"
206AFLAGS+=--noexecstack
207ACFLAGS+=-Wa,--noexecstack
208.endif
209
210
211.include <bsd.lib.mk>
212