Makefile revision 1.114
11.114Sjmmv# $NetBSD: Makefile,v 1.114 2007/11/12 14:54:43 jmmv Exp $ 21.1Stv 31.3Stv.include <bsd.own.mk> 41.3Stv 51.96Smrg.if ${HAVE_GCC} == "4" 61.94SjmcTOOLCHAIN_BITS= gmake .WAIT 71.94Sjmc.endif 81.81Slukem.if ${TOOLCHAIN_MISSING} == "no" 91.94SjmcTOOLCHAIN_BITS+= binutils .WAIT 101.77SmrgTOOLCHAIN_BITS+= gcc 111.97Smrg. if ${MKCROSSGDB:Uno} != "no" 121.74SclTOOLCHAIN_BITS+= gdb 131.70Smrg. endif 141.70SmrgTOOLCHAIN_BITS+= .WAIT dbsym mdsetimage 151.58Sthorpej# XXX Eventually, we want to be able to build dbsym and mdsetimage 161.58Sthorpej# XXX if EXTERNAL_TOOLCHAIN is set. 171.31Stv.endif 181.31Stv 191.99SmrgLINT_BITS= 201.99Smrg.if ${MKLINT} != "no" 211.99SmrgLINT_BITS= lint lint2 221.99Smrg.endif 231.99Smrg 241.16Stv# Dependencies in SUBDIR below ordered to maximize parallel ability. 251.50Slukem.if !defined(NOSUBDIR) # { 261.50Slukem 271.29StvSUBDIR= host-mkdep .WAIT compat .WAIT \ 281.110Sriz binstall .WAIT mktemp .WAIT \ 291.113Sapb cap_mkdb crunchgen ctags genassym gencat hexdump join \ 301.99Smrg ${LINT_BITS} \ 311.98Sgdamore lorder m4 makewhatis mkdep mtree rpcgen sed tsort uudecode \ 321.32Stv texinfo .WAIT \ 331.16Stv yacc .WAIT \ 341.16Stv lex .WAIT \ 351.32Stv ${TOOLCHAIN_BITS} \ 361.114Sjmmv asn1_compile atf-compile cat cksum compile_et config db \ 371.91Sdyoung file lint1 \ 381.90Sdyoung makefs menuc mkcsmapper mkesdb mklocale mknod msgc \ 391.90Sdyoung pax .WAIT \ 401.92Sjmc disklabel .WAIT \ 411.110Sriz paxctl .WAIT \ 421.92Sjmc fdisk .WAIT \ 431.92Sjmc installboot .WAIT \ 441.68Slukem pwd_mkdb stat sunlabel zic 451.39Stv 461.39Stv.if ${MKMAN} != "no" 471.39StvSUBDIR+= groff 481.39Stv.endif 491.22Stv 501.22Stv.if ${MKMAINTAINERTOOLS:Uno} != "no" 511.103SlukemSUBDIR+= autoconf .WAIT gettext 521.72Smatt.endif 531.72Smatt 541.86Sjmc.if ${MACHINE} == "hp700" 551.83SskrllSUBDIR+= hp700-mkboot 561.83Sskrll.endif 571.83Sskrll 581.86Sjmc.if ${MACHINE} == "ibmnws" 591.72SmattSUBDIR+= ibmnws-ncdcs 601.79Smatt.endif 611.79Smatt 621.86Sjmc.if ${MACHINE} == "macppc" 631.79SmattSUBDIR+= macppc-fixcoff 641.48Skleink.endif 651.48Skleink 661.86Sjmc.if ${MACHINE} == "prep" 671.48SkleinkSUBDIR+= prep-mkbootimage 681.22Stv.endif 691.37Sgmcgarry 701.37Sgmcgarry.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb") 711.37SgmcgarrySUBDIR+= mips-elf2ecoff 721.76Ssekiya.endif 731.76Ssekiya 741.76Ssekiya.if (${MACHINE} == "sgimips") 751.76SsekiyaSUBDIR+= sgivol 761.51Sbjh21.endif 771.51Sbjh21 781.82Sabs.if ${MACHINE} == "acorn32" 791.82SabsSUBDIR+= sparkcrc 801.82Sabs.endif 811.82Sabs 821.51Sbjh21.if (${MACHINE} == "sparc" || ${MACHINE} == "sparc64") 831.51Sbjh21SUBDIR+= fgen 841.37Sgmcgarry.endif 851.37Sgmcgarry 861.84Sjmc.if ${MACHINE} == "bebox" 871.84SjmcSUBDIR+= bebox-elf2pef 881.84SjmcSUBDIR+= bebox-mkbootimage 891.84Sjmc.endif 901.84Sjmc 911.85Sjmc.if ${MACHINE} == "amiga" 921.85SjmcSUBDIR+= amiga-elf2bb 931.85SjmcSUBDIR+= amiga-txlt 941.85Sjmc.endif 951.85Sjmc 961.86Sjmc.if ${MACHINE} == "hp300" 971.86SjmcSUBDIR+= hp300-mkboot 981.86Sjmc.endif 991.86Sjmc 1001.50Slukem.endif # ! NOSUBDIR # } 1011.17Stv 1021.66Slukemcheck_MKTOOLS: .PHONY .NOTMAIN 1031.19Sjmc.if ${MKTOOLS:Uyes} == "no" 1041.17Stv @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 1051.17Stv @echo '*** updating your host toolchain. This should be used only as a' 1061.17Stv @echo '*** temporary workaround for toolchain problems, as it will result' 1071.23Swiz @echo '*** in version skew and build errors over time!' 1081.18Sjmc.endif 1091.17Stv 1101.66Slukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 1111.67Slukemrealall realdepend install: check_MKTOOLS 1121.66Slukem 1131.17Stv.for dir in ${SUBDIR:N.WAIT} 1141.17Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}: 1151.17Stv @true 1161.17Stv.endfor 1171.66Slukem.endif # } 1181.1Stv 1191.1Stv.include <bsd.subdir.mk> 1201.11Stv.include <bsd.obj.mk> 1211.16Stv 1221.102Stron.if !defined(PREVIOUSTOOLDIR) 1231.102Stron. if exists(PREVIOUSTOOLDIR) 1241.66SlukemPREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 1251.102Stron. else 1261.66SlukemPREVIOUSTOOLDIR= 1271.102Stron. endif 1281.66Slukem.endif 1291.66Slukem 1301.66SlukemCLEANFILES+= PREVIOUSTOOLDIR 1311.66Slukem 1321.101Stronrealall realdepend: .MAKE 1331.107Sapb.if !empty(PREVIOUSTOOLDIR) && "${PREVIOUSTOOLDIR}" != "${TOOLDIR}" 1341.66Slukem @echo "*** WARNING: TOOLDIR has moved?" 1351.66Slukem @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 1361.66Slukem @echo "*** != TOOLDIR '${TOOLDIR}'" 1371.66Slukem @echo "*** Cleaning mis-matched tools" 1381.66Slukem rm -f PREVIOUSTOOLDIR 1391.106Sfreza (cd ${.CURDIR} && ${MAKE} PREVIOUSTOOLDIR=${TOOLDIR} cleandir) 1401.66Slukem.endif 1411.102Stron echo ${TOOLDIR} >PREVIOUSTOOLDIR 1421.66Slukem 1431.40Stv# For each .WAIT point, make sure the immediately preceding target is 1441.40Stv# installed before building anything after that point. 1451.109Sdsl# (dsl: which means that with: 'a b .WAIT c' the build of 'c' waits for the 1461.109Sdsl# install of 'b', but not the install of 'a'.) 1471.36Spk# 1481.36Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk> 1491.36Spk# to achieve this. These targets look like: 1501.36Spk# subdir-all: all-dir1 [.WAIT] all-dir2 etc.. 1511.36Spk# subdir-install: install-dir1 [.WAIT] install-dir2 etc.. 1521.36Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at 1531.36Spk# places corresponding to the .WAITs in our $SUBDIR variable. 1541.36Spk# 1551.36Spk# Also, since we're now mixing `install' with `all' and `depend' targets 1561.36Spk# an order relationship between those in each individual subdirectory 1571.36Spk# must be established. 1581.36Spk# 1591.40Stv_deps:= 1601.40Stv_prev:= 1611.40Stv 1621.16Stv.for d in ${SUBDIR} 1631.16Stv_this:= ${d} 1641.40Stv 1651.16Stv.if ${_this} == ".WAIT" 1661.36Spk 1671.36Spk# setup dependency to apply to all/depend targets in the next group 1681.40Stv_deps:= ${_deps} ${_prev:S/^/install-/} 1691.40Stv 1701.40Stv# if we're building *only* individual targets (i.e. "dependall-yacc"), 1711.40Stv# make sure prerequisite tools build before installing 1721.109Sdsl# XXX: dsl: this is likely to generate a dependency loop since there is 1731.109Sdsl# a .ORDER releation between the nodes as well. 1741.109Sdsl.if !make(all) && !make(dependall) && !make(install) 1751.40Stvinstall-${_prev}: dependall-${_prev} 1761.40Stv.endif 1771.36Spk 1781.16Stv.else 1791.36Spk 1801.109Sdsl# order depend/all/install targets for ${d} subdir. 1811.109Sdsl.ORDER: depend-${d} all-${d} dependall-${d} install-${d} 1821.40Stv 1831.106Sfreza# prevent cleandir in real{all,depend} from interfering with subdir makes 1841.106Sfreza.ORDER: realdepend dependall-${d} 1851.106Sfreza.ORDER: realdepend depend-${d} 1861.106Sfreza.ORDER: realall all-${d} 1871.106Sfreza 1881.40Stv# make all/depend-${d} dependent on list of install targets 1891.40Stvdepend-${d} all-${d} dependall-${d}: ${_deps} 1901.36Spk 1911.16Stv.endif 1921.40Stv 1931.40Stv# stash current name in case the next entry is .WAIT 1941.40Stv_prev:= ${d} 1951.16Stv.endfor 1961.69Stron 1971.69Stroncleandir: 1981.69Stron rm -f ${CLEANFILES} 199