xref: /netbsd/tools/Makefile (revision 0c4a5c6f)
1*0c4a5c6fSgarbled#	$NetBSD: Makefile,v 1.116 2008/04/30 21:18:17 garbled Exp $
2c5d597ceStv
314e39089Stv.include <bsd.own.mk>
414e39089Stv
5843978edSmrg.if ${HAVE_GCC} == "4"
667840cd9SjmcTOOLCHAIN_BITS= gmake .WAIT
767840cd9Sjmc.endif
8986979b8Slukem.if ${TOOLCHAIN_MISSING} == "no"
967840cd9SjmcTOOLCHAIN_BITS+= binutils .WAIT
10949cd54dSmrgTOOLCHAIN_BITS+= gcc
1198f3b47aScl.  if ${MKCROSSGDB:Uno} != "no"
1298f3b47aSclTOOLCHAIN_BITS+= gdb
1398f3b47aScl.  endif
146c179181SmrgTOOLCHAIN_BITS+= .WAIT dbsym mdsetimage
153b08abd2Sthorpej# XXX Eventually, we want to be able to build dbsym and mdsetimage
163b08abd2Sthorpej# XXX if EXTERNAL_TOOLCHAIN is set.
17a328e341Stv.endif
18a328e341Stv
19dbf21d98SmrgLINT_BITS=
20dbf21d98Smrg.if ${MKLINT} != "no"
21dbf21d98SmrgLINT_BITS= lint lint2
22dbf21d98Smrg.endif
23dbf21d98Smrg
24b5cd2489Stv# Dependencies in SUBDIR below ordered to maximize parallel ability.
253e591f18Slukem.if !defined(NOSUBDIR)					# {
263e591f18Slukem
2754579742StvSUBDIR=	host-mkdep .WAIT compat .WAIT \
282f0a2749Sriz	binstall .WAIT mktemp .WAIT \
2908202524Sapb		cap_mkdb crunchgen ctags genassym gencat hexdump join \
30dbf21d98Smrg		${LINT_BITS} \
31d9ac053aSgdamore		lorder m4 makewhatis mkdep mtree rpcgen sed tsort uudecode \
329fbd8888Stv	texinfo .WAIT \
33b5cd2489Stv	yacc .WAIT \
34b5cd2489Stv	lex .WAIT \
359fbd8888Stv	${TOOLCHAIN_BITS} \
362965cbcaSjmmv		asn1_compile atf-compile cat cksum compile_et config db \
377f67833eSdyoung		file lint1 \
38a37289dbSdyoung		makefs menuc mkcsmapper mkesdb mklocale mknod msgc \
39a37289dbSdyoung		pax .WAIT \
402ae0c612Sjmc		disklabel .WAIT \
412f0a2749Sriz		paxctl .WAIT \
422ae0c612Sjmc		fdisk .WAIT \
432ae0c612Sjmc		installboot .WAIT \
44fe7ef256Slukem		pwd_mkdb stat sunlabel zic
4587d14ee4Stv
4619ab4b25Stv.if ${MKMAN} != "no"
4719ab4b25StvSUBDIR+=	groff
4819ab4b25Stv.endif
4919ab4b25Stv
5087d14ee4Stv.if ${MKMAINTAINERTOOLS:Uno} != "no"
51e728c9b0SlukemSUBDIR+=	autoconf .WAIT gettext
5287d14ee4Stv.endif
53fc820c72Smrg
549bfe9b99Sjmc.if ${MACHINE} == "hp700"
55bc26aea7SskrllSUBDIR+=	hp700-mkboot
56bc26aea7Sskrll.endif
57bc26aea7Sskrll
589bfe9b99Sjmc.if ${MACHINE} == "ibmnws"
5910c0014bSmattSUBDIR+=	ibmnws-ncdcs
6010c0014bSmatt.endif
6110c0014bSmatt
629bfe9b99Sjmc.if ${MACHINE} == "macppc"
63ca1e0d59SmattSUBDIR+=	macppc-fixcoff
64ca1e0d59Smatt.endif
65ca1e0d59Smatt
66*0c4a5c6fSgarbled.if (${MACHINE} == "prep" || ${MACHINE} == "rs6000" || ${MACHINE} == "bebox")
67c3408ed0SgarbledSUBDIR+=	powerpc-mkbootimage
68c30b41caSkleink.endif
69c30b41caSkleink
700d9e66cdSgmcgarry.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb")
710d9e66cdSgmcgarrySUBDIR+=	mips-elf2ecoff
720d9e66cdSgmcgarry.endif
730d9e66cdSgmcgarry
740ac35082Ssekiya.if (${MACHINE} == "sgimips")
750ac35082SsekiyaSUBDIR+=	sgivol
760ac35082Ssekiya.endif
770ac35082Ssekiya
78ef4ecddaSabs.if ${MACHINE} == "acorn32"
79ef4ecddaSabsSUBDIR+=	sparkcrc
80ef4ecddaSabs.endif
81ef4ecddaSabs
82bf9ec67eSbjh21.if (${MACHINE} == "sparc" || ${MACHINE} == "sparc64")
83bf9ec67eSbjh21SUBDIR+=	fgen
84bf9ec67eSbjh21.endif
85bf9ec67eSbjh21
869a999c37Sjmc.if ${MACHINE} == "bebox"
879a999c37SjmcSUBDIR+=	bebox-elf2pef
889a999c37SjmcSUBDIR+=	bebox-mkbootimage
899a999c37Sjmc.endif
909a999c37Sjmc
91c7464d49Sjmc.if ${MACHINE} == "amiga"
92c7464d49SjmcSUBDIR+=	amiga-elf2bb
93c7464d49SjmcSUBDIR+=	amiga-txlt
94c7464d49Sjmc.endif
95c7464d49Sjmc
969bfe9b99Sjmc.if ${MACHINE} == "hp300"
979bfe9b99SjmcSUBDIR+=	hp300-mkboot
989bfe9b99Sjmc.endif
999bfe9b99Sjmc
1003e591f18Slukem.endif	# ! NOSUBDIR					# }
101c5d597ceStv
1023fd7f6dbSlukemcheck_MKTOOLS: .PHONY .NOTMAIN
1035a0f427eSjmc.if ${MKTOOLS:Uyes} == "no"
104259ff4e7Stv	@echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and'
105259ff4e7Stv	@echo '*** updating your host toolchain.  This should be used only as a'
106259ff4e7Stv	@echo '*** temporary workaround for toolchain problems, as it will result'
107ecc52c58Swiz	@echo '*** in version skew and build errors over time!'
1080d11dd01Sjmc.endif
109259ff4e7Stv
1103fd7f6dbSlukem.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes"	# {
111355436d5Slukemrealall realdepend install: check_MKTOOLS
1123fd7f6dbSlukem
113259ff4e7Stv.for dir in ${SUBDIR:N.WAIT}
114259ff4e7Stvall-${dir} depend-${dir} dependall-${dir} install-${dir}:
115259ff4e7Stv	@true
116259ff4e7Stv.endfor
1173fd7f6dbSlukem.endif							# }
118259ff4e7Stv
119c5d597ceStv.include <bsd.subdir.mk>
120c9a6a2c3Stv.include <bsd.obj.mk>
12161be23b4Stv
122c1af61f8Stron.if !defined(PREVIOUSTOOLDIR)
1233fd7f6dbSlukem.  if exists(PREVIOUSTOOLDIR)
1243fd7f6dbSlukemPREVIOUSTOOLDIR!=	cat PREVIOUSTOOLDIR
1253fd7f6dbSlukem.  else
1263fd7f6dbSlukemPREVIOUSTOOLDIR=
1273fd7f6dbSlukem.  endif
128c1af61f8Stron.endif
1293fd7f6dbSlukem
1303fd7f6dbSlukemCLEANFILES+=	PREVIOUSTOOLDIR
1313fd7f6dbSlukem
132fe4611e5Stronrealall realdepend: .MAKE
13350ef6180Sapb.if !empty(PREVIOUSTOOLDIR) && "${PREVIOUSTOOLDIR}" != "${TOOLDIR}"
1343fd7f6dbSlukem	@echo "*** WARNING: TOOLDIR has moved?"
1353fd7f6dbSlukem	@echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'"
1363fd7f6dbSlukem	@echo "***     !=  TOOLDIR '${TOOLDIR}'"
1373fd7f6dbSlukem	@echo "*** Cleaning mis-matched tools"
1383fd7f6dbSlukem	rm -f PREVIOUSTOOLDIR
1393d00583fSfreza	(cd ${.CURDIR} && ${MAKE} PREVIOUSTOOLDIR=${TOOLDIR} cleandir)
1403fd7f6dbSlukem.endif
1413fd7f6dbSlukem	echo ${TOOLDIR} >PREVIOUSTOOLDIR
1423fd7f6dbSlukem
143a45d07b1Stv# For each .WAIT point, make sure the immediately preceding target is
144a45d07b1Stv# installed before building anything after that point.
1457e3a0208Sdsl# (dsl: which means that with: 'a b .WAIT c' the build of 'c' waits for the
1467e3a0208Sdsl# install of 'b', but not the install of 'a'.)
147ee92d5a6Spk#
148ee92d5a6Spk# We use the "internal" targets and dependencies generated by <bsd.subdir.mk>
149ee92d5a6Spk# to achieve this. These targets look like:
150ee92d5a6Spk#	subdir-all:	all-dir1     [.WAIT] all-dir2     etc..
151ee92d5a6Spk#	subdir-install:	install-dir1 [.WAIT] install-dir2 etc..
152ee92d5a6Spk# and so on for each element in ${TARGETS}, with .WAIT sources inserted at
153ee92d5a6Spk# places corresponding to the .WAITs in our $SUBDIR variable.
154ee92d5a6Spk#
155ee92d5a6Spk# Also, since we're now mixing `install' with `all' and `depend' targets
156ee92d5a6Spk# an order relationship between those in each individual subdirectory
157ee92d5a6Spk# must be established.
158ee92d5a6Spk#
159a45d07b1Stv_deps:=
160a45d07b1Stv_prev:=
161a45d07b1Stv
162b5cd2489Stv.for d in ${SUBDIR}
163b5cd2489Stv_this:=		${d}
164a45d07b1Stv
165b5cd2489Stv.if ${_this} == ".WAIT"
166ee92d5a6Spk
167ee92d5a6Spk# setup dependency to apply to all/depend targets in the next group
168a45d07b1Stv_deps:=		${_deps} ${_prev:S/^/install-/}
169a45d07b1Stv
170a45d07b1Stv# if we're building *only* individual targets (i.e. "dependall-yacc"),
171a45d07b1Stv# make sure prerequisite tools build before installing
1727e3a0208Sdsl# XXX: dsl: this is likely to generate a dependency loop since there is
1737e3a0208Sdsl# a .ORDER releation between the nodes as well.
1747e3a0208Sdsl.if !make(all) && !make(dependall) && !make(install)
175a45d07b1Stvinstall-${_prev}: dependall-${_prev}
176a45d07b1Stv.endif
177ee92d5a6Spk
178b5cd2489Stv.else
179ee92d5a6Spk
1807e3a0208Sdsl# order depend/all/install targets for ${d} subdir.
1817e3a0208Sdsl.ORDER: depend-${d} all-${d} dependall-${d} install-${d}
182a45d07b1Stv
1833d00583fSfreza# prevent cleandir in real{all,depend} from interfering with subdir makes
1843d00583fSfreza.ORDER: realdepend dependall-${d}
1853d00583fSfreza.ORDER: realdepend depend-${d}
1863d00583fSfreza.ORDER: realall all-${d}
1873d00583fSfreza
188a45d07b1Stv# make all/depend-${d} dependent on list of install targets
189a45d07b1Stvdepend-${d} all-${d} dependall-${d}: ${_deps}
190ee92d5a6Spk
191b5cd2489Stv.endif
192a45d07b1Stv
193a45d07b1Stv# stash current name in case the next entry is .WAIT
194a45d07b1Stv_prev:=		${d}
195b5cd2489Stv.endfor
19678da845dStron
19778da845dStroncleandir:
19878da845dStron	rm -f ${CLEANFILES}
199