From 06541112167221c4cd76ef7502524b9fe1d66d98 Mon Sep 17 00:00:00 2001 From: jb Date: Mon, 31 Aug 1998 01:08:08 +0000 Subject: E-day build system changes. - Moved most of the guts of Makefile to Makefile.inc1 to become the backend for the build system. - The new Makefile doesn't suffer from problems including the wrong sys.mk because it doesn't use anything in there or bsd.own.mk. So, from now on, the proper build command is just `make world' (or buildworld). - The intermediate makefiles called Makefile.inc0 and Makefile.upgrade fiddle with the OBJFORMAT and MAKEOBJDIRPREFIX variables so that both aout and elf object trees can coexist. Makefile.upgrade contains the aout->elf transition build. - A cross build environment is now very close to reality. Specifying TOOLDIR, setting OBJFORMAT and MAKEOBJDIRPREFIX allow that. See the comments in Makefile for more info. --- Makefile.inc1 | 961 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 961 insertions(+) create mode 100644 Makefile.inc1 (limited to 'Makefile.inc1') diff --git a/Makefile.inc1 b/Makefile.inc1 new file mode 100644 index 0000000..2d04a86 --- /dev/null +++ b/Makefile.inc1 @@ -0,0 +1,961 @@ +# +# $Id: Makefile,v 1.209 1998/08/04 17:13:38 bde Exp $ +# +# Make command line options: +# -DCLOBBER will remove /usr/include +# -DMAKE_KERBEROS4 to build KerberosIV +# -DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir +# -DNOCLEAN do not clean at all +# -DNOTOOLS do not rebuild any tools first +# -DNOCRYPT will prevent building of crypt versions +# -DNOLKM do not build loadable kernel modules +# -DNOPROFILE do not build profiled libraries +# -DNOSECURE do not go into secure subdir +# -DNOGAMES do not go into games subdir +# -DNOSHARE do not go into share subdir +# -DNOINFO do not make or install info files +# -DNOLIBC_R do not build libc_r. +# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list + +# +# The intended user-driven targets are: +# buildworld - rebuild *everything*, including glue to help do upgrades +# installworld- install everything built by "buildworld" +# update - convenient way to update your source tree (eg: sup/cvs) +# most - build user commands, no libraries or include files +# installmost - install user commands, no libraries or include files +# +# Standard targets (not defined here) are documented in the makefiles in +# /usr/share/mk. These include: +# obj depend all install clean cleandepend cleanobj + +# Put initial settings here. +SUBDIR= + +# We must do share/info early so that installation of info `dir' +# entries works correctly. Do it first since it is less likely to +# grow dependencies on include and lib than vice versa. +.if exists(share/info) +SUBDIR+= share/info +.endif + +# We must do include and lib early so that the perl *.ph generation +# works correctly as it uses the header files installed by this. +.if exists(include) +SUBDIR+= include +.endif +.if exists(lib) +SUBDIR+= lib +.endif + +.if exists(bin) +SUBDIR+= bin +.endif +.if exists(games) && !defined(NOGAMES) +SUBDIR+= games +.endif +.if exists(gnu) +SUBDIR+= gnu +.endif +.if exists(kerberosIV) && exists(crypto) && !defined(NOCRYPT) && \ + defined(MAKE_KERBEROS4) +SUBDIR+= kerberosIV +.endif +.if exists(libexec) +SUBDIR+= libexec +.endif +.if exists(sbin) +SUBDIR+= sbin +.endif +.if exists(share) && !defined(NOSHARE) +SUBDIR+= share +.endif +.if exists(sys) +SUBDIR+= sys +.endif +.if exists(usr.bin) +SUBDIR+= usr.bin +.endif +.if exists(usr.sbin) +SUBDIR+= usr.sbin +.endif +.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE) +SUBDIR+= secure +.endif +.if exists(lkm) && !defined(NOLKM) && ${OBJFORMAT} == "aout" +SUBDIR+= lkm +.endif + +# etc must be last for "distribute" to work +.if exists(etc) +SUBDIR+= etc +.endif + +# These are last, since it is nice to at least get the base system +# rebuilt before you do them. +.if defined(LOCAL_DIRS) +.for _DIR in ${LOCAL_DIRS} +.if exists(${_DIR}) & exists(${_DIR}/Makefile) +SUBDIR+= ${_DIR} +.endif +.endfor +.endif + +OBJDIR= obj + +.if defined(NOCLEAN) +CLEANDIR= +.else +.if defined(NOCLEANDIR) +CLEANDIR= clean cleandepend +.else +CLEANDIR= cleandir +.endif +.endif + +.if !defined(NOCLEAN) +_NODEPEND= true +.endif +.if defined(_NODEPEND) +_DEPEND= cleandepend +.else +_DEPEND= depend +.endif + +SUP?= cvsup +SUPFLAGS?= -g -L 2 -P - + +# +# While building tools for bootstrapping, we don't need to waste time on +# shared or profiled libraries, shared linkage, or documentation, except +# when the tools won't get cleaned we must use the defaults for shared +# libraries and shared linkage (and this doesn't waste time). +# XXX actually, we do need to waste time building shared libraries. +# +.if defined(NOCLEAN) +MK_FLAGS= -DNOINFO -DNOMAN -DNOPROFILE +.else +MK_FLAGS= -DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED +.endif + +# +# Define the location of the temporary installation directory. Note that +# MAKEOBJDIRPREFIX normally isn't defined so if the current directory is +# /usr/src, then the world temporary directory is /usr/obj/usr/src/tmp. +# +# During the transition from aout to elf format on i386, MAKEOBJDIRPREFIX +# is set by the parent makefile (Makefile.inc0) to be /usr/obj/${OBJFORMAT} +# in order to keep aout and elf format files apart. +# +.if defined(MAKEOBJDIRPREFIX) +WORLDTMP= ${MAKEOBJDIRPREFIX}${.CURDIR}/tmp +.else +WORLDTMP= /usr/obj${.CURDIR}/tmp +.endif + +# +# Define the PATH to the build tools. +# +# If not building tools, the PATH always points to the installed binaries. +# The NOTOOLS option assumes that in installed tools are good enough and that +# the user's PATH will locate to appropriate tools. This option is required +# for a cross-compiled build environment. +# +# If building tools, then the PATH includes the world temporary directories +# so that the bootstrapped tools are used as soon as they are built. The +# strict path is for use after all tools are supposed to have been +# bootstrapped. It doesn't allow any of the installed tools to be used. +# +.if defined(NOTOOLS) +# Default root of the tool tree +TOOLROOT?= +# Choose the PATH relative to the root of the tool tree +PATH= ${TOOLROOT}/sbin:${TOOLROOT}/bin:${TOOLROOT}/usr/sbin:${TOOLROOT}/usr/bin:${TOOLROOT}/usr/games +.else +TOOLROOT= ${WORLDTMP} +.endif +STRICTTMPPATH= ${TOOLROOT}/sbin:${TOOLROOT}/usr/sbin:${TOOLROOT}/bin:${TOOLROOT}/usr/bin +TMPPATH= ${STRICTTMPPATH}:${PATH} + +# XXX COMPILER_PATH is needed for finding cc1, ld and as +# XXX GCC_EXEC_PREFIX is for *crt.o. It is probably unnecessary now +# that LIBRARY_PATH is set. We still can't use -nostdlib, since gcc +# wouldn't link *crt.o or libgcc if it were used. +# XXX LD_LIBRARY_PATH is for ld.so. It is also used by ld, although we don't +# want that - all compile-time library paths should be resolved by gcc. +# It fails for set[ug]id executables (are any used?). +COMPILER_ENV= BISON_SIMPLE=${TOOLROOT}/usr/share/misc/bison.simple \ + COMPILER_PATH=${TOOLROOT}/usr/libexec:${TOOLROOT}/usr/bin \ + GCC_EXEC_PREFIX=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib/ \ + LD_LIBRARY_PATH=${TOOLROOT}${SHLIBDIR} \ + LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib + +BMAKEENV= PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t \ + OBJFORMAT_PATH=${TOOLROOT}/usr/libexec:/usr/libexec +XMAKEENV= PATH=${STRICTTMPPATH} ${COMPILER_ENV} \ + OBJFORMAT_PATH=${TOOLROOT}/usr/libexec \ + CFLAGS="-nostdinc ${CFLAGS}" # XXX -nostdlib + +# used to compile and install 'make' in temporary build tree +MAKETMP= ${WORLDTMP}/make +IBMAKE= ${BMAKEENV} MAKEOBJDIR=${MAKETMP} ${MAKE} DESTDIR=${WORLDTMP} + +.if defined(NOTOOLS) +# bootstrap make +BMAKE= ${BMAKEENV} ${MAKE} DESTDIR=${WORLDTMP} +# cross make used for compilation +XMAKE= ${XMAKEENV} ${MAKE} DESTDIR=${WORLDTMP} +# cross make used for final installation +IXMAKE= ${XMAKEENV} ${MAKE} +.else +# bootstrap make +BMAKE= ${BMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP} +# cross make used for compilation +XMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP} +# cross make used for final installation +IXMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/make +.endif + +# +# buildworld +# +# Attempt to rebuild the entire system, with reasonable chance of +# success, regardless of how old your existing system is. +# +buildworld: +.if !defined(NOCLEAN) + @echo + @echo "--------------------------------------------------------------" + @echo " Cleaning up the temporary ${OBJFORMAT} build tree" + @echo "--------------------------------------------------------------" + mkdir -p ${WORLDTMP} + chflags -R noschg ${WORLDTMP}/ + rm -rf ${WORLDTMP} +.endif +.if !defined(NOTOOLS) + @echo + @echo "--------------------------------------------------------------" + @echo " Making make" + @echo "--------------------------------------------------------------" + mkdir -p ${WORLDTMP}/usr/bin ${MAKETMP} + ( \ + cd ${.CURDIR}/usr.bin/make; \ + MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \ + ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all; \ + ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install; \ + ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean \ + ) + @echo + @echo "--------------------------------------------------------------" + @echo " Making mtree" + @echo "--------------------------------------------------------------" + mkdir -p ${WORLDTMP}/usr/sbin ${WORLDTMP}/mtree + ( \ + cd ${.CURDIR}/usr.sbin/mtree; \ + MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \ + export MAKEOBJDIR=${WORLDTMP}/mtree; \ + ${BMAKE} ${MK_FLAGS} all; \ + ${BMAKE} ${MK_FLAGS} -B install clean \ + ) +.endif + @echo + @echo "--------------------------------------------------------------" + @echo " Making hierarchy" + @echo "--------------------------------------------------------------" + mkdir -p ${WORLDTMP} + cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 hierarchy +.if !defined(NOCLEAN) + @echo + @echo "--------------------------------------------------------------" + @echo " Cleaning up the ${OBJFORMAT} obj tree" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/} +.endif + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding the ${OBJFORMAT} obj tree" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 par-${OBJDIR} +.if !defined(NOTOOLS) + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding ${OBJFORMAT} bootstrap tools" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 bootstrap + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding tools necessary to build the include files" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 include-tools +.endif + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding ${DESTDIR}/usr/include" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; SHARED=copies ${BMAKE} -f Makefile.inc1 includes + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding bootstrap libraries" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 bootstrap-libraries +.if !defined(NOTOOLS) + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding tools needed to build libraries" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 lib-tools +.endif +.if !defined(NOTOOLS) + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding all other tools needed to build the ${OBJFORMAT} world" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 build-tools +.endif +.if !defined(_NODEPEND) + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding dependencies" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 par-depend +.endif + @echo + @echo "--------------------------------------------------------------" + @echo " Building ${OBJFORMAT} libraries" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 libraries + @echo + @echo "--------------------------------------------------------------" + @echo " Building everything.." + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 all + +everything: + @echo "--------------------------------------------------------------" + @echo " Building everything.." + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 all + +# +# installworld +# +# Installs everything compiled by a 'buildworld'. +# +installworld: + cd ${.CURDIR}; ${IXMAKE} -f Makefile.inc1 reinstall + +# +# reinstall +# +# If you have a build server, you can NFS mount the source and obj directories +# and do a 'make reinstall' on the *client* to install new binaries from the +# most recent server build. +# +reinstall: + @echo "--------------------------------------------------------------" + @echo " Making hierarchy" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy + @echo + @echo "--------------------------------------------------------------" + @echo " Installing everything.." + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install +.if ${MACHINE_ARCH} == "i386" + @echo + @echo "--------------------------------------------------------------" + @echo " Re-scanning the shared libraries.." + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; /sbin/ldconfig -R +.endif + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding man page indexes" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/share/man; ${MAKE} makedb + +# +# update +# +# Update the source tree, by running sup and/or running cvs to update to the +# latest copy. +# +update: +.if defined(SUP_UPDATE) + @echo "--------------------------------------------------------------" + @echo "Running ${SUP}" + @echo "--------------------------------------------------------------" + @${SUP} ${SUPFLAGS} ${SUPFILE} +.if defined(SUPFILE1) + @${SUP} ${SUPFLAGS} ${SUPFILE1} +.endif +.if defined(SUPFILE2) + @${SUP} ${SUPFLAGS} ${SUPFILE2} +.endif +.endif +.if defined(CVS_UPDATE) + @echo "--------------------------------------------------------------" + @echo "Updating /usr/src from cvs repository" ${CVSROOT} + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; cvs -q update -P -d +.endif + +# +# most +# +# Build most of the user binaries on the existing system libs and includes. +# +most: + @echo "--------------------------------------------------------------" + @echo " Building programs only" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/bin; ${MAKE} all + cd ${.CURDIR}/sbin; ${MAKE} all + cd ${.CURDIR}/libexec; ${MAKE} all + cd ${.CURDIR}/usr.bin; ${MAKE} all + cd ${.CURDIR}/usr.sbin; ${MAKE} all + cd ${.CURDIR}/gnu/libexec; ${MAKE} all + cd ${.CURDIR}/gnu/usr.bin; ${MAKE} all + cd ${.CURDIR}/gnu/usr.sbin; ${MAKE} all +#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT) +# cd ${.CURDIR}/kerberosIV; ${MAKE} most +#.endif +#.if !defined(NOSECURE) && !defined(NOCRYPT) +# cd ${.CURDIR}/secure; ${MAKE} most +#.endif + +# +# installmost +# +# Install the binaries built by the 'most' target. This does not include +# libraries or include files. +# +installmost: + @echo "--------------------------------------------------------------" + @echo " Installing programs only" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/bin; ${MAKE} install + cd ${.CURDIR}/sbin; ${MAKE} install + cd ${.CURDIR}/libexec; ${MAKE} install + cd ${.CURDIR}/usr.bin; ${MAKE} install + cd ${.CURDIR}/usr.sbin; ${MAKE} install + cd ${.CURDIR}/gnu/libexec; ${MAKE} install + cd ${.CURDIR}/gnu/usr.bin; ${MAKE} install + cd ${.CURDIR}/gnu/usr.sbin; ${MAKE} install +#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT) +# cd ${.CURDIR}/kerberosIV; ${MAKE} installmost +#.endif +#.if !defined(NOSECURE) && !defined(NOCRYPT) +# cd ${.CURDIR}/secure; ${MAKE} installmost +#.endif + +# +# ------------------------------------------------------------------------ +# +# From here onwards are utility targets used by the 'make world' and +# related targets. If your 'world' breaks, you may like to try to fix +# the problem and manually run the following targets to attempt to +# complete the build. Beware, this is *not* guaranteed to work, you +# need to have a pretty good grip on the current state of the system +# to attempt to manually finish it. If in doubt, 'make world' again. +# + +# +# hierarchy - ensure that all the needed directories are present +# +hierarchy: + cd ${.CURDIR}/etc; ${MAKE} distrib-dirs + +# +# bootstrap - [re]build tools needed to run the actual build, this includes +# tools needed by 'make depend', as some tools are needed to generate source +# for the dependency information to be gathered from. +# +bootstrap: +.if defined(DESTDIR) + rm -f ${DESTDIR}/usr/src/sys + ln -s ${.CURDIR}/sys ${DESTDIR}/usr/src + cd ${.CURDIR}/include; find -dx . | cpio -dump ${DESTDIR}/usr/include +.for d in net netinet posix4 sys vm machine + if [ -h ${DESTDIR}/usr/include/$d ]; then \ + rm -f ${DESTDIR}/usr/include/$d ; \ + fi +.endfor + cd ${.CURDIR}/sys; \ + find -dx net netinet posix4 sys vm -name '*.h' -o -type d | \ + cpio -dump ${DESTDIR}/usr/include + mkdir -p ${DESTDIR}/usr/include/machine + cd ${.CURDIR}/sys/${MACHINE_ARCH}/include; find -dx . -name '*.h' -o -type d | \ + cpio -dump ${DESTDIR}/usr/include/machine +.endif + cd ${.CURDIR}/usr.bin/make; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${MK_FLAGS} all; \ + ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} + cd ${.CURDIR}/usr.bin/xinstall; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${MK_FLAGS} all; \ + ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} + cd ${.CURDIR}/usr.bin/yacc; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${MK_FLAGS} all; \ + ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} + cd ${.CURDIR}/usr.bin/lex; ${MAKE} bootstrap; \ + ${MAKE} ${MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${MK_FLAGS} -DNOLIB all; \ + ${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR} + cd ${.CURDIR}/usr.bin/lex; ${MAKE} ${OBJDIR} + cd ${.CURDIR}/usr.sbin/mtree; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${MK_FLAGS} all; \ + ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} +.if defined(DESTDIR) + cd ${.CURDIR}/include && ${MAKE} copies +.endif + +# +# include-tools - generally the same as 'bootstrap', except that it's for +# things that are specifically needed to generate include files. +# +# XXX should be merged with bootstrap, it's not worth keeeping them separate. +# Well, maybe it is now. We force 'cleandepend' here to avoid dependencies +# on cleaned away headers in ${WORLDTMP}. +# +include-tools: +.for d in usr.bin/compile_et usr.bin/rpcgen + cd ${.CURDIR}/$d; ${MAKE} cleandepend; \ + ${MAKE} ${MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${MK_FLAGS} all; \ + ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} +.endfor + +# +# includes - possibly generate and install the include files. +# +includes: +.if defined(CLOBBER) + rm -rf ${DESTDIR}/usr/include/* + mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ + -p ${DESTDIR}/usr/include +.endif + cd ${.CURDIR}/include; ${MAKE} -B all install + cd ${.CURDIR}/gnu/include; ${MAKE} install + cd ${.CURDIR}/gnu/lib/libmp; ${MAKE} beforeinstall + cd ${.CURDIR}/gnu/lib/libobjc; ${MAKE} beforeinstall + cd ${.CURDIR}/gnu/lib/libreadline; ${MAKE} beforeinstall + cd ${.CURDIR}/gnu/lib/libregex; ${MAKE} beforeinstall + cd ${.CURDIR}/gnu/lib/libstdc++; ${MAKE} beforeinstall + cd ${.CURDIR}/gnu/lib/libg++; ${MAKE} beforeinstall + cd ${.CURDIR}/gnu/lib/libdialog; ${MAKE} beforeinstall + cd ${.CURDIR}/gnu/lib/libgmp; ${MAKE} beforeinstall +.if exists(secure) && !defined(NOCRYPT) + cd ${.CURDIR}/secure/lib/libdes; ${MAKE} beforeinstall +.endif +.if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4) + cd ${.CURDIR}/kerberosIV/lib/libacl; ${MAKE} beforeinstall + cd ${.CURDIR}/kerberosIV/lib/libkadm; ${MAKE} beforeinstall + cd ${.CURDIR}/kerberosIV/lib/libkafs; ${MAKE} beforeinstall + cd ${.CURDIR}/kerberosIV/lib/libkdb; ${MAKE} beforeinstall + cd ${.CURDIR}/kerberosIV/lib/libkrb; ${MAKE} beforeinstall + cd ${.CURDIR}/kerberosIV/lib/libtelnet; ${MAKE} beforeinstall +.else + cd ${.CURDIR}/lib/libtelnet; ${MAKE} beforeinstall +.endif +.if exists(${.CURDIR}/lib/csu/${MACHINE}) + cd ${.CURDIR}/lib/csu/${MACHINE}; ${MAKE} beforeinstall +.endif + cd ${.CURDIR}/lib/libalias; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libc; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libcalendar; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libcurses; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libdisk; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libedit; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libftpio; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libmd; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libmytinfo; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libncurses; ${MAKE} beforeinstall +.if !defined(WANT_CSRG_LIBM) + cd ${.CURDIR}/lib/msun; ${MAKE} beforeinstall +.endif + cd ${.CURDIR}/lib/libopie; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libpcap; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/librpcsvc; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libskey; ${MAKE} beforeinstall +.if !defined(NOTCL) && exists (${.CURDIR}/contrib/tcl) && \ + exists(${.CURDIR}/usr.bin/tclsh) && exists (${.CURDIR}/lib/libtcl) + cd ${.CURDIR}/lib/libtcl; ${MAKE} installhdrs +.endif + cd ${.CURDIR}/lib/libtermcap; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libcom_err; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libss; ${MAKE} -B hdrs beforeinstall + cd ${.CURDIR}/lib/libscsi; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libutil; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libvgl; ${MAKE} beforeinstall + cd ${.CURDIR}/lib/libz; ${MAKE} beforeinstall + cd ${.CURDIR}/usr.bin/f2c; ${MAKE} beforeinstall + cd ${.CURDIR}/usr.bin/lex; ${MAKE} beforeinstall + +# +# Declare tools if they are not required on all architectures. +# +.if ${MACHINE_ARCH} == "i386" +# aout tools: +_aout_ar = usr.bin/ar +_aout_as = gnu/usr.bin/as +_aout_ld = gnu/usr.bin/ld +_aout_nm = usr.bin/nm +_aout_ranlib = usr.bin/ranlib +_aout_size = usr.bin/size +_aout_strip = usr.bin/strip +.endif + +# +# lib-tools - build tools to compile and install the libraries. +# +# XXX gperf is required for cc +# XXX a new ld and tsort is required for cc +lib-tools: +.for d in \ + gnu/usr.bin/gperf \ + ${_aout_ld} \ + usr.bin/tsort \ + ${_aout_as} \ + gnu/usr.bin/bison \ + gnu/usr.bin/cc \ + ${_aout_ar} \ + usr.bin/env \ + usr.bin/lex/lib \ + usr.bin/mk_cmds \ + ${_aout_nm} \ + ${_aout_ranlib} \ + ${_aout_strip} \ + gnu/usr.bin/binutils \ + usr.bin/uudecode \ + share/info \ + usr.bin/objformat + cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${MK_FLAGS} all; \ + ${MAKE} ${MK_FLAGS} -B install; \ + ${MAKE} ${MK_FLAGS:S/-DNOPIC//} -B ${CLEANDIR} ${OBJDIR} +.endfor + +# +# We have to know too much about ordering and subdirs in the lib trees: +# +# To satisfy shared library linkage when only the libraries being built +# are visible: +# +# libcom_err must be built before libss. +# libcrypt and libmd must be built before libskey. +# libm must be built before libtcl. +# libmytinfo must be built before libdialog and libncurses. +# libncurses must be built before libdialog. +# libtermcap must be built before libcurses, libedit and libreadline. +# +# Some libraries are built conditionally and/or are in inconsistently +# named directories: +# +.if exists(lib/csu/${MACHINE}.pcc) +_csu=lib/csu/${MACHINE}.pcc +.elif ${MACHINE} == "i386" && ${OBJFORMAT} == "elf" +_csu=lib/csu/i386-elf +.else +_csu=lib/csu/${MACHINE} +.endif + +.if !defined(NOSECURE) && !defined(NOCRYPT) +_libcrypt= secure/lib/libcrypt lib/libcrypt +.else +_libcrypt= lib/libcrypt +.endif + +.if defined(WANT_CSRG_LIBM) +_libm= lib/libm +.else +_libm= lib/msun +.endif + +# +# bootstrap-libraries - build just enough libraries for the bootstrap +# tools, and install them under ${WORLDTMP}. +# +# Build csu and libgcc early so that some tools get linked to the new +# versions (too late for the main tools, however). Then build the +# necessary prerequisite libraries (libtermcap just needs to be before +# libcurses, and this only matters for the NOCLEAN case when NOPIC is +# not set). +# +# This is mostly wrong. The build tools must run on the host system, +# so they should use host libraries. We depend on the target being +# similar enough to the host for new target libraries to work on the +# host. +# +bootstrap-libraries: +.for _lib in ${_csu} gnu/usr.bin/cc/libgcc lib/libtermcap \ + gnu/lib/libregex gnu/lib/libreadline lib/libc \ + ${_libcrypt} lib/libcurses lib/libedit ${_libm} \ + lib/libmd lib/libutil lib/libz usr.bin/lex/lib +.if exists(${.CURDIR}/${_lib}) + cd ${.CURDIR}/${_lib}; \ + ${MAKE} ${MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${MK_FLAGS} all; \ + ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} +.endif +.endfor + +# +# bootstrap-rtld - Build the shared library loader and install it +# under ${WORLDTMP}. This requires libc_pic which isn't normally +# bootstrapped, so libc has to be built again. *sigh* +# +RTLD_MK_FLAGS= -DNOINFO -DNOMAN -DNOPROFILE +bootstrap-rtld: +.if exists(${.CURDIR}/libexec/rtld-${OBJFORMAT}) + cd ${.CURDIR}/lib/libc; \ + ${MAKE} ${RTLD_MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${RTLD_MK_FLAGS} all; \ + ${MAKE} ${RTLD_MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} + cd ${.CURDIR}/libexec/rtld-${OBJFORMAT}; \ + ${MAKE} obj; \ + ${MAKE} ${RTLD_MK_FLAGS} ${_DEPEND}; \ + ${MAKE} ${RTLD_MK_FLAGS} all; \ + ${MAKE} ${RTLD_MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} +.endif + +# +# libraries - build all libraries, and install them under ${DESTDIR}. +# +# The ordering is not as special as for bootstrap-libraries. Build +# the prerequisites first, then build almost everything else in +# alphabetical order. +# +libraries: +.for _lib in lib/libcom_err ${_libcrypt} ${_libm} lib/libmytinfo \ + lib/libncurses lib/libtermcap \ + gnu/lib gnu/usr.bin/cc/libgcc lib usr.bin/lex/lib usr.sbin/pcvt/keycap +.if exists(${.CURDIR}/${_lib}) + cd ${.CURDIR}/${_lib}; ${MAKE} all; ${MAKE} -B install +.endif +.endfor +.if exists(${.CURDIR}/secure/lib) && !defined(NOCRYPT) && !defined(NOSECURE) + cd ${.CURDIR}/secure/lib; ${MAKE} all; ${MAKE} -B install +.endif +.if exists(${.CURDIR}/kerberosIV/lib) && !defined(NOCRYPT) && \ + defined(MAKE_KERBEROS4) + cd ${.CURDIR}/kerberosIV/lib; ${MAKE} all; ${MAKE} -B install +.endif + +# +# Exclude unused tools from build-tools. +# +.if !defined(NOGAMES) && exists(${.CURDIR}/games) +_adventure= games/adventure +_caesar= games/caesar +_hack= games/hack +_phantasia= games/phantasia +_strfile= games/fortune/strfile +.endif +.if !defined(NOPERL) +_perl= gnu/usr.bin/perl/perl +.endif +.if !defined(NOSHARE) && exists(${.CURDIR}/share) +_scrnmaps= share/syscons/scrnmaps +.endif +.if !defined(NOLKM) && exists(${.CURDIR}/lkm) && ${OBJFORMAT} == "aout" +_linux= lkm/linux +.endif +.if ${OBJFORMAT} == "aout" +_netboot= sys/i386/boot/netboot +.endif + +BTMAKEFLAGS= ${MK_FLAGS} -D_BUILD_TOOLS + +# +# build-tools - build and install any other tools needed to complete the +# compile and install. +# ifdef stale +# bc and cpp are required to build groff. Otherwise, the order here is +# mostly historical, i.e., bogus. +# chmod is used to build gcc's tmpmultilib[2] at obscure times. +# endif stale +# XXX uname is a bug - the target should not depend on the host. +# +build-tools: +.for d in \ + bin/cat \ + bin/chmod \ + bin/cp \ + bin/date \ + bin/dd \ + bin/echo \ + bin/expr \ + bin/hostname \ + bin/ln \ + bin/ls \ + bin/mkdir \ + bin/mv \ + bin/rm \ + bin/test \ + ${_caesar} \ + ${_strfile} \ + gnu/usr.bin/awk \ + gnu/usr.bin/bc \ + gnu/usr.bin/grep \ + gnu/usr.bin/groff \ + gnu/usr.bin/gzip \ + gnu/usr.bin/man/makewhatis \ + gnu/usr.bin/patch \ + ${_perl} \ + gnu/usr.bin/sort \ + gnu/usr.bin/texinfo \ + usr.bin/basename \ + usr.bin/cap_mkdb \ + usr.bin/chflags \ + usr.bin/cmp \ + usr.bin/col \ + usr.bin/colldef \ + usr.bin/cpp \ + usr.bin/expand \ + usr.bin/file2c \ + usr.bin/find \ + usr.bin/gencat \ + usr.bin/id \ + usr.bin/join \ + usr.bin/lorder \ + usr.bin/m4 \ + usr.bin/mkdep \ + usr.bin/mklocale \ + usr.bin/paste \ + usr.bin/sed \ + ${_aout_size} \ + usr.bin/soelim \ + usr.bin/symorder \ + usr.bin/touch \ + usr.bin/tr \ + usr.bin/true \ + usr.bin/uname \ + usr.bin/uuencode \ + usr.bin/vgrind \ + usr.bin/vi \ + usr.bin/wc \ + usr.bin/xargs \ + usr.bin/yacc \ + usr.sbin/chown \ + usr.sbin/mtree \ + usr.sbin/zic \ + bin/sh + cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} ${_DEPEND}; \ + ${MAKE} ${BTMAKEFLAGS} all; \ + ${MAKE} ${BTMAKEFLAGS} -B install ${CLEANDIR} ${OBJDIR} +.endfor +.if !defined(NOGAMES) && exists(${.CURDIR}/games) + cd ${DESTDIR}/usr/games; cp -p caesar strfile ${DESTDIR}/usr/bin +.endif +.for d in \ + bin/sh \ + ${_adventure} \ + ${_hack} \ + ${_phantasia} \ + gnu/usr.bin/cc/cc_tools \ + lib/libmytinfo \ + ${_linux} \ + ${_scrnmaps} \ + ${_netboot} + cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} build-tools +.endfor + cd ${.CURDIR}/usr.bin/tn3270/tools; ${MAKE} ${BTMAKEFLAGS} all + +# +# Build aout versions of things that provide legacy support when all the +# rest of the world is elf. +# +legacy-build: +.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout" + @echo + @echo "--------------------------------------------------------------" + @echo " Making hierarchy" + @echo "--------------------------------------------------------------" + mkdir -p ${WORLDTMP} + cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 hierarchy + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding the ${OBJFORMAT} obj tree" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 par-${OBJDIR} + @echo + @echo "--------------------------------------------------------------" + @echo " Rebuilding ${DESTDIR}/usr/include" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; SHARED=copies ${XMAKE} -f Makefile.inc1 includes + @echo + @echo "--------------------------------------------------------------" + @echo " Building legacy libraries" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}; \ + ${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 bootstrap-libraries + cd ${.CURDIR}; \ + ${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 libraries + @echo + @echo "--------------------------------------------------------------" + @echo " Building legacy rtld" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/libexec/rtld-aout; \ + ${XMAKE} -DNOMAN depend; ${XMAKE} -DNOMAN all; + @echo + @echo "--------------------------------------------------------------" + @echo " Building legacy lkms" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/lkm; \ + ${XMAKE} -DNOMAN depend; ${XMAKE} -DNOMAN all; + @echo + @echo "--------------------------------------------------------------" + @echo " Building legacy boot" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/sys/i386/boot; \ + ${XMAKE} -DNOMAN depend; ${XMAKE} -DNOMAN all; +.endif + +# +# Install aout versions of things that provide legacy support when all the +# rest of the world is elf. +# +legacy-install: +.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout" + @echo + @echo "--------------------------------------------------------------" + @echo " Installing legacy libraries" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/lib; ${MAKE} -B install + cd ${.CURDIR}/gnu/lib; ${MAKE} -B install + @echo + @echo "--------------------------------------------------------------" + @echo " Installing legacy rtld" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/libexec/rtld-aout; ${MAKE} -DNOMAN install + @echo + @echo "--------------------------------------------------------------" + @echo " Installing legacy lkms" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/lkm; ${MAKE} -DNOMAN install + @echo + @echo "--------------------------------------------------------------" + @echo " Installing legacy boot" + @echo "--------------------------------------------------------------" + cd ${.CURDIR}/sys/i386/boot; ${MAKE} -DNOMAN install +.endif + + +.for __target in clean cleandepend cleandir depend obj +.for entry in ${SUBDIR} +${entry}.${__target}__D: .PHONY + @if test -d ${.CURDIR}/${entry}.${MACHINE}; then \ + ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE}"; \ + edir=${entry}.${MACHINE}; \ + cd ${.CURDIR}/$${edir}; \ + else \ + ${ECHODIR} "===> ${DIRPRFX}${entry}"; \ + edir=${entry}; \ + cd ${.CURDIR}/$${edir}; \ + fi; \ + ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ +.endfor +par-${__target}: ${SUBDIR:S/$/.${__target}__D/} +.endfor + +.include -- cgit v1.1