1*6c179181Smrg# $NetBSD: Makefile,v 1.70 2003/07/25 16:26:51 mrg Exp $ 2c5d597ceStv 314e39089Stv.include <bsd.own.mk> 414e39089Stv 5771b8c84Sthorpej.if ${TOOLCHAIN_MISSING} != "yes" 6*6c179181Smrg. if ${USE_TOOLS_TOOLCHAIN} != "yes" 7*6c179181SmrgTOOLCHAIN_BITS= binutils .WAIT gcc 8*6c179181Smrg. else 9*6c179181SmrgTOOLCHAIN_BITS= toolchain 10*6c179181Smrg. endif 11*6c179181SmrgTOOLCHAIN_BITS+= .WAIT dbsym mdsetimage 123b08abd2Sthorpej# XXX Eventually, we want to be able to build dbsym and mdsetimage 133b08abd2Sthorpej# XXX if EXTERNAL_TOOLCHAIN is set. 14a328e341Stv.endif 15a328e341Stv 16b5cd2489Stv# Dependencies in SUBDIR below ordered to maximize parallel ability. 173e591f18Slukem.if !defined(NOSUBDIR) # { 183e591f18Slukem 1954579742StvSUBDIR= host-mkdep .WAIT compat .WAIT \ 2041f14779Schris binstall .WAIT mktemp .WAIT \ 21ae754e0cSthorpej cap_mkdb crunchgen ctags gencat hexdump lint lint2 lorder \ 229fbd8888Stv m4 makewhatis mkdep mtree rpcgen tsort uudecode \ 239fbd8888Stv texinfo .WAIT \ 24b5cd2489Stv yacc .WAIT \ 25b5cd2489Stv lex .WAIT \ 269fbd8888Stv ${TOOLCHAIN_BITS} \ 27fc80f6c5Slukem asn1_compile cat cksum compile_et config db file installboot \ 28e376aa83Stshiozak lint1 makefs menuc mklocale mkcsmapper mkesdb msgc pax \ 29fe7ef256Slukem pwd_mkdb stat sunlabel zic 3087d14ee4Stv 3119ab4b25Stv.if ${MKMAN} != "no" 3219ab4b25StvSUBDIR+= groff 3319ab4b25Stv.endif 3419ab4b25Stv 3587d14ee4Stv.if ${MKMAINTAINERTOOLS:Uno} != "no" 36d3501a40StvSUBDIR+= autoconf gettext 3787d14ee4Stv.endif 38fc820c72Smrg 39c30b41caSkleink.if ${MACHINE} == prep 40c30b41caSkleinkSUBDIR+= prep-mkbootimage 41c30b41caSkleink.endif 42c30b41caSkleink 430d9e66cdSgmcgarry.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb") 440d9e66cdSgmcgarrySUBDIR+= mips-elf2ecoff 450d9e66cdSgmcgarry.endif 460d9e66cdSgmcgarry 47bf9ec67eSbjh21.if (${MACHINE} == "sparc" || ${MACHINE} == "sparc64") 48bf9ec67eSbjh21SUBDIR+= fgen 49bf9ec67eSbjh21.endif 50bf9ec67eSbjh21 513e591f18Slukem.endif # ! NOSUBDIR # } 52c5d597ceStv 533fd7f6dbSlukemcheck_MKTOOLS: .PHONY .NOTMAIN 545a0f427eSjmc.if ${MKTOOLS:Uyes} == "no" 55259ff4e7Stv @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 56259ff4e7Stv @echo '*** updating your host toolchain. This should be used only as a' 57259ff4e7Stv @echo '*** temporary workaround for toolchain problems, as it will result' 58ecc52c58Swiz @echo '*** in version skew and build errors over time!' 590d11dd01Sjmc.endif 60259ff4e7Stv 613fd7f6dbSlukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 62355436d5Slukemrealall realdepend install: check_MKTOOLS 633fd7f6dbSlukem 64259ff4e7Stv.for dir in ${SUBDIR:N.WAIT} 65259ff4e7Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}: 66259ff4e7Stv @true 67259ff4e7Stv.endfor 683fd7f6dbSlukem.endif # } 69259ff4e7Stv 70c5d597ceStv.include <bsd.subdir.mk> 71c9a6a2c3Stv.include <bsd.obj.mk> 7261be23b4Stv 733fd7f6dbSlukem.if exists(PREVIOUSTOOLDIR) 743fd7f6dbSlukemPREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 753fd7f6dbSlukem.else 763fd7f6dbSlukemPREVIOUSTOOLDIR= 773fd7f6dbSlukem.endif 783fd7f6dbSlukem 793fd7f6dbSlukemCLEANFILES+= PREVIOUSTOOLDIR 803fd7f6dbSlukem 81355436d5Slukemrealall realdepend: 823fd7f6dbSlukem.if (${PREVIOUSTOOLDIR} != ${TOOLDIR}) 833fd7f6dbSlukem @echo "*** WARNING: TOOLDIR has moved?" 843fd7f6dbSlukem @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 853fd7f6dbSlukem @echo "*** != TOOLDIR '${TOOLDIR}'" 863fd7f6dbSlukem @echo "*** Cleaning mis-matched tools" 873fd7f6dbSlukem rm -f PREVIOUSTOOLDIR 883fd7f6dbSlukem ${MAKE} cleandir 893fd7f6dbSlukem.endif 903fd7f6dbSlukem echo ${TOOLDIR} > PREVIOUSTOOLDIR 913fd7f6dbSlukem 92a45d07b1Stv# For each .WAIT point, make sure the immediately preceding target is 93a45d07b1Stv# installed before building anything after that point. 94ee92d5a6Spk# 95ee92d5a6Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk> 96ee92d5a6Spk# to achieve this. These targets look like: 97ee92d5a6Spk# subdir-all: all-dir1 [.WAIT] all-dir2 etc.. 98ee92d5a6Spk# subdir-install: install-dir1 [.WAIT] install-dir2 etc.. 99ee92d5a6Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at 100ee92d5a6Spk# places corresponding to the .WAITs in our $SUBDIR variable. 101ee92d5a6Spk# 102ee92d5a6Spk# Also, since we're now mixing `install' with `all' and `depend' targets 103ee92d5a6Spk# an order relationship between those in each individual subdirectory 104ee92d5a6Spk# must be established. 105ee92d5a6Spk# 106a45d07b1Stv_deps:= 107a45d07b1Stv_prev:= 108a45d07b1Stv 109b5cd2489Stv.for d in ${SUBDIR} 110b5cd2489Stv_this:= ${d} 111a45d07b1Stv 112b5cd2489Stv.if ${_this} == ".WAIT" 113ee92d5a6Spk 114ee92d5a6Spk# setup dependency to apply to all/depend targets in the next group 115a45d07b1Stv_deps:= ${_deps} ${_prev:S/^/install-/} 116a45d07b1Stv 117a45d07b1Stv# if we're building *only* individual targets (i.e. "dependall-yacc"), 118a45d07b1Stv# make sure prerequisite tools build before installing 119a45d07b1Stv.if !make(all) && !make(dependall) 120a45d07b1Stvinstall-${_prev}: dependall-${_prev} 121a45d07b1Stv.endif 122ee92d5a6Spk 123b5cd2489Stv.else 124ee92d5a6Spk 125ee92d5a6Spk# order depend/all/install targets for ${d} subdir. Note the additional 126ee92d5a6Spk# .WAIT to achieve "closure" of the predecessor/successor relationships. 127ee92d5a6Spk.ORDER: depend-${d} all-${d} dependall-${d} .WAIT install-${d} 128a45d07b1Stv 129a45d07b1Stv# make all/depend-${d} dependent on list of install targets 130a45d07b1Stvdepend-${d} all-${d} dependall-${d}: ${_deps} 131ee92d5a6Spk 132b5cd2489Stv.endif 133a45d07b1Stv 134a45d07b1Stv# stash current name in case the next entry is .WAIT 135a45d07b1Stv_prev:= ${d} 136b5cd2489Stv.endfor 13778da845dStron 13878da845dStroncleandir: 13978da845dStron rm -f ${CLEANFILES} 140