1*2ae0c612Sjmc# $NetBSD: Makefile,v 1.92 2005/10/04 04:27:32 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 \ 2562294d00Sthorpej cap_mkdb crunchgen ctags genassym gencat hexdump lint lint2 \ 2662294d00Sthorpej lorder m4 makewhatis mkdep mtree rpcgen tsort uudecode \ 279fbd8888Stv texinfo .WAIT \ 28b5cd2489Stv yacc .WAIT \ 29b5cd2489Stv lex .WAIT \ 309fbd8888Stv ${TOOLCHAIN_BITS} \ 31a37289dbSdyoung asn1_compile cat cksum compile_et config db \ 327f67833eSdyoung file lint1 \ 33a37289dbSdyoung makefs menuc mkcsmapper mkesdb mklocale mknod msgc \ 34a37289dbSdyoung pax .WAIT \ 35*2ae0c612Sjmc disklabel .WAIT \ 36*2ae0c612Sjmc fdisk .WAIT \ 37*2ae0c612Sjmc installboot .WAIT \ 38fe7ef256Slukem pwd_mkdb stat sunlabel zic 3987d14ee4Stv 4019ab4b25Stv.if ${MKMAN} != "no" 4119ab4b25StvSUBDIR+= groff 4219ab4b25Stv.endif 4319ab4b25Stv 4487d14ee4Stv.if ${MKMAINTAINERTOOLS:Uno} != "no" 45d3501a40StvSUBDIR+= autoconf gettext 4687d14ee4Stv.endif 47fc820c72Smrg 489bfe9b99Sjmc.if ${MACHINE} == "hp700" 49bc26aea7SskrllSUBDIR+= hp700-mkboot 50bc26aea7Sskrll.endif 51bc26aea7Sskrll 529bfe9b99Sjmc.if ${MACHINE} == "ibmnws" 5310c0014bSmattSUBDIR+= ibmnws-ncdcs 5410c0014bSmatt.endif 5510c0014bSmatt 569bfe9b99Sjmc.if ${MACHINE} == "macppc" 57ca1e0d59SmattSUBDIR+= macppc-fixcoff 58ca1e0d59Smatt.endif 59ca1e0d59Smatt 609bfe9b99Sjmc.if ${MACHINE} == "prep" 61c30b41caSkleinkSUBDIR+= prep-mkbootimage 62c30b41caSkleink.endif 63c30b41caSkleink 640d9e66cdSgmcgarry.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb") 650d9e66cdSgmcgarrySUBDIR+= mips-elf2ecoff 660d9e66cdSgmcgarry.endif 670d9e66cdSgmcgarry 680ac35082Ssekiya.if (${MACHINE} == "sgimips") 690ac35082SsekiyaSUBDIR+= sgivol 700ac35082Ssekiya.endif 710ac35082Ssekiya 72ef4ecddaSabs.if ${MACHINE} == "acorn32" 73ef4ecddaSabsSUBDIR+= sparkcrc 74ef4ecddaSabs.endif 75ef4ecddaSabs 76bf9ec67eSbjh21.if (${MACHINE} == "sparc" || ${MACHINE} == "sparc64") 77bf9ec67eSbjh21SUBDIR+= fgen 78bf9ec67eSbjh21.endif 79bf9ec67eSbjh21 809a999c37Sjmc.if ${MACHINE} == "bebox" 819a999c37SjmcSUBDIR+= bebox-elf2pef 829a999c37SjmcSUBDIR+= bebox-mkbootimage 839a999c37Sjmc.endif 849a999c37Sjmc 85c7464d49Sjmc.if ${MACHINE} == "amiga" 86c7464d49SjmcSUBDIR+= amiga-elf2bb 87c7464d49SjmcSUBDIR+= amiga-txlt 88c7464d49Sjmc.endif 89c7464d49Sjmc 909bfe9b99Sjmc.if ${MACHINE} == "hp300" 919bfe9b99SjmcSUBDIR+= hp300-mkboot 929bfe9b99Sjmc.endif 939bfe9b99Sjmc 943e591f18Slukem.endif # ! NOSUBDIR # } 95c5d597ceStv 963fd7f6dbSlukemcheck_MKTOOLS: .PHONY .NOTMAIN 975a0f427eSjmc.if ${MKTOOLS:Uyes} == "no" 98259ff4e7Stv @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 99259ff4e7Stv @echo '*** updating your host toolchain. This should be used only as a' 100259ff4e7Stv @echo '*** temporary workaround for toolchain problems, as it will result' 101ecc52c58Swiz @echo '*** in version skew and build errors over time!' 1020d11dd01Sjmc.endif 103259ff4e7Stv 1043fd7f6dbSlukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 105355436d5Slukemrealall realdepend install: check_MKTOOLS 1063fd7f6dbSlukem 107259ff4e7Stv.for dir in ${SUBDIR:N.WAIT} 108259ff4e7Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}: 109259ff4e7Stv @true 110259ff4e7Stv.endfor 1113fd7f6dbSlukem.endif # } 112259ff4e7Stv 113c5d597ceStv.include <bsd.subdir.mk> 114c9a6a2c3Stv.include <bsd.obj.mk> 11561be23b4Stv 1163fd7f6dbSlukem.if exists(PREVIOUSTOOLDIR) 1173fd7f6dbSlukemPREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 1183fd7f6dbSlukem.else 1193fd7f6dbSlukemPREVIOUSTOOLDIR= 1203fd7f6dbSlukem.endif 1213fd7f6dbSlukem 1223fd7f6dbSlukemCLEANFILES+= PREVIOUSTOOLDIR 1233fd7f6dbSlukem 124355436d5Slukemrealall realdepend: 12596365414Smycroft.if "${PREVIOUSTOOLDIR}" != "${TOOLDIR}" 1263fd7f6dbSlukem @echo "*** WARNING: TOOLDIR has moved?" 1273fd7f6dbSlukem @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 1283fd7f6dbSlukem @echo "*** != TOOLDIR '${TOOLDIR}'" 1293fd7f6dbSlukem @echo "*** Cleaning mis-matched tools" 1303fd7f6dbSlukem rm -f PREVIOUSTOOLDIR 131219ba062Slukem (cd ${.CURDIR} && ${MAKE} cleandir) 1323fd7f6dbSlukem.endif 1333fd7f6dbSlukem echo ${TOOLDIR} > PREVIOUSTOOLDIR 1343fd7f6dbSlukem 135a45d07b1Stv# For each .WAIT point, make sure the immediately preceding target is 136a45d07b1Stv# installed before building anything after that point. 137ee92d5a6Spk# 138ee92d5a6Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk> 139ee92d5a6Spk# to achieve this. These targets look like: 140ee92d5a6Spk# subdir-all: all-dir1 [.WAIT] all-dir2 etc.. 141ee92d5a6Spk# subdir-install: install-dir1 [.WAIT] install-dir2 etc.. 142ee92d5a6Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at 143ee92d5a6Spk# places corresponding to the .WAITs in our $SUBDIR variable. 144ee92d5a6Spk# 145ee92d5a6Spk# Also, since we're now mixing `install' with `all' and `depend' targets 146ee92d5a6Spk# an order relationship between those in each individual subdirectory 147ee92d5a6Spk# must be established. 148ee92d5a6Spk# 149a45d07b1Stv_deps:= 150a45d07b1Stv_prev:= 151a45d07b1Stv 152b5cd2489Stv.for d in ${SUBDIR} 153b5cd2489Stv_this:= ${d} 154a45d07b1Stv 155b5cd2489Stv.if ${_this} == ".WAIT" 156ee92d5a6Spk 157ee92d5a6Spk# setup dependency to apply to all/depend targets in the next group 158a45d07b1Stv_deps:= ${_deps} ${_prev:S/^/install-/} 159a45d07b1Stv 160a45d07b1Stv# if we're building *only* individual targets (i.e. "dependall-yacc"), 161a45d07b1Stv# make sure prerequisite tools build before installing 162a45d07b1Stv.if !make(all) && !make(dependall) 163a45d07b1Stvinstall-${_prev}: dependall-${_prev} 164a45d07b1Stv.endif 165ee92d5a6Spk 166b5cd2489Stv.else 167ee92d5a6Spk 168ee92d5a6Spk# order depend/all/install targets for ${d} subdir. Note the additional 169ee92d5a6Spk# .WAIT to achieve "closure" of the predecessor/successor relationships. 170ee92d5a6Spk.ORDER: depend-${d} all-${d} dependall-${d} .WAIT install-${d} 171a45d07b1Stv 172a45d07b1Stv# make all/depend-${d} dependent on list of install targets 173a45d07b1Stvdepend-${d} all-${d} dependall-${d}: ${_deps} 174ee92d5a6Spk 175b5cd2489Stv.endif 176a45d07b1Stv 177a45d07b1Stv# stash current name in case the next entry is .WAIT 178a45d07b1Stv_prev:= ${d} 179b5cd2489Stv.endfor 18078da845dStron 18178da845dStroncleandir: 18278da845dStron rm -f ${CLEANFILES} 183