xref: /freebsd/Makefile (revision cf94fb21)
13540f0e1SJordan K. Hubbard#
2cf94fb21SBruce Evans#	$Id: Makefile,v 1.206 1998/08/02 09:24:59 wosch Exp $
3cf763a57SJohn Birrell#
4b97da423SJohn Birrell# While porting to the another architecture include the bootstrap instead
5cf763a57SJohn Birrell# of the normal build.
6cf763a57SJohn Birrell#
786f9ecbaSJohn Birrell.if exists(${.CURDIR}/Makefile.${MACHINE}) && defined(BOOTSTRAP_WORLD)
8b97da423SJohn Birrell.include "${.CURDIR}/Makefile.${MACHINE}"
9cf763a57SJohn Birrell.else
103540f0e1SJordan K. Hubbard#
113540f0e1SJordan K. Hubbard# Make command line options:
126a8d432dSMark Murray#	-DCLOBBER will remove /usr/include
13191ae5bcSJordan K. Hubbard#	-DMAKE_KERBEROS4 to build KerberosIV
143540f0e1SJordan K. Hubbard#	-DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
154620010dSPeter Wemm#	-DNOCLEAN do not clean at all
16dbf1ec59SAdam David#	-DNOTOOLS do not rebuild any tools first
172a407ae5SGeoff Rehmet#	-DNOCRYPT will prevent building of crypt versions
180eec3684SGarrett Wollman#	-DNOLKM do not build loadable kernel modules
193540f0e1SJordan K. Hubbard#	-DNOOBJDIR do not run ``${MAKE} obj''
203540f0e1SJordan K. Hubbard#	-DNOPROFILE do not build profiled libraries
212a407ae5SGeoff Rehmet#	-DNOSECURE do not go into secure subdir
22a962de47SPeter Wemm#	-DNOGAMES do not go into games subdir
2332ec48a5SAdam David#	-DNOSHARE do not go into share subdir
249abd8172SJoshua Peck Macdonald#	-DNOINFO do not make or install info files
25191ae5bcSJordan K. Hubbard#	-DNOLIBC_R do not build libc_r.
265c496949SSatoshi Asami#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
27a962de47SPeter Wemm
28a962de47SPeter Wemm#
29a962de47SPeter Wemm# The intended user-driven targets are:
302799473bSSatoshi Asami# buildworld  - rebuild *everything*, including glue to help do upgrades
312799473bSSatoshi Asami# installworld- install everything built by "buildworld"
322799473bSSatoshi Asami# world       - buildworld + installworld
33a962de47SPeter Wemm# update      - convenient way to update your source tree (eg: sup/cvs)
34a962de47SPeter Wemm# most        - build user commands, no libraries or include files
35a962de47SPeter Wemm# installmost - install user commands, no libraries or include files
36f3c4dd0dSBruce Evans#
37f3c4dd0dSBruce Evans# Standard targets (not defined here) are documented in the makefiles in
38f3c4dd0dSBruce Evans# /usr/share/mk.  These include:
39f3c4dd0dSBruce Evans#		obj depend all install clean cleandepend cleanobj
40a962de47SPeter Wemm
412799473bSSatoshi Asami.if (!make(world)) && (!make(buildworld)) && (!make(installworld))
42228e718fSBruce Evans.MAKEFLAGS:=	-m ${.CURDIR}/share/mk ${.MAKEFLAGS}
432799473bSSatoshi Asami.endif
44c3d9b0f0SRodney W. Grimes
45cf94fb21SBruce Evans#
46cf94fb21SBruce Evans# Pick up any macros that are defined in the src-relative bsd.own.mk
47cf94fb21SBruce Evans# but not in the "system" bsd.own.mk.  The "system" version has
48cf94fb21SBruce Evans# unfortunately already been included by the "system" sys.mk, so this
49cf94fb21SBruce Evans# only works for new macros.  First undefine old macros that cause
50cf94fb21SBruce Evans# problems.
51cf94fb21SBruce Evans#
52cf94fb21SBruce Evans.undef LIBDIR
53cf94fb21SBruce Evans.include "${.CURDIR}/share/mk/bsd.own.mk"
54cf94fb21SBruce Evans
553540f0e1SJordan K. Hubbard# Put initial settings here.
563540f0e1SJordan K. HubbardSUBDIR=
57c3d9b0f0SRodney W. Grimes
58191ae5bcSJordan K. Hubbard# We must do share/info early so that installation of info `dir'
59191ae5bcSJordan K. Hubbard# entries works correctly.  Do it first since it is less likely to
60191ae5bcSJordan K. Hubbard# grow dependencies on include and lib than vice versa.
61191ae5bcSJordan K. Hubbard.if exists(share/info)
62191ae5bcSJordan K. HubbardSUBDIR+= share/info
63191ae5bcSJordan K. Hubbard.endif
64191ae5bcSJordan K. Hubbard
65191ae5bcSJordan K. Hubbard# We must do include and lib early so that the perl *.ph generation
66e080a7f0SRodney W. Grimes# works correctly as it uses the header files installed by this.
6748c51d32SPoul-Henning Kamp.if exists(include)
6848c51d32SPoul-Henning KampSUBDIR+= include
6948c51d32SPoul-Henning Kamp.endif
70e080a7f0SRodney W. Grimes.if exists(lib)
71e080a7f0SRodney W. GrimesSUBDIR+= lib
72e080a7f0SRodney W. Grimes.endif
7348c51d32SPoul-Henning Kamp
743540f0e1SJordan K. Hubbard.if exists(bin)
753540f0e1SJordan K. HubbardSUBDIR+= bin
763540f0e1SJordan K. Hubbard.endif
77a962de47SPeter Wemm.if exists(games) && !defined(NOGAMES)
783540f0e1SJordan K. HubbardSUBDIR+= games
793540f0e1SJordan K. Hubbard.endif
803540f0e1SJordan K. Hubbard.if exists(gnu)
813540f0e1SJordan K. HubbardSUBDIR+= gnu
823540f0e1SJordan K. Hubbard.endif
8329844c8fSBruce Evans.if exists(kerberosIV) && exists(crypto) && !defined(NOCRYPT) && \
8429844c8fSBruce Evans    defined(MAKE_KERBEROS4)
85191ae5bcSJordan K. HubbardSUBDIR+= kerberosIV
8672181495SGeoff Rehmet.endif
873540f0e1SJordan K. Hubbard.if exists(libexec)
883540f0e1SJordan K. HubbardSUBDIR+= libexec
893540f0e1SJordan K. Hubbard.endif
903540f0e1SJordan K. Hubbard.if exists(sbin)
913540f0e1SJordan K. HubbardSUBDIR+= sbin
923540f0e1SJordan K. Hubbard.endif
9332ec48a5SAdam David.if exists(share) && !defined(NOSHARE)
943540f0e1SJordan K. HubbardSUBDIR+= share
953540f0e1SJordan K. Hubbard.endif
963540f0e1SJordan K. Hubbard.if exists(sys)
973540f0e1SJordan K. HubbardSUBDIR+= sys
983540f0e1SJordan K. Hubbard.endif
993540f0e1SJordan K. Hubbard.if exists(usr.bin)
1003540f0e1SJordan K. HubbardSUBDIR+= usr.bin
1013540f0e1SJordan K. Hubbard.endif
1023540f0e1SJordan K. Hubbard.if exists(usr.sbin)
1033540f0e1SJordan K. HubbardSUBDIR+= usr.sbin
1043540f0e1SJordan K. Hubbard.endif
1050eec3684SGarrett Wollman.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
1060eec3684SGarrett WollmanSUBDIR+= secure
1070eec3684SGarrett Wollman.endif
1080eec3684SGarrett Wollman.if exists(lkm) && !defined(NOLKM)
1090eec3684SGarrett WollmanSUBDIR+= lkm
1100eec3684SGarrett Wollman.endif
111c3d9b0f0SRodney W. Grimes
112750f81deSPoul-Henning Kamp# etc must be last for "distribute" to work
113750f81deSPoul-Henning Kamp.if exists(etc) && make(distribute)
114750f81deSPoul-Henning KampSUBDIR+= etc
115750f81deSPoul-Henning Kamp.endif
116750f81deSPoul-Henning Kamp
1173540f0e1SJordan K. Hubbard# These are last, since it is nice to at least get the base system
1183540f0e1SJordan K. Hubbard# rebuilt before you do them.
119d50204c1SJordan K. Hubbard.if defined(LOCAL_DIRS)
120d50204c1SJordan K. Hubbard.for _DIR in ${LOCAL_DIRS}
121d50204c1SJordan K. Hubbard.if exists(${_DIR}) & exists(${_DIR}/Makefile)
122d50204c1SJordan K. HubbardSUBDIR+= ${_DIR}
1233540f0e1SJordan K. Hubbard.endif
124d50204c1SJordan K. Hubbard.endfor
1253540f0e1SJordan K. Hubbard.endif
1263540f0e1SJordan K. Hubbard
127a962de47SPeter Wemm# Handle -DNOOBJDIR, -DNOCLEAN and -DNOCLEANDIR
1283540f0e1SJordan K. Hubbard.if defined(NOOBJDIR)
1293540f0e1SJordan K. HubbardOBJDIR=
1303540f0e1SJordan K. Hubbard.else
1313540f0e1SJordan K. HubbardOBJDIR=		obj
1323540f0e1SJordan K. Hubbard.endif
1334620010dSPeter Wemm
1344620010dSPeter Wemm.if defined(NOCLEAN)
1354620010dSPeter WemmCLEANDIR=
1364620010dSPeter Wemm.else
1373540f0e1SJordan K. Hubbard.if defined(NOCLEANDIR)
1381c9df6b4SBruce EvansCLEANDIR=	clean cleandepend
1393540f0e1SJordan K. Hubbard.else
1403540f0e1SJordan K. HubbardCLEANDIR=	cleandir
1413540f0e1SJordan K. Hubbard.endif
1424620010dSPeter Wemm.endif
1433540f0e1SJordan K. Hubbard
1441c9df6b4SBruce Evans.if !defined(NOCLEAN) && ${.MAKEFLAGS:M-j} == ""
1451c9df6b4SBruce Evans_NODEPEND=	true
1461c9df6b4SBruce Evans.endif
1471c9df6b4SBruce Evans.if defined(_NODEPEND)
1481c9df6b4SBruce Evans_DEPEND=	cleandepend
1491c9df6b4SBruce Evans.else
1501c9df6b4SBruce Evans_DEPEND=	depend
1511c9df6b4SBruce Evans.endif
1521c9df6b4SBruce Evans
15329c03682SJordan K. HubbardSUP?=		cvsup
15429c03682SJordan K. HubbardSUPFLAGS?=	-g -L 2 -P -
155a42830afSAndrey A. Chernov
156a962de47SPeter Wemm#
15713a8a449SBruce Evans# While building tools for bootstrapping, we don't need to waste time on
158ff854580SBruce Evans# shared or profiled libraries, shared linkage, or documentation, except
159ff854580SBruce Evans# when the tools won't get cleaned we must use the defaults for shared
160ff854580SBruce Evans# libraries and shared linkage (and this doesn't waste time).
16142fce637SBruce Evans# XXX actually, we do need to waste time building shared libraries.
162a962de47SPeter Wemm#
163ff854580SBruce Evans.if defined(NOCLEAN)
164ff854580SBruce EvansMK_FLAGS=	-DNOINFO -DNOMAN         -DNOPROFILE
165ff854580SBruce Evans.else
16629844c8fSBruce EvansMK_FLAGS=	-DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED
167ff854580SBruce Evans.endif
1686a8d432dSMark Murray
169a962de47SPeter Wemm#
170a962de47SPeter Wemm# world
171a962de47SPeter Wemm#
172a962de47SPeter Wemm# Attempt to rebuild and reinstall *everything*, with reasonable chance of
173a962de47SPeter Wemm# success, regardless of how old your existing system is.
174a962de47SPeter Wemm#
175a962de47SPeter Wemm# >> Beware, it overwrites the local build environment! <<
176a962de47SPeter Wemm#
177a962de47SPeter Wemmworld:
1786fcd2a47SJordan K. Hubbard	@echo "--------------------------------------------------------------"
1798d558e03SAndrey A. Chernov	@echo "make world started on `LC_TIME=C date`"
1806fcd2a47SJordan K. Hubbard	@echo "--------------------------------------------------------------"
181a962de47SPeter Wemm.if target(pre-world)
1822799473bSSatoshi Asami	@echo
1833540f0e1SJordan K. Hubbard	@echo "--------------------------------------------------------------"
184a962de47SPeter Wemm	@echo " Making 'pre-world' target"
1853540f0e1SJordan K. Hubbard	@echo "--------------------------------------------------------------"
1867b97e2bbSBruce Evans	cd ${.CURDIR}; ${MAKE} pre-world
187a962de47SPeter Wemm.endif
1887b97e2bbSBruce Evans	cd ${.CURDIR}; ${MAKE} buildworld
1897b97e2bbSBruce Evans	cd ${.CURDIR}; ${MAKE} -B installworld
19016a34ebdSJordan K. Hubbard.if target(post-world)
191a962de47SPeter Wemm	@echo
192a962de47SPeter Wemm	@echo "--------------------------------------------------------------"
193a962de47SPeter Wemm	@echo " Making 'post-world' target"
194a962de47SPeter Wemm	@echo "--------------------------------------------------------------"
1957b97e2bbSBruce Evans	cd ${.CURDIR}; ${MAKE} post-world
19616a34ebdSJordan K. Hubbard.endif
197a962de47SPeter Wemm	@echo
198a962de47SPeter Wemm	@echo "--------------------------------------------------------------"
1998d558e03SAndrey A. Chernov	@echo "make world completed on `LC_TIME=C date`"
200b7a48796SPeter Wemm	@echo "--------------------------------------------------------------"
2013540f0e1SJordan K. Hubbard
2022799473bSSatoshi Asami.if defined(MAKEOBJDIRPREFIX)
2032799473bSSatoshi AsamiWORLDTMP=	${MAKEOBJDIRPREFIX}${.CURDIR}/tmp
2042799473bSSatoshi Asami.else
2052799473bSSatoshi AsamiWORLDTMP=	/usr/obj${.CURDIR}/tmp
2062799473bSSatoshi Asami.endif
2072799473bSSatoshi AsamiSTRICTTMPPATH=	${WORLDTMP}/sbin:${WORLDTMP}/usr/sbin:${WORLDTMP}/bin:${WORLDTMP}/usr/bin
2082799473bSSatoshi AsamiTMPPATH=	${STRICTTMPPATH}:${PATH}
2092799473bSSatoshi Asami
2102799473bSSatoshi Asami# XXX COMPILER_PATH is needed for finding cc1, ld and as
211ad6833e4SPhilippe Charnier# XXX GCC_EXEC_PREFIX is for *crt.o.  It is probably unnecessary now
212ad6833e4SPhilippe Charnier#	that LIBRARY_PATH is set.  We still can't use -nostdlib, since gcc
2132799473bSSatoshi Asami#	wouldn't link *crt.o or libgcc if it were used.
2142799473bSSatoshi Asami# XXX LD_LIBRARY_PATH is for ld.so.  It is also used by ld, although we don't
2152799473bSSatoshi Asami#	want that - all compile-time library paths should be resolved by gcc.
2162799473bSSatoshi Asami#	It fails for set[ug]id executables (are any used?).
2172799473bSSatoshi AsamiCOMPILER_ENV=	BISON_SIMPLE=${WORLDTMP}/usr/share/misc/bison.simple \
2182799473bSSatoshi Asami		COMPILER_PATH=${WORLDTMP}/usr/libexec:${WORLDTMP}/usr/bin \
219228e718fSBruce Evans		GCC_EXEC_PREFIX=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib/ \
2202799473bSSatoshi Asami		LD_LIBRARY_PATH=${WORLDTMP}${SHLIBDIR} \
2212799473bSSatoshi Asami		LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib
2222799473bSSatoshi Asami
223090fc164SPeter WemmBMAKEENV=	PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t \
224090fc164SPeter Wemm		OBJFORMAT_PATH=${WORLDTMP}/usr/libexec:/usr/libexec
2252799473bSSatoshi AsamiXMAKEENV=	PATH=${STRICTTMPPATH} ${COMPILER_ENV} \
226090fc164SPeter Wemm		OBJFORMAT_PATH=${WORLDTMP}/usr/libexec \
2271c9df6b4SBruce Evans		CFLAGS="-nostdinc ${CFLAGS}"	# XXX -nostdlib
2282799473bSSatoshi Asami
2292799473bSSatoshi Asami# used to compile and install 'make' in temporary build tree
23047e0b716SBruce EvansMAKETMP=	${WORLDTMP}/make
23147e0b716SBruce EvansIBMAKE=	${BMAKEENV} MAKEOBJDIR=${MAKETMP} ${MAKE} DESTDIR=${WORLDTMP}
2322799473bSSatoshi Asami# bootstrap make
23329844c8fSBruce EvansBMAKE=	${BMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
2342799473bSSatoshi Asami# cross make used for compilation
23529844c8fSBruce EvansXMAKE=	${XMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
2362799473bSSatoshi Asami# cross make used for final installation
23729844c8fSBruce EvansIXMAKE=	${XMAKEENV} ${WORLDTMP}/usr/bin/make
2382799473bSSatoshi Asami
2392799473bSSatoshi Asami#
2402799473bSSatoshi Asami# buildworld
2412799473bSSatoshi Asami#
2422799473bSSatoshi Asami# Attempt to rebuild the entire system, with reasonable chance of
2432799473bSSatoshi Asami# success, regardless of how old your existing system is.
2442799473bSSatoshi Asami#
2452799473bSSatoshi Asamibuildworld:
2462799473bSSatoshi Asami.if !defined(NOCLEAN)
2472799473bSSatoshi Asami	@echo
2482799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2492799473bSSatoshi Asami	@echo " Cleaning up the temporary build tree"
2502799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2512799473bSSatoshi Asami	mkdir -p ${WORLDTMP}
2522799473bSSatoshi Asami	chflags -R noschg ${WORLDTMP}/
2532799473bSSatoshi Asami	rm -rf ${WORLDTMP}
2542799473bSSatoshi Asami.endif
255dbf1ec59SAdam David.if !defined(NOTOOLS)
2562799473bSSatoshi Asami	@echo
2572799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2582799473bSSatoshi Asami	@echo " Making make"
2592799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
26047e0b716SBruce Evans	mkdir -p ${WORLDTMP}/usr/bin ${MAKETMP}
26147e0b716SBruce Evans	( \
2627b97e2bbSBruce Evans	cd ${.CURDIR}/usr.bin/make; \
2637b97e2bbSBruce Evans		MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
2647b97e2bbSBruce Evans		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all; \
2657b97e2bbSBruce Evans		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install; \
26647e0b716SBruce Evans		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean \
26747e0b716SBruce Evans	)
268f55eda87SSøren Schmidt	@echo
269f55eda87SSøren Schmidt	@echo "--------------------------------------------------------------"
27070c9f974SBruce Evans	@echo " Making mtree"
271f55eda87SSøren Schmidt	@echo "--------------------------------------------------------------"
27270c9f974SBruce Evans	mkdir -p ${WORLDTMP}/usr/sbin ${WORLDTMP}/mtree
273f55eda87SSøren Schmidt	( \
274f55eda87SSøren Schmidt	cd ${.CURDIR}/usr.sbin/mtree; \
275f55eda87SSøren Schmidt		MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
27670c9f974SBruce Evans		export MAKEOBJDIR=${WORLDTMP}/mtree; \
27770c9f974SBruce Evans		${BMAKE} ${MK_FLAGS} all; \
27870c9f974SBruce Evans		${BMAKE} ${MK_FLAGS} -B install clean \
279f55eda87SSøren Schmidt	)
280dbf1ec59SAdam David.endif
2812799473bSSatoshi Asami	@echo
2822799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2832799473bSSatoshi Asami	@echo " Making hierarchy"
2842799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2857b97e2bbSBruce Evans	cd ${.CURDIR}; ${BMAKE} hierarchy
2862799473bSSatoshi Asami.if !defined(NOCLEAN)
2872799473bSSatoshi Asami	@echo
2882799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2892799473bSSatoshi Asami	@echo " Cleaning up the obj tree"
2902799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2917b97e2bbSBruce Evans	cd ${.CURDIR}; ${BMAKE} ${CLEANDIR:S/^/par-/}
2922799473bSSatoshi Asami.endif
2932799473bSSatoshi Asami.if !defined(NOOBJDIR)
2942799473bSSatoshi Asami	@echo
2952799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2962799473bSSatoshi Asami	@echo " Rebuilding the obj tree"
2972799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
2987b97e2bbSBruce Evans	cd ${.CURDIR}; ${BMAKE} par-${OBJDIR}
2992799473bSSatoshi Asami.endif
300dbf1ec59SAdam David.if !defined(NOTOOLS)
3012799473bSSatoshi Asami	@echo
3022799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3032799473bSSatoshi Asami	@echo " Rebuilding bootstrap tools"
3042799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3057b97e2bbSBruce Evans	cd ${.CURDIR}; ${BMAKE} bootstrap
3062799473bSSatoshi Asami	@echo
3072799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3082799473bSSatoshi Asami	@echo " Rebuilding tools necessary to build the include files"
3092799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3107b97e2bbSBruce Evans	cd ${.CURDIR}; ${BMAKE} include-tools
311dbf1ec59SAdam David.endif
3122799473bSSatoshi Asami	@echo
3132799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
314228e718fSBruce Evans	@echo " Rebuilding ${DESTDIR}/usr/include"
3152799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3166f9fb94eSPeter Wemm	cd ${.CURDIR}; SHARED=copies ${BMAKE} includes
3172799473bSSatoshi Asami	@echo
3182799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
31929844c8fSBruce Evans	@echo " Rebuilding bootstrap libraries"
3202799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3217b97e2bbSBruce Evans	cd ${.CURDIR}; ${BMAKE} bootstrap-libraries
322dbf1ec59SAdam David.if !defined(NOTOOLS)
3232799473bSSatoshi Asami	@echo
3242799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
325a6919ef8SJohn Birrell	@echo " Rebuilding tools needed to build libraries"
326a6919ef8SJohn Birrell	@echo "--------------------------------------------------------------"
3277b97e2bbSBruce Evans	cd ${.CURDIR}; ${BMAKE} lib-tools
328a6919ef8SJohn Birrell.endif
329a6919ef8SJohn Birrell.if !defined(NOTOOLS)
330a6919ef8SJohn Birrell	@echo
331a6919ef8SJohn Birrell	@echo "--------------------------------------------------------------"
3322799473bSSatoshi Asami	@echo " Rebuilding all other tools needed to build the world"
3332799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3347b97e2bbSBruce Evans	cd ${.CURDIR}; ${BMAKE} build-tools
335dbf1ec59SAdam David.endif
3361c9df6b4SBruce Evans.if !defined(_NODEPEND)
3372799473bSSatoshi Asami	@echo
3382799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3392799473bSSatoshi Asami	@echo " Rebuilding dependencies"
3402799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3417b97e2bbSBruce Evans	cd ${.CURDIR}; ${XMAKE} par-depend
3421c9df6b4SBruce Evans.endif
3432799473bSSatoshi Asami	@echo
3442799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
34529844c8fSBruce Evans	@echo " Building libraries"
34629844c8fSBruce Evans	@echo "--------------------------------------------------------------"
3477b97e2bbSBruce Evans	cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN libraries
34829844c8fSBruce Evans	@echo
34929844c8fSBruce Evans	@echo "--------------------------------------------------------------"
3502799473bSSatoshi Asami	@echo " Building everything.."
3512799473bSSatoshi Asami	@echo "--------------------------------------------------------------"
3527b97e2bbSBruce Evans	cd ${.CURDIR}; ${XMAKE} all
3532799473bSSatoshi Asami
3542799473bSSatoshi Asami#
3552799473bSSatoshi Asami# installworld
3562799473bSSatoshi Asami#
3572799473bSSatoshi Asami# Installs everything compiled by a 'buildworld'.
3582799473bSSatoshi Asami#
3592799473bSSatoshi Asamiinstallworld:
3607b97e2bbSBruce Evans	cd ${.CURDIR}; ${IXMAKE} reinstall
3612799473bSSatoshi Asami
362a962de47SPeter Wemm#
363a962de47SPeter Wemm# reinstall
364a962de47SPeter Wemm#
365a962de47SPeter Wemm# If you have a build server, you can NFS mount the source and obj directories
366a962de47SPeter Wemm# and do a 'make reinstall' on the *client* to install new binaries from the
367a962de47SPeter Wemm# most recent server build.
368a962de47SPeter Wemm#
369a962de47SPeter Wemmreinstall:
3704620010dSPeter Wemm	@echo "--------------------------------------------------------------"
371a962de47SPeter Wemm	@echo " Making hierarchy"
372a962de47SPeter Wemm	@echo "--------------------------------------------------------------"
3737b97e2bbSBruce Evans	cd ${.CURDIR}; ${MAKE} hierarchy
374a962de47SPeter Wemm	@echo
375a962de47SPeter Wemm	@echo "--------------------------------------------------------------"
376b7a48796SPeter Wemm	@echo " Installing everything.."
377b7a48796SPeter Wemm	@echo "--------------------------------------------------------------"
3787b97e2bbSBruce Evans	cd ${.CURDIR}; ${MAKE} install
379cf94fb21SBruce Evans.if ${MACHINE_ARCH} == "i386"
380b7a48796SPeter Wemm	@echo
381b7a48796SPeter Wemm	@echo "--------------------------------------------------------------"
382165932ddSNate Williams	@echo " Re-scanning the shared libraries.."
383165932ddSNate Williams	@echo "--------------------------------------------------------------"
38400ef3836SBruce Evans	cd ${.CURDIR}; /sbin/ldconfig -R
38544600413SJohn Birrell.endif
386165932ddSNate Williams	@echo
387165932ddSNate Williams	@echo "--------------------------------------------------------------"
388b7a48796SPeter Wemm	@echo " Rebuilding man page indexes"
389b7a48796SPeter Wemm	@echo "--------------------------------------------------------------"
3907b97e2bbSBruce Evans	cd ${.CURDIR}/share/man; ${MAKE} makedb
3914620010dSPeter Wemm
392a962de47SPeter Wemm#
393a962de47SPeter Wemm# update
394a962de47SPeter Wemm#
395a962de47SPeter Wemm# Update the source tree, by running sup and/or running cvs to update to the
396a962de47SPeter Wemm# latest copy.
397a962de47SPeter Wemm#
39895516197SPaul Richardsupdate:
39995516197SPaul Richards.if defined(SUP_UPDATE)
40095516197SPaul Richards	@echo "--------------------------------------------------------------"
40129c03682SJordan K. Hubbard	@echo "Running ${SUP}"
40295516197SPaul Richards	@echo "--------------------------------------------------------------"
403a42830afSAndrey A. Chernov	@${SUP} ${SUPFLAGS} ${SUPFILE}
404b032e1f9SAndrey A. Chernov.if defined(SUPFILE1)
405a42830afSAndrey A. Chernov	@${SUP} ${SUPFLAGS} ${SUPFILE1}
406b032e1f9SAndrey A. Chernov.endif
407b032e1f9SAndrey A. Chernov.if defined(SUPFILE2)
408a42830afSAndrey A. Chernov	@${SUP} ${SUPFLAGS} ${SUPFILE2}
409b032e1f9SAndrey A. Chernov.endif
41095516197SPaul Richards.endif
41195516197SPaul Richards.if defined(CVS_UPDATE)
41295516197SPaul Richards	@echo "--------------------------------------------------------------"
41395516197SPaul Richards	@echo "Updating /usr/src from cvs repository" ${CVSROOT}
41495516197SPaul Richards	@echo "--------------------------------------------------------------"
4157b97e2bbSBruce Evans	cd ${.CURDIR}; cvs -q update -P -d
41695516197SPaul Richards.endif
4173540f0e1SJordan K. Hubbard
418a962de47SPeter Wemm#
419a962de47SPeter Wemm# most
420a962de47SPeter Wemm#
421a962de47SPeter Wemm# Build most of the user binaries on the existing system libs and includes.
422a962de47SPeter Wemm#
423ac08bc0cSGarrett Wollmanmost:
424ac08bc0cSGarrett Wollman	@echo "--------------------------------------------------------------"
425ac08bc0cSGarrett Wollman	@echo " Building programs only"
426ac08bc0cSGarrett Wollman	@echo "--------------------------------------------------------------"
4277b97e2bbSBruce Evans	cd ${.CURDIR}/bin;		${MAKE} all
4287b97e2bbSBruce Evans	cd ${.CURDIR}/sbin;		${MAKE} all
4297b97e2bbSBruce Evans	cd ${.CURDIR}/libexec;		${MAKE} all
4307b97e2bbSBruce Evans	cd ${.CURDIR}/usr.bin;		${MAKE} all
4317b97e2bbSBruce Evans	cd ${.CURDIR}/usr.sbin;		${MAKE} all
4327b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/libexec;	${MAKE} all
4337b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/usr.bin;	${MAKE} all
4347b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/usr.sbin;	${MAKE} all
435191ae5bcSJordan K. Hubbard#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
4367b97e2bbSBruce Evans#	cd ${.CURDIR}/kerberosIV;	${MAKE} most
437ac08bc0cSGarrett Wollman#.endif
438ac08bc0cSGarrett Wollman#.if !defined(NOSECURE) && !defined(NOCRYPT)
4397b97e2bbSBruce Evans#	cd ${.CURDIR}/secure;		${MAKE} most
440ac08bc0cSGarrett Wollman#.endif
441ac08bc0cSGarrett Wollman
442a962de47SPeter Wemm#
443a962de47SPeter Wemm# installmost
444a962de47SPeter Wemm#
445a962de47SPeter Wemm# Install the binaries built by the 'most' target.  This does not include
446a962de47SPeter Wemm# libraries or include files.
447a962de47SPeter Wemm#
448a962de47SPeter Wemminstallmost:
449a962de47SPeter Wemm	@echo "--------------------------------------------------------------"
450a962de47SPeter Wemm	@echo " Installing programs only"
451a962de47SPeter Wemm	@echo "--------------------------------------------------------------"
4527b97e2bbSBruce Evans	cd ${.CURDIR}/bin;		${MAKE} install
4537b97e2bbSBruce Evans	cd ${.CURDIR}/sbin;		${MAKE} install
4547b97e2bbSBruce Evans	cd ${.CURDIR}/libexec;		${MAKE} install
4557b97e2bbSBruce Evans	cd ${.CURDIR}/usr.bin;		${MAKE} install
4567b97e2bbSBruce Evans	cd ${.CURDIR}/usr.sbin;		${MAKE} install
4577b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/libexec;	${MAKE} install
4587b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/usr.bin;	${MAKE} install
4597b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/usr.sbin;	${MAKE} install
460191ae5bcSJordan K. Hubbard#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
4617b97e2bbSBruce Evans#	cd ${.CURDIR}/kerberosIV;	${MAKE} installmost
462a962de47SPeter Wemm#.endif
463a962de47SPeter Wemm#.if !defined(NOSECURE) && !defined(NOCRYPT)
4647b97e2bbSBruce Evans#	cd ${.CURDIR}/secure;		${MAKE} installmost
465a962de47SPeter Wemm#.endif
466a962de47SPeter Wemm
467a962de47SPeter Wemm#
468a962de47SPeter Wemm# ------------------------------------------------------------------------
469a962de47SPeter Wemm#
470a962de47SPeter Wemm# From here onwards are utility targets used by the 'make world' and
471a962de47SPeter Wemm# related targets.  If your 'world' breaks, you may like to try to fix
472a962de47SPeter Wemm# the problem and manually run the following targets to attempt to
473a962de47SPeter Wemm# complete the build.  Beware, this is *not* guaranteed to work, you
474a962de47SPeter Wemm# need to have a pretty good grip on the current state of the system
475a962de47SPeter Wemm# to attempt to manually finish it.  If in doubt, 'make world' again.
476a962de47SPeter Wemm#
477a962de47SPeter Wemm
478a962de47SPeter Wemm#
479a962de47SPeter Wemm# heirarchy - ensure that all the needed directories are present
480a962de47SPeter Wemm#
481a962de47SPeter Wemmhierarchy:
4827b97e2bbSBruce Evans	cd ${.CURDIR}/etc;		${MAKE} distrib-dirs
483a962de47SPeter Wemm
484a962de47SPeter Wemm#
485a962de47SPeter Wemm# bootstrap - [re]build tools needed to run the actual build, this includes
486a962de47SPeter Wemm# tools needed by 'make depend', as some tools are needed to generate source
487a962de47SPeter Wemm# for the dependency information to be gathered from.
488a962de47SPeter Wemm#
489a962de47SPeter Wemmbootstrap:
4902799473bSSatoshi Asami.if defined(DESTDIR)
4912799473bSSatoshi Asami	rm -f ${DESTDIR}/usr/src/sys
4922799473bSSatoshi Asami	ln -s ${.CURDIR}/sys ${DESTDIR}/usr/src
4937b97e2bbSBruce Evans	cd ${.CURDIR}/include; find -dx . | cpio -dump ${DESTDIR}/usr/include
494452bbab3SPeter Wemm.for d in net netinet posix4 sys vm machine
495452bbab3SPeter Wemm	if [ -h ${DESTDIR}/usr/include/$d ]; then \
496452bbab3SPeter Wemm		rm -f ${DESTDIR}/usr/include/$d ; \
497452bbab3SPeter Wemm	fi
498452bbab3SPeter Wemm.endfor
4996f9fb94eSPeter Wemm	cd ${.CURDIR}/sys; \
5006f9fb94eSPeter Wemm		find -dx net netinet posix4 sys vm -name '*.h' -o -type d | \
5016f9fb94eSPeter Wemm		cpio -dump ${DESTDIR}/usr/include
5026f9fb94eSPeter Wemm	mkdir -p ${DESTDIR}/usr/include/machine
50344600413SJohn Birrell	cd ${.CURDIR}/sys/${MACHINE_ARCH}/include; find -dx . -name '*.h' -o -type d | \
5046f9fb94eSPeter Wemm		cpio -dump ${DESTDIR}/usr/include/machine
5052799473bSSatoshi Asami.endif
5067b97e2bbSBruce Evans	cd ${.CURDIR}/usr.bin/make; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
5077b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} all; \
50897fe7f47SJordan K. Hubbard		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
5097b97e2bbSBruce Evans	cd ${.CURDIR}/usr.bin/xinstall; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
5107b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} all; \
51197fe7f47SJordan K. Hubbard		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
5126943ec80SBruce Evans	cd ${.CURDIR}/usr.bin/yacc; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
5136943ec80SBruce Evans		${MAKE} ${MK_FLAGS} all; \
5146943ec80SBruce Evans		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
5157b97e2bbSBruce Evans	cd ${.CURDIR}/usr.bin/lex; ${MAKE} bootstrap; \
5167b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
5177b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} -DNOLIB all; \
5189e3b9b4dSBruce Evans		${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR}
5199e3b9b4dSBruce Evans.if !defined(NOOBJDIR)
5209e3b9b4dSBruce Evans	cd ${.CURDIR}/usr.bin/lex; ${MAKE} ${OBJDIR}
5219e3b9b4dSBruce Evans.endif
5227c780e8eSJordan K. Hubbard	cd ${.CURDIR}/usr.sbin/mtree; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
5237c780e8eSJordan K. Hubbard		${MAKE} ${MK_FLAGS} all; \
5247c780e8eSJordan K. Hubbard		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
5256f9fb94eSPeter Wemm.if defined(DESTDIR)
5266f9fb94eSPeter Wemm	cd ${.CURDIR}/include && ${MAKE} copies
5276f9fb94eSPeter Wemm.endif
528a962de47SPeter Wemm
529a962de47SPeter Wemm#
530a962de47SPeter Wemm# include-tools - generally the same as 'bootstrap', except that it's for
531a962de47SPeter Wemm# things that are specifically needed to generate include files.
532a962de47SPeter Wemm#
5332799473bSSatoshi Asami# XXX should be merged with bootstrap, it's not worth keeeping them separate.
5342799473bSSatoshi Asami# Well, maybe it is now.  We force 'cleandepend' here to avoid dependencies
5352799473bSSatoshi Asami# on cleaned away headers in ${WORLDTMP}.
536a962de47SPeter Wemm#
537a962de47SPeter Wemminclude-tools:
5384a9d3efbSBruce Evans.for d in usr.bin/compile_et usr.bin/rpcgen
5397b97e2bbSBruce Evans	cd ${.CURDIR}/$d; ${MAKE} cleandepend; \
5407b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
5417b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} all; \
54297fe7f47SJordan K. Hubbard		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
5434a9d3efbSBruce Evans.endfor
544a962de47SPeter Wemm
545a962de47SPeter Wemm#
546a962de47SPeter Wemm# includes - possibly generate and install the include files.
547a962de47SPeter Wemm#
5485b16f1c5SPeter Wemmincludes:
5493540f0e1SJordan K. Hubbard.if defined(CLOBBER)
5505a9e9cbaSRodney W. Grimes	rm -rf ${DESTDIR}/usr/include/*
5515a9e9cbaSRodney W. Grimes	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
5525a9e9cbaSRodney W. Grimes		-p ${DESTDIR}/usr/include
5533540f0e1SJordan K. Hubbard.endif
5547b97e2bbSBruce Evans	cd ${.CURDIR}/include;			${MAKE} -B all install
5557b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/include;		${MAKE} install
5567b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/lib/libmp;		${MAKE} beforeinstall
5577b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/lib/libobjc;		${MAKE} beforeinstall
5587b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/lib/libreadline;	${MAKE} beforeinstall
5597b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/lib/libregex;		${MAKE} beforeinstall
5607b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/lib/libstdc++;	${MAKE} beforeinstall
5617b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/lib/libg++;		${MAKE} beforeinstall
5627b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/lib/libdialog;	${MAKE} beforeinstall
5637b97e2bbSBruce Evans	cd ${.CURDIR}/gnu/lib/libgmp;		${MAKE} beforeinstall
564191ae5bcSJordan K. Hubbard.if exists(secure) && !defined(NOCRYPT)
5657b97e2bbSBruce Evans	cd ${.CURDIR}/secure/lib/libdes;	${MAKE} beforeinstall
566191ae5bcSJordan K. Hubbard.endif
567191ae5bcSJordan K. Hubbard.if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
5687b97e2bbSBruce Evans	cd ${.CURDIR}/kerberosIV/lib/libacl;	${MAKE} beforeinstall
5697b97e2bbSBruce Evans	cd ${.CURDIR}/kerberosIV/lib/libkadm;	${MAKE} beforeinstall
5707b97e2bbSBruce Evans	cd ${.CURDIR}/kerberosIV/lib/libkafs;	${MAKE} beforeinstall
5717b97e2bbSBruce Evans	cd ${.CURDIR}/kerberosIV/lib/libkdb;	${MAKE} beforeinstall
5727b97e2bbSBruce Evans	cd ${.CURDIR}/kerberosIV/lib/libkrb;	${MAKE} beforeinstall
5737b97e2bbSBruce Evans	cd ${.CURDIR}/kerberosIV/lib/libtelnet; ${MAKE} beforeinstall
574191ae5bcSJordan K. Hubbard.else
5757b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libtelnet;		${MAKE} beforeinstall
576c368d11dSGeoff Rehmet.endif
577cf763a57SJohn Birrell.if exists(${.CURDIR}/lib/csu/${MACHINE})
5787b97e2bbSBruce Evans	cd ${.CURDIR}/lib/csu/${MACHINE};	${MAKE} beforeinstall
579cf763a57SJohn Birrell.endif
5807b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libalias;		${MAKE} beforeinstall
5817b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libc;			${MAKE} beforeinstall
5827b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libcalendar;		${MAKE} beforeinstall
5837b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libcurses;		${MAKE} beforeinstall
5847b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libdisk;		${MAKE} beforeinstall
5857b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libedit;		${MAKE} beforeinstall
5867b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libftpio;		${MAKE} beforeinstall
5877b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libmd;		${MAKE} beforeinstall
5887b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libmytinfo;		${MAKE} beforeinstall
5897b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libncurses;		${MAKE} beforeinstall
5902c0e14c2SRodney W. Grimes.if !defined(WANT_CSRG_LIBM)
5917b97e2bbSBruce Evans	cd ${.CURDIR}/lib/msun;			${MAKE} beforeinstall
592b8afcd33SPaul Richards.endif
5937b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libopie;		${MAKE} beforeinstall
5947b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libpcap;		${MAKE} beforeinstall
5957b97e2bbSBruce Evans	cd ${.CURDIR}/lib/librpcsvc;		${MAKE} beforeinstall
5967b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libskey;		${MAKE} beforeinstall
597191ae5bcSJordan K. Hubbard.if !defined(NOTCL) && exists (${.CURDIR}/contrib/tcl) && \
598191ae5bcSJordan K. Hubbard	exists(${.CURDIR}/usr.bin/tclsh) && exists (${.CURDIR}/lib/libtcl)
5997b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libtcl;		${MAKE} installhdrs
600191ae5bcSJordan K. Hubbard.endif
6017b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libtermcap;		${MAKE} beforeinstall
6027b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libcom_err;		${MAKE} beforeinstall
6037b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libss;		${MAKE} -B hdrs beforeinstall
6047b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libscsi;		${MAKE} beforeinstall
6057b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libutil;		${MAKE} beforeinstall
6067b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libvgl;		${MAKE} beforeinstall
6077b97e2bbSBruce Evans	cd ${.CURDIR}/lib/libz;			${MAKE} beforeinstall
6087b97e2bbSBruce Evans	cd ${.CURDIR}/usr.bin/f2c;		${MAKE} beforeinstall
6097b97e2bbSBruce Evans	cd ${.CURDIR}/usr.bin/lex;		${MAKE} beforeinstall
6103540f0e1SJordan K. Hubbard
611a962de47SPeter Wemm#
61244600413SJohn Birrell# Declare tools if they are not required on all architectures.
61344600413SJohn Birrell#
614cf94fb21SBruce Evans.if ${MACHINE_ARCH} == "i386"
61544600413SJohn Birrell# aout tools:
61644600413SJohn Birrell_aout_ar	= usr.bin/ar
61744600413SJohn Birrell_aout_as	= gnu/usr.bin/as
61844600413SJohn Birrell_aout_ld	= gnu/usr.bin/ld
61944600413SJohn Birrell_aout_nm	= usr.bin/nm
62044600413SJohn Birrell_aout_ranlib	= usr.bin/ranlib
62144600413SJohn Birrell_aout_size	= usr.bin/size
62244600413SJohn Birrell_aout_strip	= usr.bin/strip
62344600413SJohn Birrell_objformat	= usr.bin/objformat
62444600413SJohn Birrell.endif
62544600413SJohn Birrell
62644600413SJohn Birrell#
627a962de47SPeter Wemm# lib-tools - build tools to compile and install the libraries.
628a962de47SPeter Wemm#
6292799473bSSatoshi Asami# XXX gperf is required for cc
6302799473bSSatoshi Asami# XXX a new ld and tsort is required for cc
63165b94a0dSNate Williamslib-tools:
6322799473bSSatoshi Asami.for d in				\
6332799473bSSatoshi Asami		gnu/usr.bin/gperf	\
63444600413SJohn Birrell		${_aout_ld}		\
6352799473bSSatoshi Asami		usr.bin/tsort		\
63644600413SJohn Birrell		${_aout_as}		\
6372799473bSSatoshi Asami		gnu/usr.bin/bison	\
6382799473bSSatoshi Asami		gnu/usr.bin/cc		\
63944600413SJohn Birrell		${_aout_ar}		\
64000ef3836SBruce Evans		usr.bin/env		\
6412799473bSSatoshi Asami		usr.bin/lex/lib		\
6422799473bSSatoshi Asami		usr.bin/mk_cmds		\
64344600413SJohn Birrell		${_aout_nm}		\
64444600413SJohn Birrell		${_aout_ranlib}		\
64544600413SJohn Birrell		${_aout_strip}		\
64677dfb966SSøren Schmidt		gnu/usr.bin/binutils	\
6471907cbbdSPeter Wemm		usr.bin/uudecode	\
64844600413SJohn Birrell		${_objformat}
6497b97e2bbSBruce Evans	cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
6507b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} all; \
6517b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} -B install; \
652ff854580SBruce Evans		${MAKE} ${MK_FLAGS:S/-DNOPIC//} -B ${CLEANDIR} ${OBJDIR}
6532799473bSSatoshi Asami.endfor
65465b94a0dSNate Williams
655a962de47SPeter Wemm#
65629844c8fSBruce Evans# We have to know too much about ordering and subdirs in the lib trees:
657a962de47SPeter Wemm#
65829844c8fSBruce Evans# To satisfy shared library linkage when only the libraries being built
65929844c8fSBruce Evans# are visible:
66013a8a449SBruce Evans#
66113a8a449SBruce Evans# libcom_err must be built before libss.
66213a8a449SBruce Evans# libcrypt and libmd must be built before libskey.
66313a8a449SBruce Evans# libm must be built before libtcl.
66413a8a449SBruce Evans# libmytinfo must be built before libdialog and libncurses.
66513a8a449SBruce Evans# libncurses must be built before libdialog.
66613a8a449SBruce Evans# libtermcap must be built before libcurses, libedit and libreadline.
66713a8a449SBruce Evans#
66829844c8fSBruce Evans# Some libraries are built conditionally and/or are in inconsistently
66929844c8fSBruce Evans# named directories:
67029844c8fSBruce Evans#
67129844c8fSBruce Evans.if exists(lib/csu/${MACHINE}.pcc)
67229844c8fSBruce Evans_csu=lib/csu/${MACHINE}.pcc
67329844c8fSBruce Evans.else
67429844c8fSBruce Evans_csu=lib/csu/${MACHINE}
67513a8a449SBruce Evans.endif
67629844c8fSBruce Evans
67700ef3836SBruce Evans.if !defined(NOSECURE) && !defined(NOCRYPT)
67800ef3836SBruce Evans_libcrypt=	secure/lib/libcrypt lib/libcrypt
679215c9a37SPeter Wemm.else
680215c9a37SPeter Wemm_libcrypt=	lib/libcrypt
68129844c8fSBruce Evans.endif
68229844c8fSBruce Evans
68329844c8fSBruce Evans.if defined(WANT_CSRG_LIBM)
68429844c8fSBruce Evans_libm=	lib/libm
68529844c8fSBruce Evans.else
68629844c8fSBruce Evans_libm=	lib/msun
68729844c8fSBruce Evans.endif
68829844c8fSBruce Evans
68929844c8fSBruce Evans#
69029844c8fSBruce Evans# bootstrap-libraries - build just enough libraries for the bootstrap
69129844c8fSBruce Evans# tools, and install them under ${WORLDTMP}.
69229844c8fSBruce Evans#
69329844c8fSBruce Evans# Build csu and libgcc early so that some tools get linked to the new
69429844c8fSBruce Evans# versions (too late for the main tools, however).  Then build the
69529844c8fSBruce Evans# necessary prerequisite libraries (libtermcap just needs to be before
69629844c8fSBruce Evans# libcurses, and this only matters for the NOCLEAN case when NOPIC is
69729844c8fSBruce Evans# not set).
69829844c8fSBruce Evans#
69929844c8fSBruce Evans# This is mostly wrong.  The build tools must run on the host system,
70029844c8fSBruce Evans# so they should use host libraries.  We depend on the target being
70129844c8fSBruce Evans# similar enough to the host for new target libraries to work on the
70229844c8fSBruce Evans# host.
70329844c8fSBruce Evans#
70429844c8fSBruce Evansbootstrap-libraries:
70529844c8fSBruce Evans.for _lib in ${_csu} gnu/usr.bin/cc/libgcc lib/libtermcap \
706cabb97dcSSøren Schmidt    gnu/lib/libregex gnu/lib/libreadline lib/libc \
707215c9a37SPeter Wemm    ${_libcrypt} lib/libcurses lib/libedit ${_libm} \
70829844c8fSBruce Evans    lib/libmd lib/libutil lib/libz usr.bin/lex/lib
70913a8a449SBruce Evans.if exists(${.CURDIR}/${_lib})
7107b97e2bbSBruce Evans	cd ${.CURDIR}/${_lib}; \
7117b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
7127b97e2bbSBruce Evans		${MAKE} ${MK_FLAGS} all; \
71397fe7f47SJordan K. Hubbard		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
714598c1e50SJohn Polstra.endif
71513a8a449SBruce Evans.endfor
71629844c8fSBruce Evans
71729844c8fSBruce Evans#
71829844c8fSBruce Evans# libraries - build all libraries, and install them under ${DESTDIR}.
71929844c8fSBruce Evans#
72029844c8fSBruce Evans# The ordering is not as special as for bootstrap-libraries.  Build
72129844c8fSBruce Evans# the prerequisites first, then build almost everything else in
72229844c8fSBruce Evans# alphabetical order.
72329844c8fSBruce Evans#
72429844c8fSBruce Evanslibraries:
72529844c8fSBruce Evans.for _lib in lib/libcom_err ${_libcrypt} ${_libm} lib/libmytinfo \
72629844c8fSBruce Evans    lib/libncurses lib/libtermcap \
72729844c8fSBruce Evans    gnu/lib gnu/usr.bin/cc/libgcc lib usr.bin/lex/lib usr.sbin/pcvt/keycap
72829844c8fSBruce Evans.if exists(${.CURDIR}/${_lib})
7297b97e2bbSBruce Evans	cd ${.CURDIR}/${_lib}; ${MAKE} all; ${MAKE} -B install
73029844c8fSBruce Evans.endif
73129844c8fSBruce Evans.endfor
73213a8a449SBruce Evans.if exists(${.CURDIR}/secure/lib) && !defined(NOCRYPT) && !defined(NOSECURE)
7337b97e2bbSBruce Evans	cd ${.CURDIR}/secure/lib; ${MAKE} all; ${MAKE} -B install
734a962de47SPeter Wemm.endif
73513a8a449SBruce Evans.if exists(${.CURDIR}/kerberosIV/lib) && !defined(NOCRYPT) && \
73613a8a449SBruce Evans    defined(MAKE_KERBEROS4)
7377b97e2bbSBruce Evans	cd ${.CURDIR}/kerberosIV/lib; ${MAKE} all; ${MAKE} -B install
73872181495SGeoff Rehmet.endif
7393540f0e1SJordan K. Hubbard
7401d86f959SBruce Evans#
7411d86f959SBruce Evans# Exclude unused tools from build-tools.
7421d86f959SBruce Evans#
7431d86f959SBruce Evans.if !defined(NOGAMES) && exists(${.CURDIR}/games)
7441d86f959SBruce Evans_adventure=	games/adventure
7451d86f959SBruce Evans_caesar=	games/caesar
7461d86f959SBruce Evans_hack=		games/hack
7471d86f959SBruce Evans_phantasia=	games/phantasia
7481d86f959SBruce Evans_strfile=	games/fortune/strfile
7491d86f959SBruce Evans.endif
7501d86f959SBruce Evans.if !defined(NOPERL)
751e4b5626aSJohn Hay_perl=		gnu/usr.bin/perl/perl
752e4b5626aSJohn Hay.endif
7531d86f959SBruce Evans.if !defined(NOSHARE) && exists(${.CURDIR}/share)
7541d86f959SBruce Evans_scrnmaps=	share/syscons/scrnmaps
7551d86f959SBruce Evans.endif
7561d86f959SBruce Evans.if !defined(NOLKM) && exists(${.CURDIR}/lkm)
7571d86f959SBruce Evans_linux=		lkm/linux
7581d86f959SBruce Evans.endif
7591d86f959SBruce Evans
7601d86f959SBruce EvansBTMAKEFLAGS=	${MK_FLAGS} -D_BUILD_TOOLS
761e4b5626aSJohn Hay
762a962de47SPeter Wemm#
763a962de47SPeter Wemm# build-tools - build and install any other tools needed to complete the
764a962de47SPeter Wemm# compile and install.
7652799473bSSatoshi Asami# ifdef stale
7662799473bSSatoshi Asami# bc and cpp are required to build groff.  Otherwise, the order here is
7672799473bSSatoshi Asami# mostly historical, i.e., bogus.
7682799473bSSatoshi Asami# chmod is used to build gcc's tmpmultilib[2] at obscure times.
7692799473bSSatoshi Asami# endif stale
7702799473bSSatoshi Asami# XXX uname is a bug - the target should not depend on the host.
771a962de47SPeter Wemm#
7722e10cdcdSPoul-Henning Kampbuild-tools:
773f3c4dd0dSBruce Evans.for d in				\
7742799473bSSatoshi Asami		bin/cat 		\
7752799473bSSatoshi Asami		bin/chmod		\
7762799473bSSatoshi Asami		bin/cp 			\
7772799473bSSatoshi Asami		bin/date		\
7782799473bSSatoshi Asami		bin/dd			\
7792799473bSSatoshi Asami		bin/echo		\
7802799473bSSatoshi Asami		bin/expr		\
7812799473bSSatoshi Asami		bin/hostname		\
7822799473bSSatoshi Asami		bin/ln			\
7832799473bSSatoshi Asami		bin/ls			\
7842799473bSSatoshi Asami		bin/mkdir		\
7852799473bSSatoshi Asami		bin/mv			\
7862799473bSSatoshi Asami		bin/rm			\
7872799473bSSatoshi Asami		bin/test		\
7881d86f959SBruce Evans		${_caesar}		\
7891d86f959SBruce Evans		${_strfile}		\
790f3c4dd0dSBruce Evans		gnu/usr.bin/awk		\
7912799473bSSatoshi Asami		gnu/usr.bin/bc		\
7922799473bSSatoshi Asami		gnu/usr.bin/grep	\
7932799473bSSatoshi Asami		gnu/usr.bin/groff	\
7942799473bSSatoshi Asami		gnu/usr.bin/gzip	\
7952799473bSSatoshi Asami		gnu/usr.bin/man/makewhatis	\
796e66437e7SBruce Evans		gnu/usr.bin/patch	\
797e4b5626aSJohn Hay		${_perl}		\
7982799473bSSatoshi Asami		gnu/usr.bin/sort	\
7992799473bSSatoshi Asami		gnu/usr.bin/texinfo	\
8002799473bSSatoshi Asami		usr.bin/basename	\
8012799473bSSatoshi Asami		usr.bin/cap_mkdb	\
8022799473bSSatoshi Asami		usr.bin/chflags		\
8032799473bSSatoshi Asami		usr.bin/cmp		\
8042799473bSSatoshi Asami		usr.bin/col		\
80527406826SBruce Evans		usr.bin/colldef		\
8062799473bSSatoshi Asami		usr.bin/cpp		\
8072799473bSSatoshi Asami		usr.bin/expand		\
8082799473bSSatoshi Asami		usr.bin/file2c		\
8092799473bSSatoshi Asami		usr.bin/find		\
8102799473bSSatoshi Asami		usr.bin/gencat		\
811873e8456SJordan K. Hubbard		usr.bin/id		\
812e2fea9c5SPeter Wemm		usr.bin/join		\
8132799473bSSatoshi Asami		usr.bin/lorder		\
8142799473bSSatoshi Asami		usr.bin/m4		\
8152799473bSSatoshi Asami		usr.bin/mkdep		\
81627406826SBruce Evans		usr.bin/mklocale	\
8172799473bSSatoshi Asami		usr.bin/paste		\
8182799473bSSatoshi Asami		usr.bin/sed		\
81944600413SJohn Birrell		${_aout_size}		\
8202799473bSSatoshi Asami		usr.bin/soelim		\
8212799473bSSatoshi Asami		usr.bin/symorder	\
8222799473bSSatoshi Asami		usr.bin/touch		\
8232799473bSSatoshi Asami		usr.bin/tr		\
8242799473bSSatoshi Asami		usr.bin/true		\
8252799473bSSatoshi Asami		usr.bin/uname		\
8262799473bSSatoshi Asami		usr.bin/uuencode	\
8272799473bSSatoshi Asami		usr.bin/vgrind		\
8282799473bSSatoshi Asami		usr.bin/vi		\
8292799473bSSatoshi Asami		usr.bin/wc		\
83047e0b716SBruce Evans		usr.bin/xargs		\
8312799473bSSatoshi Asami		usr.bin/yacc		\
8322799473bSSatoshi Asami		usr.sbin/chown		\
8332799473bSSatoshi Asami		usr.sbin/mtree		\
83478beb0d5SJordan K. Hubbard		usr.sbin/zic		\
83578beb0d5SJordan K. Hubbard		bin/sh
8361d86f959SBruce Evans	cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} ${_DEPEND}; \
8371d86f959SBruce Evans		${MAKE} ${BTMAKEFLAGS} all; \
8381d86f959SBruce Evans		${MAKE} ${BTMAKEFLAGS} -B install ${CLEANDIR} ${OBJDIR}
83997fe7f47SJordan K. Hubbard.endfor
8401d86f959SBruce Evans.if !defined(NOGAMES) && exists(${.CURDIR}/games)
84127406826SBruce Evans	cd ${DESTDIR}/usr/games; cp -p caesar strfile ${DESTDIR}/usr/bin
8421d86f959SBruce Evans.endif
84327406826SBruce Evans.for d in				\
84427406826SBruce Evans		bin/sh			\
8451d86f959SBruce Evans		${_adventure}		\
8461d86f959SBruce Evans		${_hack}		\
8471d86f959SBruce Evans		${_phantasia}		\
84827406826SBruce Evans		gnu/usr.bin/cc/cc_tools	\
84927406826SBruce Evans		lib/libmytinfo		\
8501d86f959SBruce Evans		${_linux}		\
8511d86f959SBruce Evans		${_scrnmaps}		\
85227406826SBruce Evans		sys/i386/boot/netboot
8531d86f959SBruce Evans	cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} build-tools
85427406826SBruce Evans.endfor
8551d86f959SBruce Evans	cd ${.CURDIR}/usr.bin/tn3270/tools; ${MAKE} ${BTMAKEFLAGS} all
85697fe7f47SJordan K. Hubbard
8571c9df6b4SBruce Evans.for __target in clean cleandepend cleandir depend obj
85897fe7f47SJordan K. Hubbard.for entry in ${SUBDIR}
85997fe7f47SJordan K. Hubbard${entry}.${__target}__D: .PHONY
860878739deSDmitrij Tejblum	@if test -d ${.CURDIR}/${entry}.${MACHINE}; then \
86197fe7f47SJordan K. Hubbard		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE}"; \
86297fe7f47SJordan K. Hubbard		edir=${entry}.${MACHINE}; \
86397fe7f47SJordan K. Hubbard		cd ${.CURDIR}/$${edir}; \
86497fe7f47SJordan K. Hubbard	else \
86597fe7f47SJordan K. Hubbard		${ECHODIR} "===> ${DIRPRFX}${entry}"; \
86697fe7f47SJordan K. Hubbard		edir=${entry}; \
86797fe7f47SJordan K. Hubbard		cd ${.CURDIR}/$${edir}; \
86897fe7f47SJordan K. Hubbard	fi; \
86997fe7f47SJordan K. Hubbard	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
87097fe7f47SJordan K. Hubbard.endfor
87197fe7f47SJordan K. Hubbardpar-${__target}: ${SUBDIR:S/$/.${__target}__D/}
872f3c4dd0dSBruce Evans.endfor
8733540f0e1SJordan K. Hubbard
874cf763a57SJohn Birrell.endif
875cf763a57SJohn Birrell
876c3d9b0f0SRodney W. Grimes.include <bsd.subdir.mk>
877