NetBSD-Docs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Updates/clarifications/adjustments to BUILDING
A few things in BUILDING have gone out of date, and also, some things
that should be are not documented (e.g. how build.sh -u interacts with
kernel=foo). I have done an editing pass and propose the following
patch.
The highlights:
- mention src/tests and reference atf;
- provide examples of MACHINE and MACHINE_ARCH -- someone please
double-check these to make sure I haven't lied;
- mention that MKOBJ=no is not recommented;
- correct the default setting of USETOOLS;
- document the interaction of build.sh -[uo] with various things;
- document the interaction of build.sh tools and kernel=foo;
- various typo fixes and wording adjustments, and use fewer
parentheses.
Index: BUILDING.mdoc
===================================================================
RCS file: /cvsroot/src/doc/BUILDING.mdoc,v
retrieving revision 1.55
diff -U 10 -r1.55 BUILDING.mdoc
--- BUILDING.mdoc 8 Mar 2008 14:48:57 -0000 1.55
+++ BUILDING.mdoc 10 Mar 2008 05:59:47 -0000
@@ -120,23 +120,30 @@
use the
.Nx
.Xr make 1
.Dq reachover
Makefile semantics when building these programs for a native host.
.It Sy distrib/ , etc/
Sources for items used when making a full release snapshot, such as
files installed in
.Sy DESTDIR Ns Pa /etc
on the destination system, boot media, and release notes.
-.It Sy regress/
+.It Sy tests/ , regress/
Regression test harness.
Can be cross-compiled, but only run natively.
+.Pa tests/
+uses the
+.Xr atf 7
+test framework;
+.Pa regress/
+contains older tests that have not yet been migrated to
+.Xr atf 7 .
.It Sy sys/
.Nx
kernel sources.
.It Sy tools/
.Dq Reachover
build structure for the host build tools.
This has a special method of determining out-of-date status.
.It Sy bin/ ... usr.sbin/
Sources to the
.Nx
@@ -190,24 +197,26 @@
.Li ${HOST_SH} build.sh Op Ar options
.Ed
.
.It Sy HOST_CC
Path name to C compiler used to create the toolchain.
.
.It Sy HOST_CXX
Path name to C++ compiler used to create the toolchain.
.
.It Sy MACHINE
-Machine type.
+Machine type, e.g.,
+.Dq macppc .
.
.It Sy MACHINE_ARCH
-Machine architecture.
+Machine architecture, e.g.,
+.Dq powerpc .
.
.It Sy MAKE
Path name to invoke
.Xr make 1
as.
.
.It Sy MAKEFLAGS
Flags to invoke
.Xr make 1
with.
@@ -314,21 +323,21 @@
unset otherwise.
.Pp
.Em Note :
.Sy build.sh
will provide a default of
.Pa destdir. Ns Sy MACHINE
(in the top-level
.Sy .OBJDIR )
unless run in
.Sq expert
-mode
+mode.
.
.It Sy MAKECONF
The name of the
.Xr make 1
configuration file.
.Em Only settable in the process environment.
.DFLT
.Dq /etc/mk.conf
.
.It Sy MAKEVERBOSE
@@ -414,20 +423,27 @@
.DFLTy
.
.It Sy MKOBJ
.YorN
Indicates whether object directories will be created when running
.Dq make obj .
If set to
.Dq no ,
then all built files will be located inside the regular source tree.
.DFLTy
+.Pp
+Note that setting
+.Sy MKOBJ
+to
+.Dq no
+is not recommended and may cause problems when updating the tree with
+.Xr cvs 1 .
.
.It Sy MKPIC
.YorN
Indicates whether shared objects and libraries will be created and
installed during a build.
If set to
.Dq no ,
the entire built system will be statically linked.
.DFLT
Platform dependent.
@@ -551,30 +567,21 @@
This is similar to the traditional
.Nx
build method, but does
.Em not
verify that the compilation tools in use are up-to-date enough in order
to build the tree successfully.
This may cause build or runtime problems when building the whole
.Nx
source tree.
.El
-.DFLT
-.Dq yes
-if building all or part of a whole
-.Nx
-source tree (detected automatically);
-.Dq no
-otherwise (to preserve traditional semantics of the
-.Aq bsd.*.mk
-.Xr make 1
-include files).
+.DFLTy
.
.It Sy X11SRCDIR
Directory containing the X11R6 source.
If specified, must be an absolute path.
The main X11R6 source is found in
.Sy X11SRCDIR Ns Pa /xfree/xc .
.DFLT
.Dq /usr/xsrc
.
.El
@@ -596,49 +603,71 @@
.DFLT
.Dq /
.
.It Sy MKOBJDIRS
.YorN
Indicates whether object directories will be created automatically
(via a
.Dq make obj
pass) at the start of a build.
.DFLTn
+.Pp
+If using
+.Sy build.sh ,
+the default is
+.Dq yes .
+This may be set back to
+.Dq no
+by giving
+.Sy build.sh
+the
+.Fl o
+option.
.
.It Sy MKUPDATE
.YorN
If set, then in addition to the effects described for
.Sy MKUPDATE=yes
above, this implies the effects of
.Sy NOCLEANDIR
(i.e.,
.Dq make cleandir
is avoided).
.DFLTn
+.Pp
+If using
+.Sy build.sh ,
+this may be set by giving the
+.Fl u
+option.
.
.It Sy NBUILDJOBS
Now obsolete.
Use the
.Xr make 1
option
.Fl j ,
-instead (see below)
+instead.
+See below.
.DFLTu
.
.It Sy NOCLEANDIR
If set, avoids the
.Dq make cleandir
phase of a full build.
This has the effect of allowing only changed
files in a source tree to be recompiled.
This can speed up builds when updating only a few files in the tree.
.DFLTu
+.Pp
+See also
+.Sy MKUPDATE .
.
.It Sy NODISTRIBDIRS
If set, avoids the
.Dq make distrib-dirs
phase of a full build.
This skips running
.Xr mtree 8
on
.Sy DESTDIR ,
useful on systems where building as an unprivileged user, or where it is
@@ -650,40 +679,40 @@
.Dq make includes
phase of a full build.
This has the effect of preventing
.Xr make 1
from thinking that some programs are out-of-date simply because the
system include files have changed.
However, this option should not be used when updating the entire
.Nx
source tree arbitrarily; it is suggested to use
.Sy MKUPDATE=yes
-in that case.
+instead in that case.
.DFLTu
.
.It Sy RELEASEDIR
If set, specifies the directory to which a
.Xr release 7
layout will be written at the end of a
.Dq make release .
If specified, must be an absolute path.
.DFLTu
.Pp
.Em Note :
.Sy build.sh
will provide a default of
.Pa releasedir
(in the top-level
.Sy .OBJDIR )
unless run in
.Sq expert
-mode
+mode.
.
.El
.
.Sh BUILDING
.
.Ss \*qmake\*q command line options
This is not a summary of all the options available to
.Xr make 1 ;
only the options used most frequently with
.Nx
@@ -704,21 +733,22 @@
.It Fl m Ar dir
Specify the default directory for searching for system Makefile
segments, mainly the
.Aq bsd.*.mk
files.
When building any full
.Nx
source tree, this should be set to the
.Dq share/mk
directory in the source tree.
-(This is set automatically when building from the top level.)
+This is set automatically when building from the top level, or when using
+.Sy build.sh .
.
.It Fl n
Display the commands that would have been executed, but do not
actually execute them.
This will still cause recursion to take place.
.
.It Fl V Ar var
Print
.Xr make 1 Ns 's
idea of the value of
@@ -854,90 +884,90 @@
As per
.Dq make distribution ,
except that it ensures that
.Sy DESTDIR
is not the root directory.
.
.It Sy installworld
Install the distribution from
.Sy DESTDIR
to
-.Sy INSTALLWORLDDIR
-(which defaults to the root directory).
+.Sy INSTALLWORLDDIR ,
+which defaults to the root directory.
Ensures that
.Sy INSTALLWORLDDIR
is not the root directory if cross compiling.
.Pp
The
.Sy INSTALLSETS
environment variable may be set to a list of
distribution sets to be installed.
By default, all sets except
.Dq etc
and
.Dq xetc
-are installed (so most files in
+are installed, so most files in
.Sy INSTALLWORLDDIR Ns Pa /etc
-will not be installed or modified).
+will not be installed or modified.
.Pp
.Em Note :
Before performing this operation with
.Sy INSTALLWORLDDIR Ns = Ns Pa / ,
it is highly recommended that you upgrade your kernel and reboot.
After performing this operation,
it is recommended that you use
.Xr etcupdate 8
to update files in
.Sy INSTALLWORLDDIR Ns Pa /etc
and that you use
.Xr postinstall 8
to check for inconsistencies (and possibly to fix them).
.It Sy sets
Create distribution sets from
.Sy DESTDIR
into
.Sy RELEASEDIR/MACHINE Ns Pa /binary/sets .
Should be run after
-.Dq make distribution
-(as
+.Dq make distribution ,
+as
.Dq make build
-does not install all of the required files).
+alone does not install all of the required files.
.
.It Sy sourcesets
Create source sets of the source tree into
.Sy RELEASEDIR Ns Pa /source/sets .
.
.It Sy syspkgs
Create syspkgs from
.Sy DESTDIR
into
.Sy RELEASEDIR/MACHINE Ns Pa /binary/syspkgs .
Should be run after
-.Dq make distribution
-(as
+.Dq make distribution ,
+as
.Dq make build
-does not install all of the required files).
+alone does not install all of the required files.
.
.It Sy release
Do a
.Dq make distribution ,
build kernels, distribution media, and install sets
(this as per
.Dq make sets ) ,
and
then package the system into a standard release layout as described by
.Xr release 7 .
This requires that
.Sy RELEASEDIR
be set (see above).
.
-.It iso-image
+.It Sy iso-image
Create a
.Nx
installation CD-ROM image in the
.Sy RELEASEDIR Ns Pa /iso
directory.
The CD-ROM file system will have a layout as described in
.Xr release 7 .
.Pp
For most machine types, the CD-ROM will be bootable, and will automatically
run the
@@ -1013,21 +1043,24 @@
This requires the
.Xr mkisofs 1
utility, which is not part of
.Nx ,
but which can be installed from
.Pa pkgsrc/sysutils/cdrtools .
.
.It Sy regression-tests
Can only be run after building the regression tests in the directory
.Dq regress .
-Runs the compiled regression tests on the local host.
+Runs those compiled regression tests on the local host.
+Note that most tests are now managed instead using
+.Xr atf 7 ;
+this target will disappear when all tests have been migrated.
.
.El
.
.Ss The \*qbuild.sh\*q script
.
This script file is a Bourne shell script designed to build the
entire
.Nx
system on any host with a Bourne shell in
.Sy /bin/sh ,
@@ -1062,54 +1095,72 @@
.
.Pp
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
+Before the main part of the build commences, this command runs the
.Sy obj
-and
+operation (unless the
+.Fl o
+option is given),
+.Dq make cleandir
+(unless the
+.Fl u
+option is given),
+and the
.Sy tools
-operations.
+operation.
.
.It Sy distribution
Build a full distribution as per
.Dq make distribution .
-This option implies the
+This command first runs the
.Sy build
operation.
.
.It Sy release
Build a full release as per
.Dq make release .
-This option implies the
+This command first runs the
.Sy distribution
operation.
.
.It Sy makewrapper
Create the
.Sy \*[toolprefix]make-MACHINE
wrapper.
This operation is automatically performed for any of the other
operations.
.
.It Sy obj
Perform
.Dq make obj .
.
.It Sy tools
Build and install the host tools from
.Pa src/tools .
+This command will first run
+.Dq make obj
+and
+.Dq make cleandir
+in the
+.Pa tools
+subdirectory unless the
+.Fl o
+or
+.Fl u
+options (respectively) are given.
.
.It Sy install Ns = Ns Ar idir
Install the contents of
.Sy DESTDIR
to
.Ar idir ,
using
.Dq make installworld .
Note that files that are part of the
.Dq etc
@@ -1130,29 +1181,41 @@
.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
+.Pp
+This command does
+.Em not
+imply the
+.Sy tools
+command; run the
.Sy tools
-operation).
+command first unless it is
+.Em certain
+that the tools already exist and are up to date.
+.Pp
+This command will run
+.Dq make cleandir
+on the kernel in question first unless the
+.Fl u
+option is given.
.
.It Sy releasekernel Ns = Ns Ar kconf
Install a
.Xr gzip 1 Ns ed
-copy of the kernel built by
+copy of the kernel previously built by
.Sy kernel Ns = Ns Ar kconf
into
.Sy RELEASEDIR/MACHINE Ns Pa /binary/kernel ,
usually as
.Pa netbsd- Ns Ar kconf Ns Pa .gz ,
although the
.Dq Pa netbsd
prefix is determined from the
.Dq Sy config
directives in
@@ -1238,21 +1301,25 @@
does not have to be set when building as a non-root user.
.Pp
.Em Note :
It is highly recommended that you know what you are doing when
you use this option.
.
.It Fl h
Print a help message.
.
.It Fl j Ar njob
-Passed through to
+Run up to
+.Ar njob
+.Xr make 1
+subjobs in parallel;
+passed through to
.Xr 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.
.
.It Fl M Ar obj
Set
.Sy MAKEOBJDIRPREFIX
to
@@ -1335,22 +1402,23 @@
and so forth.
Unsets
.Sy MAKEOBJDIRPREFIX .
.
.It Fl o
Set the value of
.Sy MKOBJDIRS
to
.Dq no .
Otherwise, it will be automatically set to
-.Dq yes
-(which is opposite to the default behaviour).
+.Dq yes .
+This default is opposite to the behaviour when not using
+.Sy build.sh .
.
.It Fl R Ar rel
Set the value of
.Sy RELEASEDIR
to
.Ar rel .
If a relative path is specified, it will be converted to an
absolute path before being used.
.
.It Fl r
@@ -1365,23 +1433,23 @@
.
.It Fl T Ar tools
Set the value of
.Sy TOOLDIR
to
.Ar tools .
If a relative path is specified, it will be converted to an
absolute path before being used.
If set, the bootstrap
.Dq make
-will only be rebuilt as needed (when the source files for
+will only be rebuilt if the source files for
.Xr make 1
-change).
+have changed.
.
.It Fl U
Set
.Sy MKUNPRIVED=yes .
.
.It Fl u
Set
.Sy MKUPDATE=yes .
.
.It Xo
@@ -1453,21 +1521,21 @@
can be invoked in lieu of
.Xr make 1 ,
and will instead call the up-to-date version of
.Dq \*[toolprefix]make
installed into
.Sy TOOLDIR/bin
with several key variables pre-set, including
.Sy MACHINE , MACHINE_ARCH ,
and
.Sy TOOLDIR .
-.Sy build.sh
+.Sy \*[toolprefix]make-MACHINE
will also set variables specified with
.Fl V ,
and unset variables specified with
.Fl Z .
.Pp
This script can be symlinked into a directory listed in
.Sy PATH ,
or called with an absolute path.
.
.Sh EXAMPLES
@@ -1524,21 +1592,21 @@
.El
.
.Sh OBSOLETE VARIABLES
.
.Bl -tag -width "NBUILDJOBS"
.
.It Sy NBUILDJOBS
Use the
.Xr make 1
option
-.Fl j ,
+.Fl j
instead.
.
.It Sy USE_NEW_TOOLCHAIN
The new toolchain is now the default.
To disable, use
.Sy TOOLCHAIN_MISSING=yes .
.El
.Sh SEE ALSO
.Xr make 1 ,
.Xr hier 7 ,
--
David A. Holland
dholland%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index