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