Makefile.inc1 revision 52489
1130368Smlaier#
2130365Smlaier# $FreeBSD: head/Makefile.inc1 52489 1999-10-25 14:50:13Z julian $
3130365Smlaier#
4130365Smlaier# Make command line options:
5130365Smlaier#	-DCLOBBER will remove /usr/include
6130365Smlaier#	-DMAKE_KERBEROS4 to build KerberosIV
7130365Smlaier#	-DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
8130365Smlaier#	-DNOCLEAN do not clean at all
9130365Smlaier#	-DNOTOOLS do not rebuild any tools first
10130365Smlaier#	-DNOCRYPT will prevent building of crypt versions
11130365Smlaier#	-DNOPROFILE do not build profiled libraries
12130365Smlaier#	-DNOSECURE do not go into secure subdir
13130365Smlaier#	-DNOGAMES do not go into games subdir
14130365Smlaier#	-DNOSHARE do not go into share subdir
15130365Smlaier#	-DNOINFO do not make or install info files
16130365Smlaier#	-DNOLIBC_R do not build libc_r.
17130365Smlaier#	-DNO_FORTRAN do not build g77 and related libraries.
18130365Smlaier#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
19130365Smlaier
20130365Smlaier#
21130365Smlaier# The intended user-driven targets are:
22130365Smlaier# buildworld  - rebuild *everything*, including glue to help do upgrades
23130365Smlaier# installworld- install everything built by "buildworld"
24130365Smlaier# update      - convenient way to update your source tree (eg: sup/cvs)
25130365Smlaier# most        - build user commands, no libraries or include files
26130365Smlaier# installmost - install user commands, no libraries or include files
27130365Smlaier#
28130365Smlaier# Standard targets (not defined here) are documented in the makefiles in
29130365Smlaier# /usr/share/mk.  These include:
30130365Smlaier#		obj depend all install clean cleandepend cleanobj
31130365Smlaier
32130365Smlaier# Put initial settings here.
33130365SmlaierSUBDIR=
34130365Smlaier
35130365Smlaier# We must do share/info early so that installation of info `dir'
36130365Smlaier# entries works correctly.  Do it first since it is less likely to
37130365Smlaier# grow dependencies on include and lib than vice versa.
38130365Smlaier.if exists(${.CURDIR}/share/info)
39130365SmlaierSUBDIR+= share/info
40130365Smlaier.endif
41130365Smlaier
42130365Smlaier# We must do include and lib early so that the perl *.ph generation
43130365Smlaier# works correctly as it uses the header files installed by this.
44130365Smlaier.if exists(${.CURDIR}/include)
45130365SmlaierSUBDIR+= include
46130365Smlaier.endif
47130365Smlaier.if exists(${.CURDIR}/lib)
48130365SmlaierSUBDIR+= lib
49130365Smlaier.endif
50130365Smlaier
51130365Smlaier.if exists(${.CURDIR}/bin)
52130365SmlaierSUBDIR+= bin
53130365Smlaier.endif
54130365Smlaier.if exists(${.CURDIR}/games) && !defined(NOGAMES)
55130365SmlaierSUBDIR+= games
56130365Smlaier.endif
57130365Smlaier.if exists(${.CURDIR}/gnu)
58130365SmlaierSUBDIR+= gnu
59130365Smlaier.endif
60130365Smlaier.if exists(${.CURDIR}/kerberosIV) && exists(${.CURDIR}/crypto) && \
61130365Smlaier    !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
62130365SmlaierSUBDIR+= kerberosIV
63130365Smlaier.endif
64130365Smlaier.if exists(${.CURDIR}/libexec)
65130365SmlaierSUBDIR+= libexec
66130365Smlaier.endif
67130365Smlaier.if exists(${.CURDIR}/sbin)
68130365SmlaierSUBDIR+= sbin
69130365Smlaier.endif
70130365Smlaier.if exists(${.CURDIR}/share) && !defined(NOSHARE)
71130365SmlaierSUBDIR+= share
72130365Smlaier.endif
73130365Smlaier.if exists(${.CURDIR}/sys)
74130365SmlaierSUBDIR+= sys
75130365Smlaier.endif
76130365Smlaier.if exists(${.CURDIR}/usr.bin)
77130365SmlaierSUBDIR+= usr.bin
78130365Smlaier.endif
79130365Smlaier.if exists(${.CURDIR}/usr.sbin)
80130365SmlaierSUBDIR+= usr.sbin
81130365Smlaier.endif
82130365Smlaier.if exists(${.CURDIR}/secure) && !defined(NOCRYPT) && !defined(NOSECURE)
83130365SmlaierSUBDIR+= secure
84130365Smlaier.endif
85130365Smlaier
86130365Smlaier# etc must be last for "distribute" to work
87130365Smlaier.if exists(${.CURDIR}/etc)
88130365SmlaierSUBDIR+= etc
89130365Smlaier.endif
90130365Smlaier
91130365Smlaier# These are last, since it is nice to at least get the base system
92130365Smlaier# rebuilt before you do them.
93130365Smlaier.if defined(LOCAL_DIRS)
94130365Smlaier.for _DIR in ${LOCAL_DIRS}
95130365Smlaier.if exists(${.CURDIR}/${_DIR}) & exists(${.CURDIR}/${_DIR}/Makefile)
96130365SmlaierSUBDIR+= ${_DIR}
97130365Smlaier.endif
98130365Smlaier.endfor
99130365Smlaier.endif
100130365Smlaier
101130365SmlaierOBJDIR=		obj
102130365Smlaier
103130365Smlaier.if defined(NOCLEAN)
104130365SmlaierCLEANDIR=
105130365Smlaier.else
106130365Smlaier.if defined(NOCLEANDIR)
107130365SmlaierCLEANDIR=	clean cleandepend
108130365Smlaier.else
109130365SmlaierCLEANDIR=	cleandir
110247830Sglebius.endif
111130365Smlaier.endif
112130365Smlaier
113130365Smlaier.if !defined(NOCLEAN)
114130365Smlaier_NODEPEND=	true
115130365Smlaier.endif
116130365Smlaier.if defined(_NODEPEND)
117130365Smlaier_DEPEND=	cleandepend
118130365Smlaier.else
119130365Smlaier_DEPEND=	depend
120130365Smlaier.endif
121130365Smlaier
122130365SmlaierSUP?=		cvsup
123130365SmlaierSUPFLAGS?=	-g -L 2 -P -
124130365Smlaier
125130365Smlaier#
126130365Smlaier# While building tools for bootstrapping, we don't need to waste time on
127130365Smlaier# shared or profiled libraries, shared linkage, or documentation, except
128130365Smlaier# when the tools won't get cleaned we must use the defaults for shared
129130365Smlaier# libraries and shared linkage (and this doesn't waste time).
130130365Smlaier# XXX actually, we do need to waste time building shared libraries.
131130365Smlaier#
132130365Smlaier.if defined(NOCLEAN)
133130365SmlaierMK_FLAGS=	-DWORLD -DNOINFO -DNOMAN         -DNOPROFILE
134130365Smlaier.else
135130365SmlaierMK_FLAGS=	-DWORLD -DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED
136130365Smlaier.endif
137130365Smlaier
138130365Smlaier#
139130365Smlaier# If we're building a cross world, define MACHINE and MACHINE_ARCH for
140130365Smlaier# the version of make that we're using.
141130365Smlaier#
142130365Smlaier.if defined(TARGET)
143130365SmlaierCROSS_MAKE_FLAGS+=-DMACHINE=\"${TARGET}\"
144130365Smlaier.endif
145130365Smlaier.if defined(TARGET_ARCH)
146130365SmlaierCROSS_MAKE_FLAGS+=-DMACHINE_ARCH=\"${TARGET_ARCH}\"
147130365Smlaier.endif
148130365Smlaier
149130365Smlaier#
150130365Smlaier# Define the location of the temporary installation directory. Note that
151130365Smlaier# MAKEOBJDIRPREFIX normally isn't defined so if the current directory is
152130365Smlaier# /usr/src, then the world temporary directory is /usr/obj/usr/src/tmp.
153130365Smlaier#
154130365Smlaier# During the transition from aout to elf format on i386, MAKEOBJDIRPREFIX
155130365Smlaier# is set by the parent makefile (Makefile.inc0) to be /usr/obj/${OBJFORMAT}
156130365Smlaier# in order to keep aout and elf format files apart.
157130365Smlaier#
158130365Smlaier.if defined(MAKEOBJDIRPREFIX)
159130365SmlaierWORLDTMP=	${MAKEOBJDIRPREFIX}${.CURDIR}/tmp
160130365Smlaier.else
161130365SmlaierWORLDTMP=	/usr/obj${.CURDIR}/tmp
162130365Smlaier.endif
163130365Smlaier
164130365Smlaier#
165130365Smlaier# Define the PATH to the build tools.
166130365Smlaier#
167130365Smlaier# If not building tools, the PATH always points to the installed binaries.
168130365Smlaier# The NOTOOLS option assumes that in installed tools are good enough and that
169130365Smlaier# the user's PATH will locate to appropriate tools. This option is required
170130365Smlaier# for a cross-compiled build environment.
171130365Smlaier#
172130365Smlaier# If building tools, then the PATH includes the world temporary directories
173130365Smlaier# so that the bootstrapped tools are used as soon as they are built. The
174130365Smlaier# strict path is for use after all tools are supposed to have been
175130365Smlaier# bootstrapped. It doesn't allow any of the installed tools to be used.
176130365Smlaier#
177130365Smlaier.if	defined(NOTOOLS)
178130365Smlaier# Default root of the tool tree
179130365SmlaierTOOLROOT?=	
180130365Smlaier# Choose the PATH relative to the root of the tool tree
181130365SmlaierPATH=		${TOOLROOT}/sbin:${TOOLROOT}/bin:${TOOLROOT}/usr/sbin:${TOOLROOT}/usr/bin
182130365Smlaier.else
183130365SmlaierTOOLROOT=	${WORLDTMP}
184130365Smlaier.endif
185130365SmlaierSTRICTTMPPATH=	${TOOLROOT}/sbin:${TOOLROOT}/usr/sbin:${TOOLROOT}/bin:${TOOLROOT}/usr/bin
186130365SmlaierTMPPATH=	${STRICTTMPPATH}:${PATH}
187130365Smlaier
188130365Smlaier# XXX COMPILER_PATH is needed for finding cc1, ld and as
189130365Smlaier# XXX GCC_EXEC_PREFIX is for *crt.o.  It is probably unnecessary now
190130365Smlaier#	that LIBRARY_PATH is set.  We still can't use -nostdlib, since gcc
191130365Smlaier#	wouldn't link *crt.o or libgcc if it were used.
192130365Smlaier# XXX LD_LIBRARY_PATH is for ld.so.  It is also used by ld, although we don't
193130365Smlaier#	want that - all compile-time library paths should be resolved by gcc.
194130365Smlaier#	It fails for set[ug]id executables (are any used?).
195130365SmlaierCOMPILER_ENV=	BISON_SIMPLE=${TOOLROOT}/usr/share/misc/bison.simple \
196130365Smlaier		COMPILER_PATH=${TOOLROOT}/usr/libexec:${TOOLROOT}/usr/bin \
197130365Smlaier		GCC_EXEC_PREFIX=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib/ \
198130365Smlaier		LD_LIBRARY_PATH=${TOOLROOT}${SHLIBDIR} \
199240233Sglebius		LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib
200130365Smlaier
201130365SmlaierBMAKEENV=	${COMPILER_ENV} NOEXTRADEPEND=t PATH=${TMPPATH} \
202130365Smlaier		OBJFORMAT_PATH=${TOOLROOT}/usr/libexec:/usr/libexec
203247830SglebiusXTMAKEENV=	NOEXTRADEPEND=t
204130365Smlaier.if defined(TARGET)
205130365SmlaierXMAKEENV=	PATH=${TMPPATH}
206130365Smlaier.else
207130365SmlaierXMAKEENV=	PATH=${STRICTTMPPATH}
208130365Smlaier.endif
209130365SmlaierXMAKEENV+=	${COMPILER_ENV} \
210130365Smlaier		PERL5LIB=${DESTDIR}/usr/libdata/perl/5.00503 \
211130365Smlaier		OBJFORMAT_PATH=${TOOLROOT}/usr/libexec \
212130365Smlaier		CFLAGS="-nostdinc ${CFLAGS}"	# XXX -nostdlib
213130365Smlaier
214130365Smlaier# used to compile and install 'make' in temporary build tree
215130365SmlaierMAKETMP=	${WORLDTMP}/make
216130365SmlaierIBMAKE=	${BMAKEENV} MAKEOBJDIR=${MAKETMP} ${MAKE} DESTDIR=${WORLDTMP}
217130365Smlaier
218130365Smlaier.if	defined(NOTOOLS)
219130365Smlaier# cross tools make
220130365SmlaierXTMAKE=	${XTMAKEENV} ${MAKE} DESTDIR=${WORLDTMP}
221130365Smlaier# bootstrap make
222130365SmlaierBMAKE=	${BMAKEENV} ${MAKE} DESTDIR=${WORLDTMP}
223130365Smlaier# cross make used for compilation
224184205SdesXMAKE=	${XMAKEENV} ${MAKE} DESTDIR=${WORLDTMP}
225130365Smlaier# cross make used for final installation
226130365SmlaierIXMAKE=	${XMAKEENV} ${MAKE}
227130365Smlaier.else
228130365Smlaier# cross tools make
229130365SmlaierXTMAKE=	${XTMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
230130365Smlaier# bootstrap make
231130365SmlaierBMAKE=	${BMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
232130365Smlaier# cross make used for compilation
233130365SmlaierXMAKE=	${XMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
234130365Smlaier# cross make used for final installation
235130365SmlaierIXMAKE=	${XMAKEENV} ${WORLDTMP}/usr/bin/make
236130365Smlaier.endif
237130365Smlaier
238130365Smlaier#
239130365Smlaier# buildworld
240130365Smlaier#
241130365Smlaier# Attempt to rebuild the entire system, with reasonable chance of
242130365Smlaier# success, regardless of how old your existing system is.
243130365Smlaier#
244130365Smlaierbuildworld: check-objformat
245130365Smlaier.if !defined(NOCLEAN)
246130365Smlaier	@echo
247130365Smlaier	@echo "--------------------------------------------------------------"
248130365Smlaier	@echo ">>> Cleaning up the temporary ${OBJFORMAT} build tree"
249130365Smlaier	@echo "--------------------------------------------------------------"
250130365Smlaier	mkdir -p ${WORLDTMP}
251130365Smlaier	-chflags -R noschg ${WORLDTMP}/
252130365Smlaier	rm -rf ${WORLDTMP}
253130365Smlaier.endif
254130365Smlaier.if !defined(NOTOOLS)
255130365Smlaier	@echo
256130365Smlaier	@echo "--------------------------------------------------------------"
257130365Smlaier	@echo ">>> Making make"
258130365Smlaier	@echo "--------------------------------------------------------------"
259130365Smlaier	mkdir -p ${WORLDTMP}/usr/bin ${MAKETMP}
260130365Smlaier	( \
261130365Smlaier	cd ${.CURDIR}/usr.bin/make; \
262130365Smlaier		MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
263130365Smlaier		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all CROSS_MAKE_FLAGS='${CROSS_MAKE_FLAGS}'; \
264130365Smlaier		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install; \
265130365Smlaier		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean \
266130365Smlaier	)
267130365Smlaier	@echo
268130365Smlaier	@echo "--------------------------------------------------------------"
269130365Smlaier	@echo ">>> Making mtree"
270130365Smlaier	@echo "--------------------------------------------------------------"
271130365Smlaier	mkdir -p ${WORLDTMP}/usr/sbin ${WORLDTMP}/mtree
272130365Smlaier	( \
273130365Smlaier	cd ${.CURDIR}/usr.sbin/mtree; \
274130365Smlaier		MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
275130365Smlaier		export MAKEOBJDIR=${WORLDTMP}/mtree; \
276130365Smlaier		${BMAKE} ${MK_FLAGS} all; \
277130365Smlaier		${BMAKE} ${MK_FLAGS} -B install clean \
278130365Smlaier	)
279130365Smlaier.endif
280130365Smlaier	@echo
281130365Smlaier	@echo "--------------------------------------------------------------"
282130365Smlaier	@echo ">>> Making hierarchy"
283130365Smlaier	@echo "--------------------------------------------------------------"
284130365Smlaier	mkdir -p ${WORLDTMP}
285130365Smlaier	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 hierarchy
286130365Smlaier.if !defined(NOCLEAN)
287130365Smlaier	@echo
288130365Smlaier	@echo "--------------------------------------------------------------"
289130365Smlaier	@echo ">>> Cleaning up the ${OBJFORMAT} obj tree"
290130365Smlaier	@echo "--------------------------------------------------------------"
291130365Smlaier	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/}
292130365Smlaier.endif
293130365Smlaier	@echo
294130365Smlaier	@echo "--------------------------------------------------------------"
295130365Smlaier	@echo ">>> Rebuilding the ${OBJFORMAT} obj tree"
296130365Smlaier	@echo "--------------------------------------------------------------"
297130365Smlaier	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 par-${OBJDIR}
298130365Smlaier.if defined(TARGET)
299130365Smlaier	@echo
300130365Smlaier	@echo "--------------------------------------------------------------"
301130365Smlaier	@echo ">>> Rebuilding toolchain for ${TARGET} buildworld"
302130365Smlaier	@echo "--------------------------------------------------------------"
303130365Smlaier	cd ${.CURDIR}; ${XTMAKE} -f Makefile.inc1 cross-toolchain
304130365Smlaier.endif
305130365Smlaier.if !defined(NOTOOLS) && !defined(TARGET)
306130365Smlaier	@echo
307130365Smlaier	@echo "--------------------------------------------------------------"
308130365Smlaier	@echo ">>> Rebuilding ${OBJFORMAT} bootstrap tools"
309130365Smlaier	@echo "--------------------------------------------------------------"
310130365Smlaier	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 bootstrap
311130365Smlaier	@echo
312130365Smlaier	@echo "--------------------------------------------------------------"
313130365Smlaier	@echo ">>> Rebuilding tools necessary to build the include files"
314130365Smlaier	@echo "--------------------------------------------------------------"
315130365Smlaier	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 include-tools
316130365Smlaier.endif
317130365Smlaier	@echo
318130365Smlaier	@echo "--------------------------------------------------------------"
319130365Smlaier	@echo ">>> Rebuilding ${DESTDIR}/usr/include"
320130365Smlaier	@echo "--------------------------------------------------------------"
321130365Smlaier	cd ${.CURDIR}; SHARED=copies ${BMAKE} -f Makefile.inc1 includes
322130365Smlaier	@echo
323130365Smlaier	@echo "--------------------------------------------------------------"
324130365Smlaier	@echo ">>> Rebuilding bootstrap libraries"
325130365Smlaier	@echo "--------------------------------------------------------------"
326130365Smlaier	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 bootstrap-libraries
327130365Smlaier.if !defined(NOTOOLS)
328130365Smlaier	@echo
329130365Smlaier	@echo "--------------------------------------------------------------"
330130365Smlaier	@echo ">>> Rebuilding tools needed to build libraries"
331130365Smlaier	@echo "--------------------------------------------------------------"
332130365Smlaier	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 lib-tools
333130365Smlaier	@echo
334130365Smlaier	@echo "--------------------------------------------------------------"
335130365Smlaier	@echo ">>> Rebuilding all other tools needed to build the ${OBJFORMAT} world"
336130365Smlaier	@echo "--------------------------------------------------------------"
337130365Smlaier	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 build-tools
338130365Smlaier.endif
339130365Smlaier.if !defined(_NODEPEND)
340130365Smlaier	@echo
341130365Smlaier	@echo "--------------------------------------------------------------"
342130365Smlaier	@echo ">>> Rebuilding dependencies"
343130365Smlaier	@echo "--------------------------------------------------------------"
344130365Smlaier	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 par-depend
345130365Smlaier.endif
346130365Smlaier	@echo
347130365Smlaier	@echo "--------------------------------------------------------------"
348130365Smlaier	@echo ">>> Building ${OBJFORMAT} libraries"
349130368Smlaier	@echo "--------------------------------------------------------------"
350130368Smlaier	cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 libraries
351130365Smlaier	@echo
352130365Smlaier	@echo "--------------------------------------------------------------"
353130365Smlaier	@echo ">>> Building everything.."
354130365Smlaier	@echo "--------------------------------------------------------------"
355130365Smlaier	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 all
356130365Smlaier
357130365Smlaiereverything:
358130365Smlaier	@echo "--------------------------------------------------------------"
359130365Smlaier	@echo ">>> Building everything.."
360130365Smlaier	@echo "--------------------------------------------------------------"
361130365Smlaier	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 all
362130365Smlaier
363130365Smlaier#
364130365Smlaier# installworld
365130365Smlaier#
366130365Smlaier# Installs everything compiled by a 'buildworld'.
367130365Smlaier#
368130365Smlaierinstallworld:
369130365Smlaier	cd ${.CURDIR}; ${IXMAKE} -f Makefile.inc1 reinstall
370130365Smlaier
371130365Smlaier#
372130365Smlaier# reinstall
373130365Smlaier#
374130365Smlaier# If you have a build server, you can NFS mount the source and obj directories
375130365Smlaier# and do a 'make reinstall' on the *client* to install new binaries from the
376130365Smlaier# most recent server build.
377130365Smlaier#
378130365Smlaierreinstall:
379130365Smlaier	@echo "--------------------------------------------------------------"
380130365Smlaier	@echo ">>> Making hierarchy"
381130365Smlaier	@echo "--------------------------------------------------------------"
382130365Smlaier	cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
383130365Smlaier	@echo
384130365Smlaier	@echo "--------------------------------------------------------------"
385130365Smlaier	@echo ">>> Installing everything.."
386130365Smlaier	@echo "--------------------------------------------------------------"
387130365Smlaier	cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
388130365Smlaier.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout" && !defined(DESTDIR)
389130365Smlaier	@echo
390130365Smlaier	@echo "--------------------------------------------------------------"
391130365Smlaier	@echo ">>> Re-scanning the shared libraries.."
392240646Sglebius	@echo "--------------------------------------------------------------"
393130365Smlaier	-cd ${.CURDIR}; /sbin/ldconfig -R
394130365Smlaier.endif
395130365Smlaier.if !defined(NOMAN)
396240646Sglebius	@echo
397130365Smlaier	@echo "--------------------------------------------------------------"
398130365Smlaier	@echo ">>> Rebuilding man page indices"
399130365Smlaier	@echo "--------------------------------------------------------------"
400247830Sglebius	cd ${.CURDIR}/share/man; ${MAKE} makedb
401130365Smlaier.endif
402130365Smlaier
403130365Smlaier#
404130365Smlaier# update
405130365Smlaier#
406130365Smlaier# Update the source tree, by running sup and/or running cvs to update to the
407130365Smlaier# latest copy.
408130365Smlaier#
409130365Smlaierupdate:
410130365Smlaier.if defined(SUP_UPDATE)
411130365Smlaier	@echo "--------------------------------------------------------------"
412130365Smlaier	@echo ">>> Running ${SUP}"
413130365Smlaier	@echo "--------------------------------------------------------------"
414130365Smlaier	@${SUP} ${SUPFLAGS} ${SUPFILE}
415130365Smlaier.if defined(SUPFILE1)
416130365Smlaier	@${SUP} ${SUPFLAGS} ${SUPFILE1}
417130365Smlaier.endif
418130365Smlaier.if defined(SUPFILE2)
419130365Smlaier	@${SUP} ${SUPFLAGS} ${SUPFILE2}
420130365Smlaier.endif
421130365Smlaier.if defined(PORTSSUPFILE)
422130365Smlaier	@${SUP} ${SUPFLAGS} ${PORTSSUPFILE}
423130365Smlaier.endif
424130365Smlaier.endif
425130365Smlaier.if defined(CVS_UPDATE)
426130365Smlaier	@echo "--------------------------------------------------------------"
427130365Smlaier	@echo ">>> Updating ${.CURDIR} from cvs repository" ${CVSROOT}
428130365Smlaier	@echo "--------------------------------------------------------------"
429130365Smlaier	cd ${.CURDIR}; cvs -q update -P -d
430130365Smlaier.endif
431130365Smlaier
432130365Smlaier#
433130365Smlaier# most
434130365Smlaier#
435130365Smlaier# Build most of the user binaries on the existing system libs and includes.
436130365Smlaier#
437130365Smlaiermost:
438130365Smlaier	@echo "--------------------------------------------------------------"
439130365Smlaier	@echo ">>> Building programs only"
440130365Smlaier	@echo "--------------------------------------------------------------"
441130365Smlaier	cd ${.CURDIR}/bin;		${MAKE} all
442130365Smlaier	cd ${.CURDIR}/sbin;		${MAKE} all
443130365Smlaier	cd ${.CURDIR}/libexec;		${MAKE} all
444130365Smlaier	cd ${.CURDIR}/usr.bin;		${MAKE} all
445130365Smlaier	cd ${.CURDIR}/usr.sbin;		${MAKE} all
446130365Smlaier	cd ${.CURDIR}/gnu/libexec;	${MAKE} all
447130365Smlaier	cd ${.CURDIR}/gnu/usr.bin;	${MAKE} all
448130365Smlaier	cd ${.CURDIR}/gnu/usr.sbin;	${MAKE} all
449130365Smlaier#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
450130365Smlaier#	cd ${.CURDIR}/kerberosIV;	${MAKE} most
451130365Smlaier#.endif
452130365Smlaier#.if !defined(NOSECURE) && !defined(NOCRYPT)
453184214Sdes#	cd ${.CURDIR}/secure;		${MAKE} most
454240646Sglebius#.endif
455130365Smlaier
456130365Smlaier#
457130365Smlaier# installmost
458130365Smlaier#
459130365Smlaier# Install the binaries built by the 'most' target.  This does not include
460130365Smlaier# libraries or include files.
461130365Smlaier#
462184214Sdesinstallmost:
463240646Sglebius	@echo "--------------------------------------------------------------"
464130365Smlaier	@echo ">>> Installing programs only"
465130365Smlaier	@echo "--------------------------------------------------------------"
466130365Smlaier	cd ${.CURDIR}/bin;		${MAKE} install
467130365Smlaier	cd ${.CURDIR}/sbin;		${MAKE} install
468130365Smlaier	cd ${.CURDIR}/libexec;		${MAKE} install
469130365Smlaier	cd ${.CURDIR}/usr.bin;		${MAKE} install
470184214Sdes	cd ${.CURDIR}/usr.sbin;		${MAKE} install
471240646Sglebius	cd ${.CURDIR}/gnu/libexec;	${MAKE} install
472130365Smlaier	cd ${.CURDIR}/gnu/usr.bin;	${MAKE} install
473130365Smlaier	cd ${.CURDIR}/gnu/usr.sbin;	${MAKE} install
474130365Smlaier#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
475130365Smlaier#	cd ${.CURDIR}/kerberosIV;	${MAKE} installmost
476130365Smlaier#.endif
477130365Smlaier#.if !defined(NOSECURE) && !defined(NOCRYPT)
478130365Smlaier#	cd ${.CURDIR}/secure;		${MAKE} installmost
479130365Smlaier#.endif
480130365Smlaier
481130365Smlaier#
482130365Smlaier# ------------------------------------------------------------------------
483130365Smlaier#
484130365Smlaier# From here onwards are utility targets used by the 'make world' and
485130365Smlaier# related targets.  If your 'world' breaks, you may like to try to fix
486130365Smlaier# the problem and manually run the following targets to attempt to
487130365Smlaier# complete the build.  Beware, this is *not* guaranteed to work, you
488130368Smlaier# need to have a pretty good grip on the current state of the system
489130365Smlaier# to attempt to manually finish it.  If in doubt, 'make world' again.
490130365Smlaier#
491130365Smlaier
492130365Smlaier#
493130365Smlaier# hierarchy - ensure that all the needed directories are present
494130365Smlaier#
495130365Smlaierhierarchy:
496130365Smlaier	cd ${.CURDIR}/etc;		${MAKE} distrib-dirs
497130365Smlaier
498130365Smlaier#
499130365Smlaier# bootstrap - [re]build tools needed to run the actual build, this includes
500130365Smlaier# tools needed by 'make depend', as some tools are needed to generate source
501130365Smlaier# for the dependency information to be gathered from.
502130365Smlaier#
503130365Smlaierbootstrap:
504130365Smlaier.if defined(DESTDIR)
505130365Smlaier	rm -f ${DESTDIR}/usr/src/sys
506130368Smlaier	ln -s ${.CURDIR}/sys ${DESTDIR}/usr/src
507130365Smlaier	cd ${.CURDIR}/include;	${MAKE} all
508130365Smlaier	cd ${.CURDIR}/include;	${MAKE} beforeinstall
509130365Smlaier.endif
510130365Smlaier	cd ${.CURDIR}/usr.bin/make; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
511130365Smlaier		${MAKE} ${MK_FLAGS} all CROSS_MAKE_FLAGS='${CROSS_MAKE_FLAGS}'; \
512130365Smlaier		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
513130365Smlaier	cd ${.CURDIR}/usr.bin/xinstall; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
514130365Smlaier		${MAKE} ${MK_FLAGS} all; \
515130365Smlaier		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
516130365Smlaier	cd ${.CURDIR}/usr.bin/yacc; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
517130365Smlaier		${MAKE} ${MK_FLAGS} all; \
518130365Smlaier		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
519130365Smlaier	cd ${.CURDIR}/usr.bin/lex; ${MAKE} bootstrap; \
520130365Smlaier		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
521130365Smlaier		${MAKE} ${MK_FLAGS} -DNOLIB all; \
522130365Smlaier		${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR}
523130365Smlaier	cd ${.CURDIR}/usr.bin/lex; ${MAKE} ${OBJDIR}
524130365Smlaier	cd ${.CURDIR}/usr.sbin/mtree; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
525130365Smlaier		${MAKE} ${MK_FLAGS} all; \
526130365Smlaier		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
527130365Smlaier.if defined(DESTDIR)
528130368Smlaier	cd ${.CURDIR}/include && ${MAKE} copies
529130365Smlaier.endif
530130365Smlaier
531130365Smlaier#
532130365Smlaier# include-tools - generally the same as 'bootstrap', except that it's for
533130365Smlaier# things that are specifically needed to generate include files.
534130365Smlaier#
535130365Smlaier# XXX should be merged with bootstrap, it's not worth keeeping them separate.
536130365Smlaier# Well, maybe it is now.  We force 'cleandepend' here to avoid dependencies
537130365Smlaier# on cleaned away headers in ${WORLDTMP}.
538130365Smlaier#
539130365Smlaierinclude-tools:
540130365Smlaier.for d in usr.bin/compile_et usr.bin/rpcgen
541130365Smlaier	cd ${.CURDIR}/$d; ${MAKE} cleandepend; \
542130365Smlaier		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
543130365Smlaier		${MAKE} ${MK_FLAGS} all; \
544130365Smlaier		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
545184205Sdes.endfor
546130365Smlaier
547184205Sdes#
548130365Smlaier# includes - possibly generate and install the include files.
549184205Sdes#
550130365Smlaierincludes:
551184205Sdes.if defined(CLOBBER)
552184205Sdes	rm -rf ${DESTDIR}/usr/include/*
553130365Smlaier	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
554130365Smlaier		-p ${DESTDIR}/usr/include
555130365Smlaier.endif
556130365Smlaier	cd ${.CURDIR}/include;			${MAKE} -B all install
557130365Smlaier	cd ${.CURDIR}/gnu/include;		${MAKE} install
558130365Smlaier	cd ${.CURDIR}/gnu/lib/libmp;		${MAKE} beforeinstall
559130365Smlaier	cd ${.CURDIR}/gnu/lib/libobjc;		${MAKE} beforeinstall
560130365Smlaier	cd ${.CURDIR}/gnu/lib/libreadline;	${MAKE} beforeinstall
561130365Smlaier	cd ${.CURDIR}/gnu/lib/libregex;		${MAKE} beforeinstall
562130365Smlaier	cd ${.CURDIR}/gnu/lib/libstdc++;	${MAKE} beforeinstall
563130365Smlaier	cd ${.CURDIR}/gnu/lib/libdialog;	${MAKE} beforeinstall
564130365Smlaier	cd ${.CURDIR}/gnu/lib/libgmp;		${MAKE} beforeinstall
565130365Smlaier	cd ${.CURDIR}/gnu/usr.bin/cc/cc1plus;	${MAKE} beforeinstall
566130365Smlaier.if exists(${.CURDIR}/secure) && !defined(NOCRYPT)
567130365Smlaier	cd ${.CURDIR}/secure/lib/libdes;	${MAKE} beforeinstall
568130365Smlaier.endif
569130365Smlaier.if exists(${.CURDIR}/kerberosIV) && !defined(NOCRYPT) && \
570130365Smlaier    defined(MAKE_KERBEROS4)
571130365Smlaier	cd ${.CURDIR}/kerberosIV/lib/libacl;	${MAKE} beforeinstall
572130368Smlaier	cd ${.CURDIR}/kerberosIV/lib/libkadm;	${MAKE} beforeinstall
573130365Smlaier	cd ${.CURDIR}/kerberosIV/lib/libkafs;	${MAKE} beforeinstall
574130365Smlaier	cd ${.CURDIR}/kerberosIV/lib/libkdb;	${MAKE} beforeinstall
575130365Smlaier	cd ${.CURDIR}/kerberosIV/lib/libkrb;	${MAKE} beforeinstall
576130365Smlaier	cd ${.CURDIR}/kerberosIV/lib/libtelnet; ${MAKE} beforeinstall
577130365Smlaier.else
578130365Smlaier	cd ${.CURDIR}/lib/libtelnet;		${MAKE} beforeinstall
579130365Smlaier.endif
580130365Smlaier.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH})
581130365Smlaier	cd ${.CURDIR}/lib/csu/${MACHINE_ARCH};	${MAKE} beforeinstall
582130365Smlaier.endif
583130365Smlaier	cd ${.CURDIR}/lib/libalias;		${MAKE} beforeinstall
584130365Smlaier	cd ${.CURDIR}/lib/libatm;		${MAKE} beforeinstall
585130365Smlaier	cd ${.CURDIR}/lib/libdevstat;		${MAKE} beforeinstall
586130365Smlaier	cd ${.CURDIR}/lib/libc;			${MAKE} beforeinstall
587130365Smlaier	cd ${.CURDIR}/lib/libcalendar;		${MAKE} beforeinstall
588130365Smlaier	cd ${.CURDIR}/lib/libcam;		${MAKE} beforeinstall
589130365Smlaier	cd ${.CURDIR}/lib/libdisk;		${MAKE} beforeinstall
590130365Smlaier	cd ${.CURDIR}/lib/libncp;		${MAKE} beforeinstall
591130365Smlaier	cd ${.CURDIR}/lib/libncurses;		${MAKE} beforeinstall
592130365Smlaier	cd ${.CURDIR}/lib/libnetgraph;		${MAKE} beforeinstall
593130365Smlaier	cd ${.CURDIR}/lib/libedit;		${MAKE} beforeinstall
594130365Smlaier	cd ${.CURDIR}/lib/libftpio;		${MAKE} beforeinstall
595130365Smlaier	cd ${.CURDIR}/lib/libkvm;		${MAKE} beforeinstall
596130365Smlaier	cd ${.CURDIR}/lib/libmd;		${MAKE} beforeinstall
597130365Smlaier.if !defined(WANT_CSRG_LIBM)
598130365Smlaier	cd ${.CURDIR}/lib/msun;			${MAKE} beforeinstall
599130365Smlaier.endif
600130365Smlaier	cd ${.CURDIR}/lib/libopie;		${MAKE} beforeinstall
601130365Smlaier	cd ${.CURDIR}/lib/libpam/libpam;	${MAKE} beforeinstall
602130365Smlaier	cd ${.CURDIR}/lib/libpcap;		${MAKE} beforeinstall
603130365Smlaier	cd ${.CURDIR}/lib/libradius;		${MAKE} beforeinstall
604130365Smlaier	cd ${.CURDIR}/lib/librpcsvc;		${MAKE} beforeinstall
605130368Smlaier	cd ${.CURDIR}/lib/libskey;		${MAKE} beforeinstall
606130365Smlaier	cd ${.CURDIR}/lib/libstand;		${MAKE} beforeinstall
607130365Smlaier	cd ${.CURDIR}/lib/libtacplus;		${MAKE} beforeinstall
608130365Smlaier	cd ${.CURDIR}/lib/libcom_err;		${MAKE} beforeinstall
609130365Smlaier	cd ${.CURDIR}/lib/libss;		${MAKE} -B hdrs beforeinstall
610130365Smlaier	cd ${.CURDIR}/lib/libutil;		${MAKE} beforeinstall
611130365Smlaier	cd ${.CURDIR}/lib/libvgl;		${MAKE} beforeinstall
612130365Smlaier	cd ${.CURDIR}/lib/libwrap;		${MAKE} beforeinstall
613130365Smlaier	cd ${.CURDIR}/lib/libz;			${MAKE} beforeinstall
614130365Smlaier	cd ${.CURDIR}/usr.bin/lex;		${MAKE} beforeinstall
615130365Smlaier
616130365Smlaier#
617130365Smlaier# Declare tools if they are not required on all architectures.
618130365Smlaier#
619130368Smlaier.if ${MACHINE_ARCH} == "i386"
620130365Smlaier# aout tools:
621130365Smlaier_aout_ar	= usr.bin/ar
622130365Smlaier_aout_as	= gnu/usr.bin/as
623130365Smlaier_aout_ld	= gnu/usr.bin/ld
624130368Smlaier_aout_nm	= usr.bin/nm
625130365Smlaier_aout_ranlib	= usr.bin/ranlib
626130365Smlaier_aout_size	= usr.bin/size
627184205Sdes_aout_strip	= usr.bin/strip
628130365Smlaier# boot block/loader tools:
629184205Sdes_btxld		= usr.sbin/btxld
630130365Smlaier.endif
631184205Sdes
632184205Sdes#
633184205Sdes# lib-tools - build tools to compile and install the libraries.
634130365Smlaier#
635130365Smlaier# XXX gperf is required for cc
636130365Smlaier# XXX a new ld and tsort is required for cc
637130365Smlaierlib-tools:
638130365Smlaier.for d in				\
639130365Smlaier		gnu/usr.bin/gperf	\
640130365Smlaier		${_aout_ld}		\
641130365Smlaier		usr.bin/tsort		\
642130365Smlaier		${_aout_as}		\
643130365Smlaier		gnu/usr.bin/bison	\
644130365Smlaier		gnu/usr.bin/cc		\
645130365Smlaier		gnu/lib/libgcc		\
646130365Smlaier		${_aout_ar}		\
647130365Smlaier		usr.bin/env		\
648130365Smlaier		usr.bin/lex/lib		\
649130365Smlaier		usr.bin/mk_cmds		\
650130365Smlaier		${_aout_nm}		\
651130365Smlaier		${_aout_ranlib}		\
652130365Smlaier		${_aout_strip}		\
653130365Smlaier		gnu/usr.bin/binutils	\
654130365Smlaier		usr.bin/uudecode	\
655130365Smlaier		usr.bin/objformat
656130365Smlaier	cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
657130365Smlaier		${MAKE} ${MK_FLAGS} all; \
658130365Smlaier		${MAKE} ${MK_FLAGS} -B install; \
659130365Smlaier		${MAKE} ${MK_FLAGS:S/-DNOPIC//} -B ${CLEANDIR} ${OBJDIR}
660130365Smlaier.endfor
661130365Smlaier
662130365Smlaier#
663130365Smlaier# We have to know too much about ordering and subdirs in the lib trees:
664130365Smlaier#
665130365Smlaier# To satisfy shared library linkage when only the libraries being built
666130365Smlaier# are visible:
667130365Smlaier#
668130365Smlaier# csu must be built before all shared libaries for ELF.
669130365Smlaier# libcom_err must be built before libss and libkrb.
670130365Smlaier# libcrypt must be built before libkrb and libskey.
671171173Smlaier# libdes must be built before libpam.
672130365Smlaier# libkrb must be built before libpam.
673130365Smlaier# libm must be built before libstdc++.
674130368Smlaier# libmd must be built before libatm, libcrypt, libopie, libradius, libskey,
675130368Smlaier# and libtacplus.
676130365Smlaier# libncurses must be built before libdialog, libedit and libreadline.
677130365Smlaier# libradius must be built before libpam.
678130365Smlaier# libskey must be built before libpam.
679130365Smlaier# libtacplus must be built before libpam.
680130365Smlaier#
681130365Smlaier# Some libraries are built conditionally and/or are in inconsistently
682130365Smlaier# named directories:
683130365Smlaier#
684130365Smlaier.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}.pcc)
685171173Smlaier_csu=lib/csu/${MACHINE_ARCH}.pcc
686171173Smlaier.elif ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "elf"
687130365Smlaier_csu=lib/csu/i386-elf
688130365Smlaier.else
689130365Smlaier_csu=lib/csu/${MACHINE_ARCH}
690130365Smlaier.endif
691130365Smlaier
692130365Smlaier.if !defined(NOSECURE) && !defined(NOCRYPT)
693130365Smlaier_libcrypt=	lib/libcrypt secure/lib/libcrypt
694130365Smlaier_secure_lib=	secure/lib
695130365Smlaier.else
696130365Smlaier_libcrypt=	lib/libcrypt
697130365Smlaier.endif
698130365Smlaier
699130365Smlaier.if !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
700130365Smlaier_kerberosIV_lib=kerberosIV/lib
701130365Smlaier.endif
702130365Smlaier
703130365Smlaier.if defined(WANT_CSRG_LIBM)
704130365Smlaier_libm=	lib/libm
705130365Smlaier.else
706130365Smlaier_libm=	lib/msun
707130365Smlaier.endif
708130365Smlaier
709130365Smlaier.if !defined(NOPERL)
710130365Smlaier_libperl=		gnu/usr.bin/perl/libperl
711130365Smlaier.endif
712130365Smlaier
713130365Smlaier#
714130365Smlaier# bootstrap-libraries - build just enough libraries for the bootstrap
715130365Smlaier# tools, and install them under ${WORLDTMP}.
716130365Smlaier#
717130365Smlaier# Build csu early so that some tools get linked to the new
718130365Smlaier# version (too late for the main tools, however).  Then build the
719130365Smlaier# necessary prerequisite libraries.
720130365Smlaier#
721130365Smlaier# This is mostly wrong.  The build tools must run on the host system,
722130365Smlaier# so they should use host libraries.  We depend on the target being
723130365Smlaier# similar enough to the host for new target libraries to work on the
724130365Smlaier# host.
725130365Smlaier#
726130365Smlaierbootstrap-libraries:
727130365Smlaier.for _lib in ${_csu} lib/libc lib/libncurses \
728130365Smlaier    gnu/lib/libregex gnu/lib/libreadline \
729130365Smlaier    lib/libedit ${_libm} \
730130365Smlaier    lib/libmd lib/libcrypt lib/libutil lib/libz usr.bin/lex/lib \
731130365Smlaier    ${_libperl}
732130365Smlaier.if exists(${.CURDIR}/${_lib})
733130365Smlaier	cd ${.CURDIR}/${_lib}; \
734130365Smlaier		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
735130365Smlaier		${MAKE} ${MK_FLAGS} all; \
736130365Smlaier		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
737130365Smlaier.endif
738130365Smlaier.endfor
739130368Smlaier
740130368Smlaier#
741130365Smlaier# libraries - build all libraries, and install them under ${DESTDIR}.
742130365Smlaier#
743130365Smlaier# The ordering is not as special as for bootstrap-libraries.  Build
744130365Smlaier# the prerequisites first, then build almost everything else in
745130365Smlaier# alphabetical order.
746130365Smlaier#
747130365Smlaierlibraries:
748130365Smlaier.for _lib in ${_csu} lib/libcom_err ${_libm} lib/libmd ${_libcrypt} \
749130365Smlaier    lib/libradius lib/libskey lib/libtacplus \
750130365Smlaier    ${_secure_lib} ${_kerberosIV_lib} \
751130365Smlaier    gnu/lib ${_libperl} lib usr.bin/lex/lib \
752130365Smlaier    usr.sbin/pcvt/keycap
753130365Smlaier.if exists(${.CURDIR}/${_lib})
754130365Smlaier	cd ${.CURDIR}/${_lib}; ${MAKE} all; ${MAKE} -B install
755130365Smlaier.endif
756130365Smlaier.endfor
757130365Smlaier
758130365Smlaier#
759130365Smlaier# Exclude unused tools from build-tools.
760247830Sglebius#
761130365Smlaier.if !defined(NOGAMES) && exists(${.CURDIR}/games)
762130365Smlaier_adventure=	games/adventure
763130365Smlaier_caesar=	games/caesar
764130365Smlaier_hack=		games/hack
765130365Smlaier_phantasia=	games/phantasia
766130365Smlaier_strfile=	games/fortune/strfile
767130365Smlaier.endif
768130365Smlaier.if !defined(NOPERL)
769130365Smlaier_perl=		gnu/usr.bin/perl/miniperl
770130365Smlaier.endif
771130365Smlaier.if !defined(NOSHARE) && exists(${.CURDIR}/share)
772130365Smlaier_scrnmaps=	share/syscons/scrnmaps
773130365Smlaier.endif
774130365Smlaier.if ${MACHINE_ARCH} == alpha
775130365Smlaier_elf2exe=	usr.sbin/elf2exe
776130365Smlaier.endif
777130365Smlaier.if ${MACHINE_ARCH} == i386
778130365Smlaier_kldlinux=	sys/modules/linux
779130365Smlaier.endif
780130365Smlaier.if ${OBJFORMAT} == "aout"
781130365Smlaier_netboot=	sys/${MACHINE}/boot/netboot
782130365Smlaier.endif
783130365Smlaier
784130365SmlaierBTMAKEFLAGS=	${MK_FLAGS} -D_BUILD_TOOLS
785130365Smlaier
786130365Smlaier#
787130365Smlaier# build-tools - build and install any other tools needed to complete the
788130365Smlaier# compile and install.
789130365Smlaier# ifdef stale
790130365Smlaier# bc and cpp are required to build groff.  Otherwise, the order here is
791130365Smlaier# mostly historical, i.e., bogus.
792130365Smlaier# chmod is used to build gcc's tmpmultilib[2] at obscure times.
793130365Smlaier# endif stale
794130365Smlaier# XXX uname is a bug - the target should not depend on the host.
795130365Smlaier#
796130365Smlaierbuild-tools:
797130365Smlaier.for d in				\
798130365Smlaier		bin/cat 		\
799130365Smlaier		bin/chmod		\
800130365Smlaier		bin/cp 			\
801130365Smlaier		bin/date		\
802130365Smlaier		bin/dd			\
803130365Smlaier		bin/echo		\
804130365Smlaier		bin/expr		\
805130365Smlaier		bin/hostname		\
806130365Smlaier		bin/ln			\
807130365Smlaier		bin/ls			\
808130365Smlaier		bin/mkdir		\
809130365Smlaier		bin/mv			\
810130365Smlaier		bin/rm			\
811130365Smlaier		bin/test		\
812130365Smlaier		${_caesar}		\
813130365Smlaier		${_strfile}		\
814130365Smlaier		gnu/usr.bin/awk		\
815130365Smlaier		gnu/usr.bin/bc		\
816130365Smlaier		gnu/usr.bin/grep	\
817130365Smlaier		gnu/usr.bin/groff	\
818130365Smlaier		gnu/usr.bin/gzip	\
819130365Smlaier		gnu/usr.bin/man/makewhatis	\
820130365Smlaier		gnu/usr.bin/patch	\
821130365Smlaier		${_perl}		\
822130365Smlaier		gnu/usr.bin/sort	\
823130365Smlaier		gnu/usr.bin/texinfo	\
824130365Smlaier		usr.bin/basename	\
825130365Smlaier		usr.bin/cap_mkdb	\
826130365Smlaier		usr.bin/chflags		\
827130365Smlaier		usr.bin/cmp		\
828130365Smlaier		usr.bin/col		\
829130365Smlaier		usr.bin/colldef		\
830130365Smlaier		usr.bin/cpp		\
831130365Smlaier		usr.bin/expand		\
832130365Smlaier		usr.bin/file2c		\
833130365Smlaier		usr.bin/find		\
834130365Smlaier		usr.bin/gencat		\
835130365Smlaier		usr.bin/gensetdefs	\
836130365Smlaier		usr.bin/id		\
837130365Smlaier		usr.bin/join		\
838130365Smlaier		usr.bin/lorder		\
839130365Smlaier		usr.bin/m4		\
840130365Smlaier		usr.bin/mkdep		\
841130365Smlaier		usr.bin/mklocale	\
842130365Smlaier		usr.bin/paste		\
843130365Smlaier		usr.bin/printf		\
844130365Smlaier		usr.bin/sed		\
845130365Smlaier		${_aout_size}		\
846130365Smlaier		usr.bin/soelim		\
847130365Smlaier		usr.bin/symorder	\
848130365Smlaier		usr.bin/touch		\
849130365Smlaier		usr.bin/tr		\
850130365Smlaier		usr.bin/true		\
851130365Smlaier		usr.bin/uname		\
852130365Smlaier		usr.bin/uuencode	\
853130365Smlaier		usr.bin/vgrind		\
854130365Smlaier		usr.bin/vi		\
855130365Smlaier		usr.bin/wc		\
856130365Smlaier		usr.bin/xargs		\
857130365Smlaier		usr.bin/yacc		\
858130365Smlaier		${_btxld}		\
859130365Smlaier		usr.sbin/chown		\
860130365Smlaier		${_elf2exe}		\
861130365Smlaier		usr.sbin/mtree		\
862130365Smlaier		usr.sbin/zic		\
863130365Smlaier		bin/sh
864130365Smlaier	cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} ${_DEPEND}; \
865130365Smlaier		${MAKE} ${BTMAKEFLAGS} all; \
866130365Smlaier		${MAKE} ${BTMAKEFLAGS} -B install ${CLEANDIR} ${OBJDIR}
867130365Smlaier.endfor
868130365Smlaier.if !defined(NOGAMES) && exists(${.CURDIR}/games)
869130365Smlaier	cd ${DESTDIR}/usr/games; cp -p caesar strfile ${DESTDIR}/usr/bin
870130365Smlaier.endif
871130365Smlaier.for d in				\
872130365Smlaier		bin/sh			\
873130365Smlaier		${_adventure}		\
874130365Smlaier		${_hack}		\
875130365Smlaier		${_phantasia}		\
876130365Smlaier		gnu/usr.bin/cc/cc_tools	\
877130365Smlaier		${_linux}		\
878130365Smlaier		${_kldlinux}		\
879130365Smlaier		${_scrnmaps}		\
880130365Smlaier		${_netboot}
881130365Smlaier	cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} build-tools
882130365Smlaier.endfor
883130365Smlaier
884130365Smlaier#
885130365Smlaier# Build aout versions of things that provide legacy support when all the
886130365Smlaier# rest of the world is elf.
887130365Smlaier#
888130365Smlaierlegacy-build:
889130365Smlaier.if	${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout"
890130365Smlaier	@echo
891130365Smlaier	@echo "--------------------------------------------------------------"
892130365Smlaier	@echo ">>> Making hierarchy"
893130365Smlaier	@echo "--------------------------------------------------------------"
894130365Smlaier	mkdir -p ${WORLDTMP}
895130365Smlaier	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 hierarchy
896130365Smlaier	@echo
897130365Smlaier	@echo "--------------------------------------------------------------"
898130365Smlaier	@echo ">>> Rebuilding the ${OBJFORMAT} obj tree"
899130365Smlaier	@echo "--------------------------------------------------------------"
900130365Smlaier	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 par-${OBJDIR}
901130365Smlaier	@echo
902130365Smlaier	@echo "--------------------------------------------------------------"
903130365Smlaier	@echo ">>> Rebuilding ${DESTDIR}/usr/include"
904130365Smlaier	@echo "--------------------------------------------------------------"
905130365Smlaier	cd ${.CURDIR}; SHARED=copies ${XMAKE} -f Makefile.inc1 includes
906130365Smlaier	@echo
907130365Smlaier	@echo "--------------------------------------------------------------"
908130365Smlaier	@echo ">>> Building legacy libraries"
909130365Smlaier	@echo "--------------------------------------------------------------"
910130365Smlaier	cd ${.CURDIR}; \
911130365Smlaier		${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 bootstrap-libraries
912130365Smlaier	cd ${.CURDIR}; \
913130365Smlaier		${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 libraries
914130365Smlaier	@echo
915130365Smlaier	@echo "--------------------------------------------------------------"
916130365Smlaier	@echo ">>> Building legacy rtld"
917130365Smlaier	@echo "--------------------------------------------------------------"
918130365Smlaier	cd ${.CURDIR}/libexec/rtld-aout; \
919130365Smlaier		${XMAKE} -DNOMAN depend; ${XMAKE} -DNOMAN all;
920130365Smlaier	@echo
921130365Smlaier	@echo "--------------------------------------------------------------"
922130365Smlaier	@echo ">>> Building legacy boot"
923130365Smlaier	@echo "--------------------------------------------------------------"
924130365Smlaier	cd ${.CURDIR}/sys/${MACHINE}/boot && \
925130365Smlaier		${XMAKE} -DNOMAN -B obj depend; ${XMAKE} -DNOMAN all;
926130365Smlaier.endif
927130365Smlaier
928130365Smlaier#
929130365Smlaier# Install aout versions of things that provide legacy support when all the
930130365Smlaier# rest of the world is elf.
931130365Smlaier#
932130365Smlaierlegacy-install:
933130365Smlaier.if	${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout"
934130365Smlaier	@echo
935130365Smlaier	@echo "--------------------------------------------------------------"
936130365Smlaier	@echo ">>> Installing legacy libraries"
937130365Smlaier	@echo "--------------------------------------------------------------"
938130365Smlaier	cd ${.CURDIR}/lib; ${MAKE} -B -DNOMAN -DNOINFO install
939130365Smlaier	cd ${.CURDIR}/gnu/lib; ${MAKE} -B -DNOMAN -DNOINFO install
940130365Smlaier	cd ${.CURDIR}/gnu/lib/libgcc; \
941130365Smlaier		${MAKE} -B -DNOMAN -DNOINFO install
942130365Smlaier	cd ${.CURDIR}/usr.bin/lex/lib; \
943130365Smlaier		${MAKE} -B -DNOMAN -DNOINFO install
944130365Smlaier	cd ${.CURDIR}/usr.sbin/pcvt/keycap; \
945130365Smlaier		${MAKE} -B -DNOMAN -DNOINFO install
946130365Smlaier.if exists(${.CURDIR}/secure/lib) && !defined(NOCRYPT) && !defined(NOSECURE)
947130365Smlaier	cd ${.CURDIR}/secure/lib; ${MAKE} -B -DNOMAN -DNOINFO install
948130365Smlaier.endif
949130365Smlaier.if exists(${.CURDIR}/kerberosIV/lib) && !defined(NOCRYPT) && \
950130365Smlaier    defined(MAKE_KERBEROS4)
951130365Smlaier	cd ${.CURDIR}/kerberosIV/lib; ${MAKE} -B -DNOMAN -DNOINFO install
952130365Smlaier.endif
953130365Smlaier	@echo
954130365Smlaier	@echo "--------------------------------------------------------------"
955130365Smlaier	@echo ">>> Installing legacy rtld"
956130365Smlaier	@echo "--------------------------------------------------------------"
957130365Smlaier	cd ${.CURDIR}/libexec/rtld-aout; ${MAKE} -DNOMAN install
958130365Smlaier	@echo
959130365Smlaier.if ${MACHINE_ARCH} == "i386"
960130365Smlaier	@echo "--------------------------------------------------------------"
961130365Smlaier	@echo ">>> Installing legacy boot"
962130365Smlaier	@echo "--------------------------------------------------------------"
963130365Smlaier	cd ${.CURDIR}/sys/${MACHINE}/boot && ${MAKE} -DNOMAN install
964130365Smlaier.endif
965130365Smlaier.endif
966130365Smlaier
967130365Smlaier
968130365Smlaier# Get the object format that the tools see.
969130365Smlaier#
970130365Smlaier#
971130365Smlaier.if exists(/usr/bin/objformat)
972130365Smlaier__OBJFORMAT!=	objformat
973130365Smlaier.else
974130365Smlaier__OBJFORMAT=	${OBJFORMAT}
975130365Smlaier.endif
976130365Smlaier
977130365Smlaier#
978130365Smlaier# Check if the local /etc/make.conf or /etc/make.conf.local have attempted
979130365Smlaier# to override the OBJFORMAT without updating the environment for the tools
980247830Sglebius# to see.
981130365Smlaier#
982130365Smlaiercheck-objformat	:
983130365Smlaier.if	${__OBJFORMAT} != ${OBJFORMAT}
984130365Smlaier	@/bin/sh -c "echo \"It looks like you set OBJFORMAT=${OBJFORMAT} in /etc/make.conf. Don't do that!\" "
985130365Smlaier	@/bin/sh -c "echo \"If you want to override the installed object format, you must set OBJFORMAT\" "
986130365Smlaier	@/bin/sh -c "echo \"in your environment.\" "
987130365Smlaier	@exit 1
988130365Smlaier.endif
989130365Smlaier.if	!defined(REALLY_WANT_DEPRECIATED_AOUT) && ${OBJFORMAT} == "aout"
990130365Smlaier	@echo "==== NOTICE: a.out buildworld is depreciated and disabled! ====="
991130365Smlaier	@echo "Read: http://www.freebsd.org/~peter/elfday.html for information."
992130365Smlaier	@echo "You need to complete a 'make aout-to-elf' to bring your system"
993130365Smlaier	@echo "up to date with ELF tools.  This requires a fair amount of disk"
994130365Smlaier	@echo "space to complete.  Alternatively, you can do a binary upgrade"
995130365Smlaier	@echo "using the 3.0-RELEASE binaries from CD or ftp.freebsd.org in"
996130365Smlaier	@echo "/pub/FreeBSD/3.0-RELEASE/bin/ to convert your userland to ELF."
997130365Smlaier	@exit 1
998130365Smlaier.endif
999130365Smlaier
1000130365Smlaier#
1001130365Smlaier# cross toolchain
1002130365Smlaier#
1003130365Smlaier# This is a subset of the tools built in lib-tools, build-tools, etc.  What
1004130365Smlaier# we are looking for here is to build the cross compilers, etc, with
1005130365Smlaier# the current host compiler.
1006130365Smlaier#
1007130365Smlaiercross-toolchain:
1008130365Smlaier.for d in				\
1009130365Smlaier		gnu/usr.bin/binutils	\
1010130365Smlaier		gnu/usr.bin/bison	\
1011130365Smlaier		gnu/usr.bin/cc		\
1012130365Smlaier		usr.bin/objformat
1013130365Smlaier	cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
1014130365Smlaier		${XTMAKE} ${MK_FLAGS} all; \
1015130365Smlaier		${XTMAKE} ${MK_FLAGS} -B install; \
1016130365Smlaier		${XTMAKE} ${MK_FLAGS:S/-DNOPIC//} -B ${CLEANDIR} ${OBJDIR}
1017130365Smlaier.endfor
1018130365Smlaier
1019130365Smlaier.for __target in clean cleandepend cleandir depend obj
1020130365Smlaier.for entry in ${SUBDIR}
1021130365Smlaier${entry}.${__target}__D: .PHONY
1022130365Smlaier	@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
1023130365Smlaier		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH}"; \
1024130365Smlaier		edir=${entry}.${MACHINE_ARCH}; \
1025130365Smlaier		cd ${.CURDIR}/$${edir}; \
1026130365Smlaier	else \
1027130365Smlaier		${ECHODIR} "===> ${DIRPRFX}${entry}"; \
1028130365Smlaier		edir=${entry}; \
1029130365Smlaier		cd ${.CURDIR}/$${edir}; \
1030130365Smlaier	fi; \
1031130365Smlaier	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
1032130365Smlaier.endfor
1033130365Smlaierpar-${__target}: ${SUBDIR:S/$/.${__target}__D/}
1034130365Smlaier.endfor
1035130365Smlaier
1036130365Smlaier.include <bsd.subdir.mk>
1037130365Smlaier