Home | History | Annotate | Line # | Download | only in src
BUILDING revision 1.155
      1 BUILDING(8)                 System Manager's Manual                BUILDING(8)
      2 
      3 NAME
      4      BUILDING - Procedure for building NetBSD from source code
      5 
      6 REQUIREMENTS
      7      NetBSD is designed to be buildable on most POSIX-compliant host systems.
      8      The basic build procedure is the same whether compiling natively (on the
      9      same NetBSD architecture) or cross compiling (on another architecture or
     10      OS).
     11 
     12      This source tree contains a special subtree, "tools", which uses the host
     13      system to create a build toolchain for the target architecture.  The host
     14      system must have at least C and C++ compilers in order to create the
     15      toolchain (make is not required); all other tools are created as part of
     16      the NetBSD build process.  (See the Environment variables section below
     17      if you need to override or manually select your compilers.)
     18 
     19      Note: Within this document, cross-references to manual pages are to the
     20      NetBSD manual pages, not the host system manual pages.  The mdoc(7)
     21      source to the NetBSD manual pages can be found within the source tree,
     22      and these and can be formatted with mandoc(1) or nroff(1) if those are
     23      available on the host system.  The NetBSD manual pages are also available
     24      at https://man.netbsd.org
     25 
     26 FILES
     27    Source tree layout
     28      BUILDING       This document (in plaintext).  Generated from
     29                     doc/BUILDING.mdoc.
     30 
     31      Makefile       The main Makefile for NetBSD; should only be run for
     32                     native builds with an appropriately up-to-date version of
     33                     NetBSD make(1).  Intended for expert use with knowledge of
     34                     its shortcomings, it has been superseded by the build.sh
     35                     shell script as the recommended means for building NetBSD.
     36 
     37      UPDATING       Special notes for updating from an earlier revision of
     38                     NetBSD.  It is important to read this file before every
     39                     build of an updated source tree.
     40 
     41      build.sh       Bourne-compatible shell script used for building the host
     42                     build tools and the NetBSD system from scratch.  Can be
     43                     used for both native and cross builds, and should be used
     44                     instead of make(1) as it performs additional checks to
     45                     prevent common issues going undetected, such as building
     46                     with an outdated version of make(1).
     47 
     48      crypto/dist/, dist/, gnu/dist/
     49                     Sources imported verbatim from third parties, without
     50                     mangling the existing build structure.  Other source trees
     51                     in bin through usr.sbin use the NetBSD make(1) "reachover"
     52                     Makefile semantics when building these programs for a
     53                     native host.
     54 
     55      distrib/, etc/
     56                     Sources for items used when making a full release
     57                     snapshot, such as files installed in DESTDIR/etc on the
     58                     destination system, boot media, and release notes.
     59 
     60      doc/BUILDING.mdoc
     61                     The source to this document, in mdoc(7) format.  Used to
     62                     generate BUILDING.
     63 
     64      external, sys/external
     65                     Sources and build infrastructure for components imported
     66                     (mostly) unchanged from upstream maintainers, sorted by
     67                     applicable license.  This is (slowly) replacing the
     68                     crypto/dist, dist, and gnu/dist directories.
     69 
     70      external/mit/xorg/
     71                     "Reachover" build structure for modular Xorg; the source
     72                     is in X11SRCDIR.
     73 
     74      regress/, tests/
     75                     Regression test harness.  Can be cross-compiled, but only
     76                     run natively.  tests/ uses the atf(7) test framework;
     77                     regress/ contains older tests that have not yet been
     78                     migrated to atf(7).
     79 
     80      sys/           NetBSD kernel sources.
     81 
     82      tools/         "Reachover" build structure for the host build tools.
     83                     This has a special method of determining out-of-date
     84                     status.
     85 
     86      tools/compat/README
     87                     Special notes for cross-hosting a NetBSD build on non-
     88                     NetBSD platforms.
     89 
     90      Other directories including bin/ ... usr.sbin/
     91                     Sources to the NetBSD userland (non-kernel) programs.  If
     92                     any of these directories are missing, they will be skipped
     93                     during the build.
     94 
     95    Build tree layout
     96      The NetBSD build tree is described in hier(7) (mdoc(7) source in
     97      share/man/man7/hier.7), and the release layout is described in release(7)
     98      (mdoc(7) source in share/man/man7/release.7).
     99 
    100 CONFIGURATION
    101    Environment variables
    102      Several environment variables control the behaviour of NetBSD builds.
    103 
    104      HOST_CC         Path name to C compiler used to create the toolchain.
    105 
    106                      Default: "cc".
    107 
    108      HOST_CFLAGS     Flags passed to the host C compiler.
    109 
    110                      Default: "-O".
    111 
    112      HOST_CPPFLAGS   Flags passed to the host C/C++ pre-processor.
    113 
    114                      Default: Unset.
    115 
    116      HOST_CXX        Path name to C++ compiler used to create the toolchain.
    117 
    118                      Default: Unset, but defaults to "c++" where required.
    119 
    120      HOST_CXXFLAGS   Flags passed to the host C++ compiler.
    121 
    122                      Default: Unset.
    123 
    124      HOST_SH         Path name to a shell available on the host system and
    125                      suitable for use during the build.  The NetBSD build
    126                      system requires a modern Bourne-like shell with POSIX-
    127                      compliant features, and also requires support for the
    128                      "local" keyword to declare local variables in shell
    129                      functions (which is a widely-implemented but non-
    130                      standardised feature).
    131 
    132                      Depending on the host system, a suitable shell may be
    133                      /bin/sh, /usr/xpg4/bin/sh, /bin/ksh (provided it is a
    134                      variant of ksh that supports the "local" keyword, such as
    135                      ksh88, but not ksh93), or /usr/local/bin/bash.
    136 
    137                      Most parts of the build require HOST_SH to be an absolute
    138                      path; however, build.sh allows it to be a simple command
    139                      name, which will be converted to an absolute path by
    140                      searching the PATH.
    141 
    142                      Default: "sh".
    143 
    144      INSTALLBOOT_UBOOT_PATHS
    145                      A colon-separated list of search paths used by
    146                      installboot(8) to find U-Boot packages.
    147 
    148                      Default: Unset.
    149 
    150      MACHINE         Machine type, e.g., "macppc".
    151 
    152                      Default: Unset.
    153 
    154      MACHINE_ARCH    Machine architecture, e.g., "powerpc".
    155 
    156                      Default: Unset.
    157 
    158      MAKE            Path name to invoke make(1) as.
    159 
    160                      Default: "make".
    161 
    162      MAKECONF        The name of the make(1) configuration file.  See "make"
    163                      variables and mk.conf(5).
    164 
    165                      Note: Only settable in the process environment.
    166 
    167                      Default: "/etc/mk.conf".
    168 
    169      MAKEFLAGS       Flags to invoke make(1) with.
    170 
    171                      Note: build.sh ignores the value of MAKEFLAGS passed in
    172                      the environment, but allows MAKEFLAGS to be set via the
    173                      -V option.
    174 
    175                      Default: "-X" on systems with a small ARG_MAX (Cygwin,
    176                      Darwin, FreeBSD); otherwise unset.
    177 
    178      MAKEOBJDIR      Directory to use as the .OBJDIR for the current
    179                      directory.  The value is subjected to variable expansion
    180                      by make(1).  Typical usage is to set this variable to a
    181                      value involving the use of `${.CURDIR:S...}' or
    182                      `${.CURDIR:C...}', to derive the value of .OBJDIR from
    183                      the value of .CURDIR.  Used only if MAKEOBJDIRPREFIX is
    184                      not defined.
    185 
    186                      Note: MAKEOBJDIR can be provided only in the environment
    187                      or via the -O flag of build.sh; it cannot usefully be set
    188                      inside a Makefile, including in mk.conf(5) or MAKECONF.
    189 
    190                      Default: Unset.
    191 
    192      MAKEOBJDIRPREFIX
    193                      Top level directory of the object directory tree.  The
    194                      value is subjected to variable expansion by make(1).
    195                      build.sh will create the ${MAKEOBJDIRPREFIX} directory if
    196                      necessary, but if make(1) is used without build.sh, then
    197                      rules in <bsd.obj.mk> will abort the build if the
    198                      ${MAKEOBJDIRPREFIX} directory does not exist.  If the
    199                      value is defined and valid, then
    200                      ${MAKEOBJDIRPREFIX}/${.CURDIR} is used as the .OBJDIR for
    201                      the current directory.  The current directory may be read
    202                      only.
    203 
    204                      Note: MAKEOBJDIRPREFIX can be provided only in the
    205                      environment or via the -M flag of build.sh; it cannot
    206                      usefully be set inside a Makefile, including in
    207                      mk.conf(5) or MAKECONF.
    208 
    209                      Default: Unset.
    210 
    211      TMPDIR          Top-level directory to store temporary directories used
    212                      by build.sh before paths to other directories such as
    213                      .OBJDIR can be determined.
    214 
    215                      Note: Must support execution of binaries.  I.e., without
    216                      mount(8)'s -o noexec option.
    217 
    218                      Default: "/tmp".
    219 
    220    "make" variables
    221      Variables control the behavior of NetBSD builds are documented in
    222      mk.conf(5) (mdoc(7) source in share/man/man5/mk.conf.5).
    223 
    224      Unless otherwise specified, these variables may be set in either the
    225      process environment or the make(1) configuration file mk.conf(5)
    226      specified by MAKECONF.
    227 
    228 BUILDING
    229    "make" command line options
    230      This is not a summary of all the options available to make(1); only the
    231      options used most frequently with NetBSD builds are listed here.
    232 
    233      -j njob    Run up to njob make(1) subjobs in parallel.  Makefiles should
    234                 use .WAIT or have explicit dependencies as necessary to
    235                 enforce build ordering.
    236 
    237      -m dir     Specify the default directory for searching for system
    238                 Makefile segments, mainly the <bsd.*.mk> files.  When building
    239                 any full NetBSD source tree, this should be set to the
    240                 "share/mk" directory in the source tree.  This is set
    241                 automatically when building from the top level, or when using
    242                 build.sh.
    243 
    244      -n         Show the commands that would have been executed, but do not
    245                 actually execute them.  This will still cause recursion to
    246                 take place.
    247 
    248      -V var     Show make(1)'s idea of the value of var.  Does not build any
    249                 targets.
    250 
    251      var=value  Set the variable var to value, overriding any setting
    252                 specified by the process environment, the MAKECONF
    253                 configuration file, or the system Makefile segments.
    254 
    255    "make" targets
    256      These default targets may be built by running make(1) in any subtree of
    257      the NetBSD source code.  It is recommended that none of these be used
    258      from the top level Makefile; as a specific exception, "make obj" and
    259      "make cleandir" are useful in that context.
    260 
    261      all        Build programs, libraries, and preformatted documentation.
    262 
    263      clean      Remove program and library object code files.
    264 
    265      cleandir   Same as clean, but also remove preformatted documentation,
    266                 dependency files generated by "make depend", and any other
    267                 files known to be created at build time.
    268 
    269      depend     Create dependency files (.depend) containing more detailed
    270                 information about the dependencies of source code on header
    271                 files.  Allows programs to be recompiled automatically when a
    272                 dependency changes.
    273 
    274      dependall  Does a "make depend" immediately followed by a "make all".
    275                 This improves cache locality of the build since both passes
    276                 read the source files in their entirety.
    277 
    278      distclean  Synonym for cleandir.
    279 
    280      includes   Build and install system header files.  Typically needed
    281                 before any system libraries or programs can be built.
    282 
    283      install    Install programs, libraries, and documentation into DESTDIR.
    284                 Few files will be installed to DESTDIR/dev, DESTDIR/etc,
    285                 DESTDIR/root or DESTDIR/var in order to prevent user supplied
    286                 configuration data from being overwritten.
    287 
    288      lint       Run lint(1) against the C source code, where appropriate, and
    289                 generate system-installed lint libraries.
    290 
    291      obj        Create object directories to be used for built files, instead
    292                 of building directly in the source tree.
    293 
    294      tags       Create ctags(1) searchable function lists usable by the ex(1)
    295                 and vi(1) text editors.
    296 
    297    "make" targets for the top level
    298      Additional make(1) targets are usable specifically from the top source
    299      level to facilitate building the entire NetBSD source tree.
    300 
    301      build         Build the entire NetBSD system (except the kernel).  This
    302                    orders portions of the source tree such that prerequisites
    303                    will be built in the proper order.
    304 
    305      distribution  Do a "make build", and then install a full distribution
    306                    (which does not include a kernel) into DESTDIR, including
    307                    files in DESTDIR/dev, DESTDIR/etc, DESTDIR/root and
    308                    DESTDIR/var.
    309 
    310      buildworld    As per "make distribution", except that it ensures that
    311                    DESTDIR is not the root directory.
    312 
    313      installworld  Install the distribution from DESTDIR to INSTALLWORLDDIR,
    314                    which defaults to the root directory.  Ensures that
    315                    INSTALLWORLDDIR is not the root directory if cross
    316                    compiling.
    317 
    318                    The INSTALLSETS environment variable may be set to a space-
    319                    separated list of distribution sets to be installed.  By
    320                    default, all sets except "etc" and "xetc" are installed, so
    321                    most files in INSTALLWORLDDIR/etc will not be installed or
    322                    modified.
    323 
    324                    Note: Before performing this operation with
    325                    INSTALLWORLDDIR=/, it is highly recommended that you
    326                    upgrade your kernel and reboot.  After performing this
    327                    operation, it is recommended that you use etcupdate(8) to
    328                    update files in INSTALLWORLDDIR/etc, and postinstall(8) to
    329                    check for or fix inconsistencies.
    330 
    331      sets          Create distribution sets from DESTDIR into
    332                    RELEASEDIR/RELEASEMACHINEDIR/binary/sets.  Should be run
    333                    after "make distribution", as "make build" alone does not
    334                    install all of the required files.
    335 
    336      sourcesets    Create source sets of the source tree into
    337                    RELEASEDIR/source/sets.
    338 
    339      syspkgs       Create syspkgs from DESTDIR into
    340                    RELEASEDIR/RELEASEMACHINEDIR/binary/syspkgs.  Should be run
    341                    after "make distribution", as "make build" alone does not
    342                    install all of the required files.
    343 
    344      release       Do a "make distribution", build kernels, distribution
    345                    media, and install sets (this as per "make sets"), and then
    346                    package the system into a standard release layout as
    347                    described by release(7).  This requires that RELEASEDIR be
    348                    set (see above).
    349 
    350      iso-image     Create a NetBSD installation CD-ROM image in the
    351                    RELEASEDIR/images directory.  The CD-ROM file system will
    352                    have a layout as described in release(7).
    353 
    354                    For most machine types, the CD-ROM will be bootable, and
    355                    will automatically run the sysinst(8) menu-based
    356                    installation program, which can be used to install or
    357                    upgrade a NetBSD system.  Bootable CD-ROMs also contain
    358                    tools that may be useful in repairing a damaged NetBSD
    359                    installation.
    360 
    361                    Before "make iso-image" is attempted, RELEASEDIR must be
    362                    populated by "make release" or equivalent.
    363 
    364                    Note: Other, smaller, CD-ROM images may be created in the
    365                    RELEASEDIR/RELEASEMACHINEDIR/installation/cdrom directory
    366                    by "make release".  These smaller images usually contain
    367                    the same tools as the larger images in RELEASEDIR/images,
    368                    but do not contain additional content such as the
    369                    distribution sets.
    370 
    371                    Note: The mac68k port still uses an older method of
    372                    creating CD-ROM images.  This requires the mkisofs(1)
    373                    utility, which is not part of NetBSD, but which can be
    374                    installed from pkgsrc/sysutils/cdrtools.
    375 
    376      iso-image-source
    377                    Create a NetBSD installation CD-ROM image in the
    378                    RELEASEDIR/images directory.  The CD-ROM file system will
    379                    have a layout as described in release(7).  It will have top
    380                    level directories for the machine type and source.
    381 
    382                    For most machine types, the CD-ROM will be bootable, and
    383                    will automatically run the sysinst(8) menu-based
    384                    installation program, which can be used to install or
    385                    upgrade a NetBSD system.  Bootable CD-ROMs also contain
    386                    tools that may be useful in repairing a damaged NetBSD
    387                    installation.
    388 
    389                    Before "make iso-image-source" is attempted, RELEASEDIR
    390                    must be populated by "make sourcesets release" or
    391                    equivalent.
    392 
    393                    Note: Other, smaller, CD-ROM images may be created in the
    394                    RELEASEDIR/RELEASEMACHINEDIR/installation/cdrom directory
    395                    by "make release".  These smaller images usually contain
    396                    the same tools as the larger images in RELEASEDIR/images,
    397                    but do not contain additional content such as the
    398                    distribution sets.
    399 
    400                    Note: The mac68k port still uses an older method of
    401                    creating CD-ROM images.  This requires the mkisofs(1)
    402                    utility, which is not part of NetBSD, but which can be
    403                    installed from pkgsrc/sysutils/cdrtools.
    404 
    405      install-image
    406                    Create a bootable NetBSD installation disk image in the
    407                    RELEASEDIR/images directory.  The installation disk image
    408                    is suitable for copying to bootable USB flash memory
    409                    sticks, etc., for machines which are able to boot from such
    410                    devices.  The file system in the bootable disk image will
    411                    have a layout as described in release(7).
    412 
    413                    The installation image is bootable, and will automatically
    414                    run the sysinst(8) menu-based installation program, which
    415                    can be used to install or upgrade a NetBSD system.  The
    416                    image also contains tools that may be useful in repairing a
    417                    damaged NetBSD installation.
    418 
    419                    Before "make install-image" is attempted, RELEASEDIR must
    420                    be populated by "make release" or equivalent.  The build
    421                    must have been performed with MKUNPRIVED=yes because "make
    422                    install-image" relies on information in DESTDIR/METALOG.
    423 
    424      live-image    Create NetBSD live images in the RELEASEDIR/images
    425                    directory.  The live image contains all necessary files to
    426                    boot NetBSD up to multi-user mode, including all files
    427                    which should be extracted during installation, NetBSD
    428                    disklabel, bootloaders, etc.
    429 
    430                    The live image is suitable for use as a disk image in
    431                    virtual machine environments such as QEMU, and also useful
    432                    to boot NetBSD from a USB flash memory stick on a real
    433                    machine, without the need for installation.
    434 
    435                    Before "make live-image" is attempted, RELEASEDIR must be
    436                    populated by "make release" or equivalent.  The build must
    437                    have been performed with MKUNPRIVED=yes because "make
    438                    install-image" relies on information in DESTDIR/METALOG.
    439 
    440      regression-tests
    441                    Can only be run after building the regression tests in the
    442                    directory "regress".  Runs those compiled regression tests
    443                    on the local host.
    444 
    445                    Note: Most tests are now managed instead using atf(7); this
    446                    target should probably run those as well but currently does
    447                    not.
    448 
    449    The "build.sh" script
    450      This script file is a shell script designed to build the entire NetBSD
    451      system on any host with a suitable modern shell and some common
    452      utilities.  The required shell features are described under the HOST_SH
    453      variable.
    454 
    455      If a host system's default shell does support the required features, then
    456      we suggest that you explicitly specify a suitable shell using a command
    457      like
    458 
    459            /path/to/suitable/shell build.sh [options]
    460 
    461      The above command will usually enable build.sh to automatically set
    462      HOST_SH=/path/to/suitable/shell, but if that fails, then the following
    463      set of commands may be used instead:
    464 
    465            HOST_SH=/path/to/suitable/shell
    466            export HOST_SH
    467            ${HOST_SH} build.sh [options]
    468 
    469      If build.sh detects that it is being executed under an unsuitable shell,
    470      it attempts to exec a suitable shell instead, or shows an error message.
    471      If HOST_SH is not set explicitly, then build.sh sets a default using
    472      heuristics dependent on the host platform, or from the shell under which
    473      build.sh is executed (if that can be determined), or using the first copy
    474      of sh found in PATH.
    475 
    476      All cross-compile builds, and most native builds, of the entire system
    477      should make use of build.sh rather than just running "make".  This way,
    478      the make(1) program will be bootstrapped properly, in case the host
    479      system has an older or incompatible "make" program.
    480 
    481      When compiling the entire system via build.sh, many make(1) variables are
    482      set for you in order to help encapsulate the build process.  In the list
    483      of options below, variables that are automatically set by build.sh are
    484      noted where applicable.
    485 
    486      The following operations are supported by build.sh:
    487 
    488      build         Build the system as per "make build".  Before the main part
    489                    of the build commences, this command runs the obj operation
    490                    (unless the -o option is given), "make cleandir" (unless
    491                    the -u option is given), and the tools operation.
    492 
    493      distribution  Build a full distribution as per "make distribution".  This
    494                    command first runs the build operation.
    495 
    496      release       Build a full release as per "make release".  This command
    497                    first runs the distribution operation.
    498 
    499      help          Show a help message, and exit.
    500 
    501      makewrapper   Create the nbmake-MACHINE wrapper.  This operation is
    502                    automatically performed for any of the other operations.
    503 
    504      cleandir      Perform "make cleandir".
    505 
    506      obj           Perform "make obj".
    507 
    508      tools         Build and install the host tools from src/tools.  This
    509                    command will first run "make obj" and "make cleandir" in
    510                    the tools subdirectory unless the -o or -u options
    511                    (respectively) are given.
    512 
    513      install=idir  Install the contents of DESTDIR to idir, using "make
    514                    installworld".
    515 
    516                    Note: Files that are part of the "etc" or "xetc" sets will
    517                    not be installed, unless overridden by the INSTALLSETS
    518                    environment variable.
    519 
    520      kernel=kconf  Build a new kernel.  The kconf argument is the name of a
    521                    configuration file suitable for use by config(1).  If kconf
    522                    does not contain any `/' characters, the configuration file
    523                    is expected to be found in the KERNCONFDIR directory, which
    524                    is typically sys/arch/MACHINE/conf.  The new kernel will be
    525                    built in a subdirectory of KERNOBJDIR, which is typically
    526                    sys/arch/MACHINE/compile or an associated object directory.
    527 
    528                    This command does not imply the tools command; run the
    529                    tools command first unless it is certain that the tools
    530                    already exist and are up to date.
    531 
    532                    This command will run "make cleandir" on the kernel in
    533                    question first unless the -u option is given.
    534 
    535      kernel.gdb=kconf
    536                    Build a new kernel with debug information.  Similar to the
    537                    above kernel=kconf operation, but creates a netbsd.gdb file
    538                    alongside of the kernel netbsd, which contains a full
    539                    symbol table and can be used for debugging (for example
    540                    with a cross-gdb built by MKCROSSGDB).
    541 
    542      kernels       This command will build all kernels defined in port
    543                    specific release build procedure.
    544 
    545                    This command internally calls the kernel=kconf operation
    546                    for each found kernel configuration file.
    547 
    548      modules       This command will build kernel modules and install them
    549                    into DESTDIR.
    550 
    551      releasekernel=kconf
    552                    Install a gzip(1)ed copy of the kernel previously built by
    553                    kernel=kconf into
    554                    RELEASEDIR/RELEASEMACHINEDIR/binary/kernel, usually as
    555                    netbsd-kconf.gz, although the "netbsd" prefix is determined
    556                    from the "config" directives in kconf.
    557 
    558      sets          Perform "make sets".
    559 
    560      sourcesets    Perform "make sourcesets".
    561 
    562      syspkgs       Perform "make syspkgs".
    563 
    564      iso-image     Perform "make iso-image".
    565 
    566      iso-image-source
    567                    Perform "make iso-image-source".
    568 
    569      install-image
    570                    Perform "make install-image".
    571 
    572      live-image    Perform "make live-image".
    573 
    574      list-arch     Show a list of valid MACHINE and MACHINE_ARCH settings, the
    575                    default MACHINE_ARCH for each MACHINE, and aliases for
    576                    MACHINE/MACHINE_ARCH pairs, and then exits.  The -m or -a
    577                    options (or both) may be used to specify glob patterns that
    578                    will be used to narrow the list of results; for example,
    579                    "build.sh -m 'evb*' -a '*arm*' list-arch" will list all
    580                    known MACHINE/MACHINE_ARCH values in which either MACHINE
    581                    or ALIAS matches the pattern `evb*', and MACHINE_ARCH
    582                    matches the pattern `*arm*'.
    583 
    584      The following command line options alter the behaviour of the build.sh
    585      operations described above:
    586 
    587      -a arch   Set the value of MACHINE_ARCH to arch.  See the -m option for
    588                more information.
    589 
    590      -B buildid
    591                Set the value of BUILDID to buildid.  This will also append the
    592                build identifier to the name of the "make" wrapper script so
    593                that the resulting name is of the form
    594                "nbmake-MACHINE-BUILDID".
    595 
    596      -C cdextras
    597                Append cdextras to the CDEXTRA variable, which is a space-
    598                separated list of files or directories that will be added to
    599                the CD-ROM image that may be create by the "iso-image" or
    600                "iso-image-source" operations.  Files will be added to the root
    601                of the CD-ROM image, whereas directories will be copied
    602                recursively.  If relative paths are specified, they will be
    603                converted to absolute paths before being used.  Multiple paths
    604                may be specified via multiple -C options, or via a single
    605                option whose argument contains multiple space-separated paths.
    606 
    607      -c compiler
    608                Select the compiler for the toolchain to build NetBSD and for
    609                inclusion in the NetBSD distribution.  Supported choices:
    610 
    611                      clang
    612 
    613                      gcc [default]
    614 
    615                The compiler used to build the toolchain can be different; see
    616                HOST_CC and HOST_CXX.
    617 
    618      -D dest   Set the value of DESTDIR to dest.  If a relative path is
    619                specified, it will be converted to an absolute path before
    620                being used.
    621 
    622      -E        Set `expert' mode.  This overrides various sanity checks, and
    623                allows: DESTDIR does not have to be set to a non-root path for
    624                builds, and MKUNPRIVED=yes does not have to be set when
    625                building as a non-root user.
    626 
    627                Note: It is highly recommended that you know what you are doing
    628                when you use this option.
    629 
    630      -h        Show a help message, and exit.
    631 
    632      -j njob   Run up to njob make(1) subjobs in parallel; passed through to
    633                make(1).  If you see failures for reasons other than running
    634                out of memory while using build.sh with -j, please save
    635                complete build logs so the failures can be analyzed.
    636 
    637                To achieve the fastest builds, -j values between (1 + the
    638                number of CPUs) and (2 * the number of CPUs) are recommended.
    639                Use lower values on machines with limited memory or I/O
    640                bandwidth.
    641 
    642      -M obj    Set MAKEOBJDIRPREFIX to obj.  Unsets MAKEOBJDIR.  See "-O obj"
    643                for more information.
    644 
    645                For instance, if the source directory is /usr/src, a setting of
    646                "-M /usr/obj" will place build-time files under
    647                /usr/obj/usr/src/bin, /usr/obj/usr/src/lib,
    648                /usr/obj/usr/src/usr.bin, and so forth.
    649 
    650                If a relative path is specified, it will be converted to an
    651                absolute path before being used.  build.sh imposes the
    652                restriction that the argument to the -M option must not begin
    653                with a "$" (dollar sign) character; otherwise it would be too
    654                difficult to determine whether the value is an absolute or a
    655                relative path.  If the directory does not already exist,
    656                build.sh will create it.
    657 
    658      -m mach   Set the value of MACHINE to mach, unless the mach argument is
    659                an alias that refers to a MACHINE/MACHINE_ARCH pair, in which
    660                case both MACHINE and MACHINE_ARCH are set from the alias.
    661                Such aliases are interpreted entirely by build.sh; they are not
    662                used by any other part of the build system.  The MACHINE_ARCH
    663                setting implied by mach will override any value of MACHINE_ARCH
    664                in the process environment, but will not override a value set
    665                by the -a option.  All cross builds require -m, but if unset on
    666                a NetBSD host, the host's value of MACHINE will be detected and
    667                used automatically.
    668 
    669                See the list-arch operation for a way to get a list of valid
    670                MACHINE and MACHINE_ARCH settings.
    671 
    672      -N noiselevel
    673                Set the "noisyness" level of the build, by setting MAKEVERBOSE
    674                to noiselevel.
    675 
    676      -n        Show the commands that would be executed by build.sh, but do
    677                not make any changes.  This is similar in concept to "make -n".
    678 
    679      -O obj    Create an appropriate transform macro for MAKEOBJDIR that will
    680                place the built object files under obj.  Unsets
    681                MAKEOBJDIRPREFIX.
    682 
    683                For instance, a setting of "-O /usr/obj" will place build-time
    684                files under /usr/obj/bin, /usr/obj/lib, /usr/obj/usr.bin, and
    685                so forth.
    686 
    687                If a relative path is specified, it will be converted to an
    688                absolute path before being used.  build.sh imposes the
    689                restriction that the argument to the -O option must not contain
    690                a "$" (dollar sign) character.  If the directory does not
    691                already exist, build.sh will create it.
    692 
    693                In normal use, exactly one of the -M or -O options should be
    694                specified.  If neither -M nor -O is specified, then a default
    695                object directory will be chosen according to rules in
    696                <bsd.obj.mk>.  Relying on this default is not recommended
    697                because it is determined by complex rules that are influenced
    698                by the values of several variables and by the location of the
    699                source directory.
    700 
    701                Note: Placing the obj directory location outside of the default
    702                source tree hierarchy makes it easier to manually clear out old
    703                files in the event the "make cleandir" operation is unable to
    704                do so.  (See CAVEATS below.)
    705 
    706                Note: The use of one of -M or -O is the only means of building
    707                multiple machine architecture userlands from the same source
    708                tree without cleaning between builds (in which case, one would
    709                specify distinct obj locations for each).
    710 
    711      -o        Set the value of MKOBJDIRS to "no".  Otherwise, it will be
    712                automatically set to "yes".  This default is opposite to the
    713                behaviour when not using build.sh.
    714 
    715      -P        Set the value of MKREPRO and MKREPRO_TIMESTAMP to the latest
    716                source CVS timestamp for reproducible builds.
    717 
    718      -R rel    Set the value of RELEASEDIR to rel.  If a relative path is
    719                specified, it will be converted to an absolute path before
    720                being used.
    721 
    722      -r        Remove the contents of DESTDIR and TOOLDIR before building
    723                (provides a clean starting point).  This will skip deleting
    724                DESTDIR if building on a native system to the root directory.
    725 
    726      -S seed   Change the value of BUILDSEED to seed.  This should rarely be
    727                necessary.
    728 
    729      -T tools  Set the value of TOOLDIR to tools.  If a relative path is
    730                specified, it will be converted to an absolute path before
    731                being used.  If set, the bootstrap "make" will only be rebuilt
    732                if the source files for make(1) have changed.
    733 
    734      -U        Set MKUNPRIVED=yes.
    735 
    736      -u        Set MKUPDATE=yes.
    737 
    738      -V var=[value]
    739                Set the environment variable var to an optional value.  This is
    740                propagated to the nbmake wrapper.
    741 
    742      -w wrapper
    743                Create the nbmake wrapper script (see below) in a custom
    744                location, specified by wrapper.  This allows, for instance, to
    745                place the wrapper in PATH automatically.
    746 
    747                Note: wrapper is the full name of the file, not just a
    748                directory name.  If a relative path is specified, it will be
    749                converted to an absolute path before being used.
    750 
    751      -X x11src
    752                Set the value of X11SRCDIR to x11src.  If a relative path is
    753                specified, it will be converted to an absolute path before
    754                being used.
    755 
    756      -x        Set MKX11=yes.
    757 
    758      -Z var    Unset ("zap") the environment variable var.  This is propagated
    759                to the nbmake wrapper.
    760 
    761      -?        Show a help message, and exit.
    762 
    763    The "nbmake-MACHINE" wrapper script
    764      If using the build.sh script to build NetBSD, a nbmake-MACHINE script
    765      will be created in TOOLDIR/bin upon the first build to assist in building
    766      subtrees on a cross-compile host.
    767 
    768      nbmake-MACHINE can be invoked in lieu of make(1), and will instead call
    769      the up-to-date version of "nbmake" installed into TOOLDIR/bin with
    770      several key variables pre-set, including MACHINE, MACHINE_ARCH, and
    771      TOOLDIR.  nbmake-MACHINE will also set variables specified with -V, and
    772      unset variables specified with -Z.
    773 
    774      This script can be symlinked into a directory listed in PATH, or called
    775      with an absolute path.
    776 
    777 EXAMPLES
    778      1.   % ./build.sh [OPTIONS] tools kernel=GENERIC
    779 
    780           Build a new toolchain, and use the new toolchain to configure and
    781           build a new GENERIC kernel.
    782 
    783      2.   % ./build.sh [OPTIONS] -U distribution
    784 
    785           Using unprivileged mode, build a complete distribution to a DESTDIR
    786           directory that build.sh selects (and will show).
    787 
    788      3.   # ./build.sh [OPTIONS] -U install=/
    789 
    790           As root, install to / the distribution that was built by example 2.
    791           Even though this is run as root, -U is required so that the
    792           permissions stored in DESTDIR/METALOG are correctly applied to the
    793           files as they're copied to /.
    794 
    795      4.   % ./build.sh [OPTIONS] -U -u release
    796 
    797           Using unprivileged mode, build a complete release to DESTDIR and
    798           RELEASEDIR directories that build.sh selects (and will show).
    799           MKUPDATE=yes (-u) is set to prevent the "make cleandir", so that if
    800           this is run after example 2, it doesn't need to redo that portion of
    801           the release build.
    802 
    803 SEE ALSO
    804      config(1), ctags(1), ex(1), gzip(1), lint(1), make(1), mandoc(1),
    805      mkisofs(1), nroff(1), vi(1), mk.conf(5), atf(7), hier(7), mdoc(7),
    806      release(7), etcupdate(8), installboot(8), mount(8), postinstall(8),
    807      sysinst(8), pkgsrc/sysutils/cdrtools
    808 
    809      Note: The NetBSD manual pages are also available at
    810      https://man.netbsd.org
    811 
    812 HISTORY
    813      The build.sh based build scheme was introduced for NetBSD 1.6 as
    814      USE_NEW_TOOLCHAIN, and re-worked to TOOLCHAIN_MISSING after that.
    815 
    816 CAVEATS
    817      After significant updates to third-party components in the source tree,
    818      the "make cleandir" operation may be insufficient to clean out old files
    819      in object directories.  Instead, one may have to manually remove the
    820      files.  Consult the UPDATING file for notices concerning this.
    821 
    822 NetBSD                           June 11, 2023                          NetBSD
    823