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 August 1, 2023 28.Dt BUILD 7 29.Os 30.Sh NAME 31.Nm build 32.Nd General instructions 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 43Git 44.Po installed from packages with 45.Xr pkg 7 46or from 47.Xr ports 7 Pc . 48Directory 49.Pa /usr/src 50contains the 51.Dq "base system" 52sources, which is loosely defined as the things required to rebuild 53the system to a useful state. 54Directory 55.Pa /usr/doc 56contains the source for the system documentation, excluding the manual 57pages. 58Directory 59.Pa /usr/ports 60contains a tree that provides a consistent interface for building and 61installing third party applications. 62For more information about the ports build process, see 63.Xr ports 7 . 64.Pp 65The 66.Xr make 1 67command is used in each of these directories to build and install the 68things in that directory. 69Issuing the 70.Xr make 1 71command in any directory issues the 72.Xr make 1 73command recursively in all subdirectories. 74With no target specified, the items in the directories are built 75and no further action is taken. 76.Pp 77A source tree is allowed to be read-only. 78As described in 79.Xr make 1 , 80objects are usually built in a separate object directory hierarchy 81specified by the environment variable 82.Va MAKEOBJDIRPREFIX , 83or under 84.Pa /usr/obj 85if variable 86.Va MAKEOBJDIRPREFIX 87is not set. 88The canonical object directory is described in the documentation for the 89.Cm buildworld 90target below. 91.Pp 92The build may be controlled by defining 93.Xr make 1 94variables described in the 95.Sx ENVIRONMENT 96section below, and by the variables documented in 97.Xr make.conf 5 . 98.Pp 99The default components included in the build are specified in the file 100.Pa /etc/src.conf 101in the source tree. 102To override the default file, include the SRCCONF option in the make steps, 103pointing to a custom src.conf file. 104For more information see 105.Xr src.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 analyze 111Run Clang static analyzer against all objects and present output on stdout. 112.It Cm check 113Run tests for a given subdirectory. 114The default directory used is 115.Pa ${.OBJDIR} , 116but the check directory can be changed with 117.Pa ${CHECKDIR} . 118.It Cm checkworld 119Run the 120.Fx 121test suite on installed world. 122.It Cm clean 123Remove any files created during the build process. 124.It Cm cleandepend 125Remove the 126.Pa ${.OBJDIR}/${DEPENDFILE}* 127files generated by prior 128.Dq Li "make" 129and 130.Dq Li "make depend" 131steps. 132.It Cm cleandir 133Remove the canonical object directory if it exists, or perform 134actions equivalent to 135.Dq Li "make clean cleandepend" 136if it does not. 137This target will also remove an 138.Pa obj 139link in 140.Pa ${.CURDIR} 141if that exists. 142.Pp 143It is advisable to run 144.Dq Li "make cleandir" 145twice: the first invocation will remove the canonical object directory 146and the second one will clean up 147.Pa ${.CURDIR} . 148.It Cm depend 149Generate a list of build dependencies in file 150.Pa ${.OBJDIR}/${DEPENDFILE} . 151Per-object dependencies are generated at build time and stored in 152.Pa ${.OBJDIR}/${DEPENDFILE}.${OBJ} . 153.It Cm install 154Install the results of the build to the appropriate location in the 155installation directory hierarchy specified in variable 156.Va DESTDIR . 157.It Cm obj 158Create the canonical object directory associated with the current 159directory. 160.It Cm objlink 161Create a symbolic link to the canonical object directory in 162.Pa ${.CURDIR} . 163.It Cm tags 164Generate a tags file using the program specified in the 165.Xr make 1 166variable 167.Va CTAGS . 168The build system supports 169.Xr ctags 1 170and 171.Nm "GNU Global" . 172.El 173.Pp 174The other supported targets under directory 175.Pa /usr/src 176are: 177.Bl -tag -width ".Cm distributeworld" 178.It Cm buildenv 179Spawn an interactive shell with environment variables set up for 180building the system or individual components. 181For cross-building the target architecture needs to be specified with 182.Xr make 1 183variables 184.Va TARGET_ARCH 185and 186.Va TARGET . 187.Pp 188This target is only useful after a complete toolchain (including 189the compiler, linker, assembler, headers and libraries) has been 190built; see the 191.Cm toolchain 192target below. 193.It Cm buildworld 194Build everything but the kernel, configure files in 195.Pa etc , 196and 197.Pa release . 198The object directory can be changed from the default 199.Pa /usr/obj 200by setting the 201.Pa MAKEOBJDIRPREFIX 202.Xr make 1 203variable. 204The actual build location prefix used 205depends on the 206.Va WITH_UNIFIED_OBJDIR 207option from 208.Xr src.conf 5 . 209If enabled it is 210.Pa ${MAKEOBJDIRPREFIX}${.CURDIR}/${TARGET}.${TARGET_ARCH} 211for all builds. 212If disabled it is 213.Pa ${MAKEOBJDIRPREFIX}${.CURDIR} 214for native builds, and 215.Pa ${MAKEOBJDIRPREFIX}/${TARGET}.${TARGET_ARCH}${.CURDIR} 216for cross builds and native builds with variable 217.Va CROSS_BUILD_TESTING 218set. 219.It Cm cleankernel 220Attempts to clean up targets built by a preceding 221.Cm buildkernel , 222or similar step, built from the same source directory and 223.Va KERNCONF . 224.It Cm cleanworld 225Attempt to clean up targets built by a preceding 226.Cm buildworld , 227or similar step, built from this source directory. 228.It Cm cleanuniverse 229When 230.Va WITH_UNIFIED_OBJDIR 231is enabled, attempt to clean up targets built by a preceding 232.Cm buildworld , 233.Cm universe , 234or similar step, for any architecture built from this source directory. 235.It Cm distributeworld 236Distribute everything compiled by a preceding 237.Cm buildworld 238step. 239Files are placed in the directory hierarchy specified by 240.Xr make 1 241variable 242.Va DISTDIR . 243This target is used while building a release; see 244.Xr release 7 . 245.It Cm native-xtools 246This target builds a cross-toolchain for the given 247.Sy TARGET 248and 249.Sy TARGET_ARCH , 250as well as a select list of static userland tools for the host system. 251This is intended to be used in a jail where QEMU is used to improve 252performance by avoiding emulating binaries that do not need to be emulated. 253.Sy TARGET 254and 255.Sy TARGET_ARCH 256should be defined. 257.It Cm native-xtools-install 258Installs the results to 259.Pa ${DESTDIR}/${NXTP} 260where 261.Va NXTP 262defaults to 263.Pa nxb-bin . 264.Sy TARGET 265and 266.Sy TARGET_ARCH 267must be defined. 268.It Cm packageworld 269Archive the results of 270.Cm distributeworld , 271placing the results in 272.Va DISTDIR . 273This target is used while building a release; see 274.Xr release 7 . 275.It Cm installworld 276Install everything built by a preceding 277.Cm buildworld 278step into the directory hierarchy pointed to by 279.Xr make 1 280variable 281.Va DESTDIR . 282.Pp 283If installing onto an NFS file system and running 284.Xr make 1 285with the 286.Fl j 287option, make sure that 288.Xr rpc.lockd 8 289is running on both client and server. 290See 291.Xr rc.conf 5 292on how to make it start at boot time. 293.It Cm toolchain 294Create the build toolchain needed to build the rest of the system. 295For cross-architecture builds, this step creates a cross-toolchain. 296.It Cm universe 297For each architecture, 298execute a 299.Cm buildworld 300followed by a 301.Cm buildkernel 302for all kernels for that architecture, 303including 304.Pa LINT . 305This command takes a long time. 306.It Cm kernels 307Like 308.Cm universe 309with 310.Va WITHOUT_WORLDS 311defined so only the kernels for each architecture are built. 312.It Cm worlds 313Like 314.Cm universe 315with 316.Va WITHOUT_KERNELS 317defined so only the worlds for each architecture are built. 318.It Cm targets 319Print a list of supported 320.Va TARGET 321/ 322.Va TARGET_ARCH 323pairs for world and kernel targets. 324.It Cm tinderbox 325Execute the same targets as 326.Cm universe . 327In addition print a summary of all failed targets at the end and 328exit with an error if there were any. 329.It Cm toolchains 330Create a build toolchain for each architecture supported by the build system. 331.It Cm xdev 332Builds and installs a cross-toolchain and sysroot for the given 333.Sy TARGET 334and 335.Sy TARGET_ARCH . 336The sysroot contains target library and headers. 337The target is an alias for 338.Cm xdev-build 339and 340.Cm xdev-install . 341The location of the files installed can be controlled with 342.Va DESTDIR . 343The target location in 344.Va DESTDIR 345is 346.Pa ${DESTDIR}/${XDTP} 347where 348.Va XDTP 349defaults to 350.Pa /usr/${XDDIR} 351and 352.Va XDDIR 353defaults to 354.Pa ${TARGET_ARCH}-freebsd . 355.It Cm xdev-build 356Builds for the 357.Cm xdev 358target. 359.It Cm xdev-install 360Installs the files for the 361.Cm xdev 362target. 363.It Cm xdev-links 364Installs autoconf-style symlinks to 365.Pa ${DESTDIR}/usr/bin 366pointing into the xdev toolchain in 367.Pa ${DESTDIR}/${XDTP} . 368.El 369.Pp 370Kernel specific build targets in 371.Pa /usr/src 372are: 373.Bl -tag -width ".Cm distributekernel" 374.It Cm buildkernel 375Rebuild the kernel and the kernel modules. 376The object directory can be changed from the default 377.Pa /usr/obj 378by setting the 379.Pa MAKEOBJDIRPREFIX 380.Xr make 1 381variable. 382.It Cm installkernel 383Install the kernel and the kernel modules to directory 384.Pa ${DESTDIR}/boot/kernel , 385renaming any pre-existing directory with this name to 386.Pa kernel.old 387if it contained the currently running kernel. 388The target directory under 389.Pa ${DESTDIR} 390may be modified using the 391.Va INSTKERNNAME 392and 393.Va KODIR 394.Xr make 1 395variables. 396.It Cm distributekernel 397Install the kernel to the directory 398.Pa ${DISTDIR}/kernel/boot/kernel . 399This target is used while building a release; see 400.Xr release 7 . 401.It Cm packagekernel 402Archive the results of 403.Cm distributekernel , 404placing the results in 405.Va DISTDIR . 406This target is used while building a release; see 407.Xr release 7 . 408.It Cm kernel 409Equivalent to 410.Cm buildkernel 411followed by 412.Cm installkernel 413.It Cm kernel-toolchain 414Rebuild the tools needed for kernel compilation. 415Use this if you did not do a 416.Cm buildworld 417first. 418.It Cm reinstallkernel 419Reinstall the kernel and the kernel modules, overwriting the contents 420of the target directory. 421As with the 422.Cm installkernel 423target, the target directory can be specified using the 424.Xr make 1 425variable 426.Va INSTKERNNAME . 427.El 428.Pp 429Convenience targets for cleaning up the install destination directory 430denoted by variable 431.Va DESTDIR 432include: 433.Bl -tag -width ".Cm delete-old-libs" 434.It Cm check-old 435Print a list of old files and directories in the system. 436.It Cm delete-old 437Delete obsolete base system files and directories interactively. 438When 439.Li -DBATCH_DELETE_OLD_FILES 440is specified at the command line, the delete operation will be 441non-interactive. 442The variables 443.Va DESTDIR , 444.Va TARGET_ARCH 445and 446.Va TARGET 447should be set as with 448.Dq Li "make installworld" . 449.It Cm delete-old-libs 450Delete obsolete base system libraries interactively. 451This target should only be used if no third party software uses these 452libraries. 453When 454.Li -DBATCH_DELETE_OLD_FILES 455is specified at the command line, the delete operation will be 456non-interactive. 457The variables 458.Va DESTDIR , 459.Va TARGET_ARCH 460and 461.Va TARGET 462should be set as with 463.Dq Li "make installworld" . 464.El 465.Sh ENVIRONMENT 466Variables that influence all builds include: 467.Bl -tag -width ".Va MAKEOBJDIRPREFIX" 468.It Va DEBUG_FLAGS 469Defines a set of debugging flags that will be used to build all userland 470binaries under 471.Pa /usr/src . 472When 473.Va DEBUG_FLAGS 474is defined, the 475.Cm install 476and 477.Cm installworld 478targets install binaries from the current 479.Va MAKEOBJDIRPREFIX 480without stripping, 481so that debugging information is retained in the installed binaries. 482.It Va DESTDIR 483The directory hierarchy prefix where built objects will be installed. 484If not set, 485.Va DESTDIR 486defaults to the empty string. 487.It Va MAKEOBJDIRPREFIX 488Defines the prefix for directory names in the tree of built objects. 489Defaults to 490.Pa /usr/obj 491if not defined. 492This variable should only be set in the environment or 493.Pa /etc/src-env.conf 494and not via 495.Pa /etc/make.conf 496or 497.Pa /etc/src.conf 498or the command line. 499.It Va WITHOUT_WERROR 500If defined, compiler warnings will not cause the build to halt, 501even if the makefile says otherwise. 502.It Va WITH_CTF 503If defined, the build process will run the DTrace CTF conversion 504tools on built objects. 505.El 506.Pp 507Additionally, builds in 508.Pa /usr/src 509are influenced by the following 510.Xr make 1 511variables: 512.Bl -tag -width ".Va LOCAL_MODULES_DIR" 513.It Va CROSS_TOOLCHAIN 514Requests use of an external toolchain to build either the world or kernel. 515This value of this variable can either be the full path to a file, 516or the base name of a file in 517.Pa ${LOCALBASE}/share/toolchains . 518The file should be a make file which sets variables to request an external 519toolchain such as 520.Va XCC . 521.Pp 522External toolchains are available in ports for both LLVM and GCC/binutils. 523For external toolchains available in ports, 524.Va CROSS_TOOLCHAIN 525should be set to the name of the package. 526LLVM toolchain packages use the name llvm<major version>. 527GCC toolchains provide separate packages for each architecture and use the 528name ${MACHINE_ARCH}-gcc<major version>. 529.It Va KERNCONF 530Overrides which kernel to build and install for the various kernel 531make targets. 532It defaults to 533.Cm GENERIC . 534.It Va KERNCONFDIR 535Overrides the directory in which 536.Va KERNCONF 537and any files included by 538.Va KERNCONF 539should be found. 540Defaults to 541.Pa sys/${ARCH}/conf . 542.It Va KERNFAST 543If set, the build target 544.Cm buildkernel 545defaults to setting 546.Va NO_KERNELCLEAN , 547.Va NO_KERNELCONFIG , 548and 549.Va NO_KERNELOBJ . 550When set to a value other than 551.Cm 1 552then 553.Va KERNCONF 554is set to the value of 555.Va KERNFAST . 556.It Va LOCAL_DIRS 557If set, this variable supplies a list of additional directories relative to 558the root of the source tree to build as part of the 559.Cm everything 560target. 561The directories are built in parallel with each other, 562and with the base system directories. 563Insert a 564.Va .WAIT 565directive at the beginning of the 566.Va LOCAL_DIRS 567list to ensure all base system directories are built first. 568.Va .WAIT 569may also be used as needed elsewhere within the list. 570.It Va LOCAL_ITOOLS 571If set, this variable supplies a list of additional tools that are used by the 572.Cm installworld 573and 574.Cm distributeworld 575targets. 576.It Va LOCAL_LIB_DIRS 577If set, this variable supplies a list of additional directories relative to 578the root of the source tree to build as part of the 579.Cm libraries 580target. 581The directories are built in parallel with each other, 582and with the base system libraries. 583Insert a 584.Va .WAIT 585directive at the beginning of the 586.Va LOCAL_DIRS 587list to ensure all base system libraries are built first. 588.Va .WAIT 589may also be used as needed elsewhere within the list. 590.It Va LOCAL_MTREE 591If set, this variable supplies a list of additional mtrees relative to the 592root of the source tree to use as part of the 593.Cm hierarchy 594target. 595.It Va LOCAL_LEGACY_DIRS 596If set, this variable supplies a list of additional directories relative to 597the root of the source tree to build as part of the 598.Cm legacy 599target. 600.It Va LOCAL_BSTOOL_DIRS 601If set, this variable supplies a list of additional directories relative to 602the root of the source tree to build as part of the 603.Cm bootstrap-tools 604target. 605.It Va LOCAL_TOOL_DIRS 606If set, this variable supplies a list of additional directories relative to 607the root of the source tree to build as part of the 608.Cm build-tools 609target. 610.It Va LOCAL_XTOOL_DIRS 611If set, this variable supplies a list of additional directories relative to 612the root of the source tree to build as part of the 613.Cm cross-tools 614target. 615.It Va PORTS_MODULES 616A list of ports with kernel modules that should be built and installed 617as part of the 618.Cm buildkernel 619and 620.Cm installkernel 621process. 622.Bd -literal -offset indent 623make PORTS_MODULES=emulators/virtualbox-ose-kmod kernel 624.Ed 625.It Va LOCAL_MODULES 626A list of external kernel modules that should be built and installed 627as part of the 628.Cm buildkernel 629and 630.Cm installkernel 631process. 632Defaults to the list of sub-directories of 633.Va LOCAL_MODULES_DIR . 634.It Va LOCAL_MODULES_DIR 635The directory in which to search for the kernel modules specified by 636.Va LOCAL_MODULES . 637Each kernel module should consist of a directory containing a makefile. 638Defaults to 639.Pa ${LOCALBASE}/sys/modules . 640.It Va SRCCONF 641Specify a file to override the default 642.Pa /etc/src.conf . 643The src.conf file controls the components to build. 644See 645.Xr src.conf 5 646.It Va STRIPBIN 647Command to use at install time when stripping binaries. 648Be sure to add any additional tools required to run 649.Va STRIPBIN 650to the 651.Va LOCAL_ITOOLS 652.Xr make 1 653variable before running the 654.Cm distributeworld 655or 656.Cm installworld 657targets. 658See 659.Xr install 1 660for more details. 661.It Va SUBDIR_OVERRIDE 662Override the default list of sub-directories and only build the 663sub-directory named in this variable. 664If combined with 665.Cm buildworld 666then all libraries and includes, and some of the build tools will still build 667as well. 668Specifying 669.Cm -DNO_LIBS , 670and 671.Cm -DWORLDFAST 672will only build the specified directory as was done historically. 673When combined with 674.Cm buildworld 675it is necesarry to override 676.Va LOCAL_LIB_DIRS 677with any custom directories containing libraries. 678This allows building a subset of the system in the same way as 679.Cm buildworld 680does using its sysroot handling. 681This variable can also be useful when debugging failed builds. 682.Bd -literal -offset indent 683make some-target SUBDIR_OVERRIDE=foo/bar 684.Ed 685.It Va SYSDIR 686Specify the location of the kernel source to override the default 687.Pa /usr/src/sys . 688The kernel source is located in the 689.Pa sys 690subdirectory of the source tree checked out from the 691.Pa src.git 692repository. 693.It Va TARGET 694The target hardware platform. 695This is analogous to the 696.Dq Nm uname Fl m 697output. 698This is necessary to cross-build some target architectures. 699For example, cross-building for ARM64 machines requires 700.Va TARGET_ARCH Ns = Ns Li aarch64 701and 702.Va TARGET Ns = Ns Li arm64 . 703If not set, 704.Va TARGET 705defaults to the current hardware platform, unless 706.Va TARGET_ARCH 707is also set, in which case it defaults to the appropriate 708value for that architecture. 709.It Va TARGET_ARCH 710The target machine processor architecture. 711This is analogous to the 712.Dq Nm uname Fl p 713output. 714Set this to cross-build for a different architecture. 715If not set, 716.Va TARGET_ARCH 717defaults to the current machine architecture, unless 718.Va TARGET 719is also set, in which case it defaults to the appropriate 720value for that platform. 721Typically, one only needs to set 722.Va TARGET . 723.El 724.Pp 725Builds under directory 726.Pa /usr/src 727are also influenced by defining one or more of the following symbols, 728using the 729.Fl D 730option of 731.Xr make 1 : 732.Bl -tag -width ".Va LOADER_DEFAULT_INTERP" 733.It Va LOADER_DEFAULT_INTERP 734Defines what interpreter the default loader program will have. 735Valid values include 736.Dq 4th , 737.Dq lua , 738and 739.Dq simp . 740This creates the default link for 741.Pa /boot/loader 742to the loader with that interpreter. 743It also determines what interpreter is compiled into 744.Pa userboot . 745.It Va NO_CLEANDIR 746If set, the build targets that clean parts of the object tree use the 747equivalent of 748.Dq make clean 749instead of 750.Dq make cleandir . 751.It Va NO_CLEAN 752If set, no object tree files are cleaned at all. 753This is the default when 754.Va WITH_META_MODE 755is used with 756.Xr filemon 4 757loaded. 758See 759.Xr src.conf 5 760for more details. 761Setting 762.Va NO_CLEAN 763implies 764.Va NO_KERNELCLEAN , 765so when 766.Va NO_CLEAN 767is set no kernel objects are cleaned either. 768.It Va NO_CTF 769If set, the build process does not run the DTrace CTF conversion tools 770on built objects. 771.It Va NO_SHARE 772If set, the build does not descend into the 773.Pa /usr/src/share 774subdirectory (i.e., manual pages, locale data files, timezone data files and 775other 776.Pa /usr/src/share 777files will not be rebuild from their sources). 778.It Va NO_KERNELCLEAN 779If set, the build process does not run 780.Dq make clean 781as part of the 782.Cm buildkernel 783target. 784.It Va NO_KERNELCONFIG 785If set, the build process does not run 786.Xr config 8 787as part of the 788.Cm buildkernel 789target. 790.It Va NO_KERNELOBJ 791If set, the build process does not run 792.Dq make obj 793as part of the 794.Cm buildkernel 795target. 796.It Va NO_LIBS 797If set, the libraries phase will be skipped. 798.It Va NO_OBJWALK 799If set, no object directories will be created. 800This should only be used if object directories were created in a 801previous build and no new directories are connected. 802.It Va UNIVERSE_TOOLCHAIN 803Requests use of the toolchain built as part of the 804.Cm universe 805target as an external toolchain. 806.It Va WORLDFAST 807If set, the build target 808.Cm buildworld 809defaults to setting 810.Va NO_CLEAN , 811.Va NO_OBJWALK , 812and will skip most bootstrap phases. 813It will only bootstrap libraries and build all of userland. 814This option should be used only when it is known that none of the bootstrap 815needs changed and that no new directories have been connected to the build. 816.El 817.Pp 818Builds under directory 819.Pa /usr/doc 820are influenced by the following 821.Xr make 1 822variables: 823.Bl -tag -width ".Va DOC_LANG" 824.It Va DOC_LANG 825If set, restricts the documentation build to the language subdirectories 826specified as its content. 827The default action is to build documentation for all languages. 828.El 829.Pp 830Builds using the 831.Cm universe 832and related targets are influenced by the following 833.Xr make 1 834variables: 835.Bl -tag -width ".Va USE_GCC_TOOLCHAINS" 836.It Va JFLAG 837Pass the value of this variable to each 838.Xr make 1 839invocation used to build worlds and kernels. 840This can be used to enable multiple jobs within a single architecture's build 841while still building each architecture serially. 842.It Va MAKE_JUST_KERNELS 843Only build kernels for each supported architecture. 844.It Va MAKE_JUST_WORLDS 845Only build worlds for each supported architecture. 846.It Va WITHOUT_WORLDS 847Only build kernels for each supported architecture. 848.It Va WITHOUT_KERNELS 849Only build worlds for each supported architecture. 850.It Va UNIVERSE_TARGET 851Execute the specified 852.Xr make 1 853target for each supported architecture instead of the default action of 854building a world and one or more kernels. 855This variable implies 856.Va WITHOUT_KERNELS . 857.It Va USE_GCC_TOOLCHAINS 858Use external GCC toolchains to build the requested targets. 859If the required toolchain package for a supported architecture is not installed, 860the build for that architecture is skipped. 861.It Va TARGETS 862Only build the listed targets instead of each supported architecture. 863.It Va EXTRA_TARGETS 864In addition to the supported architectures, build the semi-supported 865architectures. 866A semi-supported architecture has build support in the 867.Fx 868tree, but receives significantly less testing and is generally for 869fringe uses that do not have a wide appeal. 870.El 871.Sh FILES 872.Bl -tag -width ".Pa /usr/share/examples/etc/make.conf" -compact 873.It Pa /usr/doc/Makefile 874.It Pa /usr/doc/share/mk/doc.project.mk 875.It Pa /usr/ports/Mk/bsd.port.mk 876.It Pa /usr/ports/Mk/bsd.sites.mk 877.It Pa /usr/share/examples/etc/make.conf 878.It Pa /usr/src/Makefile 879.It Pa /usr/src/Makefile.inc1 880.El 881.Sh EXAMPLES 882For an 883.Dq approved 884method of updating your system from the latest sources, please see the 885.Sx COMMON ITEMS 886section in 887.Pa src/UPDATING . 888.Pp 889The following sequence of commands can be used to cross-build the 890system for the armv6 architecture on an amd64 host: 891.Bd -literal -offset indent 892cd /usr/src 893make TARGET_ARCH=armv6 buildworld buildkernel 894make TARGET_ARCH=armv6 DESTDIR=/clients/arm installworld installkernel 895.Ed 896.Sh HISTORY 897The 898.Nm 899manpage first appeared in 900.Fx 4.3 . 901.Sh SEE ALSO 902.Xr cc 1 , 903.Xr install 1 , 904.Xr make 1 , 905.Xr make.conf 5 , 906.Xr src.conf 5 , 907.Xr arch 7 , 908.Xr pkg 7 , 909.Xr ports 7 , 910.Xr release 7 , 911.Xr tests 7 , 912.Xr config 8 , 913.Xr etcupdate 8 , 914.Xr reboot 8 , 915.Xr shutdown 8 916.Sh AUTHORS 917.An Mike W. Meyer Aq Mt mwm@mired.org 918