diff options
author | jb <jb@FreeBSD.org> | 1998-08-31 01:08:08 +0000 |
---|---|---|
committer | jb <jb@FreeBSD.org> | 1998-08-31 01:08:08 +0000 |
commit | 06541112167221c4cd76ef7502524b9fe1d66d98 (patch) | |
tree | 37f3a150c188e9f19281dea1d96a9b74e37f4848 /Makefile | |
parent | 7c39d735ef60c1a0050824f6964f41d1029f4820 (diff) | |
download | FreeBSD-src-06541112167221c4cd76ef7502524b9fe1d66d98.zip FreeBSD-src-06541112167221c4cd76ef7502524b9fe1d66d98.tar.gz |
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.
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 930 |
1 files changed, 93 insertions, 837 deletions
@@ -1,875 +1,131 @@ # -# $Id: Makefile,v 1.209 1998/08/04 17:13:38 bde Exp $ -# -# While porting to the another architecture include the bootstrap instead -# of the normal build. -# -.if exists(${.CURDIR}/Makefile.${MACHINE}) && defined(BOOTSTRAP_WORLD) -.include "${.CURDIR}/Makefile.${MACHINE}" -.else -# -# 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 -# -DNOOBJDIR do not run ``${MAKE} obj'' -# -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 - +# $Id$ # -# The intended user-driven targets are: -# buildworld - rebuild *everything*, including glue to help do upgrades -# installworld- install everything built by "buildworld" -# world - buildworld + installworld -# 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 - -.if (!make(world)) && (!make(buildworld)) && (!make(installworld)) -.MAKEFLAGS:= -m ${.CURDIR}/share/mk ${.MAKEFLAGS} -.endif - +# The user-driven targets are: # -# Pick up any macros that are defined in the src-relative bsd.own.mk -# but not in the "system" bsd.own.mk. The "system" version has -# unfortunately already been included by the "system" sys.mk, so this -# only works for new macros. First undefine old macros that cause -# problems. +# buildworld - Rebuild *everything*, including glue to help do +# upgrades. +# installworld - Install everything built by "buildworld". +# world - buildworld + installworld. +# update - Convenient way to update your source tree (cvs). +# most - Build user commands, no libraries or include files. +# installmost - Install user commands, no libraries or include files. +# aout-to-elf - Upgrade an system from a.out to elf format (see below). +# aout-to-elf-build - Build everything required to upgrade a system from +# a.out to elf format (see below). +# aout-to-elf-install - Install everything built by aout-to-elf-build (see +# below). # -.undef LIBDIR -.include "${.CURDIR}/share/mk/bsd.own.mk" - -# 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) -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 - -# Handle -DNOOBJDIR, -DNOCLEAN and -DNOCLEANDIR -.if defined(NOOBJDIR) -OBJDIR= -.else -OBJDIR= obj -.endif - -.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 - - +# This makefile is simple by design. The FreeBSD make automatically reads +# the /usr/share/mk/sys.mk unless the -m argument is specified on the +# command line. By keeping this makefile simple, it doesn't matter too +# much how different the installed mk files are from those in the source +# tree. This makefile executes a child make process, forcing it to use +# the mk files from the source tree which are supposed to DTRT. # -# 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 - +# The user-driven targets (as listed above) are implemented in Makefile.inc0 +# and the private targets are in Makefile.inc1. These are kept separate +# to help the bootstrap build from aout to elf format. # -# world -# -# Attempt to rebuild and reinstall *everything*, with reasonable chance of -# success, regardless of how old your existing system is. -# -# >> Beware, it overwrites the local build environment! << -# -world: - @echo "--------------------------------------------------------------" - @echo "make world started on `LC_TIME=C date`" - @echo "--------------------------------------------------------------" -.if target(pre-world) - @echo - @echo "--------------------------------------------------------------" - @echo " Making 'pre-world' target" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${MAKE} pre-world -.endif - cd ${.CURDIR}; ${MAKE} buildworld - cd ${.CURDIR}; ${MAKE} -B installworld -.if target(post-world) - @echo - @echo "--------------------------------------------------------------" - @echo " Making 'post-world' target" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${MAKE} post-world -.endif - @echo - @echo "--------------------------------------------------------------" - @echo "make world completed on `LC_TIME=C date`" - @echo "--------------------------------------------------------------" - -.if defined(MAKEOBJDIRPREFIX) -WORLDTMP= ${MAKEOBJDIRPREFIX}${.CURDIR}/tmp -.else -WORLDTMP= /usr/obj${.CURDIR}/tmp -.endif -STRICTTMPPATH= ${WORLDTMP}/sbin:${WORLDTMP}/usr/sbin:${WORLDTMP}/bin:${WORLDTMP}/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=${WORLDTMP}/usr/share/misc/bison.simple \ - COMPILER_PATH=${WORLDTMP}/usr/libexec:${WORLDTMP}/usr/bin \ - GCC_EXEC_PREFIX=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib/ \ - LD_LIBRARY_PATH=${WORLDTMP}${SHLIBDIR} \ - LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib - -BMAKEENV= PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t \ - OBJFORMAT_PATH=${WORLDTMP}/usr/libexec:/usr/libexec -XMAKEENV= PATH=${STRICTTMPPATH} ${COMPILER_ENV} \ - OBJFORMAT_PATH=${WORLDTMP}/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} -# 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 - +# For novices wanting to build from current sources, the simple instructions +# are: # -# 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 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 "--------------------------------------------------------------" - cd ${.CURDIR}; ${BMAKE} hierarchy -.if !defined(NOCLEAN) - @echo - @echo "--------------------------------------------------------------" - @echo " Cleaning up the obj tree" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${BMAKE} ${CLEANDIR:S/^/par-/} -.endif -.if !defined(NOOBJDIR) - @echo - @echo "--------------------------------------------------------------" - @echo " Rebuilding the obj tree" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${BMAKE} par-${OBJDIR} -.endif -.if !defined(NOTOOLS) - @echo - @echo "--------------------------------------------------------------" - @echo " Rebuilding bootstrap tools" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${BMAKE} bootstrap - @echo - @echo "--------------------------------------------------------------" - @echo " Rebuilding tools necessary to build the include files" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${BMAKE} include-tools -.endif - @echo - @echo "--------------------------------------------------------------" - @echo " Rebuilding ${DESTDIR}/usr/include" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; SHARED=copies ${BMAKE} includes - @echo - @echo "--------------------------------------------------------------" - @echo " Rebuilding bootstrap libraries" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${BMAKE} bootstrap-libraries -.if !defined(NOTOOLS) - @echo - @echo "--------------------------------------------------------------" - @echo " Rebuilding tools needed to build libraries" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${BMAKE} lib-tools -.endif -.if !defined(NOTOOLS) - @echo - @echo "--------------------------------------------------------------" - @echo " Rebuilding all other tools needed to build the world" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${BMAKE} build-tools -.endif -.if !defined(_NODEPEND) - @echo - @echo "--------------------------------------------------------------" - @echo " Rebuilding dependencies" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${XMAKE} par-depend -.endif - @echo - @echo "--------------------------------------------------------------" - @echo " Building libraries" - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN libraries - @echo - @echo "--------------------------------------------------------------" - @echo " Building everything.." - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${XMAKE} all - +# 1. Ensure that your /usr/obj directory has at least 165 Mb of free space. +# 2. `cd /usr/src' (or to the directory containing your source tree). +# 3. `make world' # -# installworld +# Be warned, this will update your installed system, except for configuration +# files in the /etc directory. You have to do those manually. # -# Installs everything compiled by a 'buildworld'. +# If at first you're a little nervous about having a `make world' update +# your system, a `make buildworld' will build everything in the /usr/obj +# tree without touching your installed system. To be of any further use +# though, a `make installworld' is required. # -installworld: - cd ${.CURDIR}; ${IXMAKE} reinstall - +# The `make world' process always follows the installed object format. +# This is set by creating /etc/objformat containing either OBJFORMAT=aout +# or OBJFORMAT=elf. If this file does not exist, the object format defaults +# to aout. This is expected to be changed to elf just prior to the release +# or 3.0. If OBJFORMAT is set as an environment variable or in /etc/make.conf, +# this overrides /etc/objformat. # -# 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} hierarchy - @echo - @echo "--------------------------------------------------------------" - @echo " Installing everything.." - @echo "--------------------------------------------------------------" - cd ${.CURDIR}; ${MAKE} 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 - +# Unless -DNOAOUT is specified, a `make world' with OBJFORMAT=elf will +# update the legacy support for aout. This includes all libraries, ld.so, +# lkms and boot objects. This part of build should be regarded as +# deprecated and you should _not_ expect to be able to do this past the +# release of 3.1. You have exactly one major release to move entirely +# to elf. # -# 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 - +# Upgrading an i386 system from a.out to elf format # -# ------------------------------------------------------------------------ # -# 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. +# The aout->elf transition build is performed by doing a `make aout-to-elf' +# or a `make aout-to-elf-build' followed by a `make aout-to-elf-install'. +# You need to have at least 320 Mb of free space for the object tree. # - +# The upgrade process checks the installed release. If this is 3.0-CURRENT, +# it is assumed that your kernel contains all the syscalls required by the +# current sources. # -# heirarchy - ensure that all the needed directories are present +# For installed systems where `uname -r' reports something other than +# 3.0-CURRENT, the upgrade process expects to build a kernel using the +# kernel configuration file sys/i386/conf/GENERICupgrade. This file is +# defaulted to the GENERIC kernel configuration file on the assumption that +# it will be suitable for most systems. Before performing the upgrade, +# replace sys/i386/conf/GENERICupgrade with your own version if your +# hardware requires a different configuration. # -hierarchy: - cd ${.CURDIR}/etc; ${MAKE} distrib-dirs - +# The upgrade procedure will stop and ask for confirmation to proceed +# several times. On each occasion, you can type Ctrl-C to abort the +# upgrade. # -# 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} -.if !defined(NOOBJDIR) - cd ${.CURDIR}/usr.bin/lex; ${MAKE} ${OBJDIR} -.endif - 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 - +# At the end of the upgrade procedure, /etc/objformat is created or +# updated to contain OBJFORMAT=elf. From then on, you're elf by default. # -# 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 - +# Define the user-driven targets. These are listed here in alphabetical +# order, but that's not important. # -# 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 +TGTS = all buildworld depend everything includes installmost install \ + installworld most obj update world # -# 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 - +# Handle the user-driven targets, using the source relative mk files. # -# 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 \ - 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 +${TGTS} : upgrade_checks + @cd ${.CURDIR}; \ + make -f Makefile.inc0 -m ${.CURDIR}/share/mk ${.TARGET} # -# We have to know too much about ordering and subdirs in the lib trees: +# Perform a few tests to determine if the installed tools are adequate +# for building the world. These are for older systems (prior to 2.2.5). # -# To satisfy shared library linkage when only the libraries being built -# are visible: +# From 2.2.5 onwards, the installed tools will pass these upgrade tests, +# so the normal make world is capable of doing what is required to update +# the system to current. # -# 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. +upgrade_checks : + @cd ${.CURDIR}; if `make -m ${.CURDIR}/share/mk test > /dev/null 2>&1`; then ok=1; else make -f Makefile.upgrade make; fi; + # -# Some libraries are built conditionally and/or are in inconsistently -# named directories: +# A simple test target used as part of the test to see if make supports +# the -m argument. # -.if exists(lib/csu/${MACHINE}.pcc) -_csu=lib/csu/${MACHINE}.pcc -.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 +test : # -# 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 - +# Define the upgrade targets. These are listed here in alphabetical +# order, but that's not important. # -# 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 +UPGRADE = aout-to-elf aout-to-elf-build aout-to-elf-install # -# 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) -_linux= lkm/linux -.endif - -BTMAKEFLAGS= ${MK_FLAGS} -D_BUILD_TOOLS - +# Handle the upgrade targets, using the source relative mk files. # -# 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} \ - sys/i386/boot/netboot - cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} build-tools -.endfor - cd ${.CURDIR}/usr.bin/tn3270/tools; ${MAKE} ${BTMAKEFLAGS} all - -.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 - -.endif - -.include <bsd.subdir.mk> +${UPGRADE} : upgrade_checks + @cd ${.CURDIR}; \ + make -f Makefile.upgrade -m ${.CURDIR}/share/mk ${.TARGET} |