1 1.232 christos # $NetBSD: Makefile,v 1.232 2025/05/27 14:05:19 christos 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.231 rillig SUBDIR= host-mkdep compat binstall .WAIT 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.230 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.232 christos SUBDIR+= libmopcopy .WAIT 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