xref: /freebsd/share/man/man7/build.7 (revision a0ee8cc6)
1.\" Copyright (c) 2000
2.\"	Mike W. Meyer
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\"
13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23.\" SUCH DAMAGE.
24.\"
25.\" $FreeBSD$
26.\"
27.Dd October 21, 2015
28.Dt BUILD 7
29.Os
30.Sh NAME
31.Nm build
32.Nd information on how to build the system
33.Sh DESCRIPTION
34The sources for the
35.Fx
36system and its applications are contained in three different directories,
37normally
38.Pa /usr/src ,
39.Pa /usr/doc ,
40and
41.Pa /usr/ports .
42These directories may be initially empty or non-existent until updated with
43.Xr svn 1
44or
45.Xr portsnap 8 .
46Directory
47.Pa /usr/src
48contains the
49.Dq "base system"
50sources, which is loosely defined as the things required to rebuild
51the system to a useful state.
52Directory
53.Pa /usr/doc
54contains the source for the system documentation, excluding the manual
55pages.
56Directory
57.Pa /usr/ports
58contains a tree that provides a consistent interface for building and
59installing third party applications.
60For more information about the ports build process, see
61.Xr ports 7 .
62.Pp
63The
64.Xr make 1
65command is used in each of these directories to build and install the
66things in that directory.
67Issuing the
68.Xr make 1
69command in any directory or
70subdirectory of those directories has the same effect as issuing the
71same command in all subdirectories of that directory.
72With no target specified, the things in that directory are just built.
73.Pp
74A source tree is allowed to be read-only.
75As described in
76.Xr make 1 ,
77objects are usually built in a separate object directory hierarchy
78specified by the environment variable
79.Va MAKEOBJDIRPREFIX ,
80or under
81.Pa /usr/obj
82if variable
83.Va MAKEOBJDIRPREFIX
84is not set.
85For a given source directory, its canonical object directory
86would be
87.Pa ${MAKEOBJDIRPREFIX}${.CURDIR}
88if
89.Xr make 1
90variable
91.Va MAKEOBJDIRPREFIX
92is set, or
93.Pa /usr/obj${.CURDIR}
94if this variable is not set.
95Cross-builds set the object directory as described in the
96documentation for the
97.Cm buildworld
98target below.
99.Pp
100The build may be controlled by defining
101.Xr make 1
102variables described in the
103.Sx ENVIRONMENT
104section below, and by the variables documented in
105.Xr make.conf 5 .
106.Pp
107The following list provides the names and actions for the targets
108supported by the build system:
109.Bl -tag -width ".Cm cleandepend"
110.It Cm clean
111Remove any files created during the build process.
112.It Cm cleandepend
113Remove the file
114.Pa ${.OBJDIR}/${DEPENDFILE}
115generated by a prior
116.Dq Li "make depend"
117step.
118.It Cm cleandir
119Remove the canonical object directory if it exists, or perform
120actions equivalent to
121.Dq Li "make clean cleandepend"
122if it does not.
123This target will also remove an
124.Pa obj
125link in
126.Pa ${.CURDIR}
127if that exists.
128.Pp
129It is advisable to run
130.Dq Li "make cleandir"
131twice: the first invocation will remove the canonical object directory
132and the second one will clean up
133.Pa ${.CURDIR} .
134.It Cm depend
135Generate a list of build dependencies in file
136.Pa ${.OBJDIR}/${DEPENDFILE} .
137.It Cm install
138Install the results of the build to the appropriate location in the
139installation directory hierarchy specified in variable
140.Va DESTDIR .
141.It Cm obj
142Create the canonical object directory associated with the current
143directory.
144.It Cm objlink
145Create a symbolic link to the canonical object directory in
146.Pa ${.CURDIR} .
147.It Cm tags
148Generate a tags file using the program specified in the
149.Xr make 1
150variable
151.Va CTAGS .
152The build system supports
153.Xr ctags 1
154and
155.Nm "GNU Global" .
156.El
157.Pp
158The other supported targets under directory
159.Pa /usr/src
160are:
161.Bl -tag -width ".Cm distributeworld"
162.It Cm buildenv
163Spawn an interactive shell with environment variables set up for
164cross-building the system.
165The target architecture needs to be specified with
166.Xr make 1
167variables
168.Va TARGET_ARCH
169and
170.Va TARGET .
171.Pp
172This target is only useful after a complete cross-toolchain including
173the compiler, linker, assembler, headers and libraries has been
174built; see the
175.Cm toolchain
176target below.
177.It Cm buildworld
178Build everything but the kernel, configure files in
179.Pa etc ,
180and
181.Pa release .
182The actual build location prefix used is
183.Pa ${MAKEOBJDIRPREFIX}${.CURDIR}
184for native builds, and
185.Pa ${MAKEOBJDIRPREFIX}/${TARGET}${.CURDIR}
186for cross builds and native builds with variable
187.Va CROSS_BUILD_TESTING
188set.
189.It Cm cleanworld
190Attempt to clean up targets built by a preceding
191.Cm buildworld
192step.
193.It Cm distributeworld
194Distribute everything compiled by a preceding
195.Cm buildworld
196step.
197Files are placed in the directory hierarchy specified by
198.Xr make 1
199variable
200.Va DISTDIR .
201This target is used while building a release; see
202.Xr release 7 .
203.It Cm packageworld
204Archive the results of
205.Cm distributeworld ,
206placing the results in
207.Va DISTDIR .
208This target is used while building a release; see
209.Xr release 7 .
210.It Cm installworld
211Install everything built by a preceding
212.Cm buildworld
213step into the directory hierarchy pointed to by
214.Xr make 1
215variable
216.Va DESTDIR .
217.Pp
218If installing onto an NFS file system and running
219.Xr make 1
220with the
221.Fl j
222option, make sure that
223.Xr rpc.lockd 8
224is running on both client and server.
225See
226.Xr rc.conf 5
227on how to make it start at boot time.
228.It Cm toolchain
229Create the build toolchain needed to build the rest of the system.
230For cross-architecture builds, this step creates a cross-toolchain.
231.It Cm universe
232For each architecture,
233execute a
234.Cm buildworld
235followed by a
236.Cm buildkernel
237for all kernels for that architecture,
238including
239.Pa LINT .
240This command takes a long time.
241.It Cm update
242Get updated sources as configured in
243.Xr make.conf 5 .
244.It Cm targets
245Print a list of supported
246.Va TARGET
247/
248.Va TARGET_ARCH
249pairs for world and kernel targets.
250.It Cm tinderbox
251Execute the same targets as
252.Cm universe .
253In addition print a summary of all failed targets at the end and
254exit with an error if there were any.
255.It Cm toolchains
256Create a build toolchain for each architecture supported by the build system.
257.El
258.Pp
259Kernel specific build targets in
260.Pa /usr/src
261are:
262.Bl -tag -width ".Cm distributekernel"
263.It Cm buildkernel
264Rebuild the kernel and the kernel modules.
265.It Cm installkernel
266Install the kernel and the kernel modules to directory
267.Pa ${DESTDIR}/boot/kernel ,
268renaming any pre-existing directory with this name to
269.Pa kernel.old
270if it contained the currently running kernel.
271The target directory under
272.Pa ${DESTDIR}
273may be modified using the
274.Va INSTKERNNAME
275and
276.Va KODIR
277.Xr make 1
278variables.
279.It Cm distributekernel
280Install the kernel to the directory
281.Pa ${DISTDIR}/kernel/boot/kernel .
282This target is used while building a release; see
283.Xr release 7 .
284.It Cm packagekernel
285Archive the results of
286.Cm distributekernel ,
287placing the results in
288.Va DISTDIR .
289This target is used while building a release; see
290.Xr release 7 .
291.It Cm kernel
292Equivalent to
293.Cm buildkernel
294followed by
295.Cm installkernel
296.It Cm kernel-toolchain
297Rebuild the tools needed for kernel compilation.
298Use this if you did not do a
299.Cm buildworld
300first.
301.It Cm reinstallkernel
302Reinstall the kernel and the kernel modules, overwriting the contents
303of the target directory.
304As with the
305.Cm installkernel
306target, the target directory can be specified using the
307.Xr make 1
308variable
309.Va INSTKERNNAME .
310.El
311.Pp
312Convenience targets for cleaning up the install destination directory
313denoted by variable
314.Va DESTDIR
315include:
316.Bl -tag -width ".Cm delete-old-libs"
317.It Cm check-old
318Print a list of old files and directories in the system.
319.It Cm delete-old
320Delete obsolete base system files and directories interactively.
321When
322.Li -DBATCH_DELETE_OLD_FILES
323is specified at the command line, the delete operation will be
324non-interactive.
325The variables
326.Va DESTDIR ,
327.Va TARGET_ARCH
328and
329.Va TARGET
330should be set as with
331.Dq Li "make installworld" .
332.It Cm delete-old-libs
333Delete obsolete base system libraries interactively.
334This target should only be used if no 3rd party software uses these
335libraries.
336When
337.Li -DBATCH_DELETE_OLD_FILES
338is specified at the command line, the delete operation will be
339non-interactive.
340The variables
341.Va DESTDIR ,
342.Va TARGET_ARCH
343and
344.Va TARGET
345should be set as with
346.Dq Li "make installworld" .
347.El
348.Sh ENVIRONMENT
349Variables that influence all builds include:
350.Bl -tag -width ".Va MAKEOBJDIRPREFIX"
351.It Va DEBUG_FLAGS
352Defines a set of debugging flags that will be used to build all userland
353binaries under
354.Pa /usr/src .
355When
356.Va DEBUG_FLAGS
357is defined, the
358.Cm install
359and
360.Cm installworld
361targets install binaries from the current
362.Va MAKEOBJDIRPREFIX
363without stripping,
364so that debugging information is retained in the installed binaries.
365.It Va DESTDIR
366The directory hierarchy prefix where built objects will be installed.
367If not set,
368.Va DESTDIR
369defaults to the empty string.
370.It Va MAKEOBJDIRPREFIX
371Defines the prefix for directory names in the tree of built objects.
372Defaults to
373.Pa /usr/obj
374if not defined.
375This variable should only be set in the environment and not via
376.Pa /etc/make.conf
377or the command line.
378.It Va NO_WERROR
379If defined, compiler warnings will not cause the build to halt,
380even if the makefile says otherwise.
381.It Va WITH_CTF
382If defined, the build process will run the DTrace CTF conversion
383tools on built objects.
384.El
385.Pp
386Additionally, builds in
387.Pa /usr/src
388are influenced by the following
389.Xr make 1
390variables:
391.Bl -tag -width ".Va SUBDIR_OVERRIDE"
392.It Va KERNCONF
393Overrides which kernel to build and install for the various kernel
394make targets.
395It defaults to
396.Cm GENERIC .
397.It Va KERNFAST
398If set, the build target
399.Cm buildkernel
400defaults to setting
401.Va NO_KERNELCLEAN ,
402.Va NO_KERNELCONFIG ,
403.Va NO_KERNELDEPEND
404and
405.Va NO_KERNELOBJ .
406When set to a value other than
407.Cm 1
408then
409.Va KERNCONF
410is set to the value of
411.Va KERNFAST .
412.It Va LOCAL_DIRS
413If set, this variable supplies a list of additional directories relative to
414the root of the source tree to build as part of the
415.Cm everything
416target.
417.It Va LOCAL_ITOOLS
418If set, this variable supplies a list of additional tools that are used by the
419.Cm installworld
420and
421.Cm distributeworld
422targets.
423.It Va LOCAL_LIB_DIRS
424If set, this variable supplies a list of additional directories relative to
425the root of the source tree to build as part of the
426.Cm libraries
427target.
428.It Va LOCAL_MTREE
429If set, this variable supplies a list of additional mtrees relative to the
430root of the source tree to use as part of the
431.Cm hierarchy
432target.
433.It Va LOCAL_TOOL_DIRS
434If set, this variable supplies a list of additional directories relative to
435the root of the source tree to build as part of the
436.Cm build-tools
437target.
438.It Va PORTS_MODULES
439A list of ports with kernel modules that should be built and installed
440as part of the
441.Cm buildkernel
442and
443.Cm installkernel
444process.
445.Bd -literal -offset indent
446make PORTS_MODULES=emulators/kqemu-kmod kernel
447.Ed
448.It Va STRIPBIN
449Command to use at install time when stripping binaries.
450Be sure to add any additional tools required to run
451.Va STRIPBIN
452to the
453.Va LOCAL_ITOOLS
454.Xr make 1
455variable before running the
456.Cm distributeworld
457or
458.Cm installworld
459targets.
460See
461.Xr install 1
462for more details.
463.It Va SUBDIR_OVERRIDE
464Override the default list of sub-directories and only build the
465sub-directory named in this variable.
466If combined with
467.Cm buildworld
468then all libraries and includes, and some of the build tools will still build
469as well.
470When combined with
471.Cm buildworld
472it is necesarry to override
473.Va LOCAL_LIB_DIRS
474with any custom directories containing libraries.
475This allows building a subset of the system in the same way as
476.Cm buildworld
477does using its sysroot handling.
478This variable can also be useful when debugging failed builds.
479.Bd -literal -offset indent
480make some-target SUBDIR_OVERRIDE=foo/bar
481.Ed
482.It Va TARGET
483The target hardware platform.
484This is analogous to the
485.Dq Nm uname Fl m
486output.
487This is necessary to cross-build some target architectures.
488For example, cross-building for PC98 machines requires
489.Va TARGET_ARCH Ns = Ns Li i386
490and
491.Va TARGET Ns = Ns Li pc98 .
492If not set,
493.Va TARGET
494defaults to the current hardware platform.
495.It Va TARGET_ARCH
496The target machine processor architecture.
497This is analogous to the
498.Dq Nm uname Fl p
499output.
500Set this to cross-build for a different architecture.
501If not set,
502.Va TARGET_ARCH
503defaults to the current machine architecture, unless
504.Va TARGET
505is also set, in which case it defaults to the appropriate
506value for that platform.
507Typically, one only needs to set
508.Va TARGET .
509.El
510.Pp
511Builds under directory
512.Pa /usr/src
513are also influenced by defining one or more of the following symbols,
514using the
515.Fl D
516option of
517.Xr make 1 :
518.Bl -tag -width ".Va -DNO_KERNELDEPEND"
519.It Va NO_CLEANDIR
520If set, the build targets that clean parts of the object tree use the
521equivalent of
522.Dq make clean
523instead of
524.Dq make cleandir .
525.It Va NO_CLEAN
526If set, no object tree files are cleaned at all.
527Setting
528.Va NO_CLEAN
529implies
530.Va NO_KERNELCLEAN ,
531so when
532.Va NO_CLEAN
533is set no kernel objects are cleaned either.
534.It Va NO_CTF
535If set, the build process does not run the DTrace CTF conversion tools
536on built objects.
537.It Va NO_SHARE
538If set, the build does not descend into the
539.Pa /usr/src/share
540subdirectory (i.e., manpages, locale data files, timezone data files and
541other
542.Pa /usr/src/share
543files will not be rebuild from their sources).
544.It Va NO_KERNELCLEAN
545If set, the build process does not run
546.Dq make clean
547as part of the
548.Cm buildkernel
549target.
550.It Va NO_KERNELCONFIG
551If set, the build process does not run
552.Xr config 8
553as part of the
554.Cm buildkernel
555target.
556.It Va NO_KERNELDEPEND
557If set, the build process does not run
558.Dq make depend
559as part of the
560.Cm buildkernel
561target.
562.It Va NO_KERNELOBJ
563If set, the build process does not run
564.Dq make obj
565as part of the
566.Cm buildkernel
567target.
568.It Va NO_DOCUPDATE
569If set, the update process does not update the source of the
570.Fx
571documentation as part of the
572.Dq make update
573target.
574.It Va NO_PORTSUPDATE
575If set, the update process does not update the Ports tree as part of the
576.Dq make update
577target.
578.It Va NO_WWWUPDATE
579If set, the update process does not update the www tree as part of the
580.Dq make update
581target.
582.El
583.Pp
584Builds under directory
585.Pa /usr/doc
586are influenced by the following
587.Xr make 1
588variables:
589.Bl -tag -width ".Va DOC_LANG"
590.It Va DOC_LANG
591If set, restricts the documentation build to the language subdirectories
592specified as its content.
593The default action is to build documentation for all languages.
594.El
595.Pp
596Builds using the
597.Cm universe
598target are influenced by the following
599.Xr make 1
600variables:
601.Bl -tag -width ".Va MAKE_JUST_KERNELS"
602.It Va JFLAG
603Pass the value of this variable to each
604.Xr make 1
605invocation used to build worlds and kernels.
606This can be used to enable multiple jobs within a single architecture's build
607while still building each architecture serially.
608.It Va MAKE_JUST_KERNELS
609Only build kernels for each supported architecture.
610.It Va MAKE_JUST_WORLDS
611Only build worlds for each supported architecture.
612.It Va UNIVERSE_TARGET
613Execute the specified
614.Xr make 1
615target for each supported architecture instead of the default action of
616building a world and one or more kernels.
617.El
618.Sh FILES
619.Bl -tag -width ".Pa /usr/share/examples/etc/make.conf" -compact
620.It Pa /usr/doc/Makefile
621.It Pa /usr/doc/share/mk/doc.project.mk
622.It Pa /usr/ports/Mk/bsd.port.mk
623.It Pa /usr/ports/Mk/bsd.sites.mk
624.It Pa /usr/share/examples/etc/make.conf
625.It Pa /usr/src/Makefile
626.It Pa /usr/src/Makefile.inc1
627.El
628.Sh EXAMPLES
629For an
630.Dq approved
631method of updating your system from the latest sources, please see the
632.Sx COMMON ITEMS
633section in
634.Pa src/UPDATING .
635.Pp
636The following sequence of commands can be used to cross-build the
637system for the sparc64 architecture on an i386 host:
638.Bd -literal -offset indent
639cd /usr/src
640make TARGET=sparc64 buildworld
641make TARGET=sparc64 DESTDIR=/clients/sparc64 installworld
642.Ed
643.Sh SEE ALSO
644.Xr cc 1 ,
645.Xr install 1 ,
646.Xr make 1 ,
647.Xr svn 1 ,
648.Xr make.conf 5 ,
649.Xr src.conf 5 ,
650.Xr ports 7 ,
651.Xr release 7 ,
652.Xr config 8 ,
653.Xr mergemaster 8 ,
654.Xr portsnap 8 ,
655.Xr reboot 8 ,
656.Xr shutdown 8
657.Sh AUTHORS
658.An Mike W. Meyer Aq Mt mwm@mired.org
659