Home | History | Annotate | Line # | Download | only in src
BUILDING revision 1.154
      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 FILES
     20    Source tree layout
     21      BUILDING       This document (in plaintext).  Generated from
     22                     doc/BUILDING.mdoc.
     23 
     24      Makefile       The main Makefile for NetBSD; should only be run for
     25                     native builds with an appropriately up-to-date version of
     26                     NetBSD make(1).  Intended for expert use with knowledge of
     27                     its shortcomings, it has been superseded by the build.sh
     28                     shell script as the recommended means for building NetBSD.
     29 
     30      UPDATING       Special notes for updating from an earlier revision of
     31                     NetBSD.  It is important to read this file before every
     32                     build of an updated source tree.
     33 
     34      build.sh       Bourne-compatible shell script used for building the host
     35                     build tools and the NetBSD system from scratch.  Can be
     36                     used for both native and cross builds, and should be used
     37                     instead of make(1) as it performs additional checks to
     38                     prevent common issues going undetected, such as building
     39                     with an outdated version of make(1).
     40 
     41      crypto/dist/, dist/, gnu/dist/
     42                     Sources imported verbatim from third parties, without
     43                     mangling the existing build structure.  Other source trees
     44                     in bin through usr.sbin use the NetBSD make(1) "reachover"
     45                     Makefile semantics when building these programs for a
     46                     native host.
     47 
     48      distrib/, etc/
     49                     Sources for items used when making a full release
     50                     snapshot, such as files installed in DESTDIR/etc on the
     51                     destination system, boot media, and release notes.
     52 
     53      doc/BUILDING.mdoc
     54                     This document, in -mdoc troff format; the original copy.
     55                     Used to generate BUILDING.
     56 
     57      external, sys/external
     58                     Sources and build infrastructure for components imported
     59                     (mostly) unchanged from upstream maintainers, sorted by
     60                     applicable license.  This is (slowly) replacing the
     61                     crypto/dist, dist, and gnu/dist directories.
     62 
     63      external/mit/xorg/
     64                     "Reachover" build structure for modular Xorg; the source
     65                     is in X11SRCDIR.
     66 
     67      regress/, tests/
     68                     Regression test harness.  Can be cross-compiled, but only
     69                     run natively.  tests/ uses the atf(7) test framework;
     70                     regress/ contains older tests that have not yet been
     71                     migrated to atf(7).
     72 
     73      sys/           NetBSD kernel sources.
     74 
     75      tools/         "Reachover" build structure for the host build tools.
     76                     This has a special method of determining out-of-date
     77                     status.
     78 
     79      tools/compat/README
     80                     Special notes for cross-hosting a NetBSD build on non-
     81                     NetBSD platforms.
     82 
     83      Other directories including bin/ ... usr.sbin/
     84                     Sources to the NetBSD userland (non-kernel) programs.  If
     85                     any of these directories are missing, they will be skipped
     86                     during the build.
     87 
     88    Build tree layout
     89      The NetBSD build tree is described in hier(7), and the release layout is
     90      described in release(7).
     91 
     92 CONFIGURATION
     93    Environment variables
     94      Several environment variables control the behaviour of NetBSD builds.
     95 
     96      HOST_CC         Path name to C compiler used to create the toolchain.
     97 
     98      HOST_CFLAGS     Flags passed to the host C compiler.
     99 
    100      HOST_CXX        Path name to C++ compiler used to create the toolchain.
    101 
    102      HOST_CXXFLAGS   Flags passed to the host C++ compiler.
    103 
    104      HOST_SH         Path name to a shell available on the host system and
    105                      suitable for use during the build.  The NetBSD build
    106                      system requires a modern Bourne-like shell with POSIX-
    107                      compliant features, and also requires support for the
    108                      "local" keyword to declare local variables in shell
    109                      functions (which is a widely-implemented but non-
    110                      standardised feature).
    111 
    112                      Depending on the host system, a suitable shell may be
    113                      /bin/sh, /usr/xpg4/bin/sh, /bin/ksh (provided it is a
    114                      variant of ksh that supports the "local" keyword, such as
    115                      ksh88, but not ksh93), or /usr/local/bin/bash.
    116 
    117                      Most parts of the build require HOST_SH to be an absolute
    118                      path; however, build.sh allows it to be a simple command
    119                      name, which will be converted to an absolute path by
    120                      searching the PATH.
    121 
    122      INSTALLBOOT_UBOOT_PATHS
    123                      A colon-separated list of search paths used by
    124                      installboot(8) to find U-Boot packages.
    125 
    126      MACHINE         Machine type, e.g., "macppc".
    127 
    128      MACHINE_ARCH    Machine architecture, e.g., "powerpc".
    129 
    130      MAKE            Path name to invoke make(1) as.
    131 
    132      MAKECONF        The name of the make(1) configuration file.  See "make"
    133                      variables and mk.conf(5).
    134 
    135                      Note: Only settable in the process environment.
    136 
    137                      Default: "/etc/mk.conf"
    138 
    139      MAKEFLAGS       Flags to invoke make(1) with.
    140 
    141                      Note: build.sh ignores the value of MAKEFLAGS passed in
    142                      the environment, but allows MAKEFLAGS to be set via the
    143                      -V option.
    144 
    145      MAKEOBJDIR      Directory to use as the .OBJDIR for the current
    146                      directory.  The value is subjected to variable expansion
    147                      by make(1).  Typical usage is to set this variable to a
    148                      value involving the use of `${.CURDIR:S...}' or
    149                      `${.CURDIR:C...}', to derive the value of .OBJDIR from
    150                      the value of .CURDIR.  Used only if MAKEOBJDIRPREFIX is
    151                      not defined.
    152 
    153                      Note: MAKEOBJDIR can be provided only in the environment
    154                      or via the -O flag of build.sh; it cannot usefully be set
    155                      inside a Makefile, including in mk.conf(5) or MAKECONF.
    156 
    157      MAKEOBJDIRPREFIX
    158                      Top level directory of the object directory tree.  The
    159                      value is subjected to variable expansion by make(1).
    160                      build.sh will create the ${MAKEOBJDIRPREFIX} directory if
    161                      necessary, but if make(1) is used without build.sh, then
    162                      rules in <bsd.obj.mk> will abort the build if the
    163                      ${MAKEOBJDIRPREFIX} directory does not exist.  If the
    164                      value is defined and valid, then
    165                      ${MAKEOBJDIRPREFIX}/${.CURDIR} is used as the .OBJDIR for
    166                      the current directory.  The current directory may be read
    167                      only.
    168 
    169                      Note: MAKEOBJDIRPREFIX can be provided only in the
    170                      environment or via the -M flag of build.sh; it cannot
    171                      usefully be set inside a Makefile, including in
    172                      mk.conf(5) or MAKECONF.
    173 
    174      TMPDIR          Top-level directory to store temporary directories used
    175                      by build.sh before paths to other directories such as
    176                      .OBJDIR can be determined.
    177 
    178                      Note: Must support execution of binaries.  I.e., without
    179                      mount(8)'s -o noexec option.
    180 
    181                      Default: "/tmp".
    182 
    183    "make" variables
    184      Several variables control the behavior of NetBSD builds.  Unless
    185      otherwise specified, these variables may be set in either the process
    186      environment or the make(1) configuration file mk.conf(5) specified by
    187      MAKECONF.
    188 
    189      This list is not comprehensive; all supported variables and their
    190      defaults are documented in mk.conf(5).
    191 
    192      BSDOBJDIR       The real path to the object directory tree for the NetBSD
    193                      source tree.
    194 
    195                      Default: "/usr/obj"
    196 
    197      BSDSRCDIR       The real path to the NetBSD source tree, if NETBSDSRCDIR
    198                      isn't defined.
    199 
    200                      Default: "/usr/src"
    201 
    202      BUILDID         Identifier for the build.  If set, this should be a short
    203                      string that is suitable for use as part of a file or
    204                      directory name.  The identifier will be appended to
    205                      object directory names, and can be consulted in the
    206                      make(1) configuration file in order to set additional
    207                      build parameters, such as compiler flags.  It will also
    208                      be used as part of the kernel version string, which can
    209                      be shown by "uname -v".
    210 
    211                      Default: Unset.
    212 
    213      BUILDINFO       Optional multi-line string containing information about
    214                      the build.  This will appear in DESTDIR/etc/release, and
    215                      it will be stored in the buildinfo variable in any
    216                      kernels that are built.  When such kernels are booted,
    217                      the sysctl(7) kern.buildinfo variable will report this
    218                      value.  The string may contain backslash escape
    219                      sequences, such as "\\" (representing a backslash
    220                      character) and "\n" (representing a newline).
    221 
    222                      Default: Unset.
    223 
    224      BUILDSEED       g++(1) uses random numbers when compiling C++ code.  This
    225                      variable seeds the g++(1) random number generator using
    226                      -frandom-seed with this value.  By default, it is set to
    227                      "NetBSD-(majorversion)".  Using a fixed value causes C++
    228                      binaries to be the same when built from the same sources,
    229                      resulting in identical (reproducible) builds.  Additional
    230                      information is available in the g++(1) documentation of
    231                      -frandom-seed.
    232 
    233                      Default: Unset.
    234 
    235      COPTS           Extra options for the C compiler.  Should be appended to
    236                      (e.g., COPTS+=-g), rather than explicitly set.
    237 
    238                      Note: CPUFLAGS, not COPTS, should be used for compiler
    239                      flags that select CPU-related options.
    240 
    241                      Note: CFLAGS should never be set in mk.conf(5).
    242 
    243      CPUFLAGS        Additional options passed to the compiler/assembler to
    244                      select CPU instruction set options, CPU tuning options,
    245                      etc.
    246 
    247                      Note: Such options should not be specified in COPTS,
    248                      because some parts of the build process need to override
    249                      CPU-related compiler options.
    250 
    251                      Default: Unset.
    252 
    253      DESTDIR         Directory to contain the built NetBSD system.  If set,
    254                      special options are passed to the compilation tools to
    255                      prevent their default use of the host system's
    256                      /usr/include, /usr/lib, and so forth.  This pathname must
    257                      be an absolute path, and should not end with a slash (/)
    258                      character.  (For installation into the system's root
    259                      directory, set DESTDIR to an empty string, not to "/").
    260                      The directory must reside on a file system which supports
    261                      long file names and hard links.
    262 
    263                      Note: build.sh will provide a default of
    264                      "destdir.MACHINE" (in the top-level .OBJDIR) unless run
    265                      in `expert' mode.
    266 
    267                      Default: Empty string if USETOOLS=yes; unset otherwise.
    268 
    269      EXTERNAL_TOOLCHAIN
    270                      If defined, this variable indicates the root directory of
    271                      an external toolchain which will be used to build the
    272                      tree.  For example, if a platform is a TOOLCHAIN_MISSING
    273                      platform, EXTERNAL_TOOLCHAIN can be used to re-enable the
    274                      cross-compile framework.
    275 
    276                      If EXTERNAL_TOOLCHAIN is defined, act as MKGCC=no, since
    277                      the external version of the compiler may not be able to
    278                      build the library components of the in-tree compiler.
    279 
    280                      This variable should be used in conjunction with an
    281                      appropriate HAVE_GCC or HAVE_LLVM setting to control the
    282                      compiler flags.
    283 
    284                      Note: This variable is not yet used in as many places as
    285                      it should be.  Expect the exact semantics of this
    286                      variable to change in the short term as parts of the
    287                      cross-compile framework continue to be cleaned up.
    288 
    289                      Default: Unset.
    290 
    291      INSTALLBOOT_BOARDS
    292                      A list of evbarm boards to create bootable images for.
    293                      If corresponding U-Boot packages are installed, bootable
    294                      images are created as part of a release.  See the
    295                      -o board=name option of installboot(8).
    296 
    297      INSTALLWORLDDIR
    298                      Location for the top-level "make installworld" target to
    299                      install to.  If specified, must be an absolute path.
    300 
    301                      Default: "/"
    302 
    303      MAKEVERBOSE     Level of verbosity of status messages.  Supported values:
    304 
    305                      0   No descriptive messages or commands executed by
    306                          make(1) are shown.
    307 
    308                      1   Brief messages are shown describing what is being
    309                          done, but the actual commands executed by make(1) are
    310                          not shown.
    311 
    312                      2   Descriptive messages are shown as above (prefixed
    313                          with a `#'), and ordinary commands performed by
    314                          make(1) are shown.
    315 
    316                      3   In addition to the above, all commands performed by
    317                          make(1) are shown, even if they would ordinarily have
    318                          been hidden through use of the "@" prefix in the
    319                          relevant makefile.
    320 
    321                      4   In addition to the above, commands executed by
    322                          make(1) are traced through use of the sh(1) "-x"
    323                          flag.
    324 
    325                      Default: 2
    326 
    327      MKCATPAGES      Can be set to "yes" or "no".  Indicates whether
    328                      preformatted plaintext manual pages will be created and
    329                      installed.
    330 
    331                      Forced to "no" if MKMAN=no or MKSHARE=no.
    332 
    333                      Default: "no"
    334 
    335      MKCROSSGDB      Can be set to "yes" or "no".  Create a cross-gdb as a
    336                      host tool.
    337 
    338                      Default: "no"
    339 
    340      MKDEBUG         Can be set to "yes" or "no".  Indicates whether debug
    341                      information should be generated for all userland
    342                      binaries.  The result is collected as an additional
    343                      debug.tgz and xdebug.tgz set and installed in
    344                      DESTDIR/usr/libdata/debug.
    345 
    346                      Forced to "no" if NODEBUG is defined, usually in the
    347                      Makefile before any make(1) .include directives.
    348 
    349                      Default: "no"
    350 
    351      MKDEBUGKERNEL   Can be set to "yes" or "no".  Indicates whether debugging
    352                      symbols will be built for kernels by default; pretend as
    353                      if makeoptions DEBUG="-g" is specified in kernel
    354                      configuration files.  This will also put the debug kernel
    355                      netbsd.gdb in the kernel sets.  See options(4) for
    356                      details.  This is useful if a cross-gdb is built as well
    357                      (see MKCROSSGDB).
    358 
    359                      Default: "no"
    360 
    361      MKDEBUGLIB      Can be set to "yes" or "no".  Indicates whether debug
    362                      libraries (lib*_g.a) will be built and installed.  Debug
    363                      libraries are compiled with "-g -DDEBUG".
    364 
    365                      Forced to "no" if NODEBUGLIB is defined, usually in the
    366                      Makefile before any make(1) .include directives.
    367 
    368                      Default: "no"
    369 
    370      MKDEBUGTOOLS    Can be set to "yes" or "no".  Indicates whether debug
    371                      information (lib*_g.a) will be included in the build
    372                      toolchain.
    373 
    374                      Default: "no"
    375 
    376      MKDOC           Can be set to "yes" or "no".  Indicates whether system
    377                      documentation destined for DESTDIR/usr/share/doc will be
    378                      installed.
    379 
    380                      Forced to "no" if NODOC is defined, usually in the
    381                      Makefile before any make(1) .include directives.
    382 
    383                      Forced to "no" if MKSHARE=no.
    384 
    385                      Default: "yes"
    386 
    387      MKHOSTOBJ       Can be set to "yes" or "no".  If "yes", then for programs
    388                      intended to be run on the compile host, the name,
    389                      release, and architecture of the host operating system
    390                      will be suffixed to the name of the object directory
    391                      created by "make obj".  (This allows multiple host
    392                      systems to compile NetBSD for a single target
    393                      architecture.)  If "no", then programs built to be run on
    394                      the compile host will use the same object directory names
    395                      as programs built to be run on the target architecture.
    396 
    397                      Default: "no"
    398 
    399      MKHTML          Can be set to "yes" or "no".  Indicates whether the HTML
    400                      manual pages are created and installed.
    401 
    402                      Forced to "no" if NOHTML is defined, usually in the
    403                      Makefile before any make(1) .include directives.
    404 
    405                      Forced to "no" if MKMAN=no or MKSHARE=no.
    406 
    407                      Default: "yes"
    408 
    409      MKINFO          Can be set to "yes" or "no".  Indicates whether GNU Info
    410                      files, used for the documentation for most of the
    411                      compilation tools, will be built and installed.
    412 
    413                      Forced to "no" if NOINFO is defined, usually in the
    414                      Makefile before any make(1) .include directives.
    415 
    416                      Forced to "no" if MKSHARE=no.
    417 
    418                      Default: "yes"
    419 
    420      MKKMOD          Can be set to "yes" or "no".  Indicates whether kernel
    421                      modules will be built and installed.
    422 
    423                      Default: "no" on or1k; "yes" on other platforms.
    424 
    425      MKLINKLIB       Can be set to "yes" or "no".  Indicates whether all of
    426                      the shared library infrastructure will be built and
    427                      installed.
    428 
    429                      If "no", prevents:
    430                      -   installation of the *.a libraries
    431                      -   installation of the *_pic.a libraries on PIC systems
    432                      -   building of *.a libraries on PIC systems
    433                      -   installation of .so symlinks on ELF systems
    434 
    435                      I.e, only install the shared library (and the .so.major
    436                      symlink on ELF).
    437 
    438                      Forced to "no" if NOLINKLIB is defined, usually in the
    439                      Makefile before any make(1) .include directives.
    440 
    441                      If "no", acts as MKLINT=no MKPICINSTALL=no MKPROFILE=no.
    442 
    443                      Default: "yes"
    444 
    445      MKLINT          Can be set to "yes" or "no".  Indicates whether lint(1)
    446                      will be run against portions of the NetBSD source code
    447                      during the build, and whether lint libraries will be
    448                      installed into DESTDIR/usr/libdata/lint.
    449 
    450                      Forced to "no" if NOLINT is defined, usually in the
    451                      Makefile before any make(1) .include directives.
    452 
    453                      Forced to "no" if MKLINKLIB=no.
    454 
    455                      Default: "no"
    456 
    457      MKMAN           Can be set to "yes" or "no".  Indicates whether manual
    458                      pages will be installed.
    459 
    460                      Forced to "no" if NOMAN is defined, usually in the
    461                      Makefile before any make(1) .include directives.
    462 
    463                      Forced to "no" if MKSHARE=no.
    464 
    465                      If "no", acts as MKCATPAGES=no MKHTML=no.
    466 
    467                      Default: "yes"
    468 
    469      MKNLS           Can be set to "yes" or "no".  Indicates whether Native
    470                      Language System (NLS) locale zone files will be built and
    471                      installed.
    472 
    473                      Forced to "no" if NONLS is defined, usually in the
    474                      Makefile before any make(1) .include directives.
    475 
    476                      Forced to "no" if MKSHARE=no.
    477 
    478                      Default: "yes"
    479 
    480      MKOBJ           Can be set to "yes" or "no".  Indicates whether object
    481                      directories will be created when running "make obj".  If
    482                      "no", then all built files will be located inside the
    483                      regular source tree.
    484 
    485                      Forced to "no" if NOOBJ is defined, usually in the
    486                      Makefile before any make(1) .include directives.
    487 
    488                      If "no", acts as MKOBJDIRS=no.
    489 
    490                      Note: Setting MKOBJ to "no" is not recommended and may
    491                      cause problems when updating the tree with cvs(1).
    492 
    493                      Default: "yes"
    494 
    495      MKOBJDIRS       Can be set to "yes" or "no".  Indicates whether object
    496                      directories will be created automatically (via a "make
    497                      obj" pass) at the start of a build.
    498 
    499                      Forced to "no" if MKOBJ=no.
    500 
    501                      Note: If using build.sh, the default is "yes".  This may
    502                      be set back to "no" by giving build.sh the -o option.
    503 
    504                      Default: "no"
    505 
    506      MKPIC           Can be set to "yes" or "no".  Indicates whether shared
    507                      objects and libraries will be created and installed.  If
    508                      "no", the entire built system will be statically linked.
    509 
    510                      Forced to "no" if NOPIC is defined, usually in the
    511                      Makefile before any make(1) .include directives.
    512 
    513                      If "no", acts as MKPICLIB=no.
    514 
    515                      Default: "no" on m68000; "yes" on other platforms.
    516 
    517      MKPICINSTALL    Can be set to "yes" or "no".  Indicates whether the ar(1)
    518                      format libraries (lib*_pic.a), used to generate shared
    519                      libraries, are installed.
    520 
    521                      Forced to "no" if NOPICINSTALL is defined, usually in the
    522                      Makefile before any make(1) .include directives.
    523 
    524                      Forced to "no" if MKLINKLIB=no.
    525 
    526                      Default: "no"
    527 
    528      MKPROFILE       Can be set to "yes" or "no".  Indicates whether profiled
    529                      libraries (lib*_p.a) will be built and installed.
    530 
    531                      Forced to "no" if NOPROFILE is defined, usually in the
    532                      Makefile before any make(1) .include directives.
    533 
    534                      Forced to "no" if MKLINKLIB=no.
    535 
    536                      Default: "no" on or1k, riscv32, and riscv64 (due to
    537                      toolchain problems with profiled code); "yes" on other
    538                      platforms.
    539 
    540      MKREPRO         Can be set to "yes" or "no".  Indicates whether builds
    541                      are to be reproducible.  If "yes", two builds from the
    542                      same source tree will produce the same build results.
    543 
    544                      Used as the default for MKARZERO.
    545 
    546                      Note: This may be set to "yes" by giving build.sh the -P
    547                      option.
    548 
    549                      Default: "no"
    550 
    551      MKREPRO_TIMESTAMP
    552                      Unix timestamp.  When MKREPRO is set, the timestamp of
    553                      all files in the sets will be set to this value.
    554 
    555                      Note: This may be set automatically to the latest source
    556                      tree timestamp using cvslatest(1) by giving build.sh the
    557                      -P option.
    558 
    559                      Default: Unset.
    560 
    561      MKSHARE         Can be set to "yes" or "no".  Indicates whether files
    562                      destined to reside in DESTDIR/usr/share will be built and
    563                      installed.
    564 
    565                      Forced to "no" if NOSHARE is defined, usually in the
    566                      Makefile before any make(1) .include directives.
    567 
    568                      If "no", acts as MKCATPAGES=no MKDOC=no MKINFO=no
    569                      MKHTML=no MKMAN=no MKNLS=no.
    570 
    571                      Default: "yes"
    572 
    573      MKSTRIPIDENT    Can be set to "yes" or "no".  Indicates whether RCS IDs,
    574                      for use with ident(1), should be stripped from program
    575                      binaries and shared libraries.
    576 
    577                      Default: "no"
    578 
    579      MKSTRIPSYM      Can be set to "yes" or "no".  Indicates whether all local
    580                      symbols should be stripped from shared libraries.  If
    581                      "yes", strip all local symbols from shared libraries; the
    582                      effect is equivalent to the -x option of ld(1).  If "no",
    583                      strip only temporary local symbols; the effect is
    584                      equivalent to the -X option of ld(1).  Keeping non-
    585                      temporary local symbols such as static function names is
    586                      useful on using DTrace for userland libraries and getting
    587                      a backtrace from a rump kernel loading shared libraries.
    588 
    589                      Default: "yes"
    590 
    591      MKUNPRIVED      Can be set to "yes" or "no".  Indicates whether an
    592                      unprivileged install will occur.  The user, group,
    593                      permissions, and file flags, will not be set on the
    594                      installed items; instead the information will be appended
    595                      to a file called METALOG in DESTDIR.  The METALOG
    596                      contents are used during the generation of the
    597                      distribution tar files to ensure that the appropriate
    598                      file ownership is stored.  This allows a non-root `make
    599                      install'.
    600 
    601                      Default: "no"
    602 
    603      MKUPDATE        Can be set to "yes" or "no".  Indicates whether all
    604                      install operations intended to write to DESTDIR will
    605                      compare file timestamps before installing, and skip the
    606                      install phase if the destination files are up-to-date.
    607 
    608                      For top-level builds this this implies the effects of
    609                      NOCLEANDIR (i.e., "make cleandir" is avoided).
    610 
    611                      Note: If using build.sh, this may be set by giving the -u
    612                      option.
    613 
    614                      Default: "no"
    615 
    616      MKX11           Can be set to "yes" or "no".  Indicates whether X11 will
    617                      be built and installed from X11SRCDIR, and whether the X
    618                      sets will be created.
    619 
    620                      Note: If "yes", requires MKINET6=yes.
    621 
    622                      Default: "no"
    623 
    624      NETBSDSRCDIR    The path to the top level of the NetBSD sources.
    625 
    626                      Default: Top level of the NetBSD source tree (as
    627                      determined by the presence of build.sh and tools/) if
    628                      make(1) is run from within that tree; otherwise BSDSRCDIR
    629                      will be used.
    630 
    631      NOCLEANDIR      If set, avoids the "make cleandir" phase of a full build.
    632                      This has the effect of allowing only changed files in a
    633                      source tree to be recompiled.  This can speed up builds
    634                      when updating only a few files in the tree.
    635 
    636                      See also MKUPDATE.
    637 
    638                      Default: Unset.
    639 
    640      NODISTRIBDIRS   If set, avoids the "make distrib-dirs" phase of a full
    641                      build.  This skips running mtree(8) on DESTDIR, useful on
    642                      systems where building as an unprivileged user, or where
    643                      it is known that the system-wide mtree(8) files have not
    644                      changed.
    645 
    646                      Default: Unset.
    647 
    648      NOINCLUDES      If set, avoids the "make includes" phase of a full build.
    649                      This has the effect of preventing make(1) from thinking
    650                      that some programs are out-of-date simply because the
    651                      system include files have changed.  However, this option
    652                      should not be used when updating the entire NetBSD source
    653                      tree arbitrarily; it is suggested to use MKUPDATE=yes
    654                      instead in that case.
    655 
    656                      Default: Unset.
    657 
    658      RELEASEDIR      If set, specifies the directory to which a release(7)
    659                      layout will be written at the end of a "make release".
    660                      If specified, must be an absolute path.
    661 
    662                      Note: build.sh will provide a default of "releasedir" (in
    663                      the top-level .OBJDIR) unless run in `expert' mode.
    664 
    665                      Default: Unset.
    666 
    667      TOOLCHAIN_MISSING
    668                      Can be set to "yes" or "no".  If not "no", this indicates
    669                      that the platform "MACHINE_ARCH" being built does not
    670                      have a working in-tree toolchain.
    671 
    672                      If not "no", acts as MKBINUTILS=no MKGCC=no MKGDB=no.
    673 
    674                      Default: "no"
    675 
    676      TOOLDIR         Directory to hold the host tools, once built.  If
    677                      specified, must be an absolute path.  This directory
    678                      should be unique to a given host system and NetBSD source
    679                      tree.  (However, multiple target architectures may share
    680                      the same TOOLDIR; the target-architecture-dependent files
    681                      have unique names.)  If unset, a default based on the
    682                      uname(1) information of the host platform will be created
    683                      in the .OBJDIR of src.
    684 
    685                      Default: Unset.
    686 
    687      USETOOLS        Can be set to "yes" or "no".  Indicates whether the tools
    688                      specified by TOOLDIR should be used as part of a build in
    689                      progress.  Must be set to "yes" if cross-compiling.
    690                      Supported values:
    691 
    692                      yes    Use the tools from TOOLDIR.
    693 
    694                      no     Do not use the tools from TOOLDIR, but refuse to
    695                             build native compilation tool components that are
    696                             version-specific for that tool.
    697 
    698                      never  Do not use the tools from TOOLDIR, even when
    699                             building native tool components.  This is similar
    700                             to the traditional NetBSD build method, but does
    701                             not verify that the compilation tools in use are
    702                             up-to-date enough in order to build the tree
    703                             successfully.  This may cause build or runtime
    704                             problems when building the whole NetBSD source
    705                             tree.
    706 
    707                      Default: "no" when using <bsd.*.mk> outside the NetBSD
    708                      source tree (detected automatically) or if
    709                      TOOLCHAIN_MISSING=yes; "yes" otherwise.
    710 
    711      X11SRCDIR       Directory containing the modular Xorg source.  If
    712                      specified, must be an absolute path.  The main modular
    713                      Xorg source is found in X11SRCDIR/external/mit.
    714 
    715                      Default: NETBSDSRCDIR/../xsrc, if that exists; otherwise
    716                      /usr/xsrc.
    717 
    718 BUILDING
    719    "make" command line options
    720      This is not a summary of all the options available to make(1); only the
    721      options used most frequently with NetBSD builds are listed here.
    722 
    723      -j njob    Run up to njob make(1) subjobs in parallel.  Makefiles should
    724                 use .WAIT or have explicit dependencies as necessary to
    725                 enforce build ordering.
    726 
    727      -m dir     Specify the default directory for searching for system
    728                 Makefile segments, mainly the <bsd.*.mk> files.  When building
    729                 any full NetBSD source tree, this should be set to the
    730                 "share/mk" directory in the source tree.  This is set
    731                 automatically when building from the top level, or when using
    732                 build.sh.
    733 
    734      -n         Show the commands that would have been executed, but do not
    735                 actually execute them.  This will still cause recursion to
    736                 take place.
    737 
    738      -V var     Show make(1)'s idea of the value of var.  Does not build any
    739                 targets.
    740 
    741      var=value  Set the variable var to value, overriding any setting
    742                 specified by the process environment, the MAKECONF
    743                 configuration file, or the system Makefile segments.
    744 
    745    "make" targets
    746      These default targets may be built by running make(1) in any subtree of
    747      the NetBSD source code.  It is recommended that none of these be used
    748      from the top level Makefile; as a specific exception, "make obj" and
    749      "make cleandir" are useful in that context.
    750 
    751      all        Build programs, libraries, and preformatted documentation.
    752 
    753      clean      Remove program and library object code files.
    754 
    755      cleandir   Same as clean, but also remove preformatted documentation,
    756                 dependency files generated by "make depend", and any other
    757                 files known to be created at build time.
    758 
    759      depend     Create dependency files (.depend) containing more detailed
    760                 information about the dependencies of source code on header
    761                 files.  Allows programs to be recompiled automatically when a
    762                 dependency changes.
    763 
    764      dependall  Does a "make depend" immediately followed by a "make all".
    765                 This improves cache locality of the build since both passes
    766                 read the source files in their entirety.
    767 
    768      distclean  Synonym for cleandir.
    769 
    770      includes   Build and install system header files.  Typically needed
    771                 before any system libraries or programs can be built.
    772 
    773      install    Install programs, libraries, and documentation into DESTDIR.
    774                 Few files will be installed to DESTDIR/dev, DESTDIR/etc,
    775                 DESTDIR/root or DESTDIR/var in order to prevent user supplied
    776                 configuration data from being overwritten.
    777 
    778      lint       Run lint(1) against the C source code, where appropriate, and
    779                 generate system-installed lint libraries.
    780 
    781      obj        Create object directories to be used for built files, instead
    782                 of building directly in the source tree.
    783 
    784      tags       Create ctags(1) searchable function lists usable by the ex(1)
    785                 and vi(1) text editors.
    786 
    787    "make" targets for the top level
    788      Additional make(1) targets are usable specifically from the top source
    789      level to facilitate building the entire NetBSD source tree.
    790 
    791      build         Build the entire NetBSD system (except the kernel).  This
    792                    orders portions of the source tree such that prerequisites
    793                    will be built in the proper order.
    794 
    795      distribution  Do a "make build", and then install a full distribution
    796                    (which does not include a kernel) into DESTDIR, including
    797                    files in DESTDIR/dev, DESTDIR/etc, DESTDIR/root and
    798                    DESTDIR/var.
    799 
    800      buildworld    As per "make distribution", except that it ensures that
    801                    DESTDIR is not the root directory.
    802 
    803      installworld  Install the distribution from DESTDIR to INSTALLWORLDDIR,
    804                    which defaults to the root directory.  Ensures that
    805                    INSTALLWORLDDIR is not the root directory if cross
    806                    compiling.
    807 
    808                    The INSTALLSETS environment variable may be set to a space-
    809                    separated list of distribution sets to be installed.  By
    810                    default, all sets except "etc" and "xetc" are installed, so
    811                    most files in INSTALLWORLDDIR/etc will not be installed or
    812                    modified.
    813 
    814                    Note: Before performing this operation with
    815                    INSTALLWORLDDIR=/, it is highly recommended that you
    816                    upgrade your kernel and reboot.  After performing this
    817                    operation, it is recommended that you use etcupdate(8) to
    818                    update files in INSTALLWORLDDIR/etc, and postinstall(8) to
    819                    check for or fix inconsistencies.
    820 
    821      sets          Create distribution sets from DESTDIR into
    822                    RELEASEDIR/RELEASEMACHINEDIR/binary/sets.  Should be run
    823                    after "make distribution", as "make build" alone does not
    824                    install all of the required files.
    825 
    826      sourcesets    Create source sets of the source tree into
    827                    RELEASEDIR/source/sets.
    828 
    829      syspkgs       Create syspkgs from DESTDIR into
    830                    RELEASEDIR/RELEASEMACHINEDIR/binary/syspkgs.  Should be run
    831                    after "make distribution", as "make build" alone does not
    832                    install all of the required files.
    833 
    834      release       Do a "make distribution", build kernels, distribution
    835                    media, and install sets (this as per "make sets"), and then
    836                    package the system into a standard release layout as
    837                    described by release(7).  This requires that RELEASEDIR be
    838                    set (see above).
    839 
    840      iso-image     Create a NetBSD installation CD-ROM image in the
    841                    RELEASEDIR/images directory.  The CD-ROM file system will
    842                    have a layout as described in release(7).
    843 
    844                    For most machine types, the CD-ROM will be bootable, and
    845                    will automatically run the sysinst(8) menu-based
    846                    installation program, which can be used to install or
    847                    upgrade a NetBSD system.  Bootable CD-ROMs also contain
    848                    tools that may be useful in repairing a damaged NetBSD
    849                    installation.
    850 
    851                    Before "make iso-image" is attempted, RELEASEDIR must be
    852                    populated by "make release" or equivalent.
    853 
    854                    Note: Other, smaller, CD-ROM images may be created in the
    855                    RELEASEDIR/RELEASEMACHINEDIR/installation/cdrom directory
    856                    by "make release".  These smaller images usually contain
    857                    the same tools as the larger images in RELEASEDIR/images,
    858                    but do not contain additional content such as the
    859                    distribution sets.
    860 
    861                    Note: The mac68k port still uses an older method of
    862                    creating CD-ROM images.  This requires the mkisofs(1)
    863                    utility, which is not part of NetBSD, but which can be
    864                    installed from pkgsrc/sysutils/cdrtools.
    865 
    866      iso-image-source
    867                    Create a NetBSD installation CD-ROM image in the
    868                    RELEASEDIR/images directory.  The CD-ROM file system will
    869                    have a layout as described in release(7).  It will have top
    870                    level directories for the machine type and source.
    871 
    872                    For most machine types, the CD-ROM will be bootable, and
    873                    will automatically run the sysinst(8) menu-based
    874                    installation program, which can be used to install or
    875                    upgrade a NetBSD system.  Bootable CD-ROMs also contain
    876                    tools that may be useful in repairing a damaged NetBSD
    877                    installation.
    878 
    879                    Before "make iso-image-source" is attempted, RELEASEDIR
    880                    must be populated by "make sourcesets release" or
    881                    equivalent.
    882 
    883                    Note: Other, smaller, CD-ROM images may be created in the
    884                    RELEASEDIR/RELEASEMACHINEDIR/installation/cdrom directory
    885                    by "make release".  These smaller images usually contain
    886                    the same tools as the larger images in RELEASEDIR/images,
    887                    but do not contain additional content such as the
    888                    distribution sets.
    889 
    890                    Note: The mac68k port still uses an older method of
    891                    creating CD-ROM images.  This requires the mkisofs(1)
    892                    utility, which is not part of NetBSD, but which can be
    893                    installed from pkgsrc/sysutils/cdrtools.
    894 
    895      install-image
    896                    Create a bootable NetBSD installation disk image in the
    897                    RELEASEDIR/images directory.  The installation disk image
    898                    is suitable for copying to bootable USB flash memory
    899                    sticks, etc., for machines which are able to boot from such
    900                    devices.  The file system in the bootable disk image will
    901                    have a layout as described in release(7).
    902 
    903                    The installation image is bootable, and will automatically
    904                    run the sysinst(8) menu-based installation program, which
    905                    can be used to install or upgrade a NetBSD system.  The
    906                    image also contains tools that may be useful in repairing a
    907                    damaged NetBSD installation.
    908 
    909                    Before "make install-image" is attempted, RELEASEDIR must
    910                    be populated by "make release" or equivalent.  The build
    911                    must have been performed with MKUNPRIVED=yes because "make
    912                    install-image" relies on information in DESTDIR/METALOG.
    913 
    914      live-image    Create NetBSD live images in the RELEASEDIR/images
    915                    directory.  The live image contains all necessary files to
    916                    boot NetBSD up to multi-user mode, including all files
    917                    which should be extracted during installation, NetBSD
    918                    disklabel, bootloaders, etc.
    919 
    920                    The live image is suitable for use as a disk image in
    921                    virtual machine environments such as QEMU, and also useful
    922                    to boot NetBSD from a USB flash memory stick on a real
    923                    machine, without the need for installation.
    924 
    925                    Before "make live-image" is attempted, RELEASEDIR must be
    926                    populated by "make release" or equivalent.  The build must
    927                    have been performed with MKUNPRIVED=yes because "make
    928                    install-image" relies on information in DESTDIR/METALOG.
    929 
    930      regression-tests
    931                    Can only be run after building the regression tests in the
    932                    directory "regress".  Runs those compiled regression tests
    933                    on the local host.
    934 
    935                    Note: Most tests are now managed instead using atf(7); this
    936                    target should probably run those as well but currently does
    937                    not.
    938 
    939    The "build.sh" script
    940      This script file is a shell script designed to build the entire NetBSD
    941      system on any host with a suitable modern shell and some common
    942      utilities.  The required shell features are described under the HOST_SH
    943      variable.
    944 
    945      If a host system's default shell does support the required features, then
    946      we suggest that you explicitly specify a suitable shell using a command
    947      like
    948 
    949            /path/to/suitable/shell build.sh [options]
    950 
    951      The above command will usually enable build.sh to automatically set
    952      HOST_SH=/path/to/suitable/shell, but if that fails, then the following
    953      set of commands may be used instead:
    954 
    955            HOST_SH=/path/to/suitable/shell
    956            export HOST_SH
    957            ${HOST_SH} build.sh [options]
    958 
    959      If build.sh detects that it is being executed under an unsuitable shell,
    960      it attempts to exec a suitable shell instead, or shows an error message.
    961      If HOST_SH is not set explicitly, then build.sh sets a default using
    962      heuristics dependent on the host platform, or from the shell under which
    963      build.sh is executed (if that can be determined), or using the first copy
    964      of sh found in PATH.
    965 
    966      All cross-compile builds, and most native builds, of the entire system
    967      should make use of build.sh rather than just running "make".  This way,
    968      the make(1) program will be bootstrapped properly, in case the host
    969      system has an older or incompatible "make" program.
    970 
    971      When compiling the entire system via build.sh, many make(1) variables are
    972      set for you in order to help encapsulate the build process.  In the list
    973      of options below, variables that are automatically set by build.sh are
    974      noted where applicable.
    975 
    976      The following operations are supported by build.sh:
    977 
    978      build         Build the system as per "make build".  Before the main part
    979                    of the build commences, this command runs the obj operation
    980                    (unless the -o option is given), "make cleandir" (unless
    981                    the -u option is given), and the tools operation.
    982 
    983      distribution  Build a full distribution as per "make distribution".  This
    984                    command first runs the build operation.
    985 
    986      release       Build a full release as per "make release".  This command
    987                    first runs the distribution operation.
    988 
    989      help          Show a help message, and exit.
    990 
    991      makewrapper   Create the nbmake-MACHINE wrapper.  This operation is
    992                    automatically performed for any of the other operations.
    993 
    994      cleandir      Perform "make cleandir".
    995 
    996      obj           Perform "make obj".
    997 
    998      tools         Build and install the host tools from src/tools.  This
    999                    command will first run "make obj" and "make cleandir" in
   1000                    the tools subdirectory unless the -o or -u options
   1001                    (respectively) are given.
   1002 
   1003      install=idir  Install the contents of DESTDIR to idir, using "make
   1004                    installworld".
   1005 
   1006                    Note: Files that are part of the "etc" or "xetc" sets will
   1007                    not be installed, unless overridden by the INSTALLSETS
   1008                    environment variable.
   1009 
   1010      kernel=kconf  Build a new kernel.  The kconf argument is the name of a
   1011                    configuration file suitable for use by config(1).  If kconf
   1012                    does not contain any `/' characters, the configuration file
   1013                    is expected to be found in the KERNCONFDIR directory, which
   1014                    is typically sys/arch/MACHINE/conf.  The new kernel will be
   1015                    built in a subdirectory of KERNOBJDIR, which is typically
   1016                    sys/arch/MACHINE/compile or an associated object directory.
   1017 
   1018                    This command does not imply the tools command; run the
   1019                    tools command first unless it is certain that the tools
   1020                    already exist and are up to date.
   1021 
   1022                    This command will run "make cleandir" on the kernel in
   1023                    question first unless the -u option is given.
   1024 
   1025      kernel.gdb=kconf
   1026                    Build a new kernel with debug information.  Similar to the
   1027                    above kernel=kconf operation, but creates a netbsd.gdb file
   1028                    alongside of the kernel netbsd, which contains a full
   1029                    symbol table and can be used for debugging (for example
   1030                    with a cross-gdb built by MKCROSSGDB).
   1031 
   1032      kernels       This command will build all kernels defined in port
   1033                    specific release build procedure.
   1034 
   1035                    This command internally calls the kernel=kconf operation
   1036                    for each found kernel configuration file.
   1037 
   1038      modules       This command will build kernel modules and install them
   1039                    into DESTDIR.
   1040 
   1041      releasekernel=kconf
   1042                    Install a gzip(1)ed copy of the kernel previously built by
   1043                    kernel=kconf into
   1044                    RELEASEDIR/RELEASEMACHINEDIR/binary/kernel, usually as
   1045                    netbsd-kconf.gz, although the "netbsd" prefix is determined
   1046                    from the "config" directives in kconf.
   1047 
   1048      sets          Perform "make sets".
   1049 
   1050      sourcesets    Perform "make sourcesets".
   1051 
   1052      syspkgs       Perform "make syspkgs".
   1053 
   1054      iso-image     Perform "make iso-image".
   1055 
   1056      iso-image-source
   1057                    Perform "make iso-image-source".
   1058 
   1059      install-image
   1060                    Perform "make install-image".
   1061 
   1062      live-image    Perform "make live-image".
   1063 
   1064      list-arch     Show a list of valid MACHINE and MACHINE_ARCH settings, the
   1065                    default MACHINE_ARCH for each MACHINE, and aliases for
   1066                    MACHINE/MACHINE_ARCH pairs, and then exits.  The -m or -a
   1067                    options (or both) may be used to specify glob patterns that
   1068                    will be used to narrow the list of results; for example,
   1069                    "build.sh -m 'evb*' -a '*arm*' list-arch" will list all
   1070                    known MACHINE/MACHINE_ARCH values in which either MACHINE
   1071                    or ALIAS matches the pattern `evb*', and MACHINE_ARCH
   1072                    matches the pattern `*arm*'.
   1073 
   1074      The following command line options alter the behaviour of the build.sh
   1075      operations described above:
   1076 
   1077      -a arch   Set the value of MACHINE_ARCH to arch.  See the -m option for
   1078                more information.
   1079 
   1080      -B buildid
   1081                Set the value of BUILDID to buildid.  This will also append the
   1082                build identifier to the name of the "make" wrapper script so
   1083                that the resulting name is of the form
   1084                "nbmake-MACHINE-BUILDID".
   1085 
   1086      -C cdextras
   1087                Append cdextras to the CDEXTRA variable, which is a space-
   1088                separated list of files or directories that will be added to
   1089                the CD-ROM image that may be create by the "iso-image" or
   1090                "iso-image-source" operations.  Files will be added to the root
   1091                of the CD-ROM image, whereas directories will be copied
   1092                recursively.  If relative paths are specified, they will be
   1093                converted to absolute paths before being used.  Multiple paths
   1094                may be specified via multiple -C options, or via a single
   1095                option whose argument contains multiple space-separated paths.
   1096 
   1097      -c compiler
   1098                Select the compiler for the toolchain to build NetBSD and for
   1099                inclusion in the NetBSD distribution.  Supported choices:
   1100 
   1101                      clang
   1102 
   1103                      gcc [default]
   1104 
   1105                The compiler used to build the toolchain can be different; see
   1106                HOST_CC and HOST_CXX.
   1107 
   1108      -D dest   Set the value of DESTDIR to dest.  If a relative path is
   1109                specified, it will be converted to an absolute path before
   1110                being used.
   1111 
   1112      -E        Set `expert' mode.  This overrides various sanity checks, and
   1113                allows: DESTDIR does not have to be set to a non-root path for
   1114                builds, and MKUNPRIVED=yes does not have to be set when
   1115                building as a non-root user.
   1116 
   1117                Note: It is highly recommended that you know what you are doing
   1118                when you use this option.
   1119 
   1120      -h        Show a help message, and exit.
   1121 
   1122      -j njob   Run up to njob make(1) subjobs in parallel; passed through to
   1123                make(1).  If you see failures for reasons other than running
   1124                out of memory while using build.sh with -j, please save
   1125                complete build logs so the failures can be analyzed.
   1126 
   1127                To achieve the fastest builds, -j values between (1 + the
   1128                number of CPUs) and (2 * the number of CPUs) are recommended.
   1129                Use lower values on machines with limited memory or I/O
   1130                bandwidth.
   1131 
   1132      -M obj    Set MAKEOBJDIRPREFIX to obj.  Unsets MAKEOBJDIR.  See "-O obj"
   1133                for more information.
   1134 
   1135                For instance, if the source directory is /usr/src, a setting of
   1136                "-M /usr/obj" will place build-time files under
   1137                /usr/obj/usr/src/bin, /usr/obj/usr/src/lib,
   1138                /usr/obj/usr/src/usr.bin, and so forth.
   1139 
   1140                If a relative path is specified, it will be converted to an
   1141                absolute path before being used.  build.sh imposes the
   1142                restriction that the argument to the -M option must not begin
   1143                with a "$" (dollar sign) character; otherwise it would be too
   1144                difficult to determine whether the value is an absolute or a
   1145                relative path.  If the directory does not already exist,
   1146                build.sh will create it.
   1147 
   1148      -m mach   Set the value of MACHINE to mach, unless the mach argument is
   1149                an alias that refers to a MACHINE/MACHINE_ARCH pair, in which
   1150                case both MACHINE and MACHINE_ARCH are set from the alias.
   1151                Such aliases are interpreted entirely by build.sh; they are not
   1152                used by any other part of the build system.  The MACHINE_ARCH
   1153                setting implied by mach will override any value of MACHINE_ARCH
   1154                in the process environment, but will not override a value set
   1155                by the -a option.  All cross builds require -m, but if unset on
   1156                a NetBSD host, the host's value of MACHINE will be detected and
   1157                used automatically.
   1158 
   1159                See the list-arch operation for a way to get a list of valid
   1160                MACHINE and MACHINE_ARCH settings.
   1161 
   1162      -N noiselevel
   1163                Set the "noisyness" level of the build, by setting MAKEVERBOSE
   1164                to noiselevel.
   1165 
   1166      -n        Show the commands that would be executed by build.sh, but do
   1167                not make any changes.  This is similar in concept to "make -n".
   1168 
   1169      -O obj    Create an appropriate transform macro for MAKEOBJDIR that will
   1170                place the built object files under obj.  Unsets
   1171                MAKEOBJDIRPREFIX.
   1172 
   1173                For instance, a setting of "-O /usr/obj" will place build-time
   1174                files under /usr/obj/bin, /usr/obj/lib, /usr/obj/usr.bin, and
   1175                so forth.
   1176 
   1177                If a relative path is specified, it will be converted to an
   1178                absolute path before being used.  build.sh imposes the
   1179                restriction that the argument to the -O option must not contain
   1180                a "$" (dollar sign) character.  If the directory does not
   1181                already exist, build.sh will create it.
   1182 
   1183                In normal use, exactly one of the -M or -O options should be
   1184                specified.  If neither -M nor -O is specified, then a default
   1185                object directory will be chosen according to rules in
   1186                <bsd.obj.mk>.  Relying on this default is not recommended
   1187                because it is determined by complex rules that are influenced
   1188                by the values of several variables and by the location of the
   1189                source directory.
   1190 
   1191                Note: Placing the obj directory location outside of the default
   1192                source tree hierarchy makes it easier to manually clear out old
   1193                files in the event the "make cleandir" operation is unable to
   1194                do so.  (See CAVEATS below.)
   1195 
   1196                Note: The use of one of -M or -O is the only means of building
   1197                multiple machine architecture userlands from the same source
   1198                tree without cleaning between builds (in which case, one would
   1199                specify distinct obj locations for each).
   1200 
   1201      -o        Set the value of MKOBJDIRS to "no".  Otherwise, it will be
   1202                automatically set to "yes".  This default is opposite to the
   1203                behaviour when not using build.sh.
   1204 
   1205      -P        Set the value of MKREPRO and MKREPRO_TIMESTAMP to the latest
   1206                source CVS timestamp for reproducible builds.
   1207 
   1208      -R rel    Set the value of RELEASEDIR to rel.  If a relative path is
   1209                specified, it will be converted to an absolute path before
   1210                being used.
   1211 
   1212      -r        Remove the contents of DESTDIR and TOOLDIR before building
   1213                (provides a clean starting point).  This will skip deleting
   1214                DESTDIR if building on a native system to the root directory.
   1215 
   1216      -S seed   Change the value of BUILDSEED to seed.  This should rarely be
   1217                necessary.
   1218 
   1219      -T tools  Set the value of TOOLDIR to tools.  If a relative path is
   1220                specified, it will be converted to an absolute path before
   1221                being used.  If set, the bootstrap "make" will only be rebuilt
   1222                if the source files for make(1) have changed.
   1223 
   1224      -U        Set MKUNPRIVED=yes.
   1225 
   1226      -u        Set MKUPDATE=yes.
   1227 
   1228      -V var=[value]
   1229                Set the environment variable var to an optional value.  This is
   1230                propagated to the nbmake wrapper.
   1231 
   1232      -w wrapper
   1233                Create the nbmake wrapper script (see below) in a custom
   1234                location, specified by wrapper.  This allows, for instance, to
   1235                place the wrapper in PATH automatically.
   1236 
   1237                Note: wrapper is the full name of the file, not just a
   1238                directory name.  If a relative path is specified, it will be
   1239                converted to an absolute path before being used.
   1240 
   1241      -X x11src
   1242                Set the value of X11SRCDIR to x11src.  If a relative path is
   1243                specified, it will be converted to an absolute path before
   1244                being used.
   1245 
   1246      -x        Set MKX11=yes.
   1247 
   1248      -Z var    Unset ("zap") the environment variable var.  This is propagated
   1249                to the nbmake wrapper.
   1250 
   1251      -?        Show a help message, and exit.
   1252 
   1253    The "nbmake-MACHINE" wrapper script
   1254      If using the build.sh script to build NetBSD, a nbmake-MACHINE script
   1255      will be created in TOOLDIR/bin upon the first build to assist in building
   1256      subtrees on a cross-compile host.
   1257 
   1258      nbmake-MACHINE can be invoked in lieu of make(1), and will instead call
   1259      the up-to-date version of "nbmake" installed into TOOLDIR/bin with
   1260      several key variables pre-set, including MACHINE, MACHINE_ARCH, and
   1261      TOOLDIR.  nbmake-MACHINE will also set variables specified with -V, and
   1262      unset variables specified with -Z.
   1263 
   1264      This script can be symlinked into a directory listed in PATH, or called
   1265      with an absolute path.
   1266 
   1267 EXAMPLES
   1268      1.   % ./build.sh [OPTIONS] tools kernel=GENERIC
   1269 
   1270           Build a new toolchain, and use the new toolchain to configure and
   1271           build a new GENERIC kernel.
   1272 
   1273      2.   % ./build.sh [OPTIONS] -U distribution
   1274 
   1275           Using unprivileged mode, build a complete distribution to a DESTDIR
   1276           directory that build.sh selects (and will show).
   1277 
   1278      3.   # ./build.sh [OPTIONS] -U install=/
   1279 
   1280           As root, install to / the distribution that was built by example 2.
   1281           Even though this is run as root, -U is required so that the
   1282           permissions stored in DESTDIR/METALOG are correctly applied to the
   1283           files as they're copied to /.
   1284 
   1285      4.   % ./build.sh [OPTIONS] -U -u release
   1286 
   1287           Using unprivileged mode, build a complete release to DESTDIR and
   1288           RELEASEDIR directories that build.sh selects (and will show).
   1289           MKUPDATE=yes (-u) is set to prevent the "make cleandir", so that if
   1290           this is run after example 2, it doesn't need to redo that portion of
   1291           the release build.
   1292 
   1293 OBSOLETE VARIABLES
   1294      MKKDEBUG    Use MKDEBUGKERNEL.
   1295 
   1296      NBUILDJOBS  Use the build.sh and make(1) option -j instead.
   1297 
   1298      USE_NEW_TOOLCHAIN
   1299                  The new toolchain is now the default.  To disable, use
   1300                  TOOLCHAIN_MISSING=yes.
   1301 
   1302 SEE ALSO
   1303      ar(1), config(1), ctags(1), cvs(1), cvslatest(1), ex(1), g++(1), gzip(1),
   1304      ident(1), ld(1), lint(1), make(1), mkisofs(1), sh(1), uname(1), vi(1),
   1305      options(4), mk.conf(5), atf(7), hier(7), release(7), sysctl(7),
   1306      etcupdate(8), installboot(8), mount(8), mtree(8), postinstall(8),
   1307      sysinst(8), pkgsrc/sysutils/cdrtools
   1308 
   1309 HISTORY
   1310      The build.sh based build scheme was introduced for NetBSD 1.6 as
   1311      USE_NEW_TOOLCHAIN, and re-worked to TOOLCHAIN_MISSING after that.
   1312 
   1313 CAVEATS
   1314      After significant updates to third-party components in the source tree,
   1315      the "make cleandir" operation may be insufficient to clean out old files
   1316      in object directories.  Instead, one may have to manually remove the
   1317      files.  Consult the UPDATING file for notices concerning this.
   1318 
   1319 NetBSD                           June 11, 2023                          NetBSD
   1320