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})
This commit is contained in:
lukem 2003-01-23 16:24:08 +00:00
parent 15027ca61b
commit 31b7057f61
3 changed files with 848 additions and 582 deletions

102
BUILDING
View File

@ -30,8 +30,8 @@ REQUIREMENTS
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 @@ BUILDING
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 @@ BUILDING
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 @@ BUILDING
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 @@ BUILDING
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 @@ BUILDING
-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 @@ BUILDING
``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 @@ BUILDING
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 @@ EXAMPLES
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 @@ HISTORY
BUGS
A few platforms are not yet using this build system.
NetBSD January 4, 2003 10
NetBSD January 24, 2003 10

1125
build.sh

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
.\" $NetBSD: BUILDING.mdoc,v 1.8 2003/01/04 12:55:33 lukem Exp $
.\" $NetBSD: BUILDING.mdoc,v 1.9 2003/01/23 16:24:08 lukem Exp $
.\"
.\" Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
.\" 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.
.\" 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
@ -38,7 +38,7 @@
.\" NOTE: After changing this file, run "make build-docs" to generate the
.\" proper plaintext versions, and check in all BUILDING.* files!
.\"
.Dd January 4, 2003
.Dd January 24, 2003
.Dt BUILDING 8
.Os NetBSD
.
@ -95,7 +95,7 @@ build process.
.Pp
.Bd -ragged -offset indent
.Em Note :
A couple host toolchain components are not yet available in the tools
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.
@ -754,7 +754,13 @@ will be built in the proper order.
Do a
.Dq make build ,
and then install a full distribution into
.Sy DESTDIR .
.Sy DESTDIR ,
including files in
.Pa /dev ,
.Pa /etc ,
.Pa /root
and
.Pa /var .
.
.It Sy buildworld
As per
@ -763,7 +769,6 @@ except that it ensures that
.Sy DESTDIR
is not the root directory.
.
.
.It Sy installworld
Install the distribution from
.Sy DESTDIR
@ -780,7 +785,8 @@ before performing this operation.
.
.It Sy release
Do a
.Dq make build ,
.Dq make distribution ,
build kernels, distribution media, and install sets, and
then package the system into a standard release layout as described by
.Xr release 7 .
This requires that
@ -829,10 +835,84 @@ process.
In the list of options below, variables that are automatically set by
.Sy build.sh
are noted where applicable.
.
.Pp
The following are available command line options that may be supplied to
The following operations are supported by
.Sy build.sh :
.
.Bl -tag -width "distribution"
.
.It Sy build
Build the system as per
.Dq make build .
This option implies the
.Sy obj
and
.Sy tools
operations.
.
.It Sy distribution
Build a full distribution as per
.Dq make distribution .
This option implies the
.Sy build
operation.
.
.It Sy release
Build a full release as per
.Dq make release .
This option implies the
.Sy distribution
operation.
.
.It Sy obj
Perform
.Dq make obj .
.It Sy tools
Build and install the host tools from
.Pa src/tools .
.It Sy kernel Ns = Ns Ar kconf
Build a new kernel.
The
.Ar kconf
argument is the name of a configuration file suitable
for use by
.Xr config 8 .
If
.Ar kconf
does not contain any
.Sq /
characters, the configuration file is expected to be found in the
.Sy KERNCONFDIR
directory, which is typically
.Sy sys/arch/MACHINE/conf .
The new kernel will be built in a subdirectory of
.Sy KERNOBJDIR ,
which is typically
.Sy 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
.Sy tools
operation).
.
.It Sy install Ns = Ns Ar idir
Install the contents of
.Dv DESTDIR
to
.Ar idir ,
using
.Dq make installworld .
.
.El
.
.Pp
The following command line options alter the behaviour of the above
operations:
The following command line options alter the behaviour of the
.Sy build.sh
operations described above:
.
.Bl -tag -width "-T tools"
.
.It Fl a Ar arch
@ -851,34 +931,12 @@ This will also append the build idenfitier to the name of the
wrapper script so that the resulting name is of the form
.Dq Sy nbmake-MACHINE-BUILDID .
.
.It Fl b
Bootstrap
.Dq make
and create a
.Sy nbmake-MACHINE
script (see below).
.
.It Fl D Ar dest
Set the value of
.Sy DESTDIR
to
.Ar dest .
.
.It Fl d
Build a full distribution.
This differs from a default build in that files will also be installed to
.Pa /dev ,
.Pa /etc ,
.Pa /root
and
.Pa /var .
Note this does not build a
.Dq release ;
no release sets are placed in ${RELEASEDIR}.
.Fl d
is implied by
.Fl R .
.
.It Fl E
Set
.Sq expert
@ -886,15 +944,6 @@ mode;
.Sy DESTDIR
does not have to be set to a non-root path for builds when this is set.
.
.It Fl i Ar installworlddir
Install the contents of
.Dv DESTDIR
to
.Ar installworlddir
after all other operations have completed, using the top level
.Dq installworld
target.
.
.It Fl j Ar njob
Passed through to
.Xr make 1 .
@ -903,40 +952,6 @@ as necessary to enforce build ordering.
If you see build failures with -j, please save complete build logs
so the failures can be analyzed.
.
.It Fl k Em kernel
Build a new kernel.
The
.Ar kernel
argument is the name of a configuration file suitable
for use by
.Xr config 8 .
If
.Ar kernel
does not contain any
.Sq /
characters, the configuration file is expected to be found in the
.Sy KERNCONFDIR
directory, which is typically
.Sy sys/arch/MACHINE/conf .
The new kernel will be built in a subdirectory of
.Sy KERNOBJDIR ,
which is typically
.Sy 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
.Fl t
option) in a separate invocation of
.Nm build.sh
prior to using the
.Fl k
option, or that the
.Fl t
and
.Fl k
options be used together in a single invocation of
.Nm build.sh .
.
.It Fl M Ar obj
Set
.Sy MAKEOBJDIRPREFIX
@ -989,12 +1004,6 @@ Set the value of
.Sy RELEASEDIR
to
.Ar rel .
Setting this option will cause
.Sy build.sh
to run
.Dq make release
instead of
.Dq make build .
.
.It Fl r
Remove the contents of
@ -1017,13 +1026,6 @@ will only be rebuilt as needed (when the source files for
.Xr make 1
change).
.
.It Fl t
Build and install the host tools from
.Pa src/tools
only.
This option implies
.Fl b .
.
.It Fl U
Set the
.Sy UNPRIVED
@ -1094,22 +1096,41 @@ or called with an absolute path.
.
.Sh EXAMPLES
.Bl -tag -width "build.sh"
.It Li "./build.sh -t"
.
.It Li "./build.sh tools"
Build a new toolchain.
.
.It Li "cd ${KERNCONFDIR} ; ${TOOLDIR}/bin/nbconfig GENERIC"
Use the new version of
.Xr config 8
to prepare to build a new GENERIC kernel.
.
.It Li "cd ${KERNOBJDIR}/GENERIC ; ${TOOLDIR}/bin/nbmake-${MACHINE} dependall"
Use the new toolchain to build a new GENERIC kernel.
.It Li "./build.sh -t -k GENERIC"
.
.It Li "./build.sh tools kernel=GENERIC"
Build a new toolchain, and use the new toolchain to
configure and build a new GENERIC kernel.
.It Li "./build.sh -U -d"
This is a simpler way to achieve what the first three examples do.
.
.It Li "./build.sh -U distribution"
Using unprivileged mode,
build a complete distribution in
.Sy DESTDIR .
.It Li "./build.sh -U -R /some/dir/RELEASE"
.
.It Li "# ./build.sh -U installworld=/"
As root, install the distribution that was built with unprivileged mode from
.Sy DESTDIR
to
.Pa / .
(Even though this is run as root,
.Fl U
is required so that the permissions stored in
.Sy DESTDIR Ns Pa /METALOG
are correctly applied to the files as they're copied to
.Pa / ) .
.
.It Li "./build.sh -U -R /some/dir/RELEASE release"
Using unprivileged mode,
build a complete release in the specified release directory.
.El