summaryrefslogtreecommitdiffstats
path: root/Makefile.inc1
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>1999-12-20 10:32:11 +0000
committermarcel <marcel@FreeBSD.org>1999-12-20 10:32:11 +0000
commite59c91e4a65028e7278718bac4c70bd2f82f4577 (patch)
treedbe9d218939d3cd819f6f3b46f150cfc778982b0 /Makefile.inc1
parentc73ef6386e6b515a627422ed5c3c53ef48c871fc (diff)
downloadFreeBSD-src-e59c91e4a65028e7278718bac4c70bd2f82f4577.zip
FreeBSD-src-e59c91e4a65028e7278718bac4c70bd2f82f4577.tar.gz
o make SHARED=symlinks a caller defined instead of a callee defined
property. This fixes the includes target when DESTDIR is empty. o Do not make build-tools for f771 when NO_FORTRAN is defined. o Add new build stage. See below. o Change banners so that staging information is displayed. The addition of the build-tools target broke the upgrade path because we couldn't make use of previously built tools that were made for compatibility reasons. Doing so would also result in the cross-compiler being used and that is exactly what had to be avoided. This is solved by designating the bootstrap-tools stage for building anything that is needed for compatibility only and to create a new stage (started after the build-tools stage) that handles cross-tools building. We now have the following stages: 1. bootstrap-tools (for compatibility issues only) 2. build-tools 3. cross-tools (what it says) 4. world 5. install Stages 1-4 (inclusive) are handled by buildworld. Stage 5 is handled by installworld. Any more stages and I'll join Nik in his quest for the holy grail^W^Wworld :-)
Diffstat (limited to 'Makefile.inc1')
-rw-r--r--Makefile.inc1165
1 files changed, 107 insertions, 58 deletions
diff --git a/Makefile.inc1 b/Makefile.inc1
index 5d96b1c..b4b33d3 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -118,37 +118,66 @@ WORLDTMP= ${OBJTREE}${.CURDIR}/${BUILD_ARCH}
STRICTTMPPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games
TMPPATH= ${STRICTTMPPATH}:${PATH}
-# bootstrap make
-BMAKEENV= MAKEOBJDIRPREFIX=${WORLDTMP} \
+#
+# Building a world goes through the following stages
+#
+# bootstrap-tool stage [BMAKE]
+# This stage is responsible for creating programs that
+# are needed for backward compatibility reasons. They
+# are not built as cross-tools.
+# build-tool stage [TMAKE]
+# This stage is responsible for creating the object
+# tree and building any tools that are needed during
+# the build process.
+# cross-tool stage [XMAKE]
+# This stage is responsible for creating any tools that
+# are needed for cross-builds. A cross-compiler is one
+# of them.
+# world stage [WMAKE]
+# This stage actually builds the world.
+# install stage (optional) [IMAKE]
+# This stage installs a previously built world.
+#
+
+# Common environment for bootstrap related stages
+BOOTSTRAPENV= MAKEOBJDIRPREFIX=${WORLDTMP} \
DESTDIR=${WORLDTMP} \
INSTALL="sh ${.CURDIR}/tools/install.sh" \
- TARGET_ARCH=${MACHINE_ARCH} \
MACHINE_ARCH=${BUILD_ARCH} \
PATH=${TMPPATH}
-BMAKE= ${BMAKEENV} ${MAKE} -f Makefile.inc1 -DNOMAN -DNOINFO \
- -DNO_FORTRAN -DNO_GDB
-
-# script/tool make
-TMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE} \
- INSTALL="sh ${.CURDIR}/tools/install.sh"
-TMAKE= ${TMAKEENV} ${MAKE} -f Makefile.inc1
-CROSSENV= COMPILER_PATH=${WORLDTMP}/usr/libexec:${WORLDTMP}/usr/bin \
+# Common environment for world related stages
+CROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \
+ COMPILER_PATH=${WORLDTMP}/usr/libexec:${WORLDTMP}/usr/bin \
LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib \
OBJFORMAT_PATH=${WORLDTMP}/usr/libexec \
PERL5LIB=${WORLDTMP}/usr/libdata/perl/5.00503
-# cross make used for compilation
-XMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE} \
- ${CROSSENV} \
+# bootstrap-tool stage
+BMAKEENV= ${BOOTSTRAPENV}
+BMAKE= ${BMAKEENV} ${MAKE} -f Makefile.inc1 -DNOMAN -DNOINFO
+
+# build-tool stage
+TMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE} \
+ INSTALL="sh ${.CURDIR}/tools/install.sh" \
+ PATH=${TMPPATH}
+TMAKE= ${TMAKEENV} ${MAKE} -f Makefile.inc1
+
+# cross-tool stage
+XMAKEENV= ${BOOTSTRAPENV} \
+ TARGET_ARCH=${MACHINE_ARCH}
+XMAKE= ${XMAKEENV} ${MAKE} -f Makefile.inc1 -DNOMAN -DNOINFO \
+ -DNO_FORTRAN -DNO_GDB
+
+# world stage
+WMAKEENV= ${CROSSENV} \
DESTDIR=${WORLDTMP} \
INSTALL="sh ${.CURDIR}/tools/install.sh" \
PATH=${TMPPATH}
-XMAKE= ${XMAKEENV} ${MAKE} -f Makefile.inc1
+WMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1
-# cross make used for final installation
-IMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE} \
- ${CROSSENV}
+# install stage
+IMAKEENV= ${CROSSENV}
IMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1
USRDIRS= usr/bin usr/lib/compat/aout usr/games usr/libdata/ldscripts \
@@ -186,7 +215,7 @@ buildworld:
ln -sf ${.CURDIR}/sys ${WORLDTMP}/sys
@echo
@echo "--------------------------------------------------------------"
- @echo ">>> Rebuilding bootstrap tools"
+ @echo ">>> stage 1: bootstrap tools"
@echo "--------------------------------------------------------------"
cd ${.CURDIR}; ${BMAKE} bootstrap-tools
.if !empty(.MAKEFLAGS:M-j)
@@ -196,46 +225,51 @@ buildworld:
.if !defined(NOCLEAN)
@echo
@echo "--------------------------------------------------------------"
- @echo ">>> Cleaning up the object tree"
+ @echo ">>> stage 2: cleaning up the object tree"
@echo "--------------------------------------------------------------"
cd ${.CURDIR}; ${TMAKE} ${CLEANDIR:S/^/par-/}
.endif
@echo
@echo "--------------------------------------------------------------"
- @echo ">>> Rebuilding the object tree"
+ @echo ">>> stage 2: rebuilding the object tree"
@echo "--------------------------------------------------------------"
cd ${.CURDIR}; ${TMAKE} par-obj
@echo
@echo "--------------------------------------------------------------"
- @echo ">>> Rebuilding build tools"
+ @echo ">>> stage 2: build tools"
@echo "--------------------------------------------------------------"
cd ${.CURDIR}; ${TMAKE} build-tools
@echo
@echo "--------------------------------------------------------------"
- @echo ">>> Rebuilding ${WORLDTMP}/usr/include"
+ @echo ">>> stage 3: cross tools"
@echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${XMAKE} includes
+ cd ${.CURDIR}; ${XMAKE} cross-tools
@echo
@echo "--------------------------------------------------------------"
- @echo ">>> Building libraries"
+ @echo ">>> stage 4: populating ${WORLDTMP}/usr/include"
@echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN libraries
+ cd ${.CURDIR}; ${WMAKE} SHARED=symlinks includes
@echo
@echo "--------------------------------------------------------------"
- @echo ">>> Rebuilding dependencies"
+ @echo ">>> stage 4: building libraries"
@echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${XMAKE} par-depend
+ cd ${.CURDIR}; ${WMAKE} -DNOINFO -DNOMAN libraries
@echo
@echo "--------------------------------------------------------------"
- @echo ">>> Building everything.."
+ @echo ">>> stage 4: make dependencies"
+ @echo "--------------------------------------------------------------"
+ cd ${.CURDIR}; ${WMAKE} par-depend
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo ">>> stage 4: building everything.."
@echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${XMAKE} all
+ cd ${.CURDIR}; ${WMAKE} all
everything:
@echo "--------------------------------------------------------------"
@echo ">>> Building everything.."
@echo "--------------------------------------------------------------"
- cd ${.CURDIR}; ${XMAKE} all
+ cd ${.CURDIR}; ${WMAKE} all
#
# installworld
@@ -350,36 +384,14 @@ installmost:
#
#
-# bootstrap-tools - Build tools needed to run the actual build.
-#
-# WARNING: Because the bootstrap tools are expected to run on the
-# build-machine, MACHINE_ARCH is *always* set to BUILD_ARCH when this
-# target is being made. TARGET_ARCH is *always* set to reflect the
-# target-machine (which you can set by specifying MACHINE_ARCH on
-# make's command-line, get it?).
-# The reason is simple: we build these tools not to be run on the
-# architecture we're cross-building, but on the architecture we're
-# currently building on (ie the host-machine) and we expect these
-# tools to produce output for the architecture we're trying to
-# cross-build.
+# bootstrap-tools: Build tools needed for compatibility
#
.if exists(${.CURDIR}/games) && !defined(NOGAMES)
_games_tools= games/caesar games/fortune/strfile
.endif
-# XXX - MACHINE should actually be TARGET. But we don't set that...
-.if ${TARGET_ARCH} == "i386" && ${MACHINE} == "pc98"
-_aout_tools= usr.bin/size usr.bin/strip gnu/usr.bin/as gnu/usr.bin/ld
-.endif
-
-.if ${TARGET_ARCH} == "alpha" && ${MACHINE_ARCH} != "alpha"
-_elf2exe= usr.sbin/elf2exe
-.endif
-
bootstrap-tools:
-.for _tool in ${_games_tools} ${_aout_tools} ${_elf2exe} usr.bin/gensetdefs \
- gnu/usr.bin/binutils usr.bin/objformat usr.bin/yacc usr.bin/colldef \
- gnu/usr.bin/bison gnu/usr.bin/cc
+.for _tool in ${_games_tools} usr.bin/yacc usr.bin/colldef gnu/usr.bin/bison
cd ${.CURDIR}/${_tool}; \
${MAKE} obj; \
${MAKE} depend; \
@@ -388,7 +400,7 @@ bootstrap-tools:
.endfor
#
-# build-tools
+# build-tools: Build special purpose build tools
#
.if exists(${.CURDIR}/games) && !defined(NOGAMES)
_games= games/adventure games/hack games/phantasia
@@ -398,13 +410,50 @@ _games= games/adventure games/hack games/phantasia
_share= share/syscons/scrnmaps
.endif
+.if !defined(NO_FORTRAN)
+_fortran= gnu/usr.bin/cc/f771
+.endif
+
build-tools:
-.for _tool in bin/sh ${_games} gnu/usr.bin/cc/cc_tools gnu/usr.bin/cc/f771 \
+.for _tool in bin/sh ${_games} gnu/usr.bin/cc/cc_tools ${_fortran} \
lib/libncurses ${_share}
cd ${.CURDIR}/${_tool}; ${MAKE} build-tools
.endfor
#
+# cross-tools: Build cross-building tools
+#
+# WARNING: Because the bootstrap tools are expected to run on the
+# build-machine, MACHINE_ARCH is *always* set to BUILD_ARCH when this
+# target is being made. TARGET_ARCH is *always* set to reflect the
+# target-machine (which you can set by specifying MACHINE_ARCH on
+# make's command-line, get it?).
+# The reason is simple: we build these tools not to be run on the
+# architecture we're cross-building, but on the architecture we're
+# currently building on (ie the host-machine) and we expect these
+# tools to produce output for the architecture we're trying to
+# cross-build.
+#
+.if ${TARGET_ARCH} == "alpha" && ${MACHINE_ARCH} != "alpha"
+_elf2exe= usr.sbin/elf2exe
+.endif
+
+# XXX - MACHINE should actually be TARGET. But we don't set that...
+.if ${TARGET_ARCH} == "i386" && ${MACHINE} == "pc98"
+_aout_tools= usr.bin/size usr.bin/strip gnu/usr.bin/as gnu/usr.bin/ld
+.endif
+
+cross-tools:
+.for _tool in ${_aout_tools} ${_elf2exe} usr.bin/gensetdefs \
+ gnu/usr.bin/binutils usr.bin/objformat gnu/usr.bin/cc
+ cd ${.CURDIR}/${_tool}; \
+ ${MAKE} obj; \
+ ${MAKE} depend; \
+ ${MAKE} all; \
+ ${MAKE} install
+.endfor
+
+#
# hierarchy - ensure that all the needed directories are present
#
hierarchy:
@@ -414,7 +463,7 @@ hierarchy:
# includes - possibly generate and install the include files.
#
includes:
- cd ${.CURDIR}/include; ${MAKE} SHARED=symlinks -B all install
+ 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
OpenPOWER on IntegriCloud