1#	$NetBSD: Makefile,v 1.23 2023/03/05 22:12:02 mrg Exp $
2
3.include <bsd.init.mk>
4
5# We don't install mpfr, just provide it for GCC.
6LIBISPRIVATE?= yes
7
8.if ${LIBISPRIVATE} != "yes"
9INCS=         mpf2mpfr.h mpfr.h
10INCSDIR=      /usr/include
11.endif
12
13MPFRDIST=	${.CURDIR}/../../dist
14
15# XXX get_d.c triggers lint div zero errors (which is valid?)
16MKLINT=no
17
18LIB=	mpfr
19
20LIBDPLIBS+= gmp ${.CURDIR}/../../../gmp/lib/libgmp
21
22SRCS=	\
23	abort_prec_max.c \
24	acos.c \
25	acosh.c \
26	acosu.c \
27	add.c \
28	add1.c \
29	add1sp.c \
30	add_d.c \
31	add_ui.c \
32	agm.c \
33	ai.c \
34	asin.c \
35	asinh.c \
36	asinu.c \
37	atan.c \
38	atan2.c \
39	atan2u.c \
40	atanh.c \
41	atanu.c \
42	bernoulli.c \
43	beta.c \
44	buildopt.c \
45	cache.c \
46	cbrt.c \
47	check.c \
48	clear.c \
49	clears.c \
50	cmp.c \
51	cmp2.c \
52	cmp_d.c \
53	cmp_ld.c \
54	cmp_si.c \
55	cmp_ui.c \
56	cmpabs.c \
57	cmpabs_ui.c \
58	comparisons.c \
59	compound.c \
60	const_catalan.c \
61	const_euler.c \
62	const_log2.c \
63	const_pi.c \
64	constant.c \
65	copysign.c \
66	cos.c \
67	cosh.c \
68	cosu.c \
69	cot.c \
70	coth.c \
71	csc.c \
72	csch.c \
73	d_div.c \
74	d_sub.c \
75	digamma.c \
76	dim.c \
77	div.c \
78	div_2exp.c \
79	div_2si.c \
80	div_2ui.c \
81	div_d.c \
82	div_ui.c \
83	dot.c \
84	dump.c \
85	eint.c \
86	eq.c \
87	erf.c \
88	erfc.c \
89	exceptions.c \
90	exp.c \
91	exp10.c \
92	exp10m1.c \
93	exp2.c \
94	exp2m1.c \
95	exp3.c \
96	exp_2.c \
97	expm1.c \
98	extract.c \
99	factorial.c \
100	fits_intmax.c \
101	fits_sint.c \
102	fits_slong.c \
103	fits_sshort.c \
104	fits_uint.c \
105	fits_uintmax.c \
106	fits_ulong.c \
107	fits_ushort.c \
108	fma.c \
109	fmma.c \
110	fmod_ui.c \
111	fms.c \
112	fpif.c \
113	frac.c \
114	free_cache.c \
115	frexp.c \
116	gamma.c \
117	gamma_inc.c \
118	gammaonethird.c \
119	get_d.c \
120	get_d128.c \
121	get_d64.c \
122	get_exp.c \
123	get_f.c \
124	get_flt.c \
125	get_ld.c \
126	get_patches.c \
127	get_q.c \
128	get_si.c \
129	get_sj.c \
130	get_str.c \
131	get_ui.c \
132	get_uj.c \
133	get_z.c \
134	get_z_2exp.c \
135	gmp_op.c \
136	grandom.c \
137	hypot.c \
138	init.c \
139	init2.c \
140	inits.c \
141	inits2.c \
142	inp_str.c \
143	int_ceil_log2.c \
144	isinf.c \
145	isinteger.c \
146	isnan.c \
147	isnum.c \
148	isqrt.c \
149	isregular.c \
150	iszero.c \
151	jn.c \
152	li2.c \
153	lngamma.c \
154	log.c \
155	log10.c \
156	log10p1.c \
157	log1p.c \
158	log2.c \
159	log2p1.c \
160	log_ui.c \
161	logging.c \
162	min_prec.c \
163	minmax.c \
164	modf.c \
165	mp_clz_tab.c \
166	mpfr-gmp.c \
167	mpn_exp.c \
168	mul.c \
169	mul_2exp.c \
170	mul_2si.c \
171	mul_2ui.c \
172	mul_d.c \
173	mul_ui.c \
174	mulders.c \
175	nbits_ulong.c \
176	neg.c \
177	next.c \
178	nrandom.c \
179	odd_p.c \
180	out_str.c \
181	pool.c \
182	pow.c \
183	pow_si.c \
184	pow_sj.c \
185	pow_ui.c \
186	pow_uj.c \
187	pow_z.c \
188	powerof2.c \
189	powr.c \
190	print_raw.c \
191	print_rnd_mode.c \
192	printf.c \
193	random_deviate.c \
194	rec_sqrt.c \
195	reldiff.c \
196	rem1.c \
197	rint.c \
198	rndna.c \
199	root.c \
200	round_near_x.c \
201	round_p.c \
202	round_prec.c \
203	scale2.c \
204	sec.c \
205	sech.c \
206	set.c \
207	set_d.c \
208	set_d128.c \
209	set_d64.c \
210	set_dfl_prec.c \
211	set_exp.c \
212	set_f.c \
213	set_float128.c \
214	set_flt.c \
215	set_inf.c \
216	set_ld.c \
217	set_nan.c \
218	set_prc_raw.c \
219	set_prec.c \
220	set_q.c \
221	set_rnd.c \
222	set_si.c \
223	set_si_2exp.c \
224	set_sj.c \
225	set_str.c \
226	set_str_raw.c \
227	set_ui.c \
228	set_ui_2exp.c \
229	set_uj.c \
230	set_z.c \
231	set_z_2exp.c \
232	set_zero.c \
233	setmax.c \
234	setmin.c \
235	setsign.c \
236	sgn.c \
237	si_op.c \
238	signbit.c \
239	sin.c \
240	sin_cos.c \
241	sinh.c \
242	sinh_cosh.c \
243	sinu.c \
244	sqr.c \
245	sqrt.c \
246	sqrt_ui.c \
247	stack_interface.c \
248	strtofr.c \
249	sub.c \
250	sub1.c \
251	sub1sp.c \
252	sub_d.c \
253	sub_ui.c \
254	subnormal.c \
255	sum.c \
256	swap.c \
257	tan.c \
258	tanh.c \
259	tanu.c \
260	total_order.c \
261	ubf.c \
262	uceil_exp2.c \
263	uceil_log2.c \
264	ufloor_log2.c \
265	ui_div.c \
266	ui_pow.c \
267	ui_pow_ui.c \
268	ui_sub.c \
269	urandom.c \
270	urandomb.c \
271	vasprintf.c \
272	version.c \
273	volatile.c \
274	yn.c \
275	zeta.c \
276	zeta_ui.c
277
278# not yet
279# float128.c
280
281CPPFLAGS+=	-I. \
282		-DHAVE_INTTYPES_H=1 \
283		-DHAVE_STDINT_H=1 \
284		-DTIME_WITH_SYS_TIME=1 \
285		-DHAVE_LOCALE_H=1 \
286		-DHAVE_WCHAR_H=1 \
287		-DHAVE_STDARG=1 \
288		-DHAVE_SYS_TIME_H=1 \
289		-DHAVE_STDINT_H=1 \
290		-DHAVE_VA_COPY=1 \
291		-DHAVE_SETLOCALE=1 \
292		-DHAVE_GETTIMEOFDAY=1 \
293		-DHAVE_LONG_LONG=1 \
294		-DHAVE_INTMAX_T=1 \
295		-DMPFR_HAVE_INTMAX_MAX=1 \
296		-DMPFR_HAVE_FESETROUND=1 \
297		-DHAVE_DENORMS=1 \
298		-DHAVE_ROUND=1 \
299		-DHAVE_TRUNC=1 \
300		-DHAVE_FLOOR=1 \
301		-DHAVE_CEIL=1 \
302		-DHAVE_ATTRIBUTE_MODE=1
303
304# Find <gmp.h>
305.include "../../../gmp/Makefile.arch"
306CPPFLAGS+=	-I${NETBSDSRCDIR}/external/lgpl3/gmp/lib/libgmp/arch/${GMP_MACHINE_ARCH}
307CPPFLAGS+=	-I${MPFRDIST}/src
308
309# IEEE FP support.  No VAX here.
310.if ${MACHINE_ARCH} == "x86_64" || \
311    ${MACHINE_ARCH} == "i386"
312    ${MACHINE_ARCH} == "mipsel"
313CPPFLAGS+=	-DHAVE_LDOUBLE_IEEE_EXT_LITTLE=1
314.endif
315
316.if !empty(MACHINE_ARCH:Mmips*64el)
317CPPFLAGS+=	-DHAVE_LDOUBLE_IEEE_QUAD_LITTLE=1
318.endif
319
320.if ${MACHINE_ARCH} == "sparc64" || \
321    ${MACHINE_ARCH} == "powerpc" || \
322    ${MACHINE_ARCH} == "powerpc64" || \
323    !empty(MACHINE_ARCH:Mmips*64eb)
324CPPFLAGS+=	-DHAVE_LDOUBLE_IEEE_QUAD_BIG=1
325.endif
326
327.include <bsd.endian.mk>
328
329.if ${TARGET_ENDIANNESS} == "1234"
330CPPFLAGS+=	-DHAVE_DOUBLE_IEEE_LITTLE_ENDIAN=1
331CPPFLAGS+=	-DHAVE_BIG_ENDIAN=1
332.elif ${TARGET_ENDIANNESS} == "4321"
333CPPFLAGS+=	-DHAVE_DOUBLE_IEEE_BIG_ENDIAN=1
334CPPFLAGS+=	-DHAVE_LITTLE_ENDIAN=1
335.endif
336
337CWARNFLAGS.clang+=	-Wno-error=tautological-constant-out-of-range-compare
338
339WITHOUT_MAN=	yes
340
341.include <bsd.lib.mk>
342
343mparam.h: mparam_h.in
344	rm -f ${.TARGET} && cp ${.ALLSRC} ${.TARGET}
345
346${SRCS}: mparam.h
347CLEANFILES+= mparam.h
348
349GET_PATCHES_SH=	${MPFRDIST}/tools/get_patches.sh
350PATCHES=	${MPFRDIST}/PATCHES
351
352get_patches.c: ${GET_PATCHES_SH} ${PATCHES}
353	${GET_PATCHES_SH} ${PATCHES} > $@.tmp && mv $@.tmp $@
354
355CLEANFILES+= get_patches.c.tmp get_patches.c
356
357.PATH: ${.CURDIR}/../../dist/src
358
359.if !empty(MACHINE_ARCH:M*arm*)
360COPTS += -marm
361.endif
362.if ${MACHINE_ARCH} == "vax"
363COPTS.set_ld.c+=	-Wno-error
364.endif
365
366# Don't warn about functions which cannot be stack smash protected as
367# there are a lot of them.
368COPTS += -Wno-stack-protector
369