aboutsummaryrefslogtreecommitdiff
path: root/share/man/man7/build.7
diff options
context:
space:
mode:
Diffstat (limited to 'share/man/man7/build.7')
-rw-r--r--share/man/man7/build.7508
1 files changed, 508 insertions, 0 deletions
diff --git a/share/man/man7/build.7 b/share/man/man7/build.7
new file mode 100644
index 000000000000..4a94a0ab434c
--- /dev/null
+++ b/share/man/man7/build.7
@@ -0,0 +1,508 @@
+.\" 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 January 23, 2009
+.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 .
+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 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
+Execute a
+.Cm buildworld
+and
+.Cm buildkernel
+for all kernels including
+.Pa LINT ,
+for each architecture supported by the build system.
+This command takes a long time.
+.It Cm update
+Get updated sources as configured in
+.Xr make.conf 5 .
+.El
+.Pp
+Kernel specific build targets in
+.Pa /usr/src
+are:
+.Bl -tag -width ".Cm reinstallkernel"
+.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 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 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.
+.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
+and
+.Va NO_KERNELDEPEND .
+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 to
+build, relative to the root of the source tree.
+.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 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_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.
+.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
+.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 install 1 ,
+.Xr make 1 ,
+.Xr make.conf 5 ,
+.Xr src.conf 5 ,
+.Xr ports 7 ,
+.Xr release 7 ,
+.Xr config 8 ,
+.Xr mergemaster 8 ,
+.Xr reboot 8 ,
+.Xr shutdown 8
+.Sh AUTHORS
+.An Mike W. Meyer Aq mwm@mired.org .