Makefile revision 1.156
11.156Sjoerg# $NetBSD: Makefile,v 1.156 2012/08/10 16:13:36 joerg Exp $ 21.1Stv 31.3Stv.include <bsd.own.mk> 41.3Stv 51.156Sjoerg.if defined(HAVE_GCC) || defined(HAVE_PCC) 61.94SjmcTOOLCHAIN_BITS= gmake .WAIT 71.156Sjoerg.endif 81.156Sjoerg 91.146Smrg.if ${TOOLCHAIN_MISSING} == "no" 101.156Sjoerg.if defined(HAVE_GCC) 111.146Smrg.if ${HAVE_GCC} >= 45 121.146SmrgTOOLCHAIN_BITS+= gmp .WAIT 131.146SmrgTOOLCHAIN_BITS+= mpfr .WAIT 141.146SmrgTOOLCHAIN_BITS+= mpc .WAIT 151.94Sjmc.endif 161.156Sjoerg.endif 171.156Sjoerg.endif 181.156Sjoerg 191.156Sjoerg.if ${TOOLCHAIN_MISSING} == "no" 201.94SjmcTOOLCHAIN_BITS+= binutils .WAIT 211.156Sjoerg.endif 221.156Sjoerg 231.156Sjoerg.if defined(HAVE_GCC) 241.156Sjoerg.if ${TOOLCHAIN_MISSING} == "no" 251.77SmrgTOOLCHAIN_BITS+= gcc 261.97Smrg. if ${MKCROSSGDB:Uno} != "no" 271.74SclTOOLCHAIN_BITS+= gdb 281.70Smrg. endif 291.156SjoergTOOLCHAIN_BITS+= .WAIT 301.58Sthorpej# XXX Eventually, we want to be able to build dbsym and mdsetimage 311.58Sthorpej# XXX if EXTERNAL_TOOLCHAIN is set. 321.31Stv.endif 331.118Sgmcgarry.endif 341.118Sgmcgarry 351.118Sgmcgarry.if defined(HAVE_PCC) 361.118Sgmcgarry.if ${TOOLCHAIN_MISSING} == "no" 371.118SgmcgarryTOOLCHAIN_BITS+= pcc 381.118Sgmcgarry.endif 391.118Sgmcgarry.endif 401.31Stv 411.156SjoergTOOLCHAIN_BITS+= dbsym mdsetimage 421.156Sjoerg 431.137SdarranDTRACE_BITS= 441.137Sdarran.if ${MKDTRACE} != "no" 451.137SdarranDTRACE_BITS+= .WAIT libelf 461.137SdarranDTRACE_BITS+= .WAIT libdwarf 471.137SdarranDTRACE_BITS+= .WAIT libctf 481.137SdarranDTRACE_BITS+= .WAIT ctfconvert ctfmerge 491.137Sdarran.endif 501.137Sdarran 511.99SmrgLINT_BITS= 521.99Smrg.if ${MKLINT} != "no" 531.99SmrgLINT_BITS= lint lint2 541.99Smrg.endif 551.99Smrg 561.16Stv# Dependencies in SUBDIR below ordered to maximize parallel ability. 571.29StvSUBDIR= host-mkdep .WAIT compat .WAIT \ 581.124Sapb binstall .WAIT mktemp .WAIT sed .WAIT \ 591.113Sapb cap_mkdb crunchgen ctags genassym gencat hexdump join \ 601.99Smrg ${LINT_BITS} \ 611.152Syamt lorder makewhatis mkdep mtree nbperf .WAIT rpcgen tsort \ 621.134Sroy uudecode m4 \ 631.132Smrg .WAIT texinfo \ 641.132Smrg .WAIT yacc \ 651.132Smrg .WAIT awk \ 661.153Schristos .WAIT tic \ 671.132Smrg .WAIT lex \ 681.132Smrg .WAIT pax \ 691.132Smrg .WAIT ${TOOLCHAIN_BITS} \ 701.137Sdarran ${DTRACE_BITS} \ 711.138Sjmmv asn1_compile cat cksum compile_et config db \ 721.145Selric file lint1 slc \ 731.144Sriz makefs .WAIT menuc mkcsmapper mkesdb mklocale mknod msgc \ 741.132Smrg .WAIT disklabel \ 751.132Smrg .WAIT paxctl \ 761.132Smrg .WAIT fdisk \ 771.132Smrg .WAIT installboot \ 781.154Snjoly pwd_mkdb stat strfile sunlabel zic 791.39Stv 801.142Sjoerg.if ${MKLLVM} != "no" 811.155Sjoerg# .WAIT between llvm-tblgen and llvm-clang-tblgen ensures install 821.155Sjoerg# rules works correctly 831.142SjoergSUBDIR+= \ 841.142Sjoerg llvm .WAIT \ 851.149Sjoerg llvm-lib/libLLVMSupport llvm-lib/libLLVMTableGen .WAIT \ 861.155Sjoerg llvm-tblgen .WAIT llvm-clang-tblgen .WAIT \ 871.142Sjoerg llvm-include .WAIT \ 881.142Sjoerg llvm-lib .WAIT \ 891.142Sjoerg llvm-clang 901.142Sjoerg.endif 911.142Sjoerg 921.121Sdyoung.if ${MKMAN} != "no" || ${MKDOC} != "no" || ${MKHTML} != "no" 931.136Sjoerg. if ${MKGROFF} != "no" 941.39StvSUBDIR+= groff 951.136Sjoerg. endif 961.128SjoergSUBDIR+= mandoc 971.39Stv.endif 981.22Stv 991.22Stv.if ${MKMAINTAINERTOOLS:Uno} != "no" 1001.103SlukemSUBDIR+= autoconf .WAIT gettext 1011.72Smatt.endif 1021.72Smatt 1031.140Smrg.if ${USE_PIGZGZIP} != "no" 1041.140SmrgSUBDIR+= pigz 1051.140Smrg.endif 1061.140Smrg 1071.86Sjmc.if ${MACHINE} == "hp700" 1081.83SskrllSUBDIR+= hp700-mkboot 1091.83Sskrll.endif 1101.83Sskrll 1111.86Sjmc.if ${MACHINE} == "ibmnws" 1121.72SmattSUBDIR+= ibmnws-ncdcs 1131.79Smatt.endif 1141.79Smatt 1151.86Sjmc.if ${MACHINE} == "macppc" 1161.79SmattSUBDIR+= macppc-fixcoff 1171.48Skleink.endif 1181.48Skleink 1191.116Sgarbled.if (${MACHINE} == "prep" || ${MACHINE} == "rs6000" || ${MACHINE} == "bebox") 1201.115SgarbledSUBDIR+= powerpc-mkbootimage 1211.22Stv.endif 1221.37Sgmcgarry 1231.148Stsutsui.if ${MACHINE_ARCH} == "m68k" 1241.148StsutsuiSUBDIR+= m68k-elf2aout 1251.148Stsutsui.endif 1261.148Stsutsui 1271.147Smrg.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb" || \ 1281.147Smrg ${MACHINE_ARCH} == "mips64el" || ${MACHINE_ARCH} == "mips64eb") 1291.37SgmcgarrySUBDIR+= mips-elf2ecoff 1301.76Ssekiya.endif 1311.76Ssekiya 1321.76Ssekiya.if (${MACHINE} == "sgimips") 1331.76SsekiyaSUBDIR+= sgivol 1341.51Sbjh21.endif 1351.51Sbjh21 1361.82Sabs.if ${MACHINE} == "acorn32" 1371.82SabsSUBDIR+= sparkcrc 1381.82Sabs.endif 1391.82Sabs 1401.125Sabs.if (${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64") 1411.51Sbjh21SUBDIR+= fgen 1421.37Sgmcgarry.endif 1431.37Sgmcgarry 1441.85Sjmc.if ${MACHINE} == "amiga" 1451.85SjmcSUBDIR+= amiga-elf2bb 1461.85SjmcSUBDIR+= amiga-txlt 1471.85Sjmc.endif 1481.85Sjmc 1491.86Sjmc.if ${MACHINE} == "hp300" 1501.86SjmcSUBDIR+= hp300-mkboot 1511.86Sjmc.endif 1521.86Sjmc 1531.143Sphx.if ${MACHINE} == "evbarm" || ${MACHINE} == "evbmips" || \ 1541.143Sphx ${MACHINE} == "evbppc" || ${MACHINE} == "sandpoint" 1551.139SjmcneillSUBDIR+= mkubootimage 1561.139Sjmcneill.endif 1571.139Sjmcneill 1581.66Slukemcheck_MKTOOLS: .PHONY .NOTMAIN 1591.19Sjmc.if ${MKTOOLS:Uyes} == "no" 1601.17Stv @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 1611.17Stv @echo '*** updating your host toolchain. This should be used only as a' 1621.17Stv @echo '*** temporary workaround for toolchain problems, as it will result' 1631.23Swiz @echo '*** in version skew and build errors over time!' 1641.18Sjmc.endif 1651.17Stv 1661.66Slukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 1671.67Slukemrealall realdepend install: check_MKTOOLS 1681.66Slukem 1691.17Stv.for dir in ${SUBDIR:N.WAIT} 1701.17Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}: 1711.17Stv @true 1721.17Stv.endfor 1731.66Slukem.endif # } 1741.1Stv 1751.1Stv.include <bsd.subdir.mk> 1761.11Stv.include <bsd.obj.mk> 1771.16Stv 1781.102Stron.if !defined(PREVIOUSTOOLDIR) 1791.102Stron. if exists(PREVIOUSTOOLDIR) 1801.66SlukemPREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 1811.102Stron. else 1821.66SlukemPREVIOUSTOOLDIR= 1831.102Stron. endif 1841.66Slukem.endif 1851.66Slukem 1861.66SlukemCLEANFILES+= PREVIOUSTOOLDIR 1871.66Slukem 1881.101Stronrealall realdepend: .MAKE 1891.107Sapb.if !empty(PREVIOUSTOOLDIR) && "${PREVIOUSTOOLDIR}" != "${TOOLDIR}" 1901.66Slukem @echo "*** WARNING: TOOLDIR has moved?" 1911.66Slukem @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 1921.66Slukem @echo "*** != TOOLDIR '${TOOLDIR}'" 1931.66Slukem @echo "*** Cleaning mis-matched tools" 1941.66Slukem rm -f PREVIOUSTOOLDIR 1951.106Sfreza (cd ${.CURDIR} && ${MAKE} PREVIOUSTOOLDIR=${TOOLDIR} cleandir) 1961.66Slukem.endif 1971.102Stron echo ${TOOLDIR} >PREVIOUSTOOLDIR 1981.66Slukem 1991.40Stv# For each .WAIT point, make sure the immediately preceding target is 2001.40Stv# installed before building anything after that point. 2011.109Sdsl# (dsl: which means that with: 'a b .WAIT c' the build of 'c' waits for the 2021.109Sdsl# install of 'b', but not the install of 'a'.) 2031.36Spk# 2041.36Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk> 2051.36Spk# to achieve this. These targets look like: 2061.36Spk# subdir-all: all-dir1 [.WAIT] all-dir2 etc.. 2071.36Spk# subdir-install: install-dir1 [.WAIT] install-dir2 etc.. 2081.36Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at 2091.36Spk# places corresponding to the .WAITs in our $SUBDIR variable. 2101.36Spk# 2111.36Spk# Also, since we're now mixing `install' with `all' and `depend' targets 2121.36Spk# an order relationship between those in each individual subdirectory 2131.36Spk# must be established. 2141.36Spk# 2151.40Stv_deps:= 2161.40Stv_prev:= 2171.40Stv 2181.123Sapb.for d in ${SUBDIR} # { 2191.16Stv_this:= ${d} 2201.40Stv 2211.123Sapb.if ${_this} == ".WAIT" # { 2221.36Spk 2231.36Spk# setup dependency to apply to all/depend targets in the next group 2241.40Stv_deps:= ${_deps} ${_prev:S/^/install-/} 2251.40Stv 2261.40Stv# if we're building *only* individual targets (i.e. "dependall-yacc"), 2271.40Stv# make sure prerequisite tools build before installing 2281.109Sdsl# XXX: dsl: this is likely to generate a dependency loop since there is 2291.109Sdsl# a .ORDER releation between the nodes as well. 2301.109Sdsl.if !make(all) && !make(dependall) && !make(install) 2311.40Stvinstall-${_prev}: dependall-${_prev} 2321.40Stv.endif 2331.36Spk 2341.123Sapb.else # ${_this} != ".WAIT" # } { 2351.36Spk 2361.109Sdsl# order depend/all/install targets for ${d} subdir. 2371.109Sdsl.ORDER: depend-${d} all-${d} dependall-${d} install-${d} 2381.40Stv 2391.106Sfreza# prevent cleandir in real{all,depend} from interfering with subdir makes 2401.106Sfreza.ORDER: realdepend dependall-${d} 2411.106Sfreza.ORDER: realdepend depend-${d} 2421.106Sfreza.ORDER: realall all-${d} 2431.106Sfreza 2441.40Stv# make all/depend-${d} dependent on list of install targets 2451.40Stvdepend-${d} all-${d} dependall-${d}: ${_deps} 2461.36Spk 2471.123Sapb.endif # ${_this} != ".WAIT" # } 2481.40Stv 2491.40Stv# stash current name in case the next entry is .WAIT 2501.40Stv_prev:= ${d} 2511.123Sapb.endfor # } 2521.69Stron 2531.69Stroncleandir: 2541.69Stron rm -f ${CLEANFILES} 255