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