Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Rework how build.sh functions, so that command line options ...
details: https://anonhg.NetBSD.org/src/rev/a75eadfa8850
branches: trunk
changeset: 542190:a75eadfa8850
user: lukem <lukem%NetBSD.org@localhost>
date: Thu Jan 23 16:24:08 2003 +0000
description:
Rework how build.sh functions, so that command line options set various
parameters, and a list of "operations" defines what to do.
The full usage is show below. Notes:
`-b' has been deprecated (it always occurs now)
`-d' is replaced by "distribution"
`-R rel' onlys sets RELEASEDIR; use "release" to build a release
`-k kern' has been replaced by "kernel=kern"
`-i idir' has been replaced by "install=idir"
-r now occurs before nbmake is rebuilt
Add a copyright (long due!). Rework the code to (a KNF inspired) ShellNF.
Use functions appropriately. Allow `nb' prefix to be easily changed to
something else. Solve world peace (just kidding)
This is part of the (never achievable) goal of attempting to make
NetBSD easier to build...
--8<-- new usage follows --8<--
Usage: build.sh [-EnorUu] [-a arch] [-B buildid] [-D dest] [-j njob] [-M obj]
[-m mach] [-O obj] [-R release] [-T tools] [-V var=[value]]
[-w wrapper] [operation [...] ]
System build operations (all imply "obj" and "tools"):
build Run "make build"
distribution Run "make distribution" (includes etc/ files)
release Run "make release" (includes kernels & distrib media)
Other operations:
obj Run "make obj" (default unless -o)
tools Build and install tools
kernel=conf Build kernel with config file `conf'
install=idir Run "make installworld" to `idir'
(useful after 'distribution' or 'release')
Options:
-a arch Set MACHINE_ARCH to arch (otherwise deduced from MACHINE)
-B buildId Set BUILDID to buildId
-D dest Set DESTDIR to dest
-E Set "expert" mode; disables some DESTDIR checks
-j njob Run up to njob jobs in parallel; see make(1)
-M obj Set obj root directory to obj (sets MAKEOBJDIRPREFIX)
-m mach Set MACHINE to mach (not required if NetBSD native)
-n Show commands that would be executed, but do not execute them
-O obj Set obj root directory to obj (sets a MAKEOBJDIR pattern)
-o Set MKOBJDIRS=no (do not create objdirs at start of build)
-R release Set RELEASEDIR to release
-r Remove contents of TOOLDIR and DESTDIR before building
-T tools Set TOOLDIR to tools. If unset, and TOOLDIR is not set in
the environment, nbmake will be (re)built unconditionally.
-U Set UNPRIVED
-u Set UPDATE
-V v=[val] Set variable `v' to `val'
-w wrapper Create nbmake script as wrapper
(default: ${TOOLDIR}/bin/nbmake-${MACHINE})
diffstat:
BUILDING | 102 ++--
build.sh | 1075 ++++++++++++++++++++++++++++++++--------------------
doc/BUILDING.mdoc | 203 +++++----
3 files changed, 823 insertions(+), 557 deletions(-)
diffs (truncated from 1730 to 300 lines):
diff -r cb239db49e5c -r a75eadfa8850 BUILDING
--- a/BUILDING Thu Jan 23 15:59:38 2003 +0000
+++ b/BUILDING Thu Jan 23 16:24:08 2003 +0000
@@ -30,8 +30,8 @@
toolchain (make is not required); all other tools are created as part of
the NetBSD build process.
- Note: A couple host toolchain components are not yet available in
- the tools directory. Also, some tools use non-POSIX, non-ANSI C
+ Note: A couple of host toolchain components are not yet available
+ in the tools directory. Also, some tools use non-POSIX, non-ANSI C
extensions and need to be standardized. As a result, cross-compil-
ing from systems other than NetBSD is not currently supported.
@@ -410,7 +410,8 @@
the proper order.
distribution Do a ``make build'', and then install a full distribution
- into DESTDIR.
+ into DESTDIR, including files in /dev, /etc, /root and
+ /var.
buildworld As per ``make distribution'', except that it ensures that
DESTDIR is not the root directory.
@@ -423,9 +424,10 @@
Note: It is highly recommended that you upgrade your kernel
and reboot before performing this operation.
- release Do a ``make build'', then package the system into a stan-
- dard release layout as described by release(7). This re-
- quires that RELEASEDIR be set (see above).
+ release Do a ``make distribution'', build kernels, distribution me-
+ dia, and install sets, and then package the system into a
+ standard release layout as described by release(7). This
+ requires that RELEASEDIR be set (see above).
regression-tests
Can only be run after building the regression tests in the
@@ -449,8 +451,38 @@
of options below, variables that are automatically set by build.sh are
noted where applicable.
- The following are available command line options that may be supplied to
- build.sh:
+ The following operations are supported by build.sh:
+
+ build Build the system as per ``make build''. This option im-
+ plies the obj and tools operations.
+
+ distribution Build a full distribution as per ``make distribution''.
+ This option implies the build operation.
+
+ release Build a full release as per ``make release''. This option
+ implies the distribution operation.
+
+ obj Perform ``make obj''.
+
+ tools Build and install the host tools from src/tools.
+
+ kernel=kconf Build a new kernel. The kconf argument is the name of a
+ configuration file suitable for use by config(8). If kconf
+ does not contain any `/' characters, the configuration file
+ is expected to be found in the KERNCONFDIR directory, which
+ is typically sys/arch/MACHINE/conf. The new kernel will be
+ built in a subdirectory of KERNOBJDIR, which is typically
+ sys/arch/MACHINE/compile or an associated object directory.
+ In order to ensure that the kernel is built using up-to-
+ date tools, it is strongly recommended that the tools be
+ rebuilt (using the tools operation).
+
+ install=idir Install the contents of DESTDIR to idir, using ``make
+ installworld''.
+
+ The following command line options alter the behaviour of the above oper-
+ ations: The following command line options alter the behaviour of the
+ build.sh operations described above:
-a arch Set the value of MACHINE_ARCH to arch.
@@ -460,43 +492,16 @@
that the resulting name is of the form ``nbmake-MACHINE-
BUILDID''.
- -b Bootstrap ``make'' and create a nbmake-MACHINE script (see be-
- low).
-
-D dest Set the value of DESTDIR to dest.
- -d Build a full distribution. This differs from a default build
- in that files will also be installed to /dev, /etc, /root and
- /var. Note this does not build a ``release''; no release sets
- are placed in ${RELEASEDIR}. -d is implied by -R.
-
-E Set `expert' mode; DESTDIR does not have to be set to a non-
root path for builds when this is set.
- -i installworlddir
- Install the contents of DESTDIR to installworlddir after all
- other operations have completed, using the top level
- ``installworld'' target.
-
-j njob Passed through to make(1). Makefiles should use .WAIT or have
explicit dependancies as necessary to enforce build ordering.
If you see build failures with -j, please save complete build
logs so the failures can be analyzed.
- -k kernel
- Build a new kernel. The kernel argument is the name of a con-
- figuration file suitable for use by config(8). If kernel does
- not contain any `/' characters, the configuration file is ex-
- pected to be found in the KERNCONFDIR directory, which is typi-
- cally sys/arch/MACHINE/conf. The new kernel will be built in a
- subdirectory of KERNOBJDIR, which is typically
- sys/arch/MACHINE/compile or an associated object directory. In
- order to ensure that the kernel is built using up-to-date
- tools, it is strongly recommended that the tools be rebuilt
- (using the -t option) in a separate invocation of build.sh pri-
- or to using the -k option, or that the -t and -k options be
- used together in a single invocation of build.sh.
-
-M obj Set MAKEOBJDIRPREFIX to obj.
-m mach Set the value of MACHINE to mach. This will also override any
@@ -516,9 +521,7 @@
-o Set the value of MKOBJDIRS to ``no''.
- -R rel Set the value of RELEASEDIR to rel. Setting this option will
- cause build.sh to run ``make release'' instead of ``make
- build''.
+ -R rel Set the value of RELEASEDIR to rel.
-r Remove the contents of DESTDIR and TOOLDIR before building
(provides a clean starting point). This will skip deleting
@@ -528,9 +531,6 @@
``make'' will only be rebuilt as needed (when the source files
for make(1) change).
- -t Build and install the host tools from src/tools only. This op-
- tion implies -b.
-
-U Set the UNPRIVED variable.
-u Set the UPDATE variable.
@@ -558,7 +558,7 @@
with an absolute path.
EXAMPLES
- ./build.sh -t
+ ./build.sh tools
Build a new toolchain.
cd ${KERNCONFDIR} ; ${TOOLDIR}/bin/nbconfig GENERIC
@@ -568,15 +568,23 @@
cd ${KERNOBJDIR}/GENERIC ; ${TOOLDIR}/bin/nbmake-${MACHINE} dependall
Use the new toolchain to build a new GENERIC kernel.
- ./build.sh -t -k GENERIC
+ ./build.sh tools kernel=GENERIC
Build a new toolchain, and use the new toolchain to configure
- and build a new GENERIC kernel.
+ and build a new GENERIC kernel. This is a simpler way to
+ achieve what the first three examples do.
- ./build.sh -U -d
+ ./build.sh -U distribution
Using unprivileged mode, build a complete distribution in
DESTDIR.
- ./build.sh -U -R /some/dir/RELEASE
+ # ./build.sh -U installworld=/
+ As root, install the distribution that was built with unprivi-
+ leged mode from DESTDIR to /. (Even though this is run as
+ root, -U is required so that the permissions stored in
+ DESTDIR/METALOG are correctly applied to the files as they're
+ copied to /).
+
+ ./build.sh -U -R /some/dir/RELEASE release
Using unprivileged mode, build a complete release in the speci-
fied release directory.
@@ -597,4 +605,4 @@
BUGS
A few platforms are not yet using this build system.
-NetBSD January 4, 2003 10
+NetBSD January 24, 2003 10
diff -r cb239db49e5c -r a75eadfa8850 build.sh
--- a/build.sh Thu Jan 23 15:59:38 2003 +0000
+++ b/build.sh Thu Jan 23 16:24:08 2003 +0000
@@ -1,5 +1,40 @@
#! /usr/bin/env sh
-# $NetBSD: build.sh,v 1.83 2003/01/22 11:26:11 lukem Exp $
+# $NetBSD: build.sh,v 1.84 2003/01/23 16:24:08 lukem Exp $
+#
+# Copyright (c) 2001-2003 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Todd Vierling and Luke Mewburn.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the NetBSD
+# Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
#
# Top level build wrapper, for a system containing no tools.
#
@@ -11,8 +46,10 @@
# to take any further action.
#
+progname=${0##*/}
+toppid=$$
trap "exit 1" 1 2 3 15
-toppid=$$
+
bomb()
{
cat >&2 <<ERRORMESSAGE
@@ -24,79 +61,128 @@
exit 1
}
-cd "$(dirname $0)"
-[ -d usr.bin/make ] ||
- bomb "build.sh must be run from the top source level"
-[ -f share/mk/bsd.own.mk ] ||
- bomb "src/share/mk is missing; please re-fetch the source tree"
-uname_s=$(uname -s 2>/dev/null)
-uname_m=$(uname -m 2>/dev/null)
+initdefaults()
+{
+ cd "$(dirname $0)"
+ [ -d usr.bin/make ] ||
+ bomb "build.sh must be run from the top source level"
+ [ -f share/mk/bsd.own.mk ] ||
+ bomb "src/share/mk is missing; please re-fetch the source tree"
+
+ uname_s=$(uname -s 2>/dev/null)
+ uname_m=$(uname -m 2>/dev/null)
-# If $PWD is a valid name of the current directory, POSIX mandates that pwd
-# return it by default which causes problems in the presence of symlinks.
-# Unsetting PWD is simpler than changing every occurrence of pwd to use -P.
-#
-# XXX Except that doesn't work on Solaris.
-unset PWD
-if [ "${uname_s}" = "SunOS" ]; then
- TOP=$(pwd -P)
-else
- TOP=$(pwd)
-fi
+ # If $PWD is a valid name of the current directory, POSIX mandates
+ # that pwd return it by default which causes problems in the
+ # presence of symlinks. Unsetting PWD is simpler than changing
+ # every occurrence of pwd to use -P.
+ #
+ # XXX Except that doesn't work on Solaris.
+ unset PWD
+ if [ "${uname_s}" = "SunOS" ]; then
+ TOP=$(pwd -P)
+ else
+ TOP=$(pwd)
+ fi
+
+ # Set defaults.
+ toolprefix=nb
+ MAKEFLAGS=
+ makeenv=
+ makewrapper=
+ runcmd=
+ operations=
+ removedirs=
+ do_expertmode=false
Home |
Main Index |
Thread Index |
Old Index