Makefile revision 1.229 1 1.229 rin # $NetBSD: Makefile,v 1.229 2025/04/12 10:09:15 rin Exp $
2 1.1 tv
3 1.3 tv .include <bsd.own.mk>
4 1.167 matt .include <bsd.endian.mk>
5 1.3 tv
6 1.159 joerg # Make sure that the ordered build/install processing applies when using
7 1.159 joerg # plain make.
8 1.159 joerg .MAIN: build_install
9 1.159 joerg
10 1.164 apb # TOOLDIR must be valid, unless MKTOOLS=no
11 1.164 apb .if ${MKTOOLS:Uyes} != "no"
12 1.217 rillig . if "${TOOLDIR}" == ""
13 1.217 rillig . error TOOLDIR is undefined or empty
14 1.217 rillig . elif ${TOOLDIR:tW:M/*} == ""
15 1.217 rillig . error TOOLDIR '${TOOLDIR}' is not an absolute path
16 1.217 rillig . endif
17 1.164 apb .endif # MKTOOLS != no
18 1.164 apb
19 1.166 pooka # TOOLS_BUILDRUMP == yes builds only the subset of the tools required
20 1.166 pooka # for building rump kernels and the hypervisor. It is typically used
21 1.166 pooka # when building rump kernels targeted for non-NetBSD systems (via
22 1.166 pooka # buildrump.sh), and should not be set for a regular "make build".
23 1.166 pooka TOOLS_BUILDRUMP?=no
24 1.166 pooka
25 1.160 pooka .if ${TOOLCHAIN_MISSING} == "no"
26 1.207 dbj . if (defined(HAVE_GCC) && ${HAVE_GCC} > 0) || \
27 1.207 dbj (defined(HAVE_GDB) && ${HAVE_GDB} > 0 && ${MKCROSSGDB:Uno} != "no")
28 1.207 dbj TOOLCHAIN_BITS+= gmake .WAIT
29 1.146 mrg TOOLCHAIN_BITS+= gmp .WAIT
30 1.146 mrg TOOLCHAIN_BITS+= mpfr .WAIT
31 1.146 mrg TOOLCHAIN_BITS+= mpc .WAIT
32 1.223 mrg . if (defined(HAVE_GCC) && ${HAVE_GCC} >= 12 && !defined(NOGCCISL))
33 1.216 mrg TOOLCHAIN_BITS+= isl .WAIT
34 1.216 mrg . endif
35 1.174 mrg . endif
36 1.156 joerg
37 1.94 jmc TOOLCHAIN_BITS+= binutils .WAIT
38 1.156 joerg
39 1.207 dbj . if defined(HAVE_GCC) && ${HAVE_GCC} > 0
40 1.77 mrg TOOLCHAIN_BITS+= gcc
41 1.207 dbj . endif
42 1.207 dbj
43 1.207 dbj . if defined(HAVE_GDB) && ${HAVE_GDB} > 0 && ${MKCROSSGDB:Uno} != "no"
44 1.74 cl TOOLCHAIN_BITS+= gdb
45 1.207 dbj . endif
46 1.207 dbj
47 1.156 joerg TOOLCHAIN_BITS+= .WAIT
48 1.118 gmcgarry .endif
49 1.118 gmcgarry
50 1.118 gmcgarry .if defined(HAVE_PCC)
51 1.174 mrg . if ${TOOLCHAIN_MISSING} == "no"
52 1.118 gmcgarry TOOLCHAIN_BITS+= pcc
53 1.174 mrg . endif
54 1.118 gmcgarry .endif
55 1.31 tv
56 1.192 christos .if ${TOOLCHAIN_MISSING} == "no" || defined(EXTERNAL_TOOLCHAIN)
57 1.156 joerg TOOLCHAIN_BITS+= dbsym mdsetimage
58 1.157 pooka .endif
59 1.156 joerg
60 1.137 darran DTRACE_BITS=
61 1.173 riastrad .if ${MKDTRACE} != "no" || ${MKCTF} != "no"
62 1.218 riastrad DTRACE_BITS+= .WAIT elftoolchain/common
63 1.218 riastrad DTRACE_BITS+= .WAIT elftoolchain/libelf
64 1.218 riastrad DTRACE_BITS+= .WAIT elftoolchain/libdwarf
65 1.162 apb DTRACE_BITS+= .WAIT libctf
66 1.172 ozaki .endif
67 1.172 ozaki .if ${MKCTF} != "no"
68 1.228 rin DTRACE_BITS+= .WAIT ctfconvert ctfdump ctfmerge
69 1.137 darran .endif
70 1.137 darran
71 1.99 mrg LINT_BITS=
72 1.99 mrg .if ${MKLINT} != "no"
73 1.99 mrg LINT_BITS= lint lint2
74 1.99 mrg .endif
75 1.99 mrg
76 1.165 apb # All of host-mkdep, compat, and binstall are needed before anything
77 1.165 apb # else. Within this group, they must be built in a specific order, and
78 1.165 apb # all of them must be built before any of them is installed. They may
79 1.165 apb # be installed in any order. This can't be expressed using the .WAIT
80 1.165 apb # notation inside the SUBDIR list.
81 1.165 apb #
82 1.165 apb # XXX .ORDER does not work when multiple targets are passed on the
83 1.165 apb # make command line without "-j", so use dependencies in addition to .ORDER.
84 1.165 apb #
85 1.211 cjep .ORDER: dependall-host-mkdep dependall-compat dependall-binstall \
86 1.211 cjep dependall-date
87 1.165 apb .if make(dependall-host-mkdep) && make(dependall-compat)
88 1.165 apb dependall-compat: dependall-host-mkdep
89 1.165 apb .endif
90 1.165 apb .if make(dependall-compat) && make(dependall-binstall)
91 1.165 apb dependall-binstall: dependall-compat
92 1.165 apb .endif
93 1.211 cjep .if make(dependall-date)
94 1.211 cjep dependall-date: dependall-host-mkdep dependall-compat
95 1.211 cjep .endif
96 1.165 apb
97 1.16 tv # Dependencies in SUBDIR below ordered to maximize parallel ability.
98 1.165 apb # See above for special treatment for host-mkdep, compat, and binstall.
99 1.165 apb #
100 1.210 christos SUBDIR= host-mkdep compat binstall date \
101 1.179 pooka .WAIT mktemp .WAIT sed .WAIT genassym
102 1.166 pooka .if ${TOOLS_BUILDRUMP} == "no"
103 1.179 pooka SUBDIR+= cap_mkdb crunchgen ctags gencat hexdump \
104 1.99 mrg ${LINT_BITS} \
105 1.175 pooka makewhatis mtree nbperf .WAIT uudecode
106 1.166 pooka .endif
107 1.166 pooka
108 1.229 rin SUBDIR+= cat gzip rpcgen join lorder m4 mkdep tsort what
109 1.229 rin .WAIT yacc .WAIT awk .WAIT lex
110 1.204 bad .if ${TOOLS_BUILDRUMP} == "no"
111 1.204 bad SUBDIR+= xz-include .WAIT grep xz-lib pax .WAIT libprop
112 1.166 pooka
113 1.166 pooka SUBDIR += .WAIT texinfo \
114 1.153 christos .WAIT tic \
115 1.132 mrg .WAIT ${TOOLCHAIN_BITS} \
116 1.137 darran ${DTRACE_BITS} \
117 1.175 pooka asn1_compile cksum compile_et db \
118 1.145 elric file lint1 slc \
119 1.184 christos makefs sortinfo \
120 1.184 christos .WAIT menuc mkcsmapper mkesdb mklocale mknod msgc \
121 1.178 christos .WAIT disklabel gpt \
122 1.132 mrg .WAIT paxctl \
123 1.132 mrg .WAIT fdisk \
124 1.132 mrg .WAIT installboot \
125 1.176 christos pwd_mkdb strfile sunlabel vgrind zic
126 1.166 pooka .endif
127 1.204 bad SUBDIR+= stat .WAIT config
128 1.204 bad .if ${TOOLS_BUILDRUMP} == "no"
129 1.204 bad SUBDIR+= xz-bin
130 1.204 bad .endif
131 1.39 tv
132 1.201 joerg .if ${MKLLVM} != "no" || ${MKLLVMRT} != "no"
133 1.142 joerg SUBDIR+= \
134 1.142 joerg llvm .WAIT \
135 1.187 joerg llvm-lib/libLLVMDemangle llvm-lib/libLLVMSupport llvm-lib/libLLVMTableGen .WAIT \
136 1.201 joerg llvm-tblgen
137 1.201 joerg .endif
138 1.201 joerg .if ${MKLLVM} != "no"
139 1.201 joerg SUBDIR+= \
140 1.201 joerg llvm-clang-tblgen
141 1.194 joerg .endif
142 1.194 joerg .if ${MKLLVM} != "no" && !defined(EXTERNAL_TOOLCHAIN)
143 1.194 joerg SUBDIR+= \
144 1.194 joerg .WAIT llvm-include .WAIT \
145 1.200 joerg llvm-lib .WAIT \
146 1.200 joerg llvm-clang
147 1.142 joerg .endif
148 1.142 joerg
149 1.121 dyoung .if ${MKMAN} != "no" || ${MKDOC} != "no" || ${MKHTML} != "no"
150 1.174 mrg . if ${MKGROFF} != "no"
151 1.39 tv SUBDIR+= groff
152 1.174 mrg . endif
153 1.128 joerg SUBDIR+= mandoc
154 1.39 tv .endif
155 1.22 tv
156 1.166 pooka .if ${TOOLS_BUILDRUMP} == "no"
157 1.166 pooka
158 1.22 tv .if ${MKMAINTAINERTOOLS:Uno} != "no"
159 1.103 lukem SUBDIR+= autoconf .WAIT gettext
160 1.72 matt .endif
161 1.72 matt
162 1.140 mrg .if ${USE_PIGZGZIP} != "no"
163 1.140 mrg SUBDIR+= pigz
164 1.140 mrg .endif
165 1.140 mrg
166 1.171 skrll .if ${MACHINE} == "hppa"
167 1.171 skrll SUBDIR+= hppa-mkboot
168 1.83 skrll .endif
169 1.83 skrll
170 1.86 jmc .if ${MACHINE} == "ibmnws"
171 1.72 matt SUBDIR+= ibmnws-ncdcs
172 1.79 matt .endif
173 1.79 matt
174 1.86 jmc .if ${MACHINE} == "macppc"
175 1.79 matt SUBDIR+= macppc-fixcoff
176 1.222 tsutsui SUBDIR+= macppc_installboot
177 1.226 tsutsui SUBDIR+= macppc_mkboothfs
178 1.48 kleink .endif
179 1.48 kleink
180 1.116 garbled .if (${MACHINE} == "prep" || ${MACHINE} == "rs6000" || ${MACHINE} == "bebox")
181 1.115 garbled SUBDIR+= powerpc-mkbootimage
182 1.22 tv .endif
183 1.37 gmcgarry
184 1.198 christos .if ${MACHINE_CPU} == "arm"
185 1.197 christos SUBDIR+= arm-elf2aout
186 1.197 christos .endif
187 1.197 christos
188 1.198 christos .if ${MACHINE_CPU} == "m68k"
189 1.148 tsutsui SUBDIR+= m68k-elf2aout
190 1.148 tsutsui .endif
191 1.148 tsutsui
192 1.208 christos .if !empty(MACHINE_ARCH:Mmips*)
193 1.37 gmcgarry SUBDIR+= mips-elf2ecoff
194 1.76 sekiya .endif
195 1.76 sekiya
196 1.76 sekiya .if (${MACHINE} == "sgimips")
197 1.76 sekiya SUBDIR+= sgivol
198 1.51 bjh21 .endif
199 1.51 bjh21
200 1.82 abs .if ${MACHINE} == "acorn32"
201 1.82 abs SUBDIR+= sparkcrc
202 1.82 abs .endif
203 1.82 abs
204 1.125 abs .if (${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64")
205 1.51 bjh21 SUBDIR+= fgen
206 1.37 gmcgarry .endif
207 1.37 gmcgarry
208 1.85 jmc .if ${MACHINE} == "amiga"
209 1.85 jmc SUBDIR+= amiga-elf2bb
210 1.85 jmc SUBDIR+= amiga-txlt
211 1.85 jmc .endif
212 1.85 jmc
213 1.86 jmc .if ${MACHINE} == "hp300"
214 1.86 jmc SUBDIR+= hp300-mkboot
215 1.86 jmc .endif
216 1.86 jmc
217 1.227 kalvisd .if ${MACHINE} == "vax"
218 1.227 kalvisd SUBDIR+= libmopcopy vax-mopcopy
219 1.227 kalvisd .endif
220 1.227 kalvisd
221 1.167 matt .if ${MACHINE} == "evbarm" \
222 1.167 matt && ${MACHINE_CPU} == "arm" \
223 1.167 matt && ${TARGET_ENDIANNESS} == "1234"
224 1.158 jkunz SUBDIR+= elftosb
225 1.158 jkunz .endif
226 1.158 jkunz
227 1.143 phx .if ${MACHINE} == "evbarm" || ${MACHINE} == "evbmips" || \
228 1.206 uwe ${MACHINE} == "evbppc" || ${MACHINE} == "evbsh3" || \
229 1.212 skrll ${MACHINE} == "sandpoint" || \
230 1.212 skrll ${MACHINE_CPU} == "riscv"
231 1.220 gutterid SUBDIR+= mkubootimage
232 1.191 skrll SUBDIR+= libfdt .WAIT
233 1.191 skrll SUBDIR+= dtc
234 1.139 jmcneill .endif
235 1.139 jmcneill
236 1.209 rin .if ${MACHINE} == "mvme68k"
237 1.209 rin SUBDIR+= mvme68k-wrtvid
238 1.209 rin .endif
239 1.209 rin
240 1.221 tsutsui .if ${MACHINE} == "mac68k" || ${MACHINE} == "macppc"
241 1.221 tsutsui SUBDIR+= mkhybrid
242 1.221 tsutsui .endif
243 1.221 tsutsui
244 1.182 mrg .if ${MKX11} != "no"
245 1.181 matt SUBDIR+= makestrs
246 1.181 matt SUBDIR+= makekeys
247 1.180 joerg .endif
248 1.180 joerg
249 1.186 christos SUBDIR+= cvslatest
250 1.186 christos
251 1.215 rin .endif # TOOLS_BUILDRUMP == no
252 1.166 pooka
253 1.66 lukem check_MKTOOLS: .PHONY .NOTMAIN
254 1.19 jmc .if ${MKTOOLS:Uyes} == "no"
255 1.17 tv @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and'
256 1.17 tv @echo '*** updating your host toolchain. This should be used only as a'
257 1.17 tv @echo '*** temporary workaround for toolchain problems, as it will result'
258 1.23 wiz @echo '*** in version skew and build errors over time!'
259 1.18 jmc .endif
260 1.17 tv
261 1.66 lukem .if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # {
262 1.163 apb SUBDIR= # empty
263 1.67 lukem realall realdepend install: check_MKTOOLS
264 1.66 lukem .endif # }
265 1.1 tv
266 1.1 tv .include <bsd.subdir.mk>
267 1.159 joerg .include <bsd.buildinstall.mk>
268 1.11 tv .include <bsd.obj.mk>
269 1.16 tv
270 1.102 tron .if !defined(PREVIOUSTOOLDIR)
271 1.102 tron . if exists(PREVIOUSTOOLDIR)
272 1.66 lukem PREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR
273 1.102 tron . else
274 1.162 apb PREVIOUSTOOLDIR=
275 1.102 tron . endif
276 1.66 lukem .endif
277 1.66 lukem
278 1.66 lukem CLEANFILES+= PREVIOUSTOOLDIR
279 1.66 lukem
280 1.101 tron realall realdepend: .MAKE
281 1.107 apb .if !empty(PREVIOUSTOOLDIR) && "${PREVIOUSTOOLDIR}" != "${TOOLDIR}"
282 1.66 lukem @echo "*** WARNING: TOOLDIR has moved?"
283 1.66 lukem @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'"
284 1.66 lukem @echo "*** != TOOLDIR '${TOOLDIR}'"
285 1.66 lukem @echo "*** Cleaning mis-matched tools"
286 1.66 lukem rm -f PREVIOUSTOOLDIR
287 1.106 freza (cd ${.CURDIR} && ${MAKE} PREVIOUSTOOLDIR=${TOOLDIR} cleandir)
288 1.66 lukem .endif
289 1.102 tron echo ${TOOLDIR} >PREVIOUSTOOLDIR
290 1.66 lukem
291 1.69 tron cleandir:
292 1.69 tron rm -f ${CLEANFILES}
293