Makefile revision 1.4 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