1*d9ac053aSgdamore# $NetBSD: Makefile,v 1.98 2006/06/18 05:16:41 gdamore Exp $ 2c5d597ceStv 314e39089Stv.include <bsd.own.mk> 414e39089Stv 5843978edSmrg.if ${HAVE_GCC} == "4" 667840cd9SjmcTOOLCHAIN_BITS= gmake .WAIT 767840cd9Sjmc.endif 8986979b8Slukem.if ${TOOLCHAIN_MISSING} == "no" 967840cd9SjmcTOOLCHAIN_BITS+= binutils .WAIT 10949cd54dSmrgTOOLCHAIN_BITS+= gcc 1198f3b47aScl. if ${MKCROSSGDB:Uno} != "no" 1298f3b47aSclTOOLCHAIN_BITS+= gdb 1398f3b47aScl. endif 146c179181SmrgTOOLCHAIN_BITS+= .WAIT dbsym mdsetimage 153b08abd2Sthorpej# XXX Eventually, we want to be able to build dbsym and mdsetimage 163b08abd2Sthorpej# XXX if EXTERNAL_TOOLCHAIN is set. 17a328e341Stv.endif 18a328e341Stv 19b5cd2489Stv# Dependencies in SUBDIR below ordered to maximize parallel ability. 203e591f18Slukem.if !defined(NOSUBDIR) # { 213e591f18Slukem 2254579742StvSUBDIR= host-mkdep .WAIT compat .WAIT \ 2341f14779Schris binstall .WAIT mktemp .WAIT \ 2462294d00Sthorpej cap_mkdb crunchgen ctags genassym gencat hexdump lint lint2 \ 25*d9ac053aSgdamore lorder m4 makewhatis mkdep mtree rpcgen sed tsort uudecode \ 269fbd8888Stv texinfo .WAIT \ 27b5cd2489Stv yacc .WAIT \ 28b5cd2489Stv lex .WAIT \ 299fbd8888Stv ${TOOLCHAIN_BITS} \ 30a37289dbSdyoung asn1_compile cat cksum compile_et config db \ 317f67833eSdyoung file lint1 \ 32a37289dbSdyoung makefs menuc mkcsmapper mkesdb mklocale mknod msgc \ 33a37289dbSdyoung pax .WAIT \ 342ae0c612Sjmc disklabel .WAIT \ 352ae0c612Sjmc fdisk .WAIT \ 362ae0c612Sjmc installboot .WAIT \ 37fe7ef256Slukem pwd_mkdb stat sunlabel zic 3887d14ee4Stv 3919ab4b25Stv.if ${MKMAN} != "no" 4019ab4b25StvSUBDIR+= groff 4119ab4b25Stv.endif 4219ab4b25Stv 4387d14ee4Stv.if ${MKMAINTAINERTOOLS:Uno} != "no" 44d3501a40StvSUBDIR+= autoconf gettext 4587d14ee4Stv.endif 46fc820c72Smrg 479bfe9b99Sjmc.if ${MACHINE} == "hp700" 48bc26aea7SskrllSUBDIR+= hp700-mkboot 49bc26aea7Sskrll.endif 50bc26aea7Sskrll 519bfe9b99Sjmc.if ${MACHINE} == "ibmnws" 5210c0014bSmattSUBDIR+= ibmnws-ncdcs 5310c0014bSmatt.endif 5410c0014bSmatt 559bfe9b99Sjmc.if ${MACHINE} == "macppc" 56ca1e0d59SmattSUBDIR+= macppc-fixcoff 57ca1e0d59Smatt.endif 58ca1e0d59Smatt 599bfe9b99Sjmc.if ${MACHINE} == "prep" 60c30b41caSkleinkSUBDIR+= prep-mkbootimage 61c30b41caSkleink.endif 62c30b41caSkleink 630d9e66cdSgmcgarry.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb") 640d9e66cdSgmcgarrySUBDIR+= mips-elf2ecoff 650d9e66cdSgmcgarry.endif 660d9e66cdSgmcgarry 670ac35082Ssekiya.if (${MACHINE} == "sgimips") 680ac35082SsekiyaSUBDIR+= sgivol 690ac35082Ssekiya.endif 700ac35082Ssekiya 71ef4ecddaSabs.if ${MACHINE} == "acorn32" 72ef4ecddaSabsSUBDIR+= sparkcrc 73ef4ecddaSabs.endif 74ef4ecddaSabs 75bf9ec67eSbjh21.if (${MACHINE} == "sparc" || ${MACHINE} == "sparc64") 76bf9ec67eSbjh21SUBDIR+= fgen 77bf9ec67eSbjh21.endif 78bf9ec67eSbjh21 799a999c37Sjmc.if ${MACHINE} == "bebox" 809a999c37SjmcSUBDIR+= bebox-elf2pef 819a999c37SjmcSUBDIR+= bebox-mkbootimage 829a999c37Sjmc.endif 839a999c37Sjmc 84c7464d49Sjmc.if ${MACHINE} == "amiga" 85c7464d49SjmcSUBDIR+= amiga-elf2bb 86c7464d49SjmcSUBDIR+= amiga-txlt 87c7464d49Sjmc.endif 88c7464d49Sjmc 899bfe9b99Sjmc.if ${MACHINE} == "hp300" 909bfe9b99SjmcSUBDIR+= hp300-mkboot 919bfe9b99Sjmc.endif 929bfe9b99Sjmc 933e591f18Slukem.endif # ! NOSUBDIR # } 94c5d597ceStv 953fd7f6dbSlukemcheck_MKTOOLS: .PHONY .NOTMAIN 965a0f427eSjmc.if ${MKTOOLS:Uyes} == "no" 97259ff4e7Stv @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 98259ff4e7Stv @echo '*** updating your host toolchain. This should be used only as a' 99259ff4e7Stv @echo '*** temporary workaround for toolchain problems, as it will result' 100ecc52c58Swiz @echo '*** in version skew and build errors over time!' 1010d11dd01Sjmc.endif 102259ff4e7Stv 1033fd7f6dbSlukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 104355436d5Slukemrealall realdepend install: check_MKTOOLS 1053fd7f6dbSlukem 106259ff4e7Stv.for dir in ${SUBDIR:N.WAIT} 107259ff4e7Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}: 108259ff4e7Stv @true 109259ff4e7Stv.endfor 1103fd7f6dbSlukem.endif # } 111259ff4e7Stv 112c5d597ceStv.include <bsd.subdir.mk> 113c9a6a2c3Stv.include <bsd.obj.mk> 11461be23b4Stv 1153fd7f6dbSlukem.if exists(PREVIOUSTOOLDIR) 1163fd7f6dbSlukemPREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 1173fd7f6dbSlukem.else 1183fd7f6dbSlukemPREVIOUSTOOLDIR= 1193fd7f6dbSlukem.endif 1203fd7f6dbSlukem 1213fd7f6dbSlukemCLEANFILES+= PREVIOUSTOOLDIR 1223fd7f6dbSlukem 123e94b2828Sdslrealall realdepend: .MAKE 12496365414Smycroft.if "${PREVIOUSTOOLDIR}" != "${TOOLDIR}" 1253fd7f6dbSlukem @echo "*** WARNING: TOOLDIR has moved?" 1263fd7f6dbSlukem @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 1273fd7f6dbSlukem @echo "*** != TOOLDIR '${TOOLDIR}'" 1283fd7f6dbSlukem @echo "*** Cleaning mis-matched tools" 1293fd7f6dbSlukem rm -f PREVIOUSTOOLDIR 130219ba062Slukem (cd ${.CURDIR} && ${MAKE} cleandir) 1313fd7f6dbSlukem.endif 1323fd7f6dbSlukem echo ${TOOLDIR} > PREVIOUSTOOLDIR 1333fd7f6dbSlukem 134a45d07b1Stv# For each .WAIT point, make sure the immediately preceding target is 135a45d07b1Stv# installed before building anything after that point. 136ee92d5a6Spk# 137ee92d5a6Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk> 138ee92d5a6Spk# to achieve this. These targets look like: 139ee92d5a6Spk# subdir-all: all-dir1 [.WAIT] all-dir2 etc.. 140ee92d5a6Spk# subdir-install: install-dir1 [.WAIT] install-dir2 etc.. 141ee92d5a6Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at 142ee92d5a6Spk# places corresponding to the .WAITs in our $SUBDIR variable. 143ee92d5a6Spk# 144ee92d5a6Spk# Also, since we're now mixing `install' with `all' and `depend' targets 145ee92d5a6Spk# an order relationship between those in each individual subdirectory 146ee92d5a6Spk# must be established. 147ee92d5a6Spk# 148a45d07b1Stv_deps:= 149a45d07b1Stv_prev:= 150a45d07b1Stv 151b5cd2489Stv.for d in ${SUBDIR} 152b5cd2489Stv_this:= ${d} 153a45d07b1Stv 154b5cd2489Stv.if ${_this} == ".WAIT" 155ee92d5a6Spk 156ee92d5a6Spk# setup dependency to apply to all/depend targets in the next group 157a45d07b1Stv_deps:= ${_deps} ${_prev:S/^/install-/} 158a45d07b1Stv 159a45d07b1Stv# if we're building *only* individual targets (i.e. "dependall-yacc"), 160a45d07b1Stv# make sure prerequisite tools build before installing 161a45d07b1Stv.if !make(all) && !make(dependall) 162a45d07b1Stvinstall-${_prev}: dependall-${_prev} 163a45d07b1Stv.endif 164ee92d5a6Spk 165b5cd2489Stv.else 166ee92d5a6Spk 167ee92d5a6Spk# order depend/all/install targets for ${d} subdir. Note the additional 168ee92d5a6Spk# .WAIT to achieve "closure" of the predecessor/successor relationships. 169ee92d5a6Spk.ORDER: depend-${d} all-${d} dependall-${d} .WAIT install-${d} 170a45d07b1Stv 171a45d07b1Stv# make all/depend-${d} dependent on list of install targets 172a45d07b1Stvdepend-${d} all-${d} dependall-${d}: ${_deps} 173ee92d5a6Spk 174b5cd2489Stv.endif 175a45d07b1Stv 176a45d07b1Stv# stash current name in case the next entry is .WAIT 177a45d07b1Stv_prev:= ${d} 178b5cd2489Stv.endfor 17978da845dStron 18078da845dStroncleandir: 18178da845dStron rm -f ${CLEANFILES} 182