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