xref: /netbsd/tools/Makefile (revision 6c179181)
1*6c179181Smrg#	$NetBSD: Makefile,v 1.70 2003/07/25 16:26:51 mrg Exp $
2c5d597ceStv
314e39089Stv.include <bsd.own.mk>
414e39089Stv
5771b8c84Sthorpej.if ${TOOLCHAIN_MISSING} != "yes"
6*6c179181Smrg.  if ${USE_TOOLS_TOOLCHAIN} != "yes"
7*6c179181SmrgTOOLCHAIN_BITS= binutils .WAIT gcc
8*6c179181Smrg.  else
9*6c179181SmrgTOOLCHAIN_BITS= toolchain
10*6c179181Smrg.  endif
11*6c179181SmrgTOOLCHAIN_BITS+= .WAIT dbsym mdsetimage
123b08abd2Sthorpej# XXX Eventually, we want to be able to build dbsym and mdsetimage
133b08abd2Sthorpej# XXX if EXTERNAL_TOOLCHAIN is set.
14a328e341Stv.endif
15a328e341Stv
16b5cd2489Stv# Dependencies in SUBDIR below ordered to maximize parallel ability.
173e591f18Slukem.if !defined(NOSUBDIR)					# {
183e591f18Slukem
1954579742StvSUBDIR=	host-mkdep .WAIT compat .WAIT \
2041f14779Schris	binstall .WAIT mktemp .WAIT \
21ae754e0cSthorpej		cap_mkdb crunchgen ctags gencat hexdump lint lint2 lorder \
229fbd8888Stv		m4 makewhatis mkdep mtree rpcgen tsort uudecode \
239fbd8888Stv	texinfo .WAIT \
24b5cd2489Stv	yacc .WAIT \
25b5cd2489Stv	lex .WAIT \
269fbd8888Stv	${TOOLCHAIN_BITS} \
27fc80f6c5Slukem		asn1_compile cat cksum compile_et config db file installboot \
28e376aa83Stshiozak		lint1 makefs menuc mklocale mkcsmapper mkesdb msgc pax \
29fe7ef256Slukem		pwd_mkdb stat sunlabel zic
3087d14ee4Stv
3119ab4b25Stv.if ${MKMAN} != "no"
3219ab4b25StvSUBDIR+=	groff
3319ab4b25Stv.endif
3419ab4b25Stv
3587d14ee4Stv.if ${MKMAINTAINERTOOLS:Uno} != "no"
36d3501a40StvSUBDIR+=	autoconf gettext
3787d14ee4Stv.endif
38fc820c72Smrg
39c30b41caSkleink.if ${MACHINE} == prep
40c30b41caSkleinkSUBDIR+=	prep-mkbootimage
41c30b41caSkleink.endif
42c30b41caSkleink
430d9e66cdSgmcgarry.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb")
440d9e66cdSgmcgarrySUBDIR+=	mips-elf2ecoff
450d9e66cdSgmcgarry.endif
460d9e66cdSgmcgarry
47bf9ec67eSbjh21.if (${MACHINE} == "sparc" || ${MACHINE} == "sparc64")
48bf9ec67eSbjh21SUBDIR+=	fgen
49bf9ec67eSbjh21.endif
50bf9ec67eSbjh21
513e591f18Slukem.endif	# ! NOSUBDIR					# }
52c5d597ceStv
533fd7f6dbSlukemcheck_MKTOOLS: .PHONY .NOTMAIN
545a0f427eSjmc.if ${MKTOOLS:Uyes} == "no"
55259ff4e7Stv	@echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and'
56259ff4e7Stv	@echo '*** updating your host toolchain.  This should be used only as a'
57259ff4e7Stv	@echo '*** temporary workaround for toolchain problems, as it will result'
58ecc52c58Swiz	@echo '*** in version skew and build errors over time!'
590d11dd01Sjmc.endif
60259ff4e7Stv
613fd7f6dbSlukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes"	# {
62355436d5Slukemrealall realdepend install: check_MKTOOLS
633fd7f6dbSlukem
64259ff4e7Stv.for dir in ${SUBDIR:N.WAIT}
65259ff4e7Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}:
66259ff4e7Stv	@true
67259ff4e7Stv.endfor
683fd7f6dbSlukem.endif							# }
69259ff4e7Stv
70c5d597ceStv.include <bsd.subdir.mk>
71c9a6a2c3Stv.include <bsd.obj.mk>
7261be23b4Stv
733fd7f6dbSlukem.if exists(PREVIOUSTOOLDIR)
743fd7f6dbSlukemPREVIOUSTOOLDIR!=	cat PREVIOUSTOOLDIR
753fd7f6dbSlukem.else
763fd7f6dbSlukemPREVIOUSTOOLDIR=
773fd7f6dbSlukem.endif
783fd7f6dbSlukem
793fd7f6dbSlukemCLEANFILES+=	PREVIOUSTOOLDIR
803fd7f6dbSlukem
81355436d5Slukemrealall realdepend:
823fd7f6dbSlukem.if (${PREVIOUSTOOLDIR} != ${TOOLDIR})
833fd7f6dbSlukem	@echo "*** WARNING: TOOLDIR has moved?"
843fd7f6dbSlukem	@echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'"
853fd7f6dbSlukem	@echo "***     !=  TOOLDIR '${TOOLDIR}'"
863fd7f6dbSlukem	@echo "*** Cleaning mis-matched tools"
873fd7f6dbSlukem	rm -f PREVIOUSTOOLDIR
883fd7f6dbSlukem	${MAKE} cleandir
893fd7f6dbSlukem.endif
903fd7f6dbSlukem	echo ${TOOLDIR} > PREVIOUSTOOLDIR
913fd7f6dbSlukem
92a45d07b1Stv# For each .WAIT point, make sure the immediately preceding target is
93a45d07b1Stv# installed before building anything after that point.
94ee92d5a6Spk#
95ee92d5a6Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk>
96ee92d5a6Spk# to achieve this. These targets look like:
97ee92d5a6Spk#	subdir-all:	all-dir1     [.WAIT] all-dir2     etc..
98ee92d5a6Spk#	subdir-install:	install-dir1 [.WAIT] install-dir2 etc..
99ee92d5a6Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at
100ee92d5a6Spk# places corresponding to the .WAITs in our $SUBDIR variable.
101ee92d5a6Spk#
102ee92d5a6Spk# Also, since we're now mixing `install' with `all' and `depend' targets
103ee92d5a6Spk# an order relationship between those in each individual subdirectory
104ee92d5a6Spk# must be established.
105ee92d5a6Spk#
106a45d07b1Stv_deps:=
107a45d07b1Stv_prev:=
108a45d07b1Stv
109b5cd2489Stv.for d in ${SUBDIR}
110b5cd2489Stv_this:=		${d}
111a45d07b1Stv
112b5cd2489Stv.if ${_this} == ".WAIT"
113ee92d5a6Spk
114ee92d5a6Spk# setup dependency to apply to all/depend targets in the next group
115a45d07b1Stv_deps:=		${_deps} ${_prev:S/^/install-/}
116a45d07b1Stv
117a45d07b1Stv# if we're building *only* individual targets (i.e. "dependall-yacc"),
118a45d07b1Stv# make sure prerequisite tools build before installing
119a45d07b1Stv.if !make(all) && !make(dependall)
120a45d07b1Stvinstall-${_prev}: dependall-${_prev}
121a45d07b1Stv.endif
122ee92d5a6Spk
123b5cd2489Stv.else
124ee92d5a6Spk
125ee92d5a6Spk# order depend/all/install targets for ${d} subdir.  Note the additional
126ee92d5a6Spk# .WAIT to achieve "closure" of the predecessor/successor relationships.
127ee92d5a6Spk.ORDER: depend-${d} all-${d} dependall-${d} .WAIT install-${d}
128a45d07b1Stv
129a45d07b1Stv# make all/depend-${d} dependent on list of install targets
130a45d07b1Stvdepend-${d} all-${d} dependall-${d}: ${_deps}
131ee92d5a6Spk
132b5cd2489Stv.endif
133a45d07b1Stv
134a45d07b1Stv# stash current name in case the next entry is .WAIT
135a45d07b1Stv_prev:=		${d}
136b5cd2489Stv.endfor
13778da845dStron
13878da845dStroncleandir:
13978da845dStron	rm -f ${CLEANFILES}
140