version 1.46, 2003/10/26 02:17:46 |
version 1.59, 2006/10/08 17:54:30 |
|
|
BUILDING(8) NetBSD System Manager's Manual BUILDING(8) |
BUILDING(8) NetBSD System Manager's Manual BUILDING(8) |
|
|
NAME |
NAME |
BUILDING - Procedure for building NetBSD from source code. |
BUILDING -- Procedure for building NetBSD from source code. |
|
|
STATUS |
STATUS |
This document is a work-in-progress. As such, the information described |
This document is a work-in-progress. As such, the information described |
|
|
host system to create a build toolchain for the target architecture. The |
host system to create a build toolchain for the target architecture. The |
host system must have at least C and C++ compilers in order to create the |
host system must have at least C and C++ compilers in order to create the |
toolchain (make is not required); all other tools are created as part of |
toolchain (make is not required); all other tools are created as part of |
the NetBSD build process. |
the NetBSD build process. (See the environment variables section below |
|
if you need to override or manually select your compilers.) |
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. |
|
|
|
FILES |
FILES |
Source tree layout |
Source tree layout |
|
|
|
|
BUILDING This document (in plaintext). |
BUILDING This document (in plaintext). |
|
|
|
tools/compat/README |
|
Special notes for cross-hosting a NetBSD build on non- |
|
NetBSD platforms. |
|
|
Makefile The main Makefile for NetBSD; should only be run for |
Makefile The main Makefile for NetBSD; should only be run for |
native builds with an appropriately up-to-date version of |
native builds with an appropriately up-to-date version of |
NetBSD make(1). (For building from out-of-date systems or |
NetBSD make(1). (For building from out-of-date systems or |
|
|
any of these directories are missing, they will be skipped |
any of these directories are missing, they will be skipped |
during the build. |
during the build. |
|
|
|
x11/ ``Reachover'' build structure for X11R6; the source is in |
|
X11SRCDIR. |
|
|
Build tree layout |
Build tree layout |
The NetBSD build tree is described in hier(7), and the release layout is |
The NetBSD build tree is described in hier(7), and the release layout is |
described in release(7). |
described in release(7). |
|
|
Environment variables |
Environment variables |
Several environment variables control the behaviour of NetBSD builds. |
Several environment variables control the behaviour of NetBSD builds. |
|
|
|
HOST_SH Path name to a POSIX-compliant shell. If this is not |
|
set explicitly, then the default is set using heuris- |
|
tics dependent on the host platform, or from the shell |
|
under which build.sh is executed (if that can be deter- |
|
mined), or using the first copy of sh found in PATH. |
|
If the host system's /bin/sh is not POSIX-compliant, we |
|
suggest that you build using commands like |
|
|
|
HOST_SH=/path/to/working/shell |
|
export HOST_SH |
|
${HOST_SH} build.sh [options] |
|
|
|
HOST_CC Path name to C compiler used to create the toolchain. |
|
|
|
HOST_CXX Path name to C++ compiler used to create the toolchain. |
|
|
MACHINE Machine type. |
MACHINE Machine type. |
|
|
MACHINE_ARCH Machine architecture. |
MACHINE_ARCH Machine architecture. |
|
|
MAKEFLAGS Flags to invoke make(1) with. |
MAKEFLAGS Flags to invoke make(1) with. |
|
|
MAKEOBJDIR Directory to use as the .OBJDIR for the current direc- |
MAKEOBJDIR Directory to use as the .OBJDIR for the current direc- |
tory. Used only if MAKEOBJDIRPREFIX is not defined. |
tory. The value is subjected to variable expansion by |
|
make(1). Used only if MAKEOBJDIRPREFIX is not defined. |
MAKEOBJDIR can only be provided in the environment or |
MAKEOBJDIR can only be provided in the environment or |
via the -O flag of build.sh. |
via the -O flag of build.sh. |
|
|
MAKEOBJDIRPREFIX Top level directory of the object directory tree. If |
MAKEOBJDIRPREFIX Top level directory of the object directory tree. If |
this is defined, ${MAKEOBJDIRPREFIX}/${.CURDIR} is used |
specified, must be an absolute path. If this is |
as the .OBJDIR for the current directory. The current |
defined, ${MAKEOBJDIRPREFIX}/${.CURDIR} is used as the |
directory may be read only. MAKEOBJDIRPREFIX can only |
.OBJDIR for the current directory. The current direc- |
be provided in the environment or via the -M flag of |
tory may be read only. MAKEOBJDIRPREFIX can only be |
|
provided in the environment or via the -M flag of |
build.sh. |
build.sh. |
|
|
"make" variables |
"make" variables |
|
|
DESTDIR Directory to contain the built NetBSD system. If set, spe- |
DESTDIR Directory to contain the built NetBSD system. If set, spe- |
cial options are passed to the compilation tools to prevent |
cial options are passed to the compilation tools to prevent |
their default use of the host system's /usr/include, |
their default use of the host system's /usr/include, |
/usr/lib, and so forth. This pathname should not end with a |
/usr/lib, and so forth. This pathname must be an absolute |
slash (/) character (for installation into the system's root |
path, and should not end with a slash (/) character. (For |
directory, set DESTDIR to an empty string). The directory |
installation into the system's root directory, set DESTDIR to |
must reside on a file system which supports long file names |
an empty string, not to ``/''). The directory must reside on |
and hard links. |
a file system which supports long file names and hard links. |
|
|
Default: Empty string if USETOOLS is ``yes''; unset other- |
Default: Empty string if USETOOLS is ``yes''; unset other- |
wise. |
wise. |
|
|
|
|
Default: ``yes'' |
Default: ``yes'' |
|
|
|
MKTTINTERP Can be set to ``yes'' or ``no''. For X builds, decides if |
|
the TrueType bytecode interpreter is turned on. See |
|
http://www.freetype.org/patents.html for details. |
|
|
|
Default: ``no'' |
|
|
MKUNPRIVED Can be set to ``yes'' or ``no''. Indicates whether an |
MKUNPRIVED Can be set to ``yes'' or ``no''. Indicates whether an |
unprivileged install will occur. The user, group, permis- |
unprivileged install will occur. The user, group, permis- |
sions, and file flags, will not be set on the installed item; |
sions, and file flags, will not be set on the installed |
instead the information will be appended to a file called |
items; instead the information will be appended to a file |
METALOG in DESTDIR. The contents of METALOG is used during |
called METALOG in DESTDIR. The contents of METALOG are used |
the generation of the distribution tar files to ensure that |
during the generation of the distribution tar files to ensure |
the appropriate file ownership is stored. |
that the appropriate file ownership is stored. |
|
|
Default: ``no'' |
Default: ``no'' |
|
|
|
|
|
|
Default: ``no'' |
Default: ``no'' |
|
|
TOOLDIR Directory to hold the host tools, once built. This directory |
MKX11 Can be set to ``yes'' or ``no''. Indicates whether X11R6 is |
should be unique to a given host system and NetBSD source |
built from X11SRCDIR. |
tree. (However, multiple targets may share the same TOOLDIR; |
|
the target-dependent files have unique names.) If unset, a |
Default: ``no'' |
default based on the uname(1) information of the host plat- |
|
form will be created in the .OBJDIR of src. |
TOOLDIR Directory to hold the host tools, once built. If specified, |
|
must be an absolute path. This directory should be unique to |
|
a given host system and NetBSD source tree. (However, multi- |
|
ple targets may share the same TOOLDIR; the target-dependent |
|
files have unique names.) If unset, a default based on the |
|
uname(1) information of the host platform will be created in |
|
the .OBJDIR of src. |
|
|
Default: Unset. |
Default: Unset. |
|
|
|
|
preserve traditional semantics of the <bsd.*.mk> make(1) |
preserve traditional semantics of the <bsd.*.mk> make(1) |
include files). |
include files). |
|
|
|
X11SRCDIR Directory containing the X11R6 source. If specified, must be |
|
an absolute path. The main X11R6 source is found in |
|
X11SRCDIR/xfree/xc. |
|
|
|
Default: ``/usr/xsrc'' |
|
|
"make" variables for full builds |
"make" variables for full builds |
These variables only affect the top level ``Makefile'' and do not affect |
These variables only affect the top level ``Makefile'' and do not affect |
manually building subtrees of the NetBSD source code. |
manually building subtrees of the NetBSD source code. |
|
|
INSTALLWORLDDIR Location for the ``make installworld'' target to install |
INSTALLWORLDDIR Location for the ``make installworld'' target to install |
to. |
to. If specified, must be an absolute path. |
|
|
Default: ``/'' |
Default: ``/'' |
|
|
|
|
|
|
RELEASEDIR If set, specifies the directory to which a release(7) |
RELEASEDIR If set, specifies the directory to which a release(7) |
layout will be written at the end of a ``make release''. |
layout will be written at the end of a ``make release''. |
|
If specified, must be an absolute path. |
|
|
Default: Unset. |
Default: Unset. |
|
|
|
|
|
|
BUILDING |
BUILDING |
"make" command line options |
"make" command line options |
This is only a summary of options available to make(1); only the options |
This is not a summary of all the options available to make(1); only the |
used most frequently with NetBSD builds are listed here. |
options used most frequently with NetBSD builds are listed here. |
|
|
-j njob Run up to njob make(1) subjobs in parallel. Makefiles should |
-j njob Run up to njob make(1) subjobs in parallel. Makefiles should |
use .WAIT or have explicit dependancies as necessary to |
use .WAIT or have explicit dependencies as necessary to |
enforce build ordering. If you see build failures with -j, |
enforce build ordering. If you see build failures with -j, |
please save complete build logs so the failures can be ana- |
please save complete build logs so the failures can be ana- |
lyzed. |
lyzed. |
|
|
actually execute them. This will still cause recursion to |
actually execute them. This will still cause recursion to |
take place. |
take place. |
|
|
-v var Print make(1)'s idea of the value of var. Does not build any |
-V var Print make(1)'s idea of the value of var. Does not build any |
targets. |
targets. |
|
|
var=value Set the variable var to value, overriding any setting speci- |
var=value Set the variable var to value, overriding any setting speci- |
|
|
|
|
cleandir Same as clean, but also remove preformatted documentation, |
cleandir Same as clean, but also remove preformatted documentation, |
dependency files generated by ``make depend'', and any other |
dependency files generated by ``make depend'', and any other |
files known to be created at build time. ``make distclean'' |
files known to be created at build time. |
may be used as a synonym, for familiarity with a similar well- |
|
known convention. |
|
|
|
depend Create dependency files (.depend) containing more detailed |
depend Create dependency files (.depend) containing more detailed |
information about the dependencies of source code on header |
information about the dependencies of source code on header |
|
|
This improves cache locality of the build since both passes |
This improves cache locality of the build since both passes |
read the source files in their entirety. |
read the source files in their entirety. |
|
|
|
distclean Synonym for cleandir. |
|
|
includes Build and install system header files. Typically needed |
includes Build and install system header files. Typically needed |
before any system libraries or programs can be built. |
before any system libraries or programs can be built. |
|
|
|
|
|
|
installworld Install the distribution from DESTDIR to INSTALLWORLDDIR |
installworld Install the distribution from DESTDIR to INSTALLWORLDDIR |
(which defaults to the root directory). Ensures that |
(which defaults to the root directory). Ensures that |
INSTALLWORLDDIR is the not root directory if cross compil- |
INSTALLWORLDDIR is not the root directory if cross compil- |
ing. |
ing. |
|
|
Note: It is highly recommended that you upgrade your kernel |
Note: It is highly recommended that you upgrade your kernel |
|
|
sourcesets Create source sets of the source tree into |
sourcesets Create source sets of the source tree into |
RELEASEDIR/source/sets. |
RELEASEDIR/source/sets. |
|
|
|
syspkgs Create syspkgs from DESTDIR into |
|
RELEASEDIR/MACHINE/binary/syspkgs. Should be run after |
|
``make distribution'' (as ``make build'' does not install |
|
all of the required files). |
|
|
release Do a ``make distribution'', build kernels, distribution |
release Do a ``make distribution'', build kernels, distribution |
media, and install sets (this as per ``make sets''), and |
media, and install sets (this as per ``make sets''), and |
then package the system into a standard release layout as |
then package the system into a standard release layout as |
described by release(7). This requires that RELEASEDIR be |
described by release(7). This requires that RELEASEDIR be |
set (see above). |
set (see above). |
|
|
|
iso-image Create a CD-ROM image in |
|
RELEASEDIR/MACHINE/installation/cdrom. RELEASEDIR must |
|
already have been populated by ``make release'' or equiva- |
|
lent. This requires the mkisofs(1) utility, which is not |
|
part of NetBSD, but which can be installed from |
|
pkgsrc/sysutils/cdrtools. |
|
|
regression-tests |
regression-tests |
Can only be run after building the regression tests in the |
Can only be run after building the regression tests in the |
directory ``regress''. Runs the compiled regression tests |
directory ``regress''. Runs the compiled regression tests |
|
|
installworld''. |
installworld''. |
|
|
kernel=kconf Build a new kernel. The kconf argument is the name of a |
kernel=kconf Build a new kernel. The kconf argument is the name of a |
configuration file suitable for use by config(8). If kconf |
configuration file suitable for use by config(1). If kconf |
does not contain any `/' characters, the configuration file |
does not contain any `/' characters, the configuration file |
is expected to be found in the KERNCONFDIR directory, which |
is expected to be found in the KERNCONFDIR directory, which |
is typically sys/arch/MACHINE/conf. The new kernel will be |
is typically sys/arch/MACHINE/conf. The new kernel will be |
|
|
|
|
sourcesets Perform ``make sourcesets''. |
sourcesets Perform ``make sourcesets''. |
|
|
The following command line options alter the behaviour of the above oper- |
syspkgs Perform ``make syspkgs''. |
ations: The following command line options alter the behaviour of the |
|
build.sh operations described above: |
iso-image Perform ``make iso-image''. |
|
|
|
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. |
-a arch Set the value of MACHINE_ARCH to arch. |
|
|
|
|
that the resulting name is of the form |
that the resulting name is of the form |
``nbmake-MACHINE-BUILDID''. |
``nbmake-MACHINE-BUILDID''. |
|
|
-D dest Set the value of DESTDIR to dest. |
-D dest Set the value of DESTDIR to dest. If a relative path is speci- |
|
fied, it will be converted to an absolute path before being |
|
used. |
|
|
-E Set `expert' mode. This overrides various sanity checks, and |
-E Set `expert' mode. This overrides various sanity checks, and |
allows: DESTDIR does not have to be set to a non-root path for |
allows: DESTDIR does not have to be set to a non-root path for |
|
|
Note: It is highly recommended that you know what you are doing |
Note: It is highly recommended that you know what you are doing |
when you use this option. |
when you use this option. |
|
|
|
-h Print a help message. |
|
|
-j njob Passed through to make(1). Makefiles should use .WAIT or have |
-j njob Passed through to make(1). Makefiles should use .WAIT or have |
explicit dependancies as necessary to enforce build ordering. |
explicit dependancies as necessary to enforce build ordering. |
If you see build failures with -j, please save complete build |
If you see build failures with -j, please save complete build |
logs so the failures can be analyzed. |
logs so the failures can be analyzed. |
|
|
-M obj Set MAKEOBJDIRPREFIX to obj. Unsets MAKEOBJDIR. |
-M obj Set MAKEOBJDIRPREFIX to obj. If a relative path is specified, |
|
it will be converted to an absolute path before being used. |
|
Unsets MAKEOBJDIR. |
|
|
-m mach Set the value of MACHINE to mach. This will also override any |
-m mach Set the value of MACHINE to mach. This will also override any |
value of MACHINE_ARCH in the process environment with a value |
value of MACHINE_ARCH in the process environment with a value |
|
|
-n''. |
-n''. |
|
|
-O obj Create an appropriate transform macro for MAKEOBJDIR that will |
-O obj Create an appropriate transform macro for MAKEOBJDIR that will |
place the built object files under obj. For instance, a set- |
place the built object files under obj. If a relative path is |
ting of /usr/obj will place build-time files under |
specified, it will be converted to an absolute path before |
/usr/obj/bin, /usr/obj/lib, /usr/obj/usr.bin, and so forth. |
being used. For instance, a setting of /usr/obj will place |
Unsets MAKEOBJDIRPREFIX. |
build-time files under /usr/obj/bin, /usr/obj/lib, |
|
/usr/obj/usr.bin, and so forth. Unsets MAKEOBJDIRPREFIX. |
|
|
-o Set the value of MKOBJDIRS to ``no''. Otherwise, it will be |
-o Set the value of MKOBJDIRS to ``no''. Otherwise, it will be |
automatically set to ``yes'' (which is opposite to the default |
automatically set to ``yes'' (which is opposite to the default |
behaviour). |
behaviour). |
|
|
-R rel Set the value of RELEASEDIR to rel. |
-R rel Set the value of RELEASEDIR to rel. If a relative path is |
|
specified, it will be converted to an absolute path before |
|
being used. |
|
|
-r Remove the contents of DESTDIR and TOOLDIR before building |
-r Remove the contents of DESTDIR and TOOLDIR before building |
(provides a clean starting point). This will skip deleting |
(provides a clean starting point). This will skip deleting |
DESTDIR if building on a native system to the root directory. |
DESTDIR if building on a native system to the root directory. |
|
|
-T tools Set the value of TOOLDIR to tools. If set, the bootstrap |
-T tools Set the value of TOOLDIR to tools. If a relative path is spec- |
``make'' will only be rebuilt as needed (when the source files |
ified, it will be converted to an absolute path before being |
for make(1) change). |
used. If set, the bootstrap ``make'' will only be rebuilt as |
|
needed (when the source files for make(1) change). |
|
|
-U Set MKUNPRIVED=yes. |
-U Set MKUNPRIVED=yes. |
|
|
|
|
Create the nbmake wrapper script (see below) in a custom loca- |
Create the nbmake wrapper script (see below) in a custom loca- |
tion, specified by wrapper. This allows, for instance, to |
tion, specified by wrapper. This allows, for instance, to |
place the wrapper in PATH automatically. Note that wrapper is |
place the wrapper in PATH automatically. Note that wrapper is |
the full name of the file, not just a directory name. |
the full name of the file, not just a directory name. If a |
|
relative path is specified, it will be converted to an absolute |
|
path before being used. |
|
|
|
-X x11src |
|
Set the value of X11SRCDIR to x11src. If a relative path is |
|
specified, it will be converted to an absolute path before |
|
being used. |
|
|
|
-x Set MKX11=yes. |
|
|
-Z var Unset ("zap") the environment variable var. This is propagated |
-Z var Unset ("zap") the environment variable var. This is propagated |
to the nbmake wrapper. |
to the nbmake wrapper. |
Line 670 OBSOLETE VARIABLES |
|
Line 744 OBSOLETE VARIABLES |
|
TOOLCHAIN_MISSING=yes. |
TOOLCHAIN_MISSING=yes. |
|
|
SEE ALSO |
SEE ALSO |
make(1), hier(7), release(7) |
make(1), hier(7), release(7), pkgsrc/sysutils/cdrtools |
|
|
HISTORY |
HISTORY |
The build.sh based build scheme was introduced for NetBSD 1.6 as |
The build.sh based build scheme was introduced for NetBSD 1.6 as |
|
|
BUGS |
BUGS |
A few platforms are not yet using this build system. |
A few platforms are not yet using this build system. |
|
|
NetBSD October 25, 2003 NetBSD |
NetBSD January 4, 2006 NetBSD |