1 1.4 mrg # $NetBSD: Makefile,v 1.4 2026/01/19 11:48:40 mrg Exp $ 2 1.1 mrg 3 1.1 mrg # XXX libgfortran also has a libcaf_single thing in here. 4 1.1 mrg 5 1.4 mrg # XXX 6 1.4 mrg NOLINT= # defined 7 1.4 mrg 8 1.1 mrg # This needs to be before bsd.init.mk 9 1.1 mrg .if defined(BSD_MK_COMPAT_FILE) 10 1.1 mrg .include <${BSD_MK_COMPAT_FILE}> 11 1.1 mrg .endif 12 1.1 mrg 13 1.1 mrg .include <bsd.init.mk> 14 1.1 mrg 15 1.1 mrg LIB= gfortran 16 1.1 mrg 17 1.1 mrg # Match GCC 14. 18 1.1 mrg SHLIB_MAJOR= 5 19 1.1 mrg SHLIB_MINOR= 0 20 1.1 mrg 21 1.1 mrg DIST= ${GCCDIST} 22 1.1 mrg GNUHOSTDIST= ${DIST} 23 1.1 mrg GFORTRAN= ${DIST}/libgfortran 24 1.1 mrg 25 1.1 mrg # These are earlier than included file paths, to avoid getting eg 26 1.1 mrg # libbacktrace's read.c instead of io/read.c. 27 1.1 mrg .PATH: ${DIST}/libgfortran 28 1.1 mrg .PATH: ${DIST}/libgfortran/generated 29 1.1 mrg .PATH: ${DIST}/libgfortran/intrinsics 30 1.1 mrg .PATH: ${DIST}/libgfortran/runtime 31 1.1 mrg .PATH: ${DIST}/libgfortran/io 32 1.1 mrg .PATH: ${DIST}/libgfortran/ieee 33 1.1 mrg .PATH: ${.CURDIR}/arch/${GCC_MACHINE_ARCH} 34 1.1 mrg 35 1.1 mrg # remove prefixes, .inc and .h files 36 1.1 mrg GFORTRAN_SRCS= ${G_libgfortran_la_SOURCES:C,^.*/,,:C,.*\.inc$,,:C,.*\.h$,,} 37 1.1 mrg 38 1.1 mrg .include "../Makefile.gthr" 39 1.1 mrg .include "${.CURDIR}/arch/${GCC_MACHINE_ARCH}/defs.mk" 40 1.1 mrg .include "../libbacktrace/Makefile.sources" 41 1.1 mrg 42 1.1 mrg GFORTRAN_BACKTRACE_SRCS= ${BACKTRACE_SRCS:backtrace.c=libbacktrace-backtrace.c} 43 1.1 mrg 44 1.1 mrg BUILDSYMLINKS+= ${GNUHOSTDIST}/libbacktrace/backtrace.c libbacktrace-backtrace.c 45 1.1 mrg 46 1.1 mrg # gcc builddir before libgcc 47 1.1 mrg # libgcc builddir after libgcc 48 1.1 mrg 49 1.1 mrg .if ${HAVE_QUADMATH} != no 50 1.1 mrg CPPFLAGS_QUADMATH=-I${DIST}/libquadmath 51 1.1 mrg .else 52 1.1 mrg CPPFLAGS_QUADMATH= 53 1.1 mrg .endif 54 1.1 mrg 55 1.1 mrg .for _s in ${GFORTRAN_SRCS} 56 1.1 mrg CPPFLAGS.${_s}+= -I. \ 57 1.1 mrg -I${.CURDIR}/arch/${GCC_MACHINE_ARCH} \ 58 1.1 mrg -I${GFORTRAN} \ 59 1.1 mrg -I${GFORTRAN}/io \ 60 1.1 mrg -I${DIST}/gcc \ 61 1.1 mrg -I${DIST}/gcc/config \ 62 1.1 mrg ${CPPFLAGS_QUADMATH} \ 63 1.1 mrg -I${DIST}/libgcc \ 64 1.1 mrg -I${DIST}/libbacktrace \ 65 1.1 mrg -I${DIST}/../lib/libbacktrace/arch/${GCC_MACHINE_ARCH} \ 66 1.1 mrg -I${.CURDIR}/arch/${GCC_MACHINE_ARCH} 67 1.1 mrg .endfor 68 1.1 mrg 69 1.1 mrg .for _s in ${GFORTRAN_BACKTRACE_SRCS} 70 1.1 mrg CPPFLAGS.${_s}+= -I. \ 71 1.1 mrg ${BACKTRACE_CPPFLAGS} 72 1.1 mrg .endfor 73 1.1 mrg 74 1.1 mrg SRCS= ${GFORTRAN_SRCS} ${GFORTRAN_BACKTRACE_SRCS} 75 1.1 mrg 76 1.1 mrg FFLAGS+= -I. -fno-repack-arrays -fno-underscoring -I${.CURDIR}/arch/${GCC_MACHINE_ARCH} 77 1.1 mrg 78 1.1 mrg LIBDPLIBS+= m ${NETBSDSRCDIR}/lib/libm 79 1.1 mrg .if ${HAVE_QUADMATH} != no 80 1.1 mrg LIBDPLIBS+= quadmath ${.CURDIR}/../libquadmath 81 1.1 mrg .endif 82 1.1 mrg 83 1.1 mrg DPSRCS+= kinds.h kinds.inc c99_protos.inc fpu-target.inc \ 84 1.1 mrg selected_int_kind.inc selected_real_kind.inc 85 1.1 mrg 86 1.1 mrg ${GFORTRAN_SRCS:M*.F90}: ${DPSRCS} 87 1.1 mrg 88 1.1 mrg INTLIST='1 2 4 8 16' 89 1.1 mrg REALLIST='4 8 10 16' 90 1.1 mrg 91 1.1 mrg fpu-target.h: ${GFORTRAN}/${G_FPU_HOST_HEADER} 92 1.1 mrg cp ${GFORTRAN}/${G_FPU_HOST_HEADER} $@ 93 1.1 mrg 94 1.1 mrg fpu-target.inc: fpu-target.h ${DIST}/gcc/fortran/libgfortran.h 95 1.1 mrg ${TOOL_GREP} -h '^#define GFC_FPE_' ${.ALLSRC} > ${.TARGET} 96 1.1 mrg 97 1.1 mrg c99_protos.inc: ${GFORTRAN}/c99_protos.h 98 1.1 mrg ${TOOL_GREP} '^#' < ${.ALLSRC} > ${.TARGET} || rm ${.TARGET} 99 1.1 mrg LIBS+= ${BACKENDOBJ}/libbackend.a 100 1.1 mrg kinds.h: ${GFORTRAN}/mk-kinds-h.sh 101 1.1 mrg ${HOST_SH} ${GFORTRAN}/mk-kinds-h.sh \ 102 1.1 mrg ${INTLIST} \ 103 1.1 mrg ${REALLIST} \ 104 1.1 mrg "${FC} ${FFLAGS}" \ 105 1.1 mrg no > \ 106 1.1 mrg ${.TARGET} || rm ${.TARGET} 107 1.1 mrg 108 1.1 mrg kinds.inc: kinds.h ${GFORTRAN}/kinds-override.h 109 1.1 mrg cat kinds.h ${GFORTRAN}/kinds-override.h | \ 110 1.1 mrg ${TOOL_GREP} '^#' | \ 111 1.1 mrg ${TOOL_GREP} -v include > \ 112 1.1 mrg ${.TARGET} || rm ${.TARGET} 113 1.1 mrg 114 1.1 mrg selected_int_kind.inc: ${GFORTRAN}/mk-sik-inc.sh 115 1.1 mrg ${HOST_SH} ${GFORTRAN}/mk-sik-inc.sh \ 116 1.1 mrg ${INTLIST} \ 117 1.1 mrg "${FC} ${FFLAGS}" > \ 118 1.1 mrg ${.TARGET} || rm ${.TARGET} 119 1.1 mrg 120 1.1 mrg selected_real_kind.inc: ${GFORTRAN}/mk-srk-inc.sh 121 1.1 mrg ${HOST_SH} ${GFORTRAN}/mk-srk-inc.sh \ 122 1.1 mrg ${REALLIST} \ 123 1.1 mrg "${FC} ${FFLAGS}" > \ 124 1.1 mrg ${.TARGET} || rm ${.TARGET} 125 1.1 mrg 126 1.1 mrg fpu.c: fpu-target.h 127 1.1 mrg 128 1.1 mrg COPTS.date_and_time.c+= ${CC_WNO_FORMAT_TRUNCATION} 129 1.1 mrg COPTS.list_read.c+= -Wno-error=pointer-arith 130 1.1 mrg COPTS.transfer.c+= -Wno-error=pointer-arith 131 1.1 mrg COPTS.write.c+= -Wno-error=pointer-arith 132 1.1 mrg 133 1.1 mrg # ieee_arithmetic needs ieee_exceptions.mod to be already built 134 1.1 mrg ieee_arithmetic.o ieee_arithmetic.pico ieee_arithmetic.po ieee_arithmetic.go: ieee_exceptions.pico ieee_exceptions.po ieee_exceptions.o ieee_exceptions.go 135 1.1 mrg 136 1.1 mrg # these .mod's gets built multiple times, so serialise those 137 1.1 mrg .for _mod in ieee_arithmetic ieee_exceptions ieee_features 138 1.1 mrg ${_mod}.mod: ${_mod}.o 139 1.1 mrg ${_mod}.o: ${_mod}.pico 140 1.1 mrg ${_mod}.pico: ${_mod}.po 141 1.1 mrg ${_mod}.po: ${_mod}.go 142 1.1 mrg .endfor 143 1.1 mrg 144 1.1 mrg CLEANFILES+= fpu-target.h fpu-target.inc c99_protos.inc \ 145 1.1 mrg kinds.h kinds.inc \ 146 1.1 mrg selected_int_kind.inc selected_real_kind.inc \ 147 1.1 mrg ieee_arithmetic.mod ieee_exceptions.mod ieee_features.mod 148 1.1 mrg 149 1.1 mrg .for _f in ${G_i_matmul_c:C,^.*/,,} 150 1.1 mrg FOPTS.${_f}+= -ffast-math -ftree-vectorize -funroll-loops --param max-unroll-times=4 151 1.1 mrg .endfor 152 1.1 mrg 153 1.1 mrg #.if ${MACHINE} == "amd64" 154 1.1 mrg .for _f in ${G_i_matmulavx128_c:C,^.*/,,} 155 1.1 mrg FOPTS.${_f}+= -ffast-math -ftree-vectorize -funroll-loops --param max-unroll-times=4 -mprefer-avx128 156 1.1 mrg .endfor 157 1.1 mrg #.endif 158 1.1 mrg 159 1.1 mrg .for _f in ${G_i_matmull_c:C,^.*/,,} 160 1.1 mrg FOPTS.${_f}+= -funroll-loops 161 1.1 mrg .endfor 162 1.1 mrg 163 1.1 mrg .for _f in ${G_gfor_specific_src:C,^.*/,,} 164 1.1 mrg FOPTS.${_f}+= -fallow-leading-underscore -fbuilding-libgfortran 165 1.1 mrg .endfor 166 1.1 mrg 167 1.1 mrg .for _f in selected_real_kind.f90 selected_int_kind.f90 168 1.1 mrg FOPTS.${_f}+= -fallow-leading-underscore -fbuilding-libgfortran 169 1.1 mrg .endfor 170 1.1 mrg 171 1.1 mrg .for _f in ${G_gfor_ieee_src:C,^.*/,,} 172 1.1 mrg FOPTS.${_f}+= -Wno-unused-dummy-argument -Wno-c-binding-type -ffree-line-length-0 -fallow-leading-underscore -fsignaling-nans -fbuilding-libgfortran 173 1.1 mrg .endfor 174 1.1 mrg 175 1.1 mrg .for _f in ${G_gfor_ieee_helper_src:C,^.*/,,} 176 1.1 mrg FOPTS.${_f}+= -fsignaling-nans 177 1.1 mrg .endfor 178 1.1 mrg 179 1.1 mrg # Don't install these more than once. 180 1.1 mrg .ifndef MLIBDIR 181 1.1 mrg INCS= ${G_nodist_finclude_HEADERS} 182 1.1 mrg INCSDIR= ${GCC_INCSDIR}/finclude 183 1.1 mrg 184 1.1 mrg # This is where GCC looks for it. 185 1.1 mrg FILES= libgfortran.spec 186 1.1 mrg FILESDIR= ${LIBDIR} 187 1.1 mrg .endif 188 1.1 mrg 189 1.2 mrg .if ${MACHINE} == "vax" 190 1.2 mrg . for _f in unpack_i1.c unpack_i2.c unpack_i4.c unpack_i8.c unpack_r4.c unpack_r8.c unpack_c4.c unpack_c8.c 191 1.2 mrg COPTS.${_f}+= ${CC_WNO_MAYBE_UNINITIALIZED} 192 1.2 mrg . endfor 193 1.2 mrg # Ugh infinity/nan stuff 194 1.2 mrg . for _f in read.c erfc_scaled.c c99_functions.c trigd.c 195 1.2 mrg COPTS.${_f}+= -Wno-error 196 1.2 mrg . endfor 197 1.2 mrg .endif 198 1.2 mrg 199 1.2 mrg # XXX 200 1.3 mrg .if ${MACHINE} == "riscv" 201 1.2 mrg COPTS.ISO_Fortran_binding.c+= -Wno-error=format 202 1.2 mrg .endif 203 1.2 mrg 204 1.1 mrg .include <bsd.lib.mk> 205