Makefile revision 1.150
105b261ecSmrg# $NetBSD: Makefile,v 1.150 2011/11/01 21:16:28 joerg Exp $ 205b261ecSmrg 305b261ecSmrg.include <bsd.own.mk> 405b261ecSmrg 505b261ecSmrg.if defined(HAVE_GCC) 605b261ecSmrgTOOLCHAIN_BITS= gmake .WAIT 705b261ecSmrg.if ${TOOLCHAIN_MISSING} == "no" 805b261ecSmrg.if ${HAVE_GCC} >= 45 905b261ecSmrgTOOLCHAIN_BITS+= gmp .WAIT 1005b261ecSmrgTOOLCHAIN_BITS+= mpfr .WAIT 1105b261ecSmrgTOOLCHAIN_BITS+= mpc .WAIT 1205b261ecSmrg.endif 1305b261ecSmrgTOOLCHAIN_BITS+= binutils .WAIT 1405b261ecSmrgTOOLCHAIN_BITS+= gcc 1505b261ecSmrg. if ${MKCROSSGDB:Uno} != "no" 1605b261ecSmrgTOOLCHAIN_BITS+= gdb 1705b261ecSmrg. endif 1805b261ecSmrgTOOLCHAIN_BITS+= .WAIT dbsym mdsetimage 1905b261ecSmrg# XXX Eventually, we want to be able to build dbsym and mdsetimage 2005b261ecSmrg# XXX if EXTERNAL_TOOLCHAIN is set. 2105b261ecSmrg.endif 2205b261ecSmrg.endif 2305b261ecSmrg 2405b261ecSmrg.if defined(HAVE_PCC) 2505b261ecSmrgTOOLCHAIN_BITS= gmake .WAIT 2605b261ecSmrg.if ${TOOLCHAIN_MISSING} == "no" 2705b261ecSmrgTOOLCHAIN_BITS+= binutils .WAIT 2805b261ecSmrgTOOLCHAIN_BITS+= pcc 2905b261ecSmrg.endif 3005b261ecSmrgTOOLCHAIN_BITS+= .WAIT dbsym mdsetimage 3105b261ecSmrg.endif 3205b261ecSmrg 3305b261ecSmrgDTRACE_BITS= 3405b261ecSmrg.if ${MKDTRACE} != "no" 3505b261ecSmrgDTRACE_BITS+= .WAIT libelf 3605b261ecSmrgDTRACE_BITS+= .WAIT libdwarf 3705b261ecSmrgDTRACE_BITS+= .WAIT libctf 3805b261ecSmrgDTRACE_BITS+= .WAIT ctfconvert ctfmerge 3905b261ecSmrg.endif 4005b261ecSmrg 4105b261ecSmrgLINT_BITS= 4205b261ecSmrg.if ${MKLINT} != "no" 4305b261ecSmrgLINT_BITS= lint lint2 4405b261ecSmrg.endif 4505b261ecSmrg 4605b261ecSmrg# Dependencies in SUBDIR below ordered to maximize parallel ability. 4705b261ecSmrgSUBDIR= host-mkdep .WAIT compat .WAIT \ 4805b261ecSmrg binstall .WAIT mktemp .WAIT sed .WAIT \ 4905b261ecSmrg cap_mkdb crunchgen ctags genassym gencat hexdump join \ 5005b261ecSmrg ${LINT_BITS} \ 5105b261ecSmrg lorder makewhatis mkdep mtree nbperf rpcgen tic tsort \ 5205b261ecSmrg uudecode m4 \ 5305b261ecSmrg .WAIT texinfo \ 5405b261ecSmrg .WAIT yacc \ 5505b261ecSmrg .WAIT awk \ 5605b261ecSmrg .WAIT lex \ 5705b261ecSmrg .WAIT pax \ 5805b261ecSmrg .WAIT ${TOOLCHAIN_BITS} \ 5905b261ecSmrg ${DTRACE_BITS} \ 6005b261ecSmrg asn1_compile cat cksum compile_et config db \ 6105b261ecSmrg file lint1 slc \ 6205b261ecSmrg makefs .WAIT menuc mkcsmapper mkesdb mklocale mknod msgc \ 6305b261ecSmrg .WAIT disklabel \ 6405b261ecSmrg .WAIT paxctl \ 6505b261ecSmrg .WAIT fdisk \ 6605b261ecSmrg .WAIT installboot \ 6705b261ecSmrg pwd_mkdb stat strfile sunlabel zic 6805b261ecSmrg 6905b261ecSmrg.if ${MKLLVM} != "no" 7005b261ecSmrgSUBDIR+= \ 7105b261ecSmrg llvm .WAIT \ 7205b261ecSmrg llvm-lib/libLLVMSupport llvm-lib/libLLVMTableGen .WAIT \ 7305b261ecSmrg llvm-tblgen .WAIT \ 7405b261ecSmrg llvm-clang-tblgen .WAIT \ 7505b261ecSmrg llvm-include .WAIT \ 7605b261ecSmrg llvm-lib .WAIT \ 7705b261ecSmrg llvm-clang 7805b261ecSmrg.endif 7905b261ecSmrg 8005b261ecSmrg.if ${MKMAN} != "no" || ${MKDOC} != "no" || ${MKHTML} != "no" 8105b261ecSmrg. if ${MKGROFF} != "no" 8205b261ecSmrgSUBDIR+= groff 8305b261ecSmrg. endif 8405b261ecSmrgSUBDIR+= mandoc 8505b261ecSmrg.endif 8605b261ecSmrg 8705b261ecSmrg.if ${MKMAINTAINERTOOLS:Uno} != "no" 8805b261ecSmrgSUBDIR+= autoconf .WAIT gettext 8905b261ecSmrg.endif 9005b261ecSmrg 9105b261ecSmrg.if ${USE_PIGZGZIP} != "no" 9205b261ecSmrgSUBDIR+= pigz 9305b261ecSmrg.endif 9405b261ecSmrg 9505b261ecSmrg.if ${MACHINE} == "hp700" 9605b261ecSmrgSUBDIR+= hp700-mkboot 9705b261ecSmrg.endif 9805b261ecSmrg 9905b261ecSmrg.if ${MACHINE} == "ibmnws" 10005b261ecSmrgSUBDIR+= ibmnws-ncdcs 1019ace9065Smrg.endif 10205b261ecSmrg 10305b261ecSmrg.if ${MACHINE} == "macppc" 10405b261ecSmrgSUBDIR+= macppc-fixcoff 1059ace9065Smrg.endif 10605b261ecSmrg 10705b261ecSmrg.if (${MACHINE} == "prep" || ${MACHINE} == "rs6000" || ${MACHINE} == "bebox") 10805b261ecSmrgSUBDIR+= powerpc-mkbootimage 10905b261ecSmrg.endif 11005b261ecSmrg 11105b261ecSmrg.if ${MACHINE_ARCH} == "m68k" 11205b261ecSmrgSUBDIR+= m68k-elf2aout 11305b261ecSmrg.endif 11405b261ecSmrg 11505b261ecSmrg.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb" || \ 11605b261ecSmrg ${MACHINE_ARCH} == "mips64el" || ${MACHINE_ARCH} == "mips64eb") 11705b261ecSmrgSUBDIR+= mips-elf2ecoff 11805b261ecSmrg.endif 11905b261ecSmrg 12005b261ecSmrg.if (${MACHINE} == "sgimips") 12105b261ecSmrgSUBDIR+= sgivol 12205b261ecSmrg.endif 12305b261ecSmrg 12405b261ecSmrg.if ${MACHINE} == "acorn32" 12505b261ecSmrgSUBDIR+= sparkcrc 12605b261ecSmrg.endif 12705b261ecSmrg 12805b261ecSmrg.if (${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64") 12905b261ecSmrgSUBDIR+= fgen 13005b261ecSmrg.endif 13105b261ecSmrg 13205b261ecSmrg.if ${MACHINE} == "amiga" 13305b261ecSmrgSUBDIR+= amiga-elf2bb 13405b261ecSmrgSUBDIR+= amiga-txlt 13505b261ecSmrg.endif 13605b261ecSmrg 13705b261ecSmrg.if ${MACHINE} == "hp300" 13805b261ecSmrgSUBDIR+= hp300-mkboot 13905b261ecSmrg.endif 14005b261ecSmrg 14105b261ecSmrg.if ${MACHINE} == "evbarm" || ${MACHINE} == "evbmips" || \ 14205b261ecSmrg ${MACHINE} == "evbppc" || ${MACHINE} == "sandpoint" 14305b261ecSmrgSUBDIR+= mkubootimage 14405b261ecSmrg.endif 14505b261ecSmrg 14605b261ecSmrgcheck_MKTOOLS: .PHONY .NOTMAIN 14705b261ecSmrg.if ${MKTOOLS:Uyes} == "no" 14805b261ecSmrg @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 14905b261ecSmrg @echo '*** updating your host toolchain. This should be used only as a' 15005b261ecSmrg @echo '*** temporary workaround for toolchain problems, as it will result' 15105b261ecSmrg @echo '*** in version skew and build errors over time!' 15205b261ecSmrg.endif 15305b261ecSmrg 15405b261ecSmrg.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 15505b261ecSmrgrealall realdepend install: check_MKTOOLS 15605b261ecSmrg 15705b261ecSmrg.for dir in ${SUBDIR:N.WAIT} 15805b261ecSmrgall-${dir} depend-${dir} dependall-${dir} install-${dir}: 15905b261ecSmrg @true 16005b261ecSmrg.endfor 16105b261ecSmrg.endif # } 16205b261ecSmrg 16305b261ecSmrg.include <bsd.subdir.mk> 16405b261ecSmrg.include <bsd.obj.mk> 16505b261ecSmrg 16605b261ecSmrg.if !defined(PREVIOUSTOOLDIR) 16705b261ecSmrg. if exists(PREVIOUSTOOLDIR) 16805b261ecSmrgPREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 16905b261ecSmrg. else 17005b261ecSmrgPREVIOUSTOOLDIR= 17105b261ecSmrg. endif 17205b261ecSmrg.endif 17305b261ecSmrg 1749ace9065SmrgCLEANFILES+= PREVIOUSTOOLDIR 17505b261ecSmrg 17605b261ecSmrgrealall realdepend: .MAKE 17705b261ecSmrg.if !empty(PREVIOUSTOOLDIR) && "${PREVIOUSTOOLDIR}" != "${TOOLDIR}" 17805b261ecSmrg @echo "*** WARNING: TOOLDIR has moved?" 17905b261ecSmrg @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 18005b261ecSmrg @echo "*** != TOOLDIR '${TOOLDIR}'" 18105b261ecSmrg @echo "*** Cleaning mis-matched tools" 18205b261ecSmrg rm -f PREVIOUSTOOLDIR 18305b261ecSmrg (cd ${.CURDIR} && ${MAKE} PREVIOUSTOOLDIR=${TOOLDIR} cleandir) 18405b261ecSmrg.endif 18505b261ecSmrg echo ${TOOLDIR} >PREVIOUSTOOLDIR 18605b261ecSmrg 18705b261ecSmrg# For each .WAIT point, make sure the immediately preceding target is 18805b261ecSmrg# installed before building anything after that point. 18905b261ecSmrg# (dsl: which means that with: 'a b .WAIT c' the build of 'c' waits for the 19005b261ecSmrg# install of 'b', but not the install of 'a'.) 19105b261ecSmrg# 19205b261ecSmrg# We use the "internal" targets and dependencies generated by <bsd.subdir.mk> 19305b261ecSmrg# to achieve this. These targets look like: 19405b261ecSmrg# subdir-all: all-dir1 [.WAIT] all-dir2 etc.. 19505b261ecSmrg# subdir-install: install-dir1 [.WAIT] install-dir2 etc.. 19605b261ecSmrg# and so on for each element in ${TARGETS}, with .WAIT sources inserted at 19705b261ecSmrg# places corresponding to the .WAITs in our $SUBDIR variable. 19805b261ecSmrg# 19905b261ecSmrg# Also, since we're now mixing `install' with `all' and `depend' targets 20005b261ecSmrg# an order relationship between those in each individual subdirectory 20105b261ecSmrg# must be established. 20205b261ecSmrg# 20305b261ecSmrg_deps:= 20405b261ecSmrg_prev:= 20505b261ecSmrg 20605b261ecSmrg.for d in ${SUBDIR} # { 20705b261ecSmrg_this:= ${d} 20805b261ecSmrg 20905b261ecSmrg.if ${_this} == ".WAIT" # { 21005b261ecSmrg 21105b261ecSmrg# setup dependency to apply to all/depend targets in the next group 21205b261ecSmrg_deps:= ${_deps} ${_prev:S/^/install-/} 21305b261ecSmrg 21405b261ecSmrg# if we're building *only* individual targets (i.e. "dependall-yacc"), 21505b261ecSmrg# make sure prerequisite tools build before installing 21605b261ecSmrg# XXX: dsl: this is likely to generate a dependency loop since there is 21705b261ecSmrg# a .ORDER releation between the nodes as well. 21805b261ecSmrg.if !make(all) && !make(dependall) && !make(install) 21905b261ecSmrginstall-${_prev}: dependall-${_prev} 22005b261ecSmrg.endif 22105b261ecSmrg 22205b261ecSmrg.else # ${_this} != ".WAIT" # } { 22305b261ecSmrg 22405b261ecSmrg# order depend/all/install targets for ${d} subdir. 22505b261ecSmrg.ORDER: depend-${d} all-${d} dependall-${d} install-${d} 22605b261ecSmrg 22705b261ecSmrg# prevent cleandir in real{all,depend} from interfering with subdir makes 22805b261ecSmrg.ORDER: realdepend dependall-${d} 22905b261ecSmrg.ORDER: realdepend depend-${d} 23005b261ecSmrg.ORDER: realall all-${d} 23105b261ecSmrg 23205b261ecSmrg# make all/depend-${d} dependent on list of install targets 23305b261ecSmrgdepend-${d} all-${d} dependall-${d}: ${_deps} 23405b261ecSmrg 23505b261ecSmrg.endif # ${_this} != ".WAIT" # } 23605b261ecSmrg 23705b261ecSmrg# stash current name in case the next entry is .WAIT 23805b261ecSmrg_prev:= ${d} 23905b261ecSmrg.endfor # } 24005b261ecSmrg 24105b261ecSmrgcleandir: 24205b261ecSmrg rm -f ${CLEANFILES} 24305b261ecSmrg