1*9a999c37Sjmc# $NetBSD: Makefile,v 1.84 2004/11/25 08:09:15 jmc Exp $ 2c5d597ceStv 314e39089Stv.include <bsd.own.mk> 414e39089Stv 5986979b8Slukem.if ${TOOLCHAIN_MISSING} == "no" 6949cd54dSmrgTOOLCHAIN_BITS= binutils .WAIT 76c179181Smrg. if ${USE_TOOLS_TOOLCHAIN} != "yes" 8949cd54dSmrgTOOLCHAIN_BITS+= gcc 998f3b47aScl. if ${MKCROSSGDB:Uno} != "no" 1098f3b47aSclTOOLCHAIN_BITS+= gdb 1198f3b47aScl. endif 126c179181Smrg. else 13949cd54dSmrgTOOLCHAIN_BITS+= toolchain 146c179181Smrg. endif 156c179181SmrgTOOLCHAIN_BITS+= .WAIT dbsym mdsetimage 163b08abd2Sthorpej# XXX Eventually, we want to be able to build dbsym and mdsetimage 173b08abd2Sthorpej# XXX if EXTERNAL_TOOLCHAIN is set. 18a328e341Stv.endif 19a328e341Stv 20b5cd2489Stv# Dependencies in SUBDIR below ordered to maximize parallel ability. 213e591f18Slukem.if !defined(NOSUBDIR) # { 223e591f18Slukem 2354579742StvSUBDIR= host-mkdep .WAIT compat .WAIT \ 2441f14779Schris binstall .WAIT mktemp .WAIT \ 25ae754e0cSthorpej cap_mkdb crunchgen ctags gencat hexdump lint lint2 lorder \ 269fbd8888Stv m4 makewhatis mkdep mtree rpcgen tsort uudecode \ 279fbd8888Stv texinfo .WAIT \ 28b5cd2489Stv yacc .WAIT \ 29b5cd2489Stv lex .WAIT \ 309fbd8888Stv ${TOOLCHAIN_BITS} \ 31fc80f6c5Slukem asn1_compile cat cksum compile_et config db file installboot \ 32af258d4eSlukem lint1 makefs menuc mkcsmapper mkesdb mklocale mknod msgc pax \ 33fe7ef256Slukem pwd_mkdb stat sunlabel zic 3487d14ee4Stv 3519ab4b25Stv.if ${MKMAN} != "no" 3619ab4b25StvSUBDIR+= groff 3719ab4b25Stv.endif 3819ab4b25Stv 3987d14ee4Stv.if ${MKMAINTAINERTOOLS:Uno} != "no" 40d3501a40StvSUBDIR+= autoconf gettext 4187d14ee4Stv.endif 42fc820c72Smrg 43bc26aea7Sskrll.if ${MACHINE} == hp700 44bc26aea7SskrllSUBDIR+= hp700-mkboot 45bc26aea7Sskrll.endif 46bc26aea7Sskrll 4710c0014bSmatt.if ${MACHINE} == ibmnws 4810c0014bSmattSUBDIR+= ibmnws-ncdcs 4910c0014bSmatt.endif 5010c0014bSmatt 51d672abfaSmatt.if ${MACHINE} == macppc 52ca1e0d59SmattSUBDIR+= macppc-fixcoff 53ca1e0d59Smatt.endif 54ca1e0d59Smatt 55c30b41caSkleink.if ${MACHINE} == prep 56c30b41caSkleinkSUBDIR+= prep-mkbootimage 57c30b41caSkleink.endif 58c30b41caSkleink 590d9e66cdSgmcgarry.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb") 600d9e66cdSgmcgarrySUBDIR+= mips-elf2ecoff 610d9e66cdSgmcgarry.endif 620d9e66cdSgmcgarry 630ac35082Ssekiya.if (${MACHINE} == "sgimips") 640ac35082SsekiyaSUBDIR+= sgivol 650ac35082Ssekiya.endif 660ac35082Ssekiya 67ef4ecddaSabs.if ${MACHINE} == "acorn32" 68ef4ecddaSabsSUBDIR+= sparkcrc 69ef4ecddaSabs.endif 70ef4ecddaSabs 71bf9ec67eSbjh21.if (${MACHINE} == "sparc" || ${MACHINE} == "sparc64") 72bf9ec67eSbjh21SUBDIR+= fgen 73bf9ec67eSbjh21.endif 74bf9ec67eSbjh21 75*9a999c37Sjmc.if ${MACHINE} == "bebox" 76*9a999c37SjmcSUBDIR+= bebox-elf2pef 77*9a999c37SjmcSUBDIR+= bebox-mkbootimage 78*9a999c37Sjmc.endif 79*9a999c37Sjmc 803e591f18Slukem.endif # ! NOSUBDIR # } 81c5d597ceStv 823fd7f6dbSlukemcheck_MKTOOLS: .PHONY .NOTMAIN 835a0f427eSjmc.if ${MKTOOLS:Uyes} == "no" 84259ff4e7Stv @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 85259ff4e7Stv @echo '*** updating your host toolchain. This should be used only as a' 86259ff4e7Stv @echo '*** temporary workaround for toolchain problems, as it will result' 87ecc52c58Swiz @echo '*** in version skew and build errors over time!' 880d11dd01Sjmc.endif 89259ff4e7Stv 903fd7f6dbSlukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 91355436d5Slukemrealall realdepend install: check_MKTOOLS 923fd7f6dbSlukem 93259ff4e7Stv.for dir in ${SUBDIR:N.WAIT} 94259ff4e7Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}: 95259ff4e7Stv @true 96259ff4e7Stv.endfor 973fd7f6dbSlukem.endif # } 98259ff4e7Stv 99c5d597ceStv.include <bsd.subdir.mk> 100c9a6a2c3Stv.include <bsd.obj.mk> 10161be23b4Stv 1023fd7f6dbSlukem.if exists(PREVIOUSTOOLDIR) 1033fd7f6dbSlukemPREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 1043fd7f6dbSlukem.else 1053fd7f6dbSlukemPREVIOUSTOOLDIR= 1063fd7f6dbSlukem.endif 1073fd7f6dbSlukem 1083fd7f6dbSlukemCLEANFILES+= PREVIOUSTOOLDIR 1093fd7f6dbSlukem 110355436d5Slukemrealall realdepend: 1113fd7f6dbSlukem.if (${PREVIOUSTOOLDIR} != ${TOOLDIR}) 1123fd7f6dbSlukem @echo "*** WARNING: TOOLDIR has moved?" 1133fd7f6dbSlukem @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 1143fd7f6dbSlukem @echo "*** != TOOLDIR '${TOOLDIR}'" 1153fd7f6dbSlukem @echo "*** Cleaning mis-matched tools" 1163fd7f6dbSlukem rm -f PREVIOUSTOOLDIR 117219ba062Slukem (cd ${.CURDIR} && ${MAKE} cleandir) 1183fd7f6dbSlukem.endif 1193fd7f6dbSlukem echo ${TOOLDIR} > PREVIOUSTOOLDIR 1203fd7f6dbSlukem 121a45d07b1Stv# For each .WAIT point, make sure the immediately preceding target is 122a45d07b1Stv# installed before building anything after that point. 123ee92d5a6Spk# 124ee92d5a6Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk> 125ee92d5a6Spk# to achieve this. These targets look like: 126ee92d5a6Spk# subdir-all: all-dir1 [.WAIT] all-dir2 etc.. 127ee92d5a6Spk# subdir-install: install-dir1 [.WAIT] install-dir2 etc.. 128ee92d5a6Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at 129ee92d5a6Spk# places corresponding to the .WAITs in our $SUBDIR variable. 130ee92d5a6Spk# 131ee92d5a6Spk# Also, since we're now mixing `install' with `all' and `depend' targets 132ee92d5a6Spk# an order relationship between those in each individual subdirectory 133ee92d5a6Spk# must be established. 134ee92d5a6Spk# 135a45d07b1Stv_deps:= 136a45d07b1Stv_prev:= 137a45d07b1Stv 138b5cd2489Stv.for d in ${SUBDIR} 139b5cd2489Stv_this:= ${d} 140a45d07b1Stv 141b5cd2489Stv.if ${_this} == ".WAIT" 142ee92d5a6Spk 143ee92d5a6Spk# setup dependency to apply to all/depend targets in the next group 144a45d07b1Stv_deps:= ${_deps} ${_prev:S/^/install-/} 145a45d07b1Stv 146a45d07b1Stv# if we're building *only* individual targets (i.e. "dependall-yacc"), 147a45d07b1Stv# make sure prerequisite tools build before installing 148a45d07b1Stv.if !make(all) && !make(dependall) 149a45d07b1Stvinstall-${_prev}: dependall-${_prev} 150a45d07b1Stv.endif 151ee92d5a6Spk 152b5cd2489Stv.else 153ee92d5a6Spk 154ee92d5a6Spk# order depend/all/install targets for ${d} subdir. Note the additional 155ee92d5a6Spk# .WAIT to achieve "closure" of the predecessor/successor relationships. 156ee92d5a6Spk.ORDER: depend-${d} all-${d} dependall-${d} .WAIT install-${d} 157a45d07b1Stv 158a45d07b1Stv# make all/depend-${d} dependent on list of install targets 159a45d07b1Stvdepend-${d} all-${d} dependall-${d}: ${_deps} 160ee92d5a6Spk 161b5cd2489Stv.endif 162a45d07b1Stv 163a45d07b1Stv# stash current name in case the next entry is .WAIT 164a45d07b1Stv_prev:= ${d} 165b5cd2489Stv.endfor 16678da845dStron 16778da845dStroncleandir: 16878da845dStron rm -f ${CLEANFILES} 169