1*0c4a5c6fSgarbled# $NetBSD: Makefile,v 1.116 2008/04/30 21:18:17 garbled 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 19dbf21d98SmrgLINT_BITS= 20dbf21d98Smrg.if ${MKLINT} != "no" 21dbf21d98SmrgLINT_BITS= lint lint2 22dbf21d98Smrg.endif 23dbf21d98Smrg 24b5cd2489Stv# Dependencies in SUBDIR below ordered to maximize parallel ability. 253e591f18Slukem.if !defined(NOSUBDIR) # { 263e591f18Slukem 2754579742StvSUBDIR= host-mkdep .WAIT compat .WAIT \ 282f0a2749Sriz binstall .WAIT mktemp .WAIT \ 2908202524Sapb cap_mkdb crunchgen ctags genassym gencat hexdump join \ 30dbf21d98Smrg ${LINT_BITS} \ 31d9ac053aSgdamore lorder m4 makewhatis mkdep mtree rpcgen sed tsort uudecode \ 329fbd8888Stv texinfo .WAIT \ 33b5cd2489Stv yacc .WAIT \ 34b5cd2489Stv lex .WAIT \ 359fbd8888Stv ${TOOLCHAIN_BITS} \ 362965cbcaSjmmv asn1_compile atf-compile cat cksum compile_et config db \ 377f67833eSdyoung file lint1 \ 38a37289dbSdyoung makefs menuc mkcsmapper mkesdb mklocale mknod msgc \ 39a37289dbSdyoung pax .WAIT \ 402ae0c612Sjmc disklabel .WAIT \ 412f0a2749Sriz paxctl .WAIT \ 422ae0c612Sjmc fdisk .WAIT \ 432ae0c612Sjmc installboot .WAIT \ 44fe7ef256Slukem pwd_mkdb stat sunlabel zic 4587d14ee4Stv 4619ab4b25Stv.if ${MKMAN} != "no" 4719ab4b25StvSUBDIR+= groff 4819ab4b25Stv.endif 4919ab4b25Stv 5087d14ee4Stv.if ${MKMAINTAINERTOOLS:Uno} != "no" 51e728c9b0SlukemSUBDIR+= autoconf .WAIT gettext 5287d14ee4Stv.endif 53fc820c72Smrg 549bfe9b99Sjmc.if ${MACHINE} == "hp700" 55bc26aea7SskrllSUBDIR+= hp700-mkboot 56bc26aea7Sskrll.endif 57bc26aea7Sskrll 589bfe9b99Sjmc.if ${MACHINE} == "ibmnws" 5910c0014bSmattSUBDIR+= ibmnws-ncdcs 6010c0014bSmatt.endif 6110c0014bSmatt 629bfe9b99Sjmc.if ${MACHINE} == "macppc" 63ca1e0d59SmattSUBDIR+= macppc-fixcoff 64ca1e0d59Smatt.endif 65ca1e0d59Smatt 66*0c4a5c6fSgarbled.if (${MACHINE} == "prep" || ${MACHINE} == "rs6000" || ${MACHINE} == "bebox") 67c3408ed0SgarbledSUBDIR+= powerpc-mkbootimage 68c30b41caSkleink.endif 69c30b41caSkleink 700d9e66cdSgmcgarry.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb") 710d9e66cdSgmcgarrySUBDIR+= mips-elf2ecoff 720d9e66cdSgmcgarry.endif 730d9e66cdSgmcgarry 740ac35082Ssekiya.if (${MACHINE} == "sgimips") 750ac35082SsekiyaSUBDIR+= sgivol 760ac35082Ssekiya.endif 770ac35082Ssekiya 78ef4ecddaSabs.if ${MACHINE} == "acorn32" 79ef4ecddaSabsSUBDIR+= sparkcrc 80ef4ecddaSabs.endif 81ef4ecddaSabs 82bf9ec67eSbjh21.if (${MACHINE} == "sparc" || ${MACHINE} == "sparc64") 83bf9ec67eSbjh21SUBDIR+= fgen 84bf9ec67eSbjh21.endif 85bf9ec67eSbjh21 869a999c37Sjmc.if ${MACHINE} == "bebox" 879a999c37SjmcSUBDIR+= bebox-elf2pef 889a999c37SjmcSUBDIR+= bebox-mkbootimage 899a999c37Sjmc.endif 909a999c37Sjmc 91c7464d49Sjmc.if ${MACHINE} == "amiga" 92c7464d49SjmcSUBDIR+= amiga-elf2bb 93c7464d49SjmcSUBDIR+= amiga-txlt 94c7464d49Sjmc.endif 95c7464d49Sjmc 969bfe9b99Sjmc.if ${MACHINE} == "hp300" 979bfe9b99SjmcSUBDIR+= hp300-mkboot 989bfe9b99Sjmc.endif 999bfe9b99Sjmc 1003e591f18Slukem.endif # ! NOSUBDIR # } 101c5d597ceStv 1023fd7f6dbSlukemcheck_MKTOOLS: .PHONY .NOTMAIN 1035a0f427eSjmc.if ${MKTOOLS:Uyes} == "no" 104259ff4e7Stv @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 105259ff4e7Stv @echo '*** updating your host toolchain. This should be used only as a' 106259ff4e7Stv @echo '*** temporary workaround for toolchain problems, as it will result' 107ecc52c58Swiz @echo '*** in version skew and build errors over time!' 1080d11dd01Sjmc.endif 109259ff4e7Stv 1103fd7f6dbSlukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 111355436d5Slukemrealall realdepend install: check_MKTOOLS 1123fd7f6dbSlukem 113259ff4e7Stv.for dir in ${SUBDIR:N.WAIT} 114259ff4e7Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}: 115259ff4e7Stv @true 116259ff4e7Stv.endfor 1173fd7f6dbSlukem.endif # } 118259ff4e7Stv 119c5d597ceStv.include <bsd.subdir.mk> 120c9a6a2c3Stv.include <bsd.obj.mk> 12161be23b4Stv 122c1af61f8Stron.if !defined(PREVIOUSTOOLDIR) 1233fd7f6dbSlukem. if exists(PREVIOUSTOOLDIR) 1243fd7f6dbSlukemPREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 1253fd7f6dbSlukem. else 1263fd7f6dbSlukemPREVIOUSTOOLDIR= 1273fd7f6dbSlukem. endif 128c1af61f8Stron.endif 1293fd7f6dbSlukem 1303fd7f6dbSlukemCLEANFILES+= PREVIOUSTOOLDIR 1313fd7f6dbSlukem 132fe4611e5Stronrealall realdepend: .MAKE 13350ef6180Sapb.if !empty(PREVIOUSTOOLDIR) && "${PREVIOUSTOOLDIR}" != "${TOOLDIR}" 1343fd7f6dbSlukem @echo "*** WARNING: TOOLDIR has moved?" 1353fd7f6dbSlukem @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 1363fd7f6dbSlukem @echo "*** != TOOLDIR '${TOOLDIR}'" 1373fd7f6dbSlukem @echo "*** Cleaning mis-matched tools" 1383fd7f6dbSlukem rm -f PREVIOUSTOOLDIR 1393d00583fSfreza (cd ${.CURDIR} && ${MAKE} PREVIOUSTOOLDIR=${TOOLDIR} cleandir) 1403fd7f6dbSlukem.endif 1413fd7f6dbSlukem echo ${TOOLDIR} >PREVIOUSTOOLDIR 1423fd7f6dbSlukem 143a45d07b1Stv# For each .WAIT point, make sure the immediately preceding target is 144a45d07b1Stv# installed before building anything after that point. 1457e3a0208Sdsl# (dsl: which means that with: 'a b .WAIT c' the build of 'c' waits for the 1467e3a0208Sdsl# install of 'b', but not the install of 'a'.) 147ee92d5a6Spk# 148ee92d5a6Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk> 149ee92d5a6Spk# to achieve this. These targets look like: 150ee92d5a6Spk# subdir-all: all-dir1 [.WAIT] all-dir2 etc.. 151ee92d5a6Spk# subdir-install: install-dir1 [.WAIT] install-dir2 etc.. 152ee92d5a6Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at 153ee92d5a6Spk# places corresponding to the .WAITs in our $SUBDIR variable. 154ee92d5a6Spk# 155ee92d5a6Spk# Also, since we're now mixing `install' with `all' and `depend' targets 156ee92d5a6Spk# an order relationship between those in each individual subdirectory 157ee92d5a6Spk# must be established. 158ee92d5a6Spk# 159a45d07b1Stv_deps:= 160a45d07b1Stv_prev:= 161a45d07b1Stv 162b5cd2489Stv.for d in ${SUBDIR} 163b5cd2489Stv_this:= ${d} 164a45d07b1Stv 165b5cd2489Stv.if ${_this} == ".WAIT" 166ee92d5a6Spk 167ee92d5a6Spk# setup dependency to apply to all/depend targets in the next group 168a45d07b1Stv_deps:= ${_deps} ${_prev:S/^/install-/} 169a45d07b1Stv 170a45d07b1Stv# if we're building *only* individual targets (i.e. "dependall-yacc"), 171a45d07b1Stv# make sure prerequisite tools build before installing 1727e3a0208Sdsl# XXX: dsl: this is likely to generate a dependency loop since there is 1737e3a0208Sdsl# a .ORDER releation between the nodes as well. 1747e3a0208Sdsl.if !make(all) && !make(dependall) && !make(install) 175a45d07b1Stvinstall-${_prev}: dependall-${_prev} 176a45d07b1Stv.endif 177ee92d5a6Spk 178b5cd2489Stv.else 179ee92d5a6Spk 1807e3a0208Sdsl# order depend/all/install targets for ${d} subdir. 1817e3a0208Sdsl.ORDER: depend-${d} all-${d} dependall-${d} install-${d} 182a45d07b1Stv 1833d00583fSfreza# prevent cleandir in real{all,depend} from interfering with subdir makes 1843d00583fSfreza.ORDER: realdepend dependall-${d} 1853d00583fSfreza.ORDER: realdepend depend-${d} 1863d00583fSfreza.ORDER: realall all-${d} 1873d00583fSfreza 188a45d07b1Stv# make all/depend-${d} dependent on list of install targets 189a45d07b1Stvdepend-${d} all-${d} dependall-${d}: ${_deps} 190ee92d5a6Spk 191b5cd2489Stv.endif 192a45d07b1Stv 193a45d07b1Stv# stash current name in case the next entry is .WAIT 194a45d07b1Stv_prev:= ${d} 195b5cd2489Stv.endfor 19678da845dStron 19778da845dStroncleandir: 19878da845dStron rm -f ${CLEANFILES} 199