Makefile.inc1 revision 142643
1101099Srwatson#
2126097Srwatson# $FreeBSD: head/Makefile.inc1 142643 2005-02-27 11:51:46Z ru $
3140628Srwatson#
4101099Srwatson# Make command line options:
5101099Srwatson#	-DNO_DYNAMICROOT do not link /bin and /sbin dynamically
6101099Srwatson#	-DNO_KERBEROS Do not build Heimdal (Kerberos 5)
7101099Srwatson#	-DNO_RESCUE do not build rescue binaries
8140628Srwatson#	-DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
9140628Srwatson#	-DNO_CLEAN do not clean at all
10140628Srwatson#	-DNO_CRYPT will prevent building of crypt versions
11140628Srwatson#	-DNO_MAN do not build the manual pages
12101099Srwatson#	-DNO_PROFILE do not build profiled libraries
13101099Srwatson#	-DNO_GAMES do not go into games subdir
14101099Srwatson#	-DNO_SHARE do not go into share subdir
15101099Srwatson#	-DNO_INFO do not make or install info files
16101099Srwatson#	-DNO_LIBC_R do not build libc_r.
17101099Srwatson#	-DNO_FORTRAN do not build g77 and related libraries.
18101099Srwatson#	-DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel
19101099Srwatson#	-DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel
20101099Srwatson#	-DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel
21101099Srwatson#	-DNO_PORTSUPDATE do not update ports in ${MAKE} update
22101099Srwatson#	-DNO_DOCUPDATE do not update doc in ${MAKE} update
23101099Srwatson#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
24101099Srwatson#	TARGET_ARCH="arch" to crossbuild world to a different arch
25101099Srwatson
26101099Srwatson#
27101099Srwatson# The intended user-driven targets are:
28101099Srwatson# buildworld  - rebuild *everything*, including glue to help do upgrades
29101099Srwatson# installworld- install everything built by "buildworld"
30101099Srwatson# update      - convenient way to update your source tree (eg: cvsup/cvs)
31101099Srwatson#
32101099Srwatson# Standard targets (not defined here) are documented in the makefiles in
33101099Srwatson# /usr/share/mk.  These include:
34101099Srwatson#		obj depend all install clean cleandepend cleanobj
35101099Srwatson
36101099Srwatson# We must do share/info early so that installation of info `dir'
37101099Srwatson# entries works correctly.  Do it first since it is less likely to
38101099Srwatson# grow dependencies on include and lib than vice versa.
39101099Srwatson#
40101099Srwatson# We must do lib and libexec before bin, because if installworld
41101099Srwatson# installs a new /bin/sh, the 'make' command will *immediately*
42101099Srwatson# use that new version.  And the new (dynamically-linked) /bin/sh
43101099Srwatson# will expect to find appropriate libraries in /lib and /libexec.
44101099Srwatson#
45101099Srwatson# We must do etc last for install/distribute to work.
46105988Srwatson#
47101099SrwatsonSUBDIR=	share/info include lib libexec bin
48164184Strhodes.if !defined(NO_GAMES)
49101099SrwatsonSUBDIR+=games
50103183Sbde.endif
51145076ScsjpSUBDIR+=gnu
52101099Srwatson.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
53101099SrwatsonSUBDIR+=kerberos5
54115497Srwatson.endif
55101099Srwatson.if !defined(NO_RESCUE)
56101099SrwatsonSUBDIR+=rescue
57101099Srwatson.endif
58105696SrwatsonSUBDIR+=sbin
59101099Srwatson.if !defined(NO_CRYPT)
60101099SrwatsonSUBDIR+=secure
61101099Srwatson.endif
62101099Srwatson.if !defined(NO_SHARE)
63101099SrwatsonSUBDIR+=share
64150340Sphk.endif
65101099SrwatsonSUBDIR+=sys usr.bin usr.sbin etc
66140628Srwatson
67140628Srwatson# These are last, since it is nice to at least get the base system
68140628Srwatson# rebuilt before you do them.
69101099Srwatson.for _DIR in ${LOCAL_DIRS}
70101099Srwatson.if exists(${.CURDIR}/${_DIR}/Makefile)
71101099SrwatsonSUBDIR+= ${_DIR}
72101099Srwatson.endif
73101099Srwatson.endfor
74101099Srwatson
75101099Srwatson.if defined(SUBDIR_OVERRIDE)
76101099SrwatsonSUBDIR=		${SUBDIR_OVERRIDE}
77101099Srwatson.endif
78122875Srwatson
79101099Srwatson.if defined(NO_CLEANDIR)
80101099SrwatsonCLEANDIR=	clean cleandepend
81122879Srwatson.else
82101099SrwatsonCLEANDIR=	cleandir
83101099Srwatson.endif
84101099Srwatson
85101099SrwatsonCVS?=		cvs
86101099SrwatsonCVSFLAGS?=	-A -P -d -I!
87101099SrwatsonSUP?=		/usr/local/bin/cvsup
88101099SrwatsonSUPFLAGS?=	-g -L 2 -P -
89101099Srwatson.if defined(SUPHOST)
90101099SrwatsonSUPFLAGS+=	-h ${SUPHOST}
91101099Srwatson.endif
92101099Srwatson
93105988SrwatsonMAKEOBJDIRPREFIX?=	/usr/obj
94105988Srwatson.if !defined(OSRELDATE)
95105988Srwatson.if exists(/usr/include/osreldate.h)
96105988SrwatsonOSRELDATE!=	awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
97107731Srwatson		/usr/include/osreldate.h
98101099Srwatson.else
99101099SrwatsonOSRELDATE=	0
100102980Srwatson.endif
101101099Srwatson.endif
102101099SrwatsonTARGET_ARCH?=	${MACHINE_ARCH}
103101099Srwatson.if ${TARGET_ARCH} == ${MACHINE_ARCH}
104101099SrwatsonTARGET?=	${MACHINE}
105101099SrwatsonTARGET_CPUTYPE?=${CPUTYPE}
106101099Srwatson.else
107101099SrwatsonTARGET?=	${TARGET_ARCH}
108101099SrwatsonTARGET_CPUTYPE?=
109101099Srwatson.endif
110101099Srwatson.if !empty(TARGET_CPUTYPE)
111101099Srwatson_TARGET_CPUTYPE=${TARGET_CPUTYPE}
112101099Srwatson.else
113101099Srwatson_TARGET_CPUTYPE=dummy
114101099Srwatson.endif
115101099Srwatson_CPUTYPE!=	MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \
116101099Srwatson		-f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE
117105643Srwatson.if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
118105643Srwatson.error CPUTYPE global should be set with ?=.
119105643Srwatson.endif
120105643Srwatson.if make(buildworld)
121105606SrwatsonBUILD_ARCH!=	sysctl -n hw.machine_arch
122105606Srwatson.if ${MACHINE_ARCH} != ${BUILD_ARCH}
123105606Srwatson.error To cross-build, set TARGET_ARCH.
124105606Srwatson.endif
125105606Srwatson.endif
126153927Scsjp.if ${MACHINE} == ${TARGET}
127153927ScsjpOBJTREE=	${MAKEOBJDIRPREFIX}
128153927Scsjp.else
129153927ScsjpOBJTREE=	${MAKEOBJDIRPREFIX}/${TARGET}
130153927Scsjp.endif
131105637SrwatsonWORLDTMP=	${OBJTREE}${.CURDIR}/${MACHINE_ARCH}
132101099Srwatson# /usr/games added for fortune which depend on strfile
133105637SrwatsonBPATH=		${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games
134105637SrwatsonXPATH=		${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games
135101099SrwatsonSTRICTTMPPATH=	${BPATH}:${XPATH}
136101099SrwatsonTMPPATH=	${STRICTTMPPATH}:${PATH}
137101099Srwatson
138132781SkanINSTALLTMP!=	/usr/bin/mktemp -d -u -t install
139101099Srwatson
140122879Srwatson#
141101099Srwatson# Building a world goes through the following stages
142105643Srwatson#
143105643Srwatson# 1. legacy stage [BMAKE]
144105643Srwatson#	This stage is responsible for creating compatibility
145105643Srwatson#	shims that are needed by the bootstrap-tools,
146105643Srwatson#	build-tools and cross-tools stages.
147105643Srwatson# 1. bootstrap-tools stage [BMAKE]
148105643Srwatson#	This stage is responsible for creating programs that
149105643Srwatson#	are needed for backward compatibility reasons. They
150105643Srwatson#	are not built as cross-tools.
151105643Srwatson# 2. build-tools stage [TMAKE]
152101099Srwatson#	This stage is responsible for creating the object
153104514Srwatson#	tree and building any tools that are needed during
154101099Srwatson#	the build process.
155101099Srwatson# 3. cross-tools stage [XMAKE]
156122879Srwatson#	This stage is responsible for creating any tools that
157101099Srwatson#	are needed for cross-builds. A cross-compiler is one
158101099Srwatson#	of them.
159101099Srwatson# 4. world stage [WMAKE]
160101099Srwatson#	This stage actually builds the world.
161101099Srwatson# 5. install stage (optional) [IMAKE]
162101099Srwatson#	This stage installs a previously built world.
163101099Srwatson#
164122879Srwatson
165101099SrwatsonBOOTSTRAPPING?=	0
166101099Srwatson
167101099Srwatson# Common environment for world related stages
168101099SrwatsonCROSSENV=	MAKEOBJDIRPREFIX=${OBJTREE} \
169101099Srwatson		MACHINE_ARCH=${TARGET_ARCH} \
170105634Srwatson		MACHINE=${TARGET} \
171105634Srwatson		CPUTYPE=${TARGET_CPUTYPE} \
172105634Srwatson		GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \
173105634Srwatson		GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \
174105634Srwatson		GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac
175105634Srwatson
176105634Srwatson# bootstrap-tools stage
177105634SrwatsonBMAKEENV=	INSTALL="sh ${.CURDIR}/tools/install.sh" \
178105634Srwatson		PATH=${BPATH}:${PATH} \
179101099Srwatson		WORLDTMP=${WORLDTMP} \
180101099Srwatson		MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}"
181101099SrwatsonBMAKE=		MAKEOBJDIRPREFIX=${WORLDTMP} \
182105643Srwatson		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
183101099Srwatson		DESTDIR= \
184105736Srwatson		BOOTSTRAPPING=${OSRELDATE} \
185101099Srwatson		-DNO_HTML -DNO_INFO -DNO_LINT -DNO_MAN -DNO_PIC -DNO_PROFILE \
186101099Srwatson		-DNO_SHARED -DNO_CPU_CFLAGS -DNO_WARNS
187101099Srwatson
188101099Srwatson# build-tools stage
189101099SrwatsonTMAKE=		MAKEOBJDIRPREFIX=${OBJTREE} \
190101099Srwatson		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
191101099Srwatson		DESTDIR= \
192101099Srwatson		BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS
193101099Srwatson
194101099Srwatson# cross-tools stage
195101099SrwatsonXMAKE=		TOOLS_PREFIX=${WORLDTMP} ${BMAKE} -DNO_FORTRAN -DNO_GDB
196101099Srwatson
197101099Srwatson# world stage
198101099SrwatsonWMAKEENV=	${CROSSENV} \
199101099Srwatson		_SHLIBDIRPREFIX=${WORLDTMP} \
200101099Srwatson		INSTALL="sh ${.CURDIR}/tools/install.sh" \
201101099Srwatson		PATH=${TMPPATH}
202101099SrwatsonWMAKE=		${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
203101099Srwatson
204101099Srwatson.if ${MACHINE_ARCH} == "amd64"
205101099Srwatson# 32 bit world
206101099SrwatsonLIB32TMP=	${OBJTREE}${.CURDIR}/lib32
207101099Srwatson
208101099SrwatsonLIB32PREFLAGS=	-m32 -march=athlon-xp -msse2 -mfancy-math-387 -DCOMPAT_32BIT
209101099SrwatsonLIB32POSTFLAGS=	-I${LIB32TMP}/usr/include \
210101099Srwatson		-L${LIB32TMP}/usr/lib32 \
211101099Srwatson		-B${LIB32TMP}/usr/lib32
212101099SrwatsonLIB32CC=	${LIB32PREFLAGS} \
213105643Srwatson		${LIB32POSTFLAGS}
214105643SrwatsonLIB32CXX=	${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/c++/3.4 \
215105643Srwatson		${LIB32POSTFLAGS}
216105643SrwatsonLIB32OBJC=	${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/objc \
217105643Srwatson		${LIB32POSTFLAGS}
218101099Srwatson
219101099Srwatson# Yes, the flags are redundant.
220101099SrwatsonLIB32MAKEENV=	MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
221101099Srwatson		_SHLIBDIRPREFIX=${LIB32TMP} \
222101099Srwatson		MACHINE_ARCH=i386 \
223101099Srwatson		INSTALL="sh ${.CURDIR}/tools/install.sh" \
224101099Srwatson		PATH=${TMPPATH} \
225101099Srwatson		CC="cc ${LIB32CC}" \
226101099Srwatson		CXX="c++ ${LIB32CXX}" \
227101099Srwatson		OBJC="cc ${LIB32OBJC}" \
228101099Srwatson		LD="ld -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
229101099Srwatson		AS="as --32" \
230101099Srwatson		LIBDIR=/usr/lib32 \
231101099Srwatson		SHLIBDIR=/usr/lib32
232105988Srwatson
233105988SrwatsonLIB32MAKE=	${LIB32MAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \
234105988Srwatson		-DNO_BIND -DNO_MAN -DNO_INFO -DNO_HTML \
235105988Srwatson		CC="cc ${LIB32CC}" \
236132232Srwatson		CXX="c++ ${LIB32CXX}" \
237132232Srwatson		OBJC="cc ${LIB32OBJC}" \
238132232Srwatson		LD="ld -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
239105988Srwatson		AS="as --32" \
240105988Srwatson		LIBDIR=/usr/lib32 \
241105988Srwatson		SHLIBDIR=/usr/lib32
242105988Srwatson.endif
243105988Srwatson
244105988Srwatson# install stage
245101099Srwatson.if empty(.MAKEFLAGS:M-n)
246101099SrwatsonIMAKEENV=	${CROSSENV} \
247101099Srwatson		PATH=${STRICTTMPPATH}:${INSTALLTMP}
248101099Srwatson.else
249101099SrwatsonIMAKEENV=	${CROSSENV} \
250101099Srwatson		PATH=${TMPPATH}:${INSTALLTMP}
251101099Srwatson.endif
252101099SrwatsonIMAKE=		${IMAKEENV} ${MAKE} -f Makefile.inc1
253101099Srwatson
254101099Srwatson# kernel stage
255136774SrwatsonKMAKEENV=	${WMAKEENV}
256136774Srwatson
257101099Srwatson#
258101099Srwatson# buildworld
259132232Srwatson#
260132232Srwatson# Attempt to rebuild the entire system, with reasonable chance of
261103750Srwatson# success, regardless of how old your existing system is.
262132232Srwatson#
263101099Srwatson_worldtmp:
264101099Srwatson.if ${.CURDIR:C/[^,]//g} != ""
265132232Srwatson#	The m4 build of sendmail files doesn't like it if ',' is used
266132232Srwatson#	anywhere in the path of it's files.
267101099Srwatson	@echo
268101099Srwatson	@echo "*** Error: path to source tree contains a comma ','"
269101099Srwatson	@echo
270101099Srwatson	false
271101099Srwatson.endif
272101099Srwatson	@echo
273132232Srwatson	@echo "--------------------------------------------------------------"
274101099Srwatson	@echo ">>> Rebuilding the temporary build tree"
275132232Srwatson	@echo "--------------------------------------------------------------"
276132232Srwatson.if !defined(NO_CLEAN)
277132232Srwatson	rm -rf ${WORLDTMP}
278132232Srwatson.else
279101099Srwatson	rm -rf ${WORLDTMP}/legacy/usr/include
280132232Srwatson	# XXX - These two can depend on any header file.
281101099Srwatson	rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c
282101099Srwatson	rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c
283101099Srwatson.endif
284101099Srwatson.for _dir in \
285101099Srwatson    usr/bin usr/games usr/include/c++/3.4 usr/include/sys usr/lib \
286101099Srwatson    usr/libexec usr/sbin usr/share/dict \
287101099Srwatson    usr/share/groff_font/devX100 \
288101099Srwatson    usr/share/groff_font/devX100-12 \
289101099Srwatson    usr/share/groff_font/devX75 \
290101099Srwatson    usr/share/groff_font/devX75-12 \
291101099Srwatson    usr/share/groff_font/devascii \
292101099Srwatson    usr/share/groff_font/devcp1047 \
293101099Srwatson    usr/share/groff_font/devdvi \
294101099Srwatson    usr/share/groff_font/devhtml \
295132232Srwatson    usr/share/groff_font/devkoi8-r \
296101099Srwatson    usr/share/groff_font/devlatin1 \
297101099Srwatson    usr/share/groff_font/devlbp \
298132232Srwatson    usr/share/groff_font/devlj4 \
299132232Srwatson    usr/share/groff_font/devps \
300132232Srwatson    usr/share/groff_font/devutf8 \
301132232Srwatson    usr/share/tmac/mdoc usr/share/tmac/mm
302101099Srwatson	mkdir -p ${WORLDTMP}/legacy/${_dir}
303132232Srwatson.endfor
304101099Srwatson.for _dir in \
305101099Srwatson    lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \
306101099Srwatson    usr/libexec usr/sbin usr/share/misc \
307105634Srwatson    usr/share/snmp/defs usr/share/snmp/mibs
308105634Srwatson	mkdir -p ${WORLDTMP}/${_dir}
309105634Srwatson.endfor
310132232Srwatson	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
311132232Srwatson	    -p ${WORLDTMP}/usr/include >/dev/null
312105634Srwatson	ln -sf ${.CURDIR}/sys ${WORLDTMP}
313105634Srwatson.if defined(WITH_BIND_LIBS) && !defined(NO_BIND)
314105634Srwatson	mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \
315105634Srwatson	    -p ${WORLDTMP}/usr/include >/dev/null
316105634Srwatson.endif
317105634Srwatson_legacy:
318105637Srwatson	@echo
319105634Srwatson	@echo "--------------------------------------------------------------"
320105634Srwatson	@echo ">>> stage 1.1: legacy release compatibility shims"
321105634Srwatson	@echo "--------------------------------------------------------------"
322105634Srwatson	${_+_}cd ${.CURDIR}; ${BMAKE} legacy
323105634Srwatson_bootstrap-tools:
324105634Srwatson	@echo
325106090Srwatson	@echo "--------------------------------------------------------------"
326105634Srwatson	@echo ">>> stage 1.2: bootstrap tools"
327105634Srwatson	@echo "--------------------------------------------------------------"
328105634Srwatson	${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools
329105634Srwatson_cleanobj:
330106090Srwatson.if !defined(NO_CLEAN)
331105634Srwatson	@echo
332132232Srwatson	@echo "--------------------------------------------------------------"
333132232Srwatson	@echo ">>> stage 2.1: cleaning up the object tree"
334105634Srwatson	@echo "--------------------------------------------------------------"
335105634Srwatson	${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/}
336105634Srwatson.endif
337105634Srwatson_obj:
338105634Srwatson	@echo
339105634Srwatson	@echo "--------------------------------------------------------------"
340105634Srwatson	@echo ">>> stage 2.2: rebuilding the object tree"
341105634Srwatson	@echo "--------------------------------------------------------------"
342105634Srwatson	${_+_}cd ${.CURDIR}; ${WMAKE} par-obj
343105634Srwatson_build-tools:
344105634Srwatson	@echo
345105634Srwatson	@echo "--------------------------------------------------------------"
346105634Srwatson	@echo ">>> stage 2.3: build tools"
347105634Srwatson	@echo "--------------------------------------------------------------"
348105634Srwatson	${_+_}cd ${.CURDIR}; ${TMAKE} build-tools
349105634Srwatson_cross-tools:
350106091Srwatson	@echo
351132232Srwatson	@echo "--------------------------------------------------------------"
352105988Srwatson	@echo ">>> stage 3: cross tools"
353105988Srwatson	@echo "--------------------------------------------------------------"
354132232Srwatson	${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools
355132232Srwatson_includes:
356105988Srwatson	@echo
357132232Srwatson	@echo "--------------------------------------------------------------"
358105988Srwatson	@echo ">>> stage 4.1: building includes"
359105988Srwatson	@echo "--------------------------------------------------------------"
360105634Srwatson	${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes
361101099Srwatson_libraries:
362101099Srwatson	@echo
363101099Srwatson	@echo "--------------------------------------------------------------"
364132232Srwatson	@echo ">>> stage 4.2: building libraries"
365132232Srwatson	@echo "--------------------------------------------------------------"
366101099Srwatson	${_+_}cd ${.CURDIR}; \
367101099Srwatson	    ${WMAKE} -DNO_FSCHG -DNO_HTML -DNO_INFO -DNO_LINT -DNO_MAN -DNO_PROFILE \
368101099Srwatson	    libraries
369101099Srwatson_depend:
370101099Srwatson	@echo
371101099Srwatson	@echo "--------------------------------------------------------------"
372132232Srwatson	@echo ">>> stage 4.3: make dependencies"
373105643Srwatson	@echo "--------------------------------------------------------------"
374132232Srwatson	${_+_}cd ${.CURDIR}; ${WMAKE} par-depend
375101099Srwatsoneverything:
376101099Srwatson	@echo
377101099Srwatson	@echo "--------------------------------------------------------------"
378101099Srwatson	@echo ">>> stage 4.4: building everything"
379101099Srwatson	@echo "--------------------------------------------------------------"
380101099Srwatson	${_+_}cd ${.CURDIR}; ${WMAKE} par-all
381101099Srwatson.if ${MACHINE_ARCH} == "amd64"
382132232Srwatsonbuild32:
383101099Srwatson	@echo
384101099Srwatson	@echo "--------------------------------------------------------------"
385101099Srwatson	@echo ">>> stage 5.1: building 32 bit shim libraries"
386101099Srwatson	@echo "--------------------------------------------------------------"
387101099Srwatson.for _dir in \
388101099Srwatson    lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \
389101099Srwatson    usr/libexec usr/sbin usr/share/misc \
390101099Srwatson    usr/share/snmp/defs usr/share/snmp/mibs
391101099Srwatson	mkdir -p ${LIB32TMP}/${_dir}
392101099Srwatson.endfor
393101099Srwatson	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
394105643Srwatson	    -p ${LIB32TMP}/usr/include >/dev/null
395105643Srwatson	ln -sf ${.CURDIR}/sys ${WORLDTMP}
396105643Srwatson.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
397101099Srwatson.for _t in obj depend all
398101099Srwatson	cd ${.CURDIR}/kerberos5/tools; \
399101099Srwatson	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} ${_t}
400101099Srwatson.endfor
401101099Srwatson.endif
402101099Srwatson.for _t in obj includes
403101099Srwatson	cd ${.CURDIR}/include; \
404101099Srwatson	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
405101099Srwatson	cd ${.CURDIR}/lib; \
406101099Srwatson	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
407101099Srwatson	cd ${.CURDIR}/gnu/lib; \
408101099Srwatson	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
409101099Srwatson.if !defined(NO_CRYPT)
410101099Srwatson	cd ${.CURDIR}/secure/lib; \
411105643Srwatson	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
412105643Srwatson.endif
413105643Srwatson.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
414101099Srwatson	cd ${.CURDIR}/kerberos5/lib; \
415101099Srwatson	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
416101099Srwatson.endif
417101099Srwatson.endfor
418101099Srwatson.for _dir in usr.sbin/pcvt/keycap usr.bin/lex/lib
419101099Srwatson	cd ${.CURDIR}/${_dir}; \
420101099Srwatson	    ${LIB32MAKE} DESTDIR=${LIB32TMP} obj
421101099Srwatson.endfor
422101099Srwatson.for _dir in lib/libncurses lib/libmagic
423101099Srwatson	cd ${.CURDIR}/${_dir}; \
424101099Srwatson	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} build-tools
425101099Srwatson.endfor
426101099Srwatson	cd ${.CURDIR}; \
427101099Srwatson	    ${LIB32MAKE} -f Makefile.inc1 DESTDIR=${LIB32TMP} libraries 
428101099Srwatson.for _t in obj depend all
429101099Srwatson	cd ${.CURDIR}/libexec/rtld-elf; \
430101099Srwatson	    PROG=ld-elf32.so.1 ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
431101099Srwatson.endfor
432101099Srwatson
433101099Srwatsoninstall32:
434105643Srwatson	mkdir -p ${DESTDIR}/usr/lib32	# XXX add to mtree
435105643Srwatson	cd ${.CURDIR}/lib; ${LIB32MAKE} install
436101099Srwatson	cd ${.CURDIR}/gnu/lib; ${LIB32MAKE} install
437101099Srwatson.if !defined(NO_CRYPT)
438101099Srwatson	cd ${.CURDIR}/secure/lib; ${LIB32MAKE} install
439101099Srwatson.endif
440105643Srwatson	cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32MAKE} install
441105643Srwatson.endif
442105643Srwatson
443105643Srwatson
444101099SrwatsonWMAKE_TGTS=
445101099Srwatson.if !defined(SUBDIR_OVERRIDE)
446105643SrwatsonWMAKE_TGTS+=	_worldtmp _legacy _bootstrap-tools
447105643Srwatson.endif
448105643SrwatsonWMAKE_TGTS+=	_cleanobj _obj _build-tools
449105643Srwatson.if !defined(SUBDIR_OVERRIDE)
450101099SrwatsonWMAKE_TGTS+=	_cross-tools
451101099Srwatson.endif
452101099SrwatsonWMAKE_TGTS+=	_includes _libraries _depend everything
453101099Srwatson.if ${MACHINE_ARCH} == "amd64" && defined(WITH_LIB32)
454132232SrwatsonWMAKE_TGTS+=	build32
455105643Srwatson.endif
456101099Srwatson
457101099Srwatsonbuildworld: ${WMAKE_TGTS}
458132232Srwatson.ORDER: ${WMAKE_TGTS}
459132232Srwatson
460105643Srwatsonbuildenv:
461132232Srwatson	@echo Entering world for ${TARGET_ARCH}:${TARGET}
462132232Srwatson	@cd ${.CURDIR} && env ${WMAKEENV} sh || true
463132232Srwatson
464101099SrwatsonTOOLCHAIN_TGTS=	${WMAKE_TGTS:N_depend:Neverything}
465101099Srwatsontoolchain: ${TOOLCHAIN_TGTS}
466101099Srwatsonkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries}
467101099Srwatson
468101099Srwatson#
469105643Srwatson# Use this to add checks to installworld/installkernel targets.
470101099Srwatson#
471101099SrwatsonSPECIAL_INSTALLCHECKS=
472101099Srwatson
473101099Srwatson#
474101099Srwatson# installcheck
475101099Srwatson#
476101099Srwatson# Checks to be sure system is ready for installworld
477101099Srwatson#
478101099SrwatsonCHECK_UIDS=
479132232SrwatsonCHECK_GIDS=
480101099Srwatson.if !defined(NO_SENDMAIL)
481101099SrwatsonCHECK_UIDS+=	smmsp
482132232SrwatsonCHECK_GIDS+=	smmsp
483132232Srwatson.endif
484101099Srwatson.if !defined(NO_PF)
485132232SrwatsonCHECK_UIDS+=	proxy
486132232SrwatsonCHECK_GIDS+=	proxy authpf
487101099Srwatson.endif
488101099Srwatsoninstallcheck: ${SPECIAL_INSTALLCHECKS}
489105656Srwatson.for uid in ${CHECK_UIDS}
490105656Srwatson	@if ! `id -u ${uid} >/dev/null 2>&1`; then \
491105656Srwatson		echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \
492105656Srwatson		false; \
493132232Srwatson	fi
494132232Srwatson.endfor
495105656Srwatson.for gid in ${CHECK_GIDS}
496105656Srwatson	@if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \
497105656Srwatson		echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \
498105656Srwatson		false; \
499101099Srwatson	fi
500101099Srwatson.endfor
501101099Srwatson
502101099Srwatson#
503101099Srwatson# distributeworld
504101099Srwatson#
505101099Srwatson# Distributes everything compiled by a `buildworld'.
506122879Srwatson#
507122879Srwatson# installworld
508101099Srwatson#
509101099Srwatson# Installs everything compiled by a 'buildworld'.
510101099Srwatson#
511101099Srwatsondistributeworld installworld: installcheck
512101099Srwatson	mkdir -p ${INSTALLTMP}
513101099Srwatson	for prog in [ awk cap_mkdb cat chflags chmod chown \
514104514Srwatson	    date echo egrep find grep \
515101099Srwatson	    ln make mkdir mtree mv pwd_mkdb rm sed sh sysctl \
516101099Srwatson	    test true uname wc zic; do \
517132781Skan		cp `which $$prog` ${INSTALLTMP}; \
518101099Srwatson	done
519101099Srwatson	${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}
520101099Srwatson	rm -rf ${INSTALLTMP}
521104514Srwatson
522101099Srwatson#
523101099Srwatson# reinstall
524132781Skan#
525101099Srwatson# If you have a build server, you can NFS mount the source and obj directories
526101099Srwatson# and do a 'make reinstall' on the *client* to install new binaries from the
527101099Srwatson# most recent server build.
528101099Srwatson#
529101099Srwatsonreinstall: ${SPECIAL_INSTALLCHECKS}
530101099Srwatson	@echo "--------------------------------------------------------------"
531101099Srwatson	@echo ">>> Making hierarchy"
532104514Srwatson	@echo "--------------------------------------------------------------"
533101099Srwatson	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
534101099Srwatson	@echo
535101099Srwatson	@echo "--------------------------------------------------------------"
536132781Skan	@echo ">>> Installing everything"
537101099Srwatson	@echo "--------------------------------------------------------------"
538101099Srwatson	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
539105696Srwatson.if ${MACHINE_ARCH} == "amd64" && defined(WITH_LIB32)
540115497Srwatson	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
541115497Srwatson.endif
542115497Srwatson
543105696Srwatsonredistribute:
544115497Srwatson	@echo "--------------------------------------------------------------"
545115497Srwatson	@echo ">>> Distributing everything"
546105696Srwatson	@echo "--------------------------------------------------------------"
547115497Srwatson	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute
548105696Srwatson
549105696Srwatson#
550105696Srwatson# buildkernel and installkernel
551115497Srwatson#
552105696Srwatson# Which kernels to build and/or install is specified by setting
553105696Srwatson# KERNCONF. If not defined a GENERIC kernel is built/installed.
554115497Srwatson# Only the existing (depending TARGET) config files are used
555105696Srwatson# for building kernels and only the first of these is designated
556105696Srwatson# as the one being installed.
557115497Srwatson#
558105696Srwatson# Note that we have to use TARGET instead of TARGET_ARCH when
559105696Srwatson# we're in kernel-land. Since only TARGET_ARCH is (expected) to
560115497Srwatson# be set to cross-build, we have to make sure TARGET is set
561115497Srwatson# properly.
562115497Srwatson
563115497Srwatson.if !defined(KERNCONF) && defined(KERNEL)
564115497SrwatsonKERNCONF=	${KERNEL}
565115497SrwatsonKERNWARN=
566115497Srwatson.else
567115497SrwatsonKERNCONF?=	GENERIC
568115497Srwatson.endif
569115497SrwatsonINSTKERNNAME?=	kernel
570115497Srwatson
571115497SrwatsonKERNSRCDIR?=	${.CURDIR}/sys
572115497SrwatsonKRNLCONFDIR=	${KERNSRCDIR}/${TARGET}/conf
573115497SrwatsonKRNLOBJDIR=	${OBJTREE}${KERNSRCDIR}
574115497SrwatsonKERNCONFDIR?=	${KRNLCONFDIR}
575115497Srwatson
576115497SrwatsonBUILDKERNELS=
577105696SrwatsonINSTALLKERNEL=
578115497Srwatson.for _kernel in ${KERNCONF}
579105696Srwatson.if exists(${KERNCONFDIR}/${_kernel})
580105696SrwatsonBUILDKERNELS+=	${_kernel}
581105696Srwatson.if empty(INSTALLKERNEL)
582105696SrwatsonINSTALLKERNEL= ${_kernel}
583105696Srwatson.endif
584105696Srwatson.endif
585105696Srwatson.endfor
586115497Srwatson
587116701Srwatson#
588116701Srwatson# buildkernel
589116701Srwatson#
590116701Srwatson# Builds all kernels defined by BUILDKERNELS.
591116701Srwatson#
592115497Srwatsonbuildkernel:
593101099Srwatson.if empty(BUILDKERNELS)
594116701Srwatson	@echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \
595101099Srwatson	false
596105696Srwatson.endif
597132232Srwatson.if defined(KERNWARN)
598132232Srwatson	@echo "--------------------------------------------------------------"
599115497Srwatson	@echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF="
600105696Srwatson	@echo "--------------------------------------------------------------"
601105696Srwatson	@sleep 3
602105696Srwatson.endif
603105696Srwatson	@echo
604116701Srwatson.for _kernel in ${BUILDKERNELS}
605105696Srwatson	@echo "--------------------------------------------------------------"
606105696Srwatson	@echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`"
607116701Srwatson	@echo "--------------------------------------------------------------"
608115497Srwatson	@echo "===> ${_kernel}"
609105696Srwatson	mkdir -p ${KRNLOBJDIR}
610105696Srwatson.if !defined(NO_KERNELCONFIG)
611116701Srwatson	@echo
612105696Srwatson	@echo "--------------------------------------------------------------"
613105696Srwatson	@echo ">>> stage 1: configuring the kernel"
614116701Srwatson	@echo "--------------------------------------------------------------"
615115497Srwatson	cd ${KRNLCONFDIR}; \
616105696Srwatson		PATH=${TMPPATH} \
617105696Srwatson		    config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
618116701Srwatson			${KERNCONFDIR}/${_kernel}
619105696Srwatson.endif
620105696Srwatson.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
621105696Srwatson	@echo
622105696Srwatson	@echo "--------------------------------------------------------------"
623105696Srwatson	@echo ">>> stage 2.1: cleaning up the object tree"
624105696Srwatson	@echo "--------------------------------------------------------------"
625105696Srwatson	cd ${KRNLOBJDIR}/${_kernel}; \
626105696Srwatson	    ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} ${CLEANDIR}
627116701Srwatson.endif
628105696Srwatson	@echo
629101099Srwatson	@echo "--------------------------------------------------------------"
630101099Srwatson	@echo ">>> stage 2.2: rebuilding the object tree"
631105696Srwatson	@echo "--------------------------------------------------------------"
632105696Srwatson	cd ${KRNLOBJDIR}/${_kernel}; \
633105696Srwatson	    ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} obj
634105696Srwatson	@echo
635105696Srwatson	@echo "--------------------------------------------------------------"
636101099Srwatson	@echo ">>> stage 2.3: build tools"
637116701Srwatson	@echo "--------------------------------------------------------------"
638105696Srwatson	cd ${KRNLOBJDIR}/${_kernel}; \
639105696Srwatson	    MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \
640105696Srwatson	    ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile
641105696Srwatson# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case.
642101099Srwatson.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules)
643115395Srwatson.for target in obj depend all
644115395Srwatson	cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \
645105696Srwatson	    MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \
646105696Srwatson	    ${MAKE} -DNO_CPU_CFLAGS ${target}
647105696Srwatson.endfor
648105696Srwatson.endif
649105696Srwatson.if !defined(NO_KERNELDEPEND)
650105696Srwatson	@echo
651105696Srwatson	@echo "--------------------------------------------------------------"
652105696Srwatson	@echo ">>> stage 3.1: making dependencies"
653105696Srwatson	@echo "--------------------------------------------------------------"
654105696Srwatson	cd ${KRNLOBJDIR}/${_kernel}; \
655105696Srwatson	    ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} depend -DNO_MODULES_OBJ
656105696Srwatson.endif
657105696Srwatson	@echo
658105696Srwatson	@echo "--------------------------------------------------------------"
659115395Srwatson	@echo ">>> stage 3.2: building everything"
660105696Srwatson	@echo "--------------------------------------------------------------"
661115395Srwatson	cd ${KRNLOBJDIR}/${_kernel}; \
662115395Srwatson	    ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} all -DNO_MODULES_OBJ
663115395Srwatson	@echo "--------------------------------------------------------------"
664115395Srwatson	@echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
665115395Srwatson	@echo "--------------------------------------------------------------"
666115395Srwatson.endfor
667105696Srwatson
668115395Srwatson#
669115395Srwatson# installkernel, etc.
670115395Srwatson#
671105696Srwatson# Install the kernel defined by INSTALLKERNEL
672115395Srwatson#
673115395Srwatsoninstallkernel installkernel.debug \
674115395Srwatsonreinstallkernel reinstallkernel.debug: ${SPECIAL_INSTALLCHECKS}
675115395Srwatson.if empty(INSTALLKERNEL)
676115395Srwatson	@echo "ERROR: No kernel \"${KERNCONF}\" to install."; \
677115395Srwatson	false
678115395Srwatson.endif
679115395Srwatson	@echo "--------------------------------------------------------------"
680115395Srwatson	@echo ">>> Making hierarchy"
681105696Srwatson	@echo "--------------------------------------------------------------"
682115395Srwatson	cd ${.CURDIR}; \
683115395Srwatson	    ${CROSSENV} PATH=${TMPPATH} ${MAKE} -f Makefile.inc1 hierarchy
684115395Srwatson	@echo
685105696Srwatson	@echo "--------------------------------------------------------------"
686115395Srwatson	@echo ">>> Installing kernel"
687105696Srwatson	@echo "--------------------------------------------------------------"
688115395Srwatson	cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
689105696Srwatson	    ${CROSSENV} PATH=${TMPPATH} \
690105696Srwatson	    ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//}
691105696Srwatson
692105696Srwatson#
693105696Srwatson# update
694105696Srwatson#
695105696Srwatson# Update the source tree, by running cvsup and/or running cvs to update to the
696105696Srwatson# latest copy.
697105696Srwatson#
698105696Srwatsonupdate:
699105696Srwatson.if defined(SUP_UPDATE)
700105696Srwatson	@echo "--------------------------------------------------------------"
701105696Srwatson	@echo ">>> Running ${SUP}"
702132232Srwatson	@echo "--------------------------------------------------------------"
703101099Srwatson.if defined(SUPFILE)
704101099Srwatson	@${SUP} ${SUPFLAGS} ${SUPFILE}
705132232Srwatson.endif
706132232Srwatson.if defined(SUPFILE1)
707132232Srwatson	@${SUP} ${SUPFLAGS} ${SUPFILE1}
708115395Srwatson.endif
709115395Srwatson.if defined(SUPFILE2)
710115395Srwatson	@${SUP} ${SUPFLAGS} ${SUPFILE2}
711115395Srwatson.endif
712105696Srwatson.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE)
713115395Srwatson	@${SUP} ${SUPFLAGS} ${PORTSSUPFILE}
714115395Srwatson.endif
715105696Srwatson.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE)
716115395Srwatson	@${SUP} ${SUPFLAGS} ${DOCSUPFILE}
717105696Srwatson.endif
718115395Srwatson.endif
719115395Srwatson.if defined(CVS_UPDATE)
720115395Srwatson	@echo "--------------------------------------------------------------"
721105696Srwatson	@echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT}
722115395Srwatson	@echo "--------------------------------------------------------------"
723105696Srwatson	cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS}
724105696Srwatson.endif
725115395Srwatson
726101099Srwatson#
727105696Srwatson# ------------------------------------------------------------------------
728132232Srwatson#
729132232Srwatson# From here onwards are utility targets used by the 'make world' and
730105696Srwatson# related targets.  If your 'world' breaks, you may like to try to fix
731105696Srwatson# the problem and manually run the following targets to attempt to
732132232Srwatson# complete the build.  Beware, this is *not* guaranteed to work, you
733105696Srwatson# need to have a pretty good grip on the current state of the system
734105696Srwatson# to attempt to manually finish it.  If in doubt, 'make world' again.
735105696Srwatson#
736105696Srwatson
737105696Srwatson#
738105696Srwatson# legacy: Build compatibility shims for the next three targets
739105696Srwatson#
740105696Srwatsonlegacy:
741105696Srwatson.if ${BOOTSTRAPPING} < 503000
742105696Srwatson	@echo "ERROR: Source upgrades from versions prior to 5.3 not supported."; \
743105696Srwatson	false
744105696Srwatson.endif
745105696Srwatson.for _tool in tools/build
746105696Srwatson	${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \
747101099Srwatson	    cd ${.CURDIR}/${_tool}; \
748101099Srwatson	    ${MAKE} DIRPRFX=${_tool}/ obj; \
749101099Srwatson	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \
750101099Srwatson	    ${MAKE} DIRPRFX=${_tool}/ depend; \
751105696Srwatson	    ${MAKE} DIRPRFX=${_tool}/ all; \
752105696Srwatson	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
753101099Srwatson.endfor
754105696Srwatson
755105696Srwatson#
756105696Srwatson# bootstrap-tools: Build tools needed for compatibility
757105696Srwatson#
758105696Srwatson.if !defined(NO_GAMES)
759105696Srwatson_strfile=	games/fortune/strfile
760105696Srwatson.endif
761105696Srwatson
762105696Srwatson.if !defined(NO_CXX)
763105696Srwatson_gperf=		gnu/usr.bin/gperf
764105696Srwatson.if ${BOOTSTRAPPING} < 500113
765105696Srwatson_groff=		gnu/usr.bin/groff
766105696Srwatson.else
767105696Srwatson_groff=		gnu/usr.bin/groff/tmac
768105696Srwatson.endif
769105696Srwatson.endif
770105696Srwatson
771105696Srwatson.if ${BOOTSTRAPPING} < 600015
772105696Srwatson_cap_mkdb=	usr.bin/cap_mkdb
773101099Srwatson.endif
774101099Srwatson
775101099Srwatson.if ${BOOTSTRAPPING} < 600016
776105696Srwatson_mklocale=	usr.bin/mklocale
777105696Srwatson.endif
778105696Srwatson
779105696Srwatson.if !defined(NO_RESCUE) && \
780105696Srwatson    ${BOOTSTRAPPING} < 600008
781105696Srwatson_crunchgen=	usr.sbin/crunch/crunchgen
782105696Srwatson.endif
783101099Srwatson
784101099Srwatsonbootstrap-tools:
785101099Srwatson.for _tool in \
786101099Srwatson    ${_strfile} \
787101099Srwatson    ${_gperf} \
788147982Srwatson    ${_groff} \
789147982Srwatson    gnu/usr.bin/texinfo \
790101099Srwatson    ${_cap_mkdb} \
791101099Srwatson    usr.bin/colldef \
792101099Srwatson    usr.bin/lorder \
793101099Srwatson    usr.bin/makewhatis \
794101099Srwatson    ${_mklocale} \
795101099Srwatson    usr.bin/rpcgen \
796101099Srwatson    usr.bin/xinstall \
797101099Srwatson    usr.sbin/config \
798101099Srwatson    ${_crunchgen}
799101099Srwatson	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
800105606Srwatson		cd ${.CURDIR}/${_tool}; \
801105606Srwatson		${MAKE} DIRPRFX=${_tool}/ obj; \
802105606Srwatson		${MAKE} DIRPRFX=${_tool}/ depend; \
803105606Srwatson		${MAKE} DIRPRFX=${_tool}/ all; \
804101099Srwatson		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
805101099Srwatson.endfor
806132232Srwatson
807101099Srwatson#
808101099Srwatson# build-tools: Build special purpose build tools
809101099Srwatson#
810107698Srwatson.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules)
811107698Srwatson_aicasm= sys/modules/aic7xxx/aicasm
812101099Srwatson.endif
813101099Srwatson
814101099Srwatson.if !defined(NO_SHARE)
815101099Srwatson_share=	share/syscons/scrnmaps
816132232Srwatson.endif
817101099Srwatson
818101099Srwatson.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
819101099Srwatson_kerberos5_tools= kerberos5/tools
820107698Srwatson.endif
821107698Srwatson
822122563Srwatson.if !defined(NO_RESCUE)
823104535Srwatson_rescue= rescue/rescue
824104535Srwatson.endif
825104535Srwatson
826122524Srwatsonbuild-tools:
827104535Srwatson.for _tool in \
828104535Srwatson    bin/csh \
829132232Srwatson    bin/sh \
830104535Srwatson    ${_rescue} \
831104535Srwatson    lib/libncurses \
832104535Srwatson    ${_share} \
833101099Srwatson    ${_aicasm} \
834101099Srwatson    usr.bin/awk \
835101099Srwatson    lib/libmagic \
836101099Srwatson    usr.sbin/sysinstall
837101099Srwatson	${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \
838122524Srwatson		cd ${.CURDIR}/${_tool}; \
839101099Srwatson		${MAKE} DIRPRFX=${_tool}/ obj; \
840132232Srwatson		${MAKE} DIRPRFX=${_tool}/ build-tools
841101099Srwatson.endfor
842132232Srwatson.for _tool in \
843101099Srwatson    gnu/usr.bin/cc/cc_tools \
844101099Srwatson    ${_kerberos5_tools}
845101099Srwatson	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \
846101099Srwatson		cd ${.CURDIR}/${_tool}; \
847101099Srwatson		${MAKE} DIRPRFX=${_tool}/ obj; \
848101099Srwatson		${MAKE} DIRPRFX=${_tool}/ depend; \
849101099Srwatson		${MAKE} DIRPRFX=${_tool}/ all
850101099Srwatson.endfor
851101099Srwatson
852101099Srwatson#
853101099Srwatson# cross-tools: Build cross-building tools
854105656Srwatson#
855101099Srwatson.if (${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386") && \
856101099Srwatson    ${TARGET_ARCH} != ${MACHINE_ARCH}
857101099Srwatson_btxld=		usr.sbin/btxld
858107698Srwatson.endif
859107698Srwatson
860107698Srwatson.if (!defined(NO_RESCUE) || defined(RELEASEDIR)) && \
861101099Srwatson    ${TARGET_ARCH} != ${MACHINE_ARCH}
862101099Srwatson_crunchide=	usr.sbin/crunch/crunchide
863101099Srwatson.endif
864101099Srwatson
865101099Srwatson.if ${TARGET_ARCH} == "alpha" && ${TARGET_ARCH} != ${MACHINE_ARCH}
866101099Srwatson_elf2exe=	usr.sbin/elf2exe
867105656Srwatson.endif
868101099Srwatson
869101099Srwatson.if ${TARGET_ARCH} == "i386" && ${TARGET_ARCH} != ${MACHINE_ARCH} && \
870101099Srwatson    defined(RELEASEDIR)
871105988Srwatson_kgzip=		usr.sbin/kgzip
872105988Srwatson.endif
873105988Srwatson
874101099Srwatsoncross-tools:
875101099Srwatson.for _tool in \
876101099Srwatson    gnu/usr.bin/binutils \
877105988Srwatson    gnu/usr.bin/cc \
878105988Srwatson    usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \
879101099Srwatson    ${_btxld} \
880132232Srwatson    ${_crunchide} \
881101099Srwatson    ${_elf2exe} \
882101099Srwatson    ${_kgzip}
883101099Srwatson	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
884105988Srwatson		cd ${.CURDIR}/${_tool}; \
885105988Srwatson		${MAKE} DIRPRFX=${_tool}/ obj; \
886101099Srwatson		${MAKE} DIRPRFX=${_tool}/ depend; \
887105988Srwatson		${MAKE} DIRPRFX=${_tool}/ all; \
888106354Smux		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
889101099Srwatson.endfor
890105988Srwatson
891105988Srwatson#
892101099Srwatson# hierarchy - ensure that all the needed directories are present
893105988Srwatson#
894105988Srwatsonhierarchy:
895105988Srwatson	cd ${.CURDIR}/etc;		${MAKE} distrib-dirs
896105988Srwatson
897105988Srwatson#
898105988Srwatson# libraries - build all libraries, and install them under ${DESTDIR}.
899105988Srwatson#
900132232Srwatson# The list of libraries with dependents (${_prebuild_libs}) and their
901105988Srwatson# interdependencies (__L) are built automatically by the
902105988Srwatson# ${.CURDIR}/tools/make_libdeps.sh script.
903101099Srwatson#
904101099Srwatsonlibraries:
905105988Srwatson	cd ${.CURDIR}; \
906105988Srwatson	    ${MAKE} -f Makefile.inc1 _startup_libs; \
907105988Srwatson	    ${MAKE} -f Makefile.inc1 _prebuild_libs; \
908105988Srwatson	    ${MAKE} -f Makefile.inc1 _generic_libs;
909105988Srwatson
910105988Srwatson# These dependencies are not automatically generated:
911105988Srwatson#
912105988Srwatson# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all
913105988Srwatson# shared libraries for ELF.
914132232Srwatson#
915132232Srwatson_startup_libs=	gnu/lib/csu gnu/lib/libgcc
916105988Srwatson.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf)
917105988Srwatson_startup_libs+=	lib/csu/${MACHINE_ARCH}-elf
918101099Srwatson.else
919132232Srwatson_startup_libs+=	lib/csu/${MACHINE_ARCH}
920101099Srwatson.endif
921101099Srwatson
922101099Srwatson_prebuild_libs=
923101099Srwatson
924105988Srwatson_generic_libs=	gnu/lib
925105988Srwatson
926101099Srwatson.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
927101099Srwatson_prebuild_libs+=	kerberos5/lib/libasn1
928101099Srwatson_prebuild_libs+=	kerberos5/lib/libgssapi
929101099Srwatson_prebuild_libs+=	kerberos5/lib/libkrb5
930105988Srwatson_prebuild_libs+=	kerberos5/lib/libroken
931101099Srwatson_generic_libs+=	kerberos5/lib
932132232Srwatson.endif
933101099Srwatson
934101099Srwatson_prebuild_libs+= lib/libcom_err lib/libcrypt lib/libexpat \
935105988Srwatson		lib/libkvm lib/libmd \
936105988Srwatson		lib/libncurses lib/libnetgraph lib/libopie lib/libpam \
937105988Srwatson		lib/libradius \
938105988Srwatson		lib/libsbuf lib/libtacplus lib/libutil \
939105988Srwatson		lib/libz lib/msun
940105988Srwatson
941105988Srwatsonlib/libopie__L lib/libtacplus__L: lib/libmd__L
942105988Srwatson
943105988Srwatson.if !defined(NO_BIND)
944105988Srwatson.if ${MACHINE_ARCH} == "alpha" || ${MACHINE_ARCH} == "sparc64"
945105988Srwatson_prebuild_libs+= lib/libc_r
946105988Srwatson.else
947122524Srwatson_prebuild_libs+= lib/libpthread
948105988Srwatson.endif
949132232Srwatson.endif
950105988Srwatson
951105988Srwatson_generic_libs+=	lib
952105988Srwatson
953105988Srwatson.if !defined(NO_CRYPT)
954132232Srwatson.if !defined(NO_OPENSSL)
955105988Srwatson_prebuild_libs+=	secure/lib/libcrypto secure/lib/libssl
956105988Srwatsonlib/libradius__L: secure/lib/libssl__L
957105988Srwatsonsecure/lib/libssl__L: secure/lib/libcrypto__L
958105988Srwatson.if !defined(NO_OPENSSH)
959105988Srwatson_prebuild_libs+=	secure/lib/libssh
960105988Srwatsonsecure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L
961105988Srwatson.if !defined(NO_KERBEROS)
962105988Srwatsonsecure/lib/libssh__L: kerberos5/lib/libgssapi__L kerberos5/lib/libkrb5__L \
963105988Srwatson    kerberos5/lib/libasn1__L lib/libcom_err__L lib/libmd__L \
964105988Srwatson    kerberos5/lib/libroken__L
965105988Srwatson.endif
966105988Srwatson.endif
967105988Srwatson.endif
968105988Srwatson_generic_libs+=	secure/lib
969105988Srwatson.endif
970132232Srwatson
971105988Srwatson.if defined(NO_CRYPT) || defined(NO_OPENSSL)
972105988Srwatsonlib/libradius__L: lib/libmd__L
973132232Srwatson.endif
974105988Srwatson
975105988Srwatson.if !defined(NO_NIS)
976105988Srwatson_prebuild_libs+=	lib/libypclnt
977105988Srwatson.endif
978105988Srwatson
979105988Srwatson_generic_libs+=	usr.bin/lex/lib
980101099Srwatson
981101099Srwatson.if ${MACHINE_ARCH} == "i386"
982101099Srwatson_generic_libs+=	usr.sbin/pcvt/keycap
983101099Srwatson.endif
984122875Srwatson
985122875Srwatson.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs}
986122875Srwatson${_lib}__L: .PHONY
987122875Srwatson.if exists(${.CURDIR}/${_lib})
988122875Srwatson	${_+_}@${ECHODIR} "===> ${_lib} (depend,all,install)"; \
989122875Srwatson		cd ${.CURDIR}/${_lib}; \
990122875Srwatson		${MAKE} DIRPRFX=${_lib}/ depend; \
991122875Srwatson		${MAKE} DIRPRFX=${_lib}/ all; \
992132232Srwatson		${MAKE} DIRPRFX=${_lib}/ install
993122875Srwatson.endif
994122875Srwatson.endfor
995122875Srwatson
996101099Srwatson# libpam is special: we need to build static PAM modules before
997101099Srwatson# static PAM library, and dynamic PAM library before dynamic PAM
998101099Srwatson# modules.
999101099Srwatsonlib/libpam__L: .PHONY
1000101099Srwatson	${_+_}@${ECHODIR} "===> lib/libpam (depend,all,install)"; \
1001101099Srwatson		cd ${.CURDIR}/lib/libpam; \
1002101099Srwatson		${MAKE} DIRPRFX=lib/libpam/ depend; \
1003101099Srwatson		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \
1004132232Srwatson		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install
1005101099Srwatson
1006101099Srwatson_startup_libs: ${_startup_libs:S/$/__L/}
1007101099Srwatson_prebuild_libs: ${_prebuild_libs:S/$/__L/}
1008101099Srwatson_generic_libs: ${_generic_libs:S/$/__L/}
1009101099Srwatson
1010101099Srwatson.for __target in all clean cleandepend cleandir depend includes obj
1011101099Srwatson.for entry in ${SUBDIR}
1012101099Srwatson${entry}.${__target}__D: .PHONY
1013122524Srwatson	${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
1014101099Srwatson		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \
1015101099Srwatson		edir=${entry}.${MACHINE_ARCH}; \
1016132232Srwatson		cd ${.CURDIR}/$${edir}; \
1017101099Srwatson	else \
1018101099Srwatson		${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \
1019101099Srwatson		edir=${entry}; \
1020125293Srwatson		cd ${.CURDIR}/$${edir}; \
1021101099Srwatson	fi; \
1022101099Srwatson	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
1023101099Srwatson.endfor
1024101099Srwatsonpar-${__target}: ${SUBDIR:S/$/.${__target}__D/}
1025122524Srwatson.endfor
1026101099Srwatson
1027101099Srwatson.include <bsd.subdir.mk>
1028132232Srwatson