ca6a54ce20
PR: docs/178286 Submitted by: Garrett Cooper <yaneurabeya@gmail.com> Sponsored by: EMC / Isilon Storage Division MFC after: 1 week
628 lines
16 KiB
Groff
628 lines
16 KiB
Groff
.\" Copyright (c) 2000
|
|
.\" Mike W. Meyer
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.Dd March 27, 2014
|
|
.Dt BUILD 7
|
|
.Os
|
|
.Sh NAME
|
|
.Nm build
|
|
.Nd information on how to build the system
|
|
.Sh DESCRIPTION
|
|
The sources for the
|
|
.Fx
|
|
system and its applications are contained in three different directories,
|
|
normally
|
|
.Pa /usr/src ,
|
|
.Pa /usr/doc ,
|
|
and
|
|
.Pa /usr/ports .
|
|
These directories may be initially empty or non-existent until updated with
|
|
.Xr csup 1 ,
|
|
.Xr svn 1 ,
|
|
or
|
|
.Xr portsnap 8 .
|
|
Directory
|
|
.Pa /usr/src
|
|
contains the
|
|
.Dq "base system"
|
|
sources, which is loosely defined as the things required to rebuild
|
|
the system to a useful state.
|
|
Directory
|
|
.Pa /usr/doc
|
|
contains the source for the system documentation, excluding the manual
|
|
pages.
|
|
Directory
|
|
.Pa /usr/ports
|
|
contains a tree that provides a consistent interface for building and
|
|
installing third party applications.
|
|
For more information about the ports build process, see
|
|
.Xr ports 7 .
|
|
.Pp
|
|
The
|
|
.Xr make 1
|
|
command is used in each of these directories to build and install the
|
|
things in that directory.
|
|
Issuing the
|
|
.Xr make 1
|
|
command in any directory or
|
|
subdirectory of those directories has the same effect as issuing the
|
|
same command in all subdirectories of that directory.
|
|
With no target specified, the things in that directory are just built.
|
|
.Pp
|
|
A source tree is allowed to be read-only.
|
|
As described in
|
|
.Xr make 1 ,
|
|
objects are usually built in a separate object directory hierarchy
|
|
specified by the environment variable
|
|
.Va MAKEOBJDIRPREFIX ,
|
|
or under
|
|
.Pa /usr/obj
|
|
if variable
|
|
.Va MAKEOBJDIRPREFIX
|
|
is not set.
|
|
For a given source directory, its canonical object directory
|
|
would be
|
|
.Pa ${MAKEOBJDIRPREFIX}${.CURDIR}
|
|
if
|
|
.Xr make 1
|
|
variable
|
|
.Va MAKEOBJDIRPREFIX
|
|
is set, or
|
|
.Pa /usr/obj${.CURDIR}
|
|
if this variable is not set.
|
|
Cross-builds set the object directory as described in the
|
|
documentation for the
|
|
.Cm buildworld
|
|
target below.
|
|
.Pp
|
|
The build may be controlled by defining
|
|
.Xr make 1
|
|
variables described in the
|
|
.Sx ENVIRONMENT
|
|
section below, and by the variables documented in
|
|
.Xr make.conf 5 .
|
|
.Pp
|
|
The following list provides the names and actions for the targets
|
|
supported by the build system:
|
|
.Bl -tag -width ".Cm cleandepend"
|
|
.It Cm clean
|
|
Remove any files created during the build process.
|
|
.It Cm cleandepend
|
|
Remove the file
|
|
.Pa ${.OBJDIR}/${DEPENDFILE}
|
|
generated by a prior
|
|
.Dq Li "make depend"
|
|
step.
|
|
.It Cm cleandir
|
|
Remove the canonical object directory if it exists, or perform
|
|
actions equivalent to
|
|
.Dq Li "make clean cleandepend"
|
|
if it does not.
|
|
This target will also remove an
|
|
.Pa obj
|
|
link in
|
|
.Pa ${.CURDIR}
|
|
if that exists.
|
|
.Pp
|
|
It is advisable to run
|
|
.Dq Li "make cleandir"
|
|
twice: the first invocation will remove the canonical object directory
|
|
and the second one will clean up
|
|
.Pa ${.CURDIR} .
|
|
.It Cm depend
|
|
Generate a list of build dependencies in file
|
|
.Pa ${.OBJDIR}/${DEPENDFILE} .
|
|
.It Cm install
|
|
Install the results of the build to the appropriate location in the
|
|
installation directory hierarchy specified in variable
|
|
.Va DESTDIR .
|
|
.It Cm obj
|
|
Create the canonical object directory associated with the current
|
|
directory.
|
|
.It Cm objlink
|
|
Create a symbolic link to the canonical object directory in
|
|
.Pa ${.CURDIR} .
|
|
.It Cm tags
|
|
Generate a tags file using the program specified in the
|
|
.Xr make 1
|
|
variable
|
|
.Va CTAGS .
|
|
The build system supports
|
|
.Xr ctags 1
|
|
and
|
|
.Nm "GNU Global" .
|
|
.El
|
|
.Pp
|
|
The other supported targets under directory
|
|
.Pa /usr/src
|
|
are:
|
|
.Bl -tag -width ".Cm distributeworld"
|
|
.It Cm buildenv
|
|
Spawn an interactive shell with environment variables set up for
|
|
cross-building the system.
|
|
The target architecture needs to be specified with
|
|
.Xr make 1
|
|
variables
|
|
.Va TARGET_ARCH
|
|
and
|
|
.Va TARGET .
|
|
.Pp
|
|
This target is only useful after a complete cross-toolchain including
|
|
the compiler, linker, assembler, headers and libraries has been
|
|
built; see the
|
|
.Cm toolchain
|
|
target below.
|
|
.It Cm buildworld
|
|
Build everything but the kernel, configure files in
|
|
.Pa etc ,
|
|
and
|
|
.Pa release .
|
|
The actual build location prefix used is
|
|
.Pa ${MAKEOBJDIRPREFIX}${.CURDIR}
|
|
for native builds, and
|
|
.Pa ${MAKEOBJDIRPREFIX}/${TARGET}${.CURDIR}
|
|
for cross builds and native builds with variable
|
|
.Va CROSS_BUILD_TESTING
|
|
set.
|
|
.It Cm cleanworld
|
|
Attempt to clean up targets built by a preceding
|
|
.Cm buildworld
|
|
step.
|
|
.It Cm distributeworld
|
|
Distribute everything compiled by a preceding
|
|
.Cm buildworld
|
|
step.
|
|
Files are placed in the directory hierarchy specified by
|
|
.Xr make 1
|
|
variable
|
|
.Va DISTDIR .
|
|
This target is used while building a release; see
|
|
.Xr release 7 .
|
|
.It Cm packageworld
|
|
Archive the results of
|
|
.Cm distributeworld ,
|
|
placing the results in
|
|
.Va DISTDIR .
|
|
This target is used while building a release; see
|
|
.Xr release 7 .
|
|
.It Cm installworld
|
|
Install everything built by a preceding
|
|
.Cm buildworld
|
|
step into the directory hierarchy pointed to by
|
|
.Xr make 1
|
|
variable
|
|
.Va DESTDIR .
|
|
.Pp
|
|
If installing onto an NFS file system and running
|
|
.Xr make 1
|
|
with the
|
|
.Fl j
|
|
option, make sure that
|
|
.Xr rpc.lockd 8
|
|
is running on both client and server.
|
|
See
|
|
.Xr rc.conf 5
|
|
on how to make it start at boot time.
|
|
.It Cm toolchain
|
|
Create the build toolchain needed to build the rest of the system.
|
|
For cross-architecture builds, this step creates a cross-toolchain.
|
|
.It Cm universe
|
|
For each architecture,
|
|
execute a
|
|
.Cm buildworld
|
|
followed by a
|
|
.Cm buildkernel
|
|
for all kernels for that architecture,
|
|
including
|
|
.Pa LINT .
|
|
This command takes a long time.
|
|
.It Cm update
|
|
Get updated sources as configured in
|
|
.Xr make.conf 5 .
|
|
.It Cm targets
|
|
Print a list of supported
|
|
.Va TARGET
|
|
/
|
|
.Va TARGET_ARCH
|
|
pairs for world and kernel targets.
|
|
.It Cm tinderbox
|
|
Execute the same targets as
|
|
.Cm universe .
|
|
In addition print a summary of all failed targets at the end and
|
|
exit with an error if there were any.
|
|
.It Cm toolchains
|
|
Create a build toolchain for each architecture supported by the build system.
|
|
.El
|
|
.Pp
|
|
Kernel specific build targets in
|
|
.Pa /usr/src
|
|
are:
|
|
.Bl -tag -width ".Cm distributekernel"
|
|
.It Cm buildkernel
|
|
Rebuild the kernel and the kernel modules.
|
|
.It Cm installkernel
|
|
Install the kernel and the kernel modules to directory
|
|
.Pa ${DESTDIR}/boot/kernel ,
|
|
renaming any pre-existing directory with this name to
|
|
.Pa kernel.old
|
|
if it contained the currently running kernel.
|
|
The target directory under
|
|
.Pa ${DESTDIR}
|
|
may be modified using the
|
|
.Va INSTKERNNAME
|
|
and
|
|
.Va KODIR
|
|
.Xr make 1
|
|
variables.
|
|
.It Cm distributekernel
|
|
Install the kernel to the directory
|
|
.Pa ${DISTDIR}/kernel/boot/kernel .
|
|
This target is used while building a release; see
|
|
.Xr release 7 .
|
|
.It Cm packagekernel
|
|
Archive the results of
|
|
.Cm distributekernel ,
|
|
placing the results in
|
|
.Va DISTDIR .
|
|
This target is used while building a release; see
|
|
.Xr release 7 .
|
|
.It Cm kernel
|
|
Equivalent to
|
|
.Cm buildkernel
|
|
followed by
|
|
.Cm installkernel
|
|
.It Cm kernel-toolchain
|
|
Rebuild the tools needed for kernel compilation.
|
|
Use this if you did not do a
|
|
.Cm buildworld
|
|
first.
|
|
.It Cm reinstallkernel
|
|
Reinstall the kernel and the kernel modules, overwriting the contents
|
|
of the target directory.
|
|
As with the
|
|
.Cm installkernel
|
|
target, the target directory can be specified using the
|
|
.Xr make 1
|
|
variable
|
|
.Va INSTKERNNAME .
|
|
.El
|
|
.Pp
|
|
Convenience targets for cleaning up the install destination directory
|
|
denoted by variable
|
|
.Va DESTDIR
|
|
include:
|
|
.Bl -tag -width ".Cm delete-old-libs"
|
|
.It Cm check-old
|
|
Print a list of old files and directories in the system.
|
|
.It Cm delete-old
|
|
Delete obsolete base system files and directories interactively.
|
|
When
|
|
.Li -DBATCH_DELETE_OLD_FILES
|
|
is specified at the command line, the delete operation will be
|
|
non-interactive.
|
|
The variables
|
|
.Va DESTDIR ,
|
|
.Va TARGET_ARCH
|
|
and
|
|
.Va TARGET
|
|
should be set as with
|
|
.Dq Li "make installworld" .
|
|
.It Cm delete-old-libs
|
|
Delete obsolete base system libraries interactively.
|
|
This target should only be used if no 3rd party software uses these
|
|
libraries.
|
|
When
|
|
.Li -DBATCH_DELETE_OLD_FILES
|
|
is specified at the command line, the delete operation will be
|
|
non-interactive.
|
|
The variables
|
|
.Va DESTDIR ,
|
|
.Va TARGET_ARCH
|
|
and
|
|
.Va TARGET
|
|
should be set as with
|
|
.Dq Li "make installworld" .
|
|
.El
|
|
.Sh ENVIRONMENT
|
|
Variables that influence all builds include:
|
|
.Bl -tag -width ".Va MAKEOBJDIRPREFIX"
|
|
.It Va DEBUG_FLAGS
|
|
Defines a set of debugging flags that will be used to build all userland
|
|
binaries under
|
|
.Pa /usr/src .
|
|
When
|
|
.Va DEBUG_FLAGS
|
|
is defined, the
|
|
.Cm install
|
|
and
|
|
.Cm installworld
|
|
targets install binaries from the current
|
|
.Va MAKEOBJDIRPREFIX
|
|
without stripping,
|
|
so that debugging information is retained in the installed binaries.
|
|
.It Va DESTDIR
|
|
The directory hierarchy prefix where built objects will be installed.
|
|
If not set,
|
|
.Va DESTDIR
|
|
defaults to the empty string.
|
|
.It Va MAKEOBJDIRPREFIX
|
|
Defines the prefix for directory names in the tree of built objects.
|
|
Defaults to
|
|
.Pa /usr/obj
|
|
if not defined.
|
|
This variable should only be set in the environment and not via
|
|
.Pa /etc/make.conf
|
|
or the command line.
|
|
.It Va NO_WERROR
|
|
If defined, compiler warnings will not cause the build to halt,
|
|
even if the makefile says otherwise.
|
|
.It Va WITH_CTF
|
|
If defined, the build process will run the DTrace CTF conversion
|
|
tools on built objects.
|
|
.El
|
|
.Pp
|
|
Additionally, builds in
|
|
.Pa /usr/src
|
|
are influenced by the following
|
|
.Xr make 1
|
|
variables:
|
|
.Bl -tag -width ".Va SUBDIR_OVERRIDE"
|
|
.It Va KERNCONF
|
|
Overrides which kernel to build and install for the various kernel
|
|
make targets.
|
|
It defaults to
|
|
.Cm GENERIC .
|
|
.It Va KERNFAST
|
|
If set, the build target
|
|
.Cm buildkernel
|
|
defaults to setting
|
|
.Va NO_KERNELCLEAN ,
|
|
.Va NO_KERNELCONFIG ,
|
|
.Va NO_KERNELDEPEND
|
|
and
|
|
.Va NO_KERNELOBJ .
|
|
When set to a value other than
|
|
.Cm 1
|
|
then
|
|
.Va KERNCONF
|
|
is set to the value of
|
|
.Va KERNFAST .
|
|
.It Va LOCAL_DIRS
|
|
If set, this variable supplies a list of additional directories relative to
|
|
the root of the source tree to build as part of the
|
|
.Cm everything
|
|
target.
|
|
.It Va LOCAL_LIB_DIRS
|
|
If set, this variable supplies a list of additional directories relative to
|
|
the root of the source tree to build as part of the
|
|
.Cm libraries
|
|
target.
|
|
.It Va LOCAL_MTREE
|
|
If set, this variable supplies a list of additional mtrees relative to the
|
|
root of the source tree to use as part of the
|
|
.Cm hierarchy
|
|
target.
|
|
.It Va LOCAL_TOOL_DIRS
|
|
If set, this variable supplies a list of additional directories relative to
|
|
the root of the source tree to build as part of the
|
|
.Cm build-tools
|
|
target.
|
|
.It Va PORTS_MODULES
|
|
A list of ports with kernel modules that should be built and installed
|
|
as part of the
|
|
.Cm buildkernel
|
|
and
|
|
.Cm installkernel
|
|
process.
|
|
.Bd -literal -offset indent
|
|
make PORTS_MODULES=emulators/kqemu-kmod kernel
|
|
.Ed
|
|
.It Va SUBDIR_OVERRIDE
|
|
Override the default list of sub-directories and only build the
|
|
sub-directory named in this variable.
|
|
This variable is useful when debugging failed builds.
|
|
.Bd -literal -offset indent
|
|
make some-target SUBDIR_OVERRIDE=foo/bar
|
|
.Ed
|
|
.It Va TARGET
|
|
The target hardware platform.
|
|
This is analogous to the
|
|
.Dq Nm uname Fl m
|
|
output.
|
|
This is necessary to cross-build some target architectures.
|
|
For example, cross-building for PC98 machines requires
|
|
.Va TARGET_ARCH Ns = Ns Li i386
|
|
and
|
|
.Va TARGET Ns = Ns Li pc98 .
|
|
If not set,
|
|
.Va TARGET
|
|
defaults to the current hardware platform.
|
|
.It Va TARGET_ARCH
|
|
The target machine processor architecture.
|
|
This is analogous to the
|
|
.Dq Nm uname Fl p
|
|
output.
|
|
Set this to cross-build for a different architecture.
|
|
If not set,
|
|
.Va TARGET_ARCH
|
|
defaults to the current machine architecture, unless
|
|
.Va TARGET
|
|
is also set, in which case it defaults to the appropriate
|
|
value for that platform.
|
|
Typically, one only needs to set
|
|
.Va TARGET .
|
|
.El
|
|
.Pp
|
|
Builds under directory
|
|
.Pa /usr/src
|
|
are also influenced by defining one or more of the following symbols,
|
|
using the
|
|
.Fl D
|
|
option of
|
|
.Xr make 1 :
|
|
.Bl -tag -width ".Va -DNO_KERNELDEPEND"
|
|
.It Va NO_CLEANDIR
|
|
If set, the build targets that clean parts of the object tree use the
|
|
equivalent of
|
|
.Dq make clean
|
|
instead of
|
|
.Dq make cleandir .
|
|
.It Va NO_CLEAN
|
|
If set, no object tree files are cleaned at all.
|
|
Setting
|
|
.Va NO_CLEAN
|
|
implies
|
|
.Va NO_KERNELCLEAN ,
|
|
so when
|
|
.Va NO_CLEAN
|
|
is set no kernel objects are cleaned either.
|
|
.It Va NO_CTF
|
|
If set, the build process does not run the DTrace CTF conversion tools
|
|
on built objects.
|
|
.It Va NO_SHARE
|
|
If set, the build does not descend into the
|
|
.Pa /usr/src/share
|
|
subdirectory (i.e., manpages, locale data files, timezone data files and
|
|
other
|
|
.Pa /usr/src/share
|
|
files will not be rebuild from their sources).
|
|
.It Va NO_KERNELCLEAN
|
|
If set, the build process does not run
|
|
.Dq make clean
|
|
as part of the
|
|
.Cm buildkernel
|
|
target.
|
|
.It Va NO_KERNELCONFIG
|
|
If set, the build process does not run
|
|
.Xr config 8
|
|
as part of the
|
|
.Cm buildkernel
|
|
target.
|
|
.It Va NO_KERNELDEPEND
|
|
If set, the build process does not run
|
|
.Dq make depend
|
|
as part of the
|
|
.Cm buildkernel
|
|
target.
|
|
.It Va NO_KERNELOBJ
|
|
If set, the build process does not run
|
|
.Dq make obj
|
|
as part of the
|
|
.Cm buildkernel
|
|
target.
|
|
.It Va NO_DOCUPDATE
|
|
If set, the update process does not update the source of the
|
|
.Fx
|
|
documentation as part of the
|
|
.Dq make update
|
|
target.
|
|
.It Va NO_PORTSUPDATE
|
|
If set, the update process does not update the Ports tree as part of the
|
|
.Dq make update
|
|
target.
|
|
.It Va NO_WWWUPDATE
|
|
If set, the update process does not update the www tree as part of the
|
|
.Dq make update
|
|
target.
|
|
.El
|
|
.Pp
|
|
Builds under directory
|
|
.Pa /usr/doc
|
|
are influenced by the following
|
|
.Xr make 1
|
|
variables:
|
|
.Bl -tag -width ".Va DOC_LANG"
|
|
.It Va DOC_LANG
|
|
If set, restricts the documentation build to the language subdirectories
|
|
specified as its content.
|
|
The default action is to build documentation for all languages.
|
|
.El
|
|
.Pp
|
|
Builds using the
|
|
.Cm universe
|
|
target are influenced by the following
|
|
.Xr make 1
|
|
variables:
|
|
.Bl -tag -width ".Va MAKE_JUST_KERNELS"
|
|
.It Va JFLAG
|
|
Pass the value of this variable to each
|
|
.Xr make 1
|
|
invocation used to build worlds and kernels.
|
|
This can be used to enable multiple jobs within a single architecture's build
|
|
while still building each architecture serially.
|
|
.It Va MAKE_JUST_KERNELS
|
|
Only build kernels for each supported architecture.
|
|
.It Va MAKE_JUST_WORLDS
|
|
Only build worlds for each supported architecture.
|
|
.It Va UNIVERSE_TARGET
|
|
Execute the specified
|
|
.Xr make 1
|
|
target for each supported architecture instead of the default action of
|
|
building a world and one or more kernels.
|
|
.El
|
|
.Sh FILES
|
|
.Bl -tag -width ".Pa /usr/share/examples/etc/make.conf" -compact
|
|
.It Pa /usr/doc/Makefile
|
|
.It Pa /usr/doc/share/mk/doc.project.mk
|
|
.It Pa /usr/ports/Mk/bsd.port.mk
|
|
.It Pa /usr/ports/Mk/bsd.sites.mk
|
|
.It Pa /usr/share/examples/etc/make.conf
|
|
.It Pa /usr/src/Makefile
|
|
.It Pa /usr/src/Makefile.inc1
|
|
.El
|
|
.Sh EXAMPLES
|
|
For an
|
|
.Dq approved
|
|
method of updating your system from the latest sources, please see the
|
|
.Sx COMMON ITEMS
|
|
section in
|
|
.Pa src/UPDATING .
|
|
.Pp
|
|
The following sequence of commands can be used to cross-build the
|
|
system for the sparc64 architecture on an i386 host:
|
|
.Bd -literal -offset indent
|
|
cd /usr/src
|
|
make TARGET=sparc64 buildworld
|
|
make TARGET=sparc64 DESTDIR=/clients/sparc64 installworld
|
|
.Ed
|
|
.Sh SEE ALSO
|
|
.Xr cc 1 ,
|
|
.Xr csup 1 ,
|
|
.Xr install 1 ,
|
|
.Xr make 1 ,
|
|
.Xr svn 1 ,
|
|
.Xr make.conf 5 ,
|
|
.Xr src.conf 5 ,
|
|
.Xr ports 7 ,
|
|
.Xr release 7 ,
|
|
.Xr config 8 ,
|
|
.Xr mergemaster 8 ,
|
|
.Xr portsnap 8 ,
|
|
.Xr reboot 8 ,
|
|
.Xr shutdown 8
|
|
.Sh AUTHORS
|
|
.An Mike W. Meyer Aq mwm@mired.org .
|