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:
parent
15027ca61b
commit
31b7057f61
102
BUILDING
102
BUILDING
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue