1# $NetBSD: Makefile,v 1.34 2021/12/07 19:14:05 rillig Exp $ 2 3.include <bsd.init.mk> 4 5# We don't install gmp, just provide it for GCC. 6LIBISPRIVATE?= yes 7 8.include "../../Makefile.arch" 9 10.if ${LIBISPRIVATE} != "yes" 11INCS= gmp.h 12INCSDIR= /usr/include 13.endif 14 15DIST=${.CURDIR}/../../dist 16 17LIB= gmp 18 19MPF_SRCS = \ 20 init.c init2.c inits.c set.c \ 21 set_ui.c set_si.c set_str.c set_d.c \ 22 set_z.c iset.c iset_ui.c iset_si.c \ 23 iset_str.c iset_d.c clear.c clears.c \ 24 get_str.c dump.c size.c eq.c reldiff.c \ 25 sqrt.c random2.c inp_str.c out_str.c \ 26 add.c add_ui.c sub.c sub_ui.c ui_sub.c \ 27 mul.c mul_ui.c div.c div_ui.c \ 28 cmp.c cmp_d.c cmp_ui.c cmp_si.c cmp_z.c \ 29 mul_2exp.c div_2exp.c abs.c neg.c \ 30 set_q.c get_d.c get_d_2exp.c set_dfl_prec.c \ 31 set_prc.c set_prc_raw.c get_dfl_prec.c \ 32 get_prc.c ui_div.c sqrt_ui.c \ 33 ceilfloor.c trunc.c pow_ui.c \ 34 urandomb.c swap.c \ 35 fits_sint.c fits_slong.c fits_sshort.c \ 36 fits_uint.c fits_ulong.c fits_ushort.c \ 37 get_si.c get_ui.c \ 38 int_p.c 39 40MPZ_SRCS = \ 41 abs.c add.c add_ui.c \ 42 aorsmul.c aorsmul_i.c and.c array_init.c \ 43 bin_ui.c bin_uiui.c \ 44 cdiv_q.c cdiv_q_ui.c \ 45 cdiv_qr.c cdiv_qr_ui.c \ 46 cdiv_r.c cdiv_r_ui.c cdiv_ui.c \ 47 cfdiv_q_2exp.c cfdiv_r_2exp.c \ 48 clear.c clears.c clrbit.c \ 49 cmp.c cmp_d.c cmp_si.c cmp_ui.c \ 50 cmpabs.c cmpabs_d.c cmpabs_ui.c \ 51 com.c combit.c \ 52 cong.c cong_2exp.c cong_ui.c \ 53 divexact.c divegcd.c dive_ui.c \ 54 divis.c divis_ui.c divis_2exp.c dump.c \ 55 export.c fac_ui.c fdiv_q.c \ 56 fdiv_q_ui.c fdiv_qr.c fdiv_qr_ui.c \ 57 fdiv_r.c fdiv_r_ui.c \ 58 fdiv_ui.c fib_ui.c fib2_ui.c fits_sint.c \ 59 fits_slong.c fits_sshort.c fits_uint.c \ 60 fits_ulong.c fits_ushort.c gcd.c \ 61 gcd_ui.c gcdext.c get_d.c get_d_2exp.c \ 62 get_si.c get_str.c get_ui.c getlimbn.c \ 63 hamdist.c \ 64 import.c init.c init2.c inits.c \ 65 inp_raw.c inp_str.c invert.c \ 66 ior.c iset.c iset_d.c iset_si.c \ 67 iset_str.c iset_ui.c jacobi.c kronsz.c \ 68 kronuz.c kronzs.c kronzu.c \ 69 limbs_finish.c limbs_modify.c \ 70 limbs_read.c limbs_write.c \ 71 lcm.c lcm_ui.c lucnum_ui.c lucnum2_ui.c \ 72 millerrabin.c mod.c mul.c mul_2exp.c \ 73 mul_si.c mul_ui.c \ 74 n_pow_ui.c neg.c nextprime.c \ 75 oddfac_1.c \ 76 out_raw.c out_str.c perfpow.c perfsqr.c \ 77 popcount.c pow_ui.c powm.c \ 78 powm_ui.c pprime_p.c \ 79 prodlimbs.c \ 80 random.c random2.c \ 81 realloc.c realloc2.c remove.c \ 82 roinit_n.c \ 83 root.c rootrem.c rrandomb.c scan0.c \ 84 scan1.c set.c set_d.c set_f.c \ 85 set_q.c set_si.c set_str.c set_ui.c \ 86 setbit.c \ 87 size.c sizeinbase.c sqrt.c \ 88 sqrtrem.c sub.c sub_ui.c swap.c \ 89 tdiv_ui.c tdiv_q.c tdiv_q_2exp.c \ 90 tdiv_q_ui.c tdiv_qr.c tdiv_qr_ui.c \ 91 tdiv_r.c tdiv_r_2exp.c tdiv_r_ui.c \ 92 tstbit.c ui_pow_ui.c ui_sub.c urandomb.c \ 93 urandomm.c xor.c 94 95MPQ_SRCS = \ 96 abs.c aors.c \ 97 canonicalize.c clear.c clears.c \ 98 cmp.c cmp_si.c cmp_ui.c div.c \ 99 get_d.c get_den.c get_num.c get_str.c \ 100 init.c inits.c inp_str.c inv.c \ 101 md_2exp.c mul.c neg.c out_str.c \ 102 set.c set_den.c set_num.c \ 103 set_si.c set_str.c set_ui.c \ 104 equal.c set_z.c set_d.c \ 105 set_f.c swap.c 106 107PRINTF_SRCS = \ 108 asprintf.c asprntffuns.c \ 109 doprnt.c doprntf.c doprnti.c \ 110 fprintf.c \ 111 obprintf.c obvprintf.c obprntffuns.c \ 112 printf.c printffuns.c \ 113 snprintf.c snprntffuns.c \ 114 sprintf.c sprintffuns.c \ 115 vasprintf.c vfprintf.c vprintf.c \ 116 vsnprintf.c vsprintf.c \ 117 repl-vsnprintf.c 118 119SCANF_SRCS = \ 120 doscan.c fscanf.c fscanffuns.c \ 121 scanf.c sscanf.c sscanffuns.c \ 122 vfscanf.c vscanf.c vsscanf.c 123 124.include "${.CURDIR}/arch/${GMP_MACHINE_ARCH}/Makefile.inc" 125 126SRCS+= \ 127 assert.c compat.c errno.c extract-dbl.c invalid.c memory.c \ 128 mp_bpl.c mp_clz_tab.c mp_dv_tab.c mp_minv_tab.c mp_get_fns.c \ 129 mp_set_fns.c randclr.c randdef.c randiset.c randlc2s.c \ 130 randlc2x.c randmt.c randmts.c rands.c randsd.c randsdui.c \ 131 randbui.c randmui.c version.c nextprime.c primesieve.c 132 133SRCS+= tal-reent.c 134 135# these are generated 136SRCS+= fib_table.c mp_bases.c 137 138# Build the files that may have multiple identical base names under 139# different names. 140.for _dir _srcfile in \ 141 ${MPF_SRCS:C/^/mpf /} \ 142 ${MPZ_SRCS:C/^/mpz /} \ 143 ${MPQ_SRCS:C/^/mpq /} \ 144 ${PRINTF_SRCS:C/^/printf /} \ 145 ${SCANF_SRCS:C/^/scanf /} 146${_dir}_${_srcfile}: #Makefile 147 echo '#include "'${_dir}/${_srcfile}'"' > ${.TARGET} 148 149SRCS+= ${_dir}_${_srcfile} 150CLEANFILES+= ${_dir}_${_srcfile} 151 152.endfor 153 154CPPFLAGS+= -I. -I${DIST} -I${.CURDIR}/arch/${GMP_MACHINE_ARCH} \ 155 -D__GMP_WITHIN_GMP -DHAVE_CONFIG_H 156 157WITHOUT_MAN= yes 158 159DPSRCS= fac_table.h fib_table.h fib_table.c jacobitab.h mp_bases.h \ 160 mp_bases.c perfsqr.h trialdivtab.h 161 162gen-fac: gen-fac.c 163 ${HOST_CC} ${HOST_CPPFLAGS} -o ${.OBJDIR}/gen-fac ${.ALLSRC} 164 165fac_table.h: gen-fac 166 ${.OBJDIR}/gen-fac ${GMP_LIMB_BITS} 0 > ${.OBJDIR}/fac_table.h 167 168gen-fib: gen-fib.c 169 ${HOST_CC} ${HOST_CPPFLAGS} -o ${.OBJDIR}/gen-fib ${.ALLSRC} 170 171fib_table.h: gen-fib 172 ${.OBJDIR}/gen-fib header ${GMP_LIMB_BITS} 0 > ${.OBJDIR}/fib_table.h 173 174fib_table.c: gen-fib 175 ${.OBJDIR}/gen-fib table ${GMP_LIMB_BITS} 0 > ${.OBJDIR}/fib_table.c 176 177gen-bases: gen-bases.c 178 ${HOST_CC} ${HOST_CPPFLAGS} -o ${.OBJDIR}/gen-bases ${.ALLSRC} -lm 179 180mp_bases.h: gen-bases 181 ${.OBJDIR}/gen-bases header ${GMP_LIMB_BITS} 0 > ${.OBJDIR}/mp_bases.h 182 183mp_bases.c: gen-bases 184 ${.OBJDIR}/gen-bases table ${GMP_LIMB_BITS} 0 > ${.OBJDIR}/mp_bases.c 185 186gen-jacobitab: gen-jacobitab.c 187 ${HOST_CC} ${HOST_CPPFLAGS} -o ${.OBJDIR}/gen-jacobitab ${.ALLSRC} -lm 188 189jacobitab.h: gen-jacobitab 190 ${.OBJDIR}/gen-jacobitab > ${.OBJDIR}/jacobitab.h 191 192perfsqr.h: gen-psqr.c 193 ${HOST_CC} ${HOST_CPPFLAGS} -o ${.OBJDIR}/gen-psqr ${.ALLSRC} 194 ${.OBJDIR}/gen-psqr ${GMP_LIMB_BITS} 0 > ${.OBJDIR}/perfsqr.h 195 196gen-trialdivtab: gen-trialdivtab.c 197 ${HOST_CC} ${HOST_CPPFLAGS} -o ${.OBJDIR}/gen-trialdivtab ${.ALLSRC} -lm 198 199trialdiv.c: trialdivtab.h 200trialdivtab.h: gen-trialdivtab Makefile 201 ${.OBJDIR}/gen-trialdivtab $(GMP_LIMB_BITS) 8000 > ${.OBJDIR}/trialdivtab.h 202 203CLEANFILES+= ${DPSRCS} gen-fac gen-fib gen-bases gen-jacobitab \ 204 gen-psqr gen-trialdivtab 205 206# Makefile.inc must define GMP_LIMB_BITS. 207.if !defined(GMP_LIMB_BITS) 208.BEGIN: 209 @echo "GMP_LIMB_BITS not defined!" 210 false 211.endif 212 213# XXX stuff looks for "../config.m4" 214dummy: 215 mkdir dummy 216${.OBJDIR}/config.m4: ${.CURDIR}/arch/${GMP_MACHINE_ARCH}/config.m4 217 rm -f ${.OBJDIR}/config.m4 && cp ${.CURDIR}/arch/${GMP_MACHINE_ARCH}/config.m4 ${.OBJDIR}/config.m4 218 219CLEANFILES+= config.m4 220clean: cleandummy 221cleandummy: .PHONY 222 -if [ -d dummy ]; then rmdir dummy; fi 223 224BUILD_S_INCS= -I${.CURDIR} -I${.OBJDIR}/dummy -I${DIST}/ -I${DIST}/mpn \ 225 -I${.OBJDIR} 226 227.for _build _src in ${ASM_SRCS_LIST} 228${_build:R}.s: Makefile dummy ${.OBJDIR}/config.m4 ${DIST}/${_src} 229 ${TOOL_M4} -DCONFIG_TOP_SRCDIR=${DIST} ${BUILD_S_INCS} \ 230 ${M4FLAGS} ${M4FLAGS.${.TARGET:R}} \ 231 -DOPERATION_${.TARGET:R} ${DIST}/${_src} > ${.TARGET} 232 233SRCS+= ${_build:R}.s 234CLEANFILES+= ${_build:R}.s 235.endfor 236 237.for _build _src in ${C_SRCS_LIST} 238mpn_${_build}: Makefile 239 echo '#include "${_src}"' > ${.TARGET} 240 241CPPFLAGS.mpn_${_build}+= -DOPERATION_${_build:R} 242 243SRCS+= mpn_${_build} 244CLEANFILES+= mpn_${_build} 245.endfor 246 247.include <bsd.lib.mk> 248 249.PATH: ${DIST} \ 250 ${DIST}/rand \ 251 ${DIST}/mpn/generic \ 252 ${.CURDIR}/arch/${GMP_MACHINE_ARCH} \ 253 ${DIST}/mpf \ 254 ${DIST}/mpz 255 256# Don't warn about functions which cannot be stack smash protected as 257# there are a lot of them. 258COPTS += -Wno-stack-protector 259.if !empty(GMP_MACHINE_ARCH:M*arm*) 260COPTS += -marm 261.endif 262 263CWARNFLAGS.clang+= -Wno-unused-value -Wno-tautological-compare -Wno-parentheses 264 265.if !empty(CFLAGS:M-fPIE) 266M4FLAGS+=-DPIC 267.endif 268 269# gmp-impl.h(5172): warning: constant in conditional context [161] 270LINTFLAGS+= -X 161 271# gmp-impl.h(5187): warning: bitwise '>>' on signed value possibly nonportable [117] 272LINTFLAGS+= -X 117 273# com.c(67): warning: conversion from 'long' to 'int' may lose accuracy [132] 274LINTFLAGS+= -X 132 275# gcd.c(101): warning: argument #4 is converted from 'unsigned long' to 'unsigned int' due to prototype [259] 276LINTFLAGS+= -X 259 277