Annotation of wikisrc/guide/build.mdwn, revision 1.1
1.1 ! jdf 1: # Crosscompiling NetBSD with build.sh
! 2:
! 3: When targeting a product for an embedded platform, it's not feasible to have all
! 4: the development tools available on that same platform. Instead, some method of
! 5: crosscompiling is usually used today. NetBSD 1.6 and forward comes with a
! 6: framework to build both the operating system's kernel and the whole userland for
! 7: either the same platform that the compiler runs on, or for a different platform,
! 8: using crosscompiling. Crosscompiling requires assembler, linker, compiler etc.
! 9: to be available and built for the target platform. The new build scheme will
! 10: take care of creating these tools for a given platform, and make them available
! 11: ready to use to do development work.
! 12:
! 13: In this chapter, we will show how to use `build.sh` to first create a
! 14: crosscompiling toolchain, including cross-compiler, cross-assembler,
! 15: cross-linker and so on. While native kernel builds are covered in [[Compiling
! 16: the kernel|guide/kernel]], these tools are then used to manually configure and
! 17: crosscompile a kernel for a different platform, and then show how to use
! 18: `build.sh` as a convenient alternative. After that works, the whole NetBSD
! 19: userland will be compiled and packed up in the format of a NetBSD release. In
! 20: the examples, we will use the Sun UltraSPARC (*sparc64*) 64-bit platform as
! 21: target platform, any other platform supported by NetBSD can be targetted as well
! 22: specifying its name (see `/usr/src/sys/arch`).
! 23:
! 24: Before starting, take note that it is assumed that the NetBSD sources from the
! 25: `netbsd-4-0` branch are available in `/usr/src` as described in
! 26: [[Obtaining the sources|guide/fetch]].
! 27:
! 28: A more detailed description of the `build.sh` framework can be found in Luke
! 29: Mewburn and Matthew Green's
! 30: [paper](http://www.mewburn.net/luke/papers/build.sh.pdf) and their
! 31: [presentation](http://www.mewburn.net/luke/talks/bsdcon-2003/index.html) from
! 32: BSDCon 2003 as well as in `/usr/src/BUILDING`.
! 33:
! 34: ## Building the crosscompiler
! 35:
! 36: The first step to do cross-development is to get all the necessary tools
! 37: available. In NetBSD terminology, this is called the "toolchain", and it
! 38: includes BSD-compatible
! 39: [make(1)](http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-current),
! 40: C/C++ compilers, linker, assembler,
! 41: [config(8)](http://netbsd.gw.com/cgi-bin/man-cgi?config+8+NetBSD-current),
! 42: as well as a fair number of tools that are only required when crosscompiling a
! 43: full NetBSD release, which we won't cover here.
! 44:
! 45: The command to create the crosscompiler is quite simple, using NetBSD's new
! 46: `src/build.sh` script. Please note that all the commands here can be run as
! 47: normal (non-root) user:
! 48:
! 49: $ cd /usr/src
! 50: $ ./build.sh -m sparc64 tools
! 51:
! 52: Make sure that the directory `/usr/obj` does exist, or add a `-O` option to the
! 53: build.sh call, redirecting the object directory someplace else.
! 54:
! 55: If the tools have been built previously and they only need updated, then the
! 56: update option `-u` can be used to only rebuild tools that have changed:
! 57:
! 58: $ ./build.sh -u -m sparc64 tools
! 59:
! 60: When the tools are built, information about them and several environment
! 61: variables is printed out:
! 62:
! 63: ...
! 64: ===> build.sh started: Thu Dec 2 22:18:11 CET 2007
! 65: ===> build.sh ended: Thu Dec 2 22:28:22 CET 2007
! 66: ===> Summary of results:
! 67: build.sh command: ./build.sh -m sparc64 tools
! 68: build.sh started: Thu Dec 2 22:18:11 CET 2007
! 69: No nonexistent/bin/nbmake, needs building.
! 70: Bootstrapping nbmake
! 71: MACHINE: sparc64
! 72: MACHINE_ARCH: sparc64
! 73: TOOLDIR path: /usr/src/tooldir.NetBSD-4.0-i386
! 74: DESTDIR path: /usr/src/destdir.sparc64
! 75: RELEASEDIR path: /usr/src/releasedir
! 76: Created /usr/src/tooldir.NetBSD-4.0-i386/bin/nbmake
! 77: makewrapper: /usr/src/tooldir.NetBSD-4.0-i386/bin/nbmake-sparc64
! 78: Updated /usr/src/tooldir.NetBSD-4.0-i386/bin/nbmake-sparc64
! 79: Tools built to /usr/src/tooldir.NetBSD-4.0-i386
! 80: build.sh started: Thu Dec 2 22:18:11 CET 2007
! 81: build.sh ended: Thu Dec 2 22:28:22 CET 2007
! 82: ===> .
! 83:
! 84: During the build, object directories are used consistently, i.e. special
! 85: directories are kept that keep the platform-specific object files and compile
! 86: results. In our example, they will be kept in directories named `obj.sparc64` as
! 87: we build for UltraSPARC as target platform.
! 88:
! 89: The toolchain itself is part of this, but as it's hosted and compiled for a i386
! 90: system, it will get placed in its own directory indicating where to cross-build
! 91: from. Here's where our crosscompiler tools are located:
! 92:
! 93: $ pwd
! 94: /usr/src
! 95: $ ls -d tooldir.*
! 96: tooldir.NetBSD-4.0-i386
! 97:
! 98: So the general rule of thumb is for a given `host` and `target` system
! 99: combination, the crosscompiler will be placed in the `src/tooldir.host`
! 100: directory by default. A full list of all tools created for crosscompiling the
! 101: whole NetBSD operating system includes:
! 102:
! 103: $ ls tooldir.NetBSD-4.0-i386/bin/
! 104: nbasn1_compile nbmakefs nbzic
! 105: nbcap_mkdb nbmakeinfo sparc64--netbsd-addr2li
! 106: nbcat nbmakewhatis sparc64--netbsd-ar
! 107: nbcksum nbmenuc sparc64--netbsd-as
! 108: nbcompile_et nbmkcsmapper sparc64--netbsd-c++
! 109: nbconfig nbmkdep sparc64--netbsd-c++filt
! 110: nbcrunchgen nbmkesdb sparc64--netbsd-cpp
! 111: nbctags nbmklocale sparc64--netbsd-dbsym
! 112: nbdb nbmknod sparc64--netbsd-g++
! 113: nbeqn nbmktemp sparc64--netbsd-g77
! 114: nbfgen nbmsgc sparc64--netbsd-gcc
! 115: nbfile nbmtree sparc64--netbsd-gcc-3.3
! 116: nbgencat nbnroff sparc64--netbsd-gccbug
! 117: nbgroff nbpax sparc64--netbsd-gcov
! 118: nbhexdump nbpic sparc64--netbsd-ld
! 119: nbhost-mkdep nbpwd_mkdb sparc64--netbsd-lint
! 120: nbindxbib nbrefer sparc64--netbsd-mdsetim
! 121: nbinfo nbrpcgen sparc64--netbsd-nm
! 122: nbinfokey nbsoelim sparc64--netbsd-objcopy
! 123: nbinstall nbstat sparc64--netbsd-objdump
! 124: nbinstall-info nbsunlabel sparc64--netbsd-ranlib
! 125: nbinstallboot nbtbl sparc64--netbsd-readelf
! 126: nblex nbtexi2dvi sparc64--netbsd-size
! 127: nblorder nbtexindex sparc64--netbsd-strings
! 128: nbm4 nbtsort sparc64--netbsd-strip
! 129: nbmake nbuudecode
! 130: nbmake-sparc64 nbyacc
! 131:
! 132: As you can see, most of the tools that are available native on NetBSD are
! 133: present with some program prefix to identify the target platform for tools that
! 134: are specific to a certain target platform.
! 135:
! 136: One important tool that should be pointed out here is `nbmake-sparc64`. This is
! 137: a shell wrapper for a BSD compatible
! 138: [make(1)](http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386) command
! 139: that's setup to use all the right commands from the crosscompiler toolchain.
! 140: Using this wrapper instead of `/usr/bin/make` allows crosscompiling programs
! 141: that were written using the NetBSD Makefile infrastructure (see `src/share/mk`).
! 142: We will use this
! 143: [make(1)](http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386) wrapper
! 144: in a second to cross compile the kernel!
! 145:
! 146: ## Configuring the kernel manually
! 147:
! 148: Now that we have a working crosscompiler available, the "usual" steps for
! 149: building a kernel are needed - create a kernel config file, run
! 150: [config(1)](http://netbsd.gw.com/cgi-bin/man-cgi?config+1+NetBSD-5.0.1+i386),
! 151: then build. As the
! 152: [config(1)](http://netbsd.gw.com/cgi-bin/man-cgi?config+1+NetBSD-5.0.1+i386)
! 153: program used to create header files and Makefile for a kernel build is platform
! 154: specific, we need to use the `nbconfig` program that's part of our new
! 155: toolchain. That aside, the procedure is just as like compiling a "native" NetBSD
! 156: kernel. Commands involved here are:
! 157:
! 158: $ cd /usr/src/sys/arch/sparc64/conf
! 159: $ cp GENERIC MYKERNEL
! 160: $ vi MYKERNEL
! 161: $ /usr/src/tooldir.NetBSD-4.0-i386/bin/nbconfig MYKERNEL
! 162:
! 163: That's all. This command has created a directory `../compile/MYKERNEL` with a
! 164: number of header files defining information about devices to compile into the
! 165: kernel, a Makefile that is setup to build all the needed files for the kernel,
! 166: and link them together.
! 167:
! 168: ## Crosscompiling the kernel manually
! 169:
! 170: We have all the files and tools available to crosscompile our UltraSPARC-based
! 171: kernel from our Intel-based host system, so let's get to it! After changing in
! 172: the directory created in the previous step, we need to use the crosscompiler
! 173: toolchain's `nbmake-sparc64` shell wrapper, which just calls make(1) with all
! 174: the necessary settings for crosscompiling for a sparc64 platform:
! 175:
! 176: $ cd ../compile/MYKERNEL/
! 177: $ /usr/src/tooldir.NetBSD-4.0-i386/bin/nbmake-sparc64 depend
! 178: $ /usr/src/tooldir.NetBSD-4.0-i386/bin/nbmake-sparc64
! 179:
! 180: This will churn away a bit, then spit out a kernel:
! 181:
! 182: ...
! 183: text data bss dec hex filename
! 184: 5016899 163728 628752 5809379 58a4e3 netbsd
! 185: $ ls -l netbsd
! 186: -rwxr-xr-x 1 feyrer 666 5874663 Dec 2 23:17 netbsd
! 187: $ file netbsd
! 188: netbsd: ELF 64-bit MSB executable, SPARC V9, version 1 (SYSV), statically linked, not stripped
! 189:
! 190: Now the kernel in the file `netbsd` can either be transferred to a UltraSPARC
! 191: machine (via NFS, FTP, scp, etc.) and booted from a possible harddisk, or
! 192: directly from our cross-development machine using NFS.
! 193:
! 194: After configuring and crosscompiling the kernel, the next logical step is to
! 195: crosscompile the whole system, and bring it into a distribution-ready format.
! 196: Before doing so, an alternative approach to crosscompiling a kernel will be
! 197: shown in the next section, using the `build.sh` script to do configuration and
! 198: crosscompilation of the kernel in one step.
! 199:
! 200: ## Crosscompiling the kernel with build.sh
! 201:
! 202: A cross compiled kernel can be done manually as described in the previous
! 203: sections, or by the easier method of using `build.sh`, which will be shown here.
! 204:
! 205: Preparation of the kernel config file is the same as described above:
! 206:
! 207: $ cd /usr/src/sys/arch/sparc64/conf
! 208: $ cp GENERIC MYKERNEL
! 209: $ vi MYKERNEL
! 210:
! 211: Then edit `MYKERNEL` and once finished, all that needs to be done is to use
! 212: `build.sh` to build the kernel (it will also configure it, running the steps
! 213: shown above):
! 214:
! 215: $ cd /usr/src
! 216: $ ./build.sh -u -m sparc64 kernel=MYKERNEL
! 217:
! 218: Notice that update (`-u`) was specified, the tools are already built, there is
! 219: no reason to rebuild all of the tools. Once the kernel is built, `build.sh` will
! 220: print out the location of it along with other information:
! 221:
! 222: ...
! 223: ===> Summary of results:
! 224: build.sh command: ./build.sh -u -m sparc64 kernel=MYKERNEL
! 225: build.sh started: Thu Dec 2 23:30:02 CET 2007
! 226: No nonexistent/bin/nbmake, needs building.
! 227: Bootstrapping nbmake
! 228: MACHINE: sparc64
! 229: MACHINE_ARCH: sparc64
! 230: TOOLDIR path: /usr/src/tooldir.NetBSD-4.0-i386
! 231: DESTDIR path: /usr/src/destdir.sparc64
! 232: RELEASEDIR path: /usr/src/releasedir
! 233: Created /usr/src/tooldir.NetBSD-4.0-i386/bin/nbmake
! 234: makewrapper: /usr/src/tooldir.NetBSD-4.0-i386/bin/nbmake-sparc64
! 235: Updated /usr/src/tooldir.NetBSD-4.0-i386/bin/nbmake-sparc64
! 236: Building kernel without building new tools
! 237: Building kernel: MYKERNEL
! 238: Build directory: /usr/src/sys/arch/sparc64/compile/obj.sparc64/GENERIC
! 239: Kernels built from MYKERNEL:
! 240: /usr/src/sys/arch/sparc64/compile/obj.sparc64/MYKERNEL/netbsd
! 241: build.sh started: Thu Dec 2 23:30:02 CET 2007
! 242: build.sh ended: Thu Dec 2 23:38:22 CET 2007
! 243: ===> .
! 244:
! 245: The path to the kernel built is of interest here:
! 246: `/usr/src/sys/arch/sparc64/compile/obj.sparc64/MYKERNEL/netbsd`, it can be used
! 247: the same way as described above.
! 248:
! 249: ## Crosscompiling the userland
! 250:
! 251: By now it is probably becoming clear that the toolchain actually works in
! 252: stages. First the crosscompiler is built, then a kernel. Since `build.sh` will
! 253: attempt to rebuild the tools at every invocation, using `update` saves time. It
! 254: is probably also clear that outside of a few options, the `build.sh` semantics
! 255: are basically `build.sh command`. So, it stands to reason that building the
! 256: whole userland and/or a release is a matter of using the right commands.
! 257:
! 258: It should be no surprise that building and creating a release would look like
! 259: the following:
! 260:
! 261: $ ./build.sh -U -u -m sparc64 release
! 262:
! 263: These commands will compile the full NetBSD userland and put it into a
! 264: destination directory, and then build a release from it in a release directory.
! 265: The `-U` switch is added here for an *unprivileged* build, i.e. one that's
! 266: running as normal user and not as root. As no further switches to `build.sh`
! 267: were given nor any environment variables were set, the defaults of
! 268: `DESTDIR=/usr/src/destdir.sparc64` and `RELEASEDIR=/usr/src/releasedir` are
! 269: used, as shown in the `build.sh`-output above.
! 270:
! 271: ## Crosscompiling the X Window System
! 272:
! 273: The NetBSD project has its own copy of the X Window System's source which is
! 274: currently based on XFree86 version 4, and which contains changes to make X going
! 275: on as many of the platforms supported by NetBSD as possible. Due to this, it is
! 276: desirable to use the X Window System version available from and for NetBSD,
! 277: which can also be crosscompiled much like the kernel and base system. To do so,
! 278: the xsrc sources must be checked out from CVS into `/usr/xsrc` just as src
! 279: and pkgsrc were as described in [[Obtaining the sources|guide/fetch]].
! 280:
! 281: After this, X can be crosscompiled for the target platform by adding the `-x`
! 282: switch to build.sh, e.g. when creating a full release:
! 283:
! 284: $ ./build.sh -U -x -u -m sparc64 release
! 285:
! 286: The `-U` flag for doing unprivileged (non-root) builds and the `-u` flag for not
! 287: removing old files before building as well as the `-m arch` option to define the
! 288: target architecture have already been introduced, and the `-x` option to also
! 289: (cross)compile xsrc is another option.
! 290:
! 291: ## Changing build behaviour
! 292:
! 293: Similar to the old, manual building method, the new toolchain has a lot of
! 294: variables that can be used to direct things like where certain files go, what
! 295: (if any) tools are used and so on. A look in `src/BUILDING` covers most of them.
! 296: In this section some examples of changing default settings are given, each
! 297: following its own ways.
! 298:
! 299: ### Changing the Destination Directory
! 300:
! 301: Many people like to track NetBSD-current and perform cross compiles of
! 302: architectures that they use. The logic for this is simple, sometimes a new
! 303: feature or device becomes available and someone may wish to use it. By keeping
! 304: track of changes and building every now and again, one can be assured that these
! 305: architectures can build their own release.
! 306:
! 307: It is reasonable to assume that if one is tracking and building for more than
! 308: one architecture, they might want to keep the builds in a different location
! 309: than the default. There are two ways to go about this, either use a script to
! 310: set the new DESTDIR, or simply do so interactively. In any case, it can be set
! 311: the same way as any other variable (depending on your shell of course).
! 312:
! 313: For bash, the Bourne or Korn shell, this is:
! 314:
! 315: $ export DESTDIR=/usr/builds/sparc64
! 316:
! 317: For tcsh and the C shell, the command is:
! 318:
! 319: $ setenv DESTDIR /usr/builds/sparc64
! 320:
! 321: Simple enough. When the build is run, the binaries and files will be sent to
! 322: `/usr/builds`.
! 323:
! 324: ### Static Builds
! 325:
! 326: The NetBSD toolchain builds and links against shared libraries by default. Many
! 327: users still prefer to be able to link statically. Sometimes a small system can
! 328: be created without having shared libraries, which is a good example of doing a
! 329: full static build. If a particular build machine will always need one
! 330: environment variable set in a particular way, then it is easiest to simply add
! 331: the changed setting to `/etc/mk.conf`.
! 332:
! 333: To make sure a build box always builds statically, simply add the following line
! 334: to `/etc/mk.conf`:
! 335:
! 336: LDSTATIC=-static
! 337:
! 338: ### Using build.sh options
! 339:
! 340: Besides variables in environment and `/etc/mk.conf`, the build process can be
! 341: influenced by a number of switches to the `build.sh` script itself, as we have
! 342: already seen when forcing unprivileged (non-root) builds, selecting the target
! 343: architecture or preventing deletion of old files before the build. All these
! 344: options can be listed by running `build.sh -h`:
! 345:
! 346: $ cd /usr/src
! 347: $ build.sh -h
! 348: Usage: build.sh [-EnorUux] [-a arch] [-B buildid] [-D dest] [-j njob]
! 349: [-M obj] [-m mach] [-N noisy] [-O obj] [-R release] [-T tools]
! 350: [-V var=[value]] [-w wrapper] [-X x11src] [-Z var]
! 351: operation [...]
! 352:
! 353: Build operations (all imply "obj" and "tools"):
! 354: build Run "make build".
! 355: distribution Run "make distribution" (includes DESTDIR/etc/ files).
! 356: release Run "make release" (includes kernels and distrib media).
! 357:
! 358: Other operations:
! 359: help Show this message and exit.
! 360: makewrapper Create nbmake-${MACHINE} wrapper and nbmake.
! 361: Always performed.
! 362: obj Run "make obj". [Default unless -o is used]
! 363: tools Build and install tools.
! 364: install=idir Run "make installworld" to `idir' to install all sets
! 365: except `etc'. Useful after "distribution" or "release"
! 366: kernel=conf Build kernel with config file `conf'
! 367: releasekernel=conf Install kernel built by kernel=conf to RELEASEDIR.
! 368: sets Create binary sets in RELEASEDIR/MACHINE/binary/sets.
! 369: DESTDIR should be populated beforehand.
! 370: sourcesets Create source sets in RELEASEDIR/source/sets.
! 371: params Display various make(1) parameters.
! 372:
! 373: Options:
! 374: -a arch Set MACHINE_ARCH to arch. [Default: deduced from MACHINE]
! 375: -B buildId Set BUILDID to buildId.
! 376: -D dest Set DESTDIR to dest. [Default: destdir.MACHINE]
! 377: -E Set "expert" mode; disables various safety checks.
! 378: Should not be used without expert knowledge of the build system.
! 379: -j njob Run up to njob jobs in parallel; see make(1) -j.
! 380: -M obj Set obj root directory to obj; sets MAKEOBJDIRPREFIX.
! 381: Unsets MAKEOBJDIR.
! 382: -m mach Set MACHINE to mach; not required if NetBSD native.
! 383: -N noisy Set the noisyness (MAKEVERBOSE) level of the build:
! 384: 0 Quiet
! 385: 1 Operations are described, commands are suppressed
! 386: 2 Full output
! 387: [Default: 2]
! 388: -n Show commands that would be executed, but do not execute them.
! 389: -O obj Set obj root directory to obj; sets a MAKEOBJDIR pattern.
! 390: Unsets MAKEOBJDIRPREFIX.
! 391: -o Set MKOBJDIRS=no; do not create objdirs at start of build.
! 392: -R release Set RELEASEDIR to release. [Default: releasedir]
! 393: -r Remove contents of TOOLDIR and DESTDIR before building.
! 394: -T tools Set TOOLDIR to tools. If unset, and TOOLDIR is not set in
! 395: the environment, nbmake will be (re)built unconditionally.
! 396: -U Set MKUNPRIVED=yes; build without requiring root privileges,
! 397: install from an UNPRIVED build with proper file permissions.
! 398: -u Set MKUPDATE=yes; do not run "make clean" first.
! 399: Without this, everything is rebuilt, including the tools.
! 400: -V v=[val] Set variable `v' to `val'.
! 401: -w wrapper Create nbmake script as wrapper.
! 402: [Default: ${TOOLDIR}/bin/nbmake-${MACHINE}]
! 403: -X x11src Set X11SRCDIR to x11src. [Default: /usr/xsrc]
! 404: -x Set MKX11=yes; build X11R6 from X11SRCDIR
! 405: -Z v Unset ("zap") variable `v'.
! 406:
! 407: As can be seen, a number of switches can be set to change the standard build
! 408: behaviour. A number of them has already been introduced, others can be set as
! 409: appropriate.
! 410:
! 411: ### make(1) variables used during build
! 412:
! 413: Several variables control the behaviour of NetBSD builds. Unless otherwise
! 414: specified, these variables may be set in either the process environment or in
! 415: the [make(1)](http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386)
! 416: configuration file specified by `MAKECONF`. For a definitive list of these
! 417: options, see `BUILDING` and `share/mk/bsd.README` files in the toplevel source
! 418: directory.
! 419:
! 420: * *BUILDID* -- Identifier for the build. The identifier will be appended to
! 421: object directory names, and can be consulted in the
! 422: [make(1)](http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386)
! 423: configuration file in order to set additional build parameters, such as
! 424: compiler flags.
! 425:
! 426: * *DESTDIR* -- Directory to contain the built NetBSD system. If set, special
! 427: options are passed to the compilation tools to prevent their default use of
! 428: the host system's `/usr/include`, `/usr/lib`, and so forth. This pathname
! 429: should not end with a slash (/) character (For installation into the system's
! 430: root directory, set `DESTDIR` to an empty string). The directory must reside
! 431: on a filesystem which supports long filenames and hard links.
! 432:
! 433: Defaults to an empty string if `USETOOLS` is `yes`; unset otherwise. Note:
! 434: `build.sh` will provide a default (destdir.MACHINE in the top-level
! 435: `.OBJDIR`) unless run in `expert` mode.
! 436:
! 437: * *EXTERNAL\_TOOLCHAIN* -- If defined by the user, points to the root of an
! 438: external toolchain (e.g. `/usr/local/gnu`). This enables the cross-build
! 439: framework even when default toolchain is not available (see
! 440: `TOOLCHAIN_MISSING` below).
! 441:
! 442: Default: Unset
! 443:
! 444: * *MAKEVERBOSE* -- The verbosity of build messages. Supported values:
! 445:
! 446: * `0` -- No descriptive messages are shown.
! 447: * `1` -- Descriptive messages are shown.
! 448: * `2` -- Descriptive messages are shown (prefixed with a '\#') and command
! 449: output is not suppressed.
! 450:
! 451: Default: 2
! 452:
! 453: * *MKCATPAGES* -- Can be set to `yes` or `no`. Indicates whether preformatted
! 454: plaintext manual pages will be created during a build.
! 455:
! 456: Default: `yes`
! 457:
! 458: * *MKCRYPTO* -- Can be set to `yes` or `no`. Indicates whether cryptographic
! 459: code will be included in a build; provided for the benefit of countries that
! 460: do not allow strong cryptography. Will not affect the standard low-security
! 461: password encryption system,
! 462: [crypt(3)](http://netbsd.gw.com/cgi-bin/man-cgi?crypt+3+NetBSD-5.0.1+i386).
! 463:
! 464: Default: `yes`
! 465:
! 466: * *MKDOC* -- Can be set to `yes` or `no`. Indicates whether system
! 467: documentation destined for `DESTDIR``/usr/share/doc` will be installed during
! 468: a build.
! 469:
! 470: Default: `yes`
! 471:
! 472: * *MKHOSTOBJ* -- Can be set to `yes` or `no`. If set to `yes`, then for
! 473: programs intended to be run on the compile host, the name, release and
! 474: architecture of the host operating system will be suffixed to the name of the
! 475: object directory created by `make obj`. This allows for multiple host systems
! 476: to compile NetBSD for a single target. If set to `no`, then programs built to
! 477: be run on the compile host will use the same object directory names as
! 478: programs built to be run on the target.
! 479:
! 480: Default: `no`
! 481:
! 482: * *MKINFO* -- Can be set to `yes` or `no`. Indicates whether GNU info files,
! 483: used for the documentation of most of the compilation tools, will be created
! 484: and installed during a build.
! 485:
! 486: Default: `yes`
! 487:
! 488: * *MKLINT* -- Can be set to `yes` or `no`. Indicates whether
! 489: [lint(1)](http://netbsd.gw.com/cgi-bin/man-cgi?lint+1+NetBSD-5.0.1+i386) will
! 490: be run against portions of the NetBSD source code during the build, and
! 491: whether lint libraries will be installed into `DESTDIR``/usr/libdata/lint`
! 492:
! 493: Default: `yes`
! 494:
! 495: * *MKMAN* -- Can be set to `yes` or `no`. Indicates whether manual pages will
! 496: be installed during a build.
! 497:
! 498: Default: `yes`
! 499:
! 500: * *MKNLS* -- Can be set to `yes` or `no`. Indicates whether Native Language
! 501: System locale zone files will be compiled and installed during a build.
! 502:
! 503: Default: `yes`
! 504:
! 505: * *MKOBJ* -- Can be set to `yes` or `no`. Indicates whether object directories
! 506: will be created when running `make obj`. If set to `no`, then all built files
! 507: will be located inside the regular source tree.
! 508:
! 509: Default: `yes`
! 510:
! 511: * *MKPIC* -- Can be set to `yes` or `no`. Indicates whether shared objects and
! 512: libraries will be created and installed during a build. If set to `no`, the
! 513: entire build will be statically linked.
! 514:
! 515: Default: Platform dependent. As of this writing, all platforms except sh3 default to `yes`
! 516:
! 517: * *MKPICINSTALL* -- Can be set to `yes` or `no`. Indicates whether the
! 518: [ar(1)](http://netbsd.gw.com/cgi-bin/man-cgi?ar+1+NetBSD-5.0.1+i386) format
! 519: libraries (`lib*_pic.a`), used to generate shared libraries, are installed
! 520: during a build.
! 521:
! 522: Default: `yes`
! 523:
! 524: * *MKPROFILE* -- Can be set to `yes` or `no`. Indicates whether profiled
! 525: libraries (`lib*_p.a`) will be built and installed during a build.
! 526:
! 527: Default: `yes`; however, some platforms turn off `MKPROFILE` by default at
! 528: times due to toolchain problems with profiled code.
! 529:
! 530: * *MKSHARE* -- Can be set to `yes` or `no`. Indicates whether files destined to
! 531: reside in `DESTDIR/usr/share` will be built and installed during a build.
! 532: If set to `no`, then all of `MKCATPAGES`, `MKDOC`, `MKINFO`, `MKMAN` and
! 533: `MKNLS` will be set to `no` unconditionally.
! 534:
! 535: Default: `yes`
! 536:
! 537: * *MKTTINTERP* -- Can be set to `yes` or `no`. For X builds, decides if the
! 538: TrueType bytecode interpreter is turned on. See
! 539: [freetype.org](http://freetype.org/patents.html) for details.
! 540:
! 541: Default: `no`
! 542:
! 543: * *MKUNPRIVED* -- Can be set to `yes` or `no`. Indicates whether an
! 544: unprivileged install will occur. The user, group, permissions and file flags
! 545: will not be set on the installed items; instead the information will be
! 546: appended to a file called `METALOG` in `DESTDIR`. The contents of `METALOG`
! 547: are used during the generation of the distribution tar files to ensure that
! 548: the appropriate file ownership is stored.
! 549:
! 550: Default: `no`
! 551:
! 552: * *MKUPDATE* -- Can be set to `yes` or `no`. Indicates whether all install
! 553: operations intended to write to `DESTDIR` will compare file timestamps before
! 554: installing, and skip the install phase if the destination files are
! 555: up-to-date. This also has implications on full builds (See below).
! 556:
! 557: Default: `no`
! 558:
! 559: * *MKX11* -- Can be set to `yes` or `no`. Indicates whether X11R6 is built from
! 560: `X11SRCDIR`.
! 561:
! 562: Default: `yes`
! 563:
! 564: * *TOOLDIR* -- Directory to hold the host tools, once built. This directory
! 565: should be unique to a given host system and NetBSD source tree. (However,
! 566: multiple targets may share the same `TOOLDIR`; the target-dependent files
! 567: have unique names). If unset, a default based on the
! 568: [uname(1)](http://netbsd.gw.com/cgi-bin/man-cgi?uname+1+NetBSD-5.0.1+i386)
! 569: information of the host platform will be created in the `.OBJDIR` of `src`.
! 570:
! 571: Default: Unset.
! 572:
! 573: * *USETOOLS* -- Indicates whether the tools specified by `TOOLDIR` should be
! 574: used as part of a build in progress. Must be set to `yes` if cross-compiling.
! 575:
! 576: * `yes` -- Use the tools from `TOOLDIR`.
! 577: * `no` -- Do not use the tools from `TOOLNAME`, but refuse to build native
! 578: compilation tool components that are version-specific for that tool.
! 579: * `never` -- Do not use the tools from `TOOLNAME`, even when building native
! 580: tool components. This is similar to the traditional NetBSD build method,
! 581: but does not verify that the compilation tools in use are up-to-date
! 582: enough in order to build the tree successfully. This may cause build or
! 583: runtime problems when building the whole NetBSD source tree.
! 584:
! 585: Default: `yes` if building all or part of a whole NetBSD source tree
! 586: (detected automatically); `no` otherwise (to preserve traditional semantics
! 587: of the `bsd.*.mk`
! 588: [make(1)](http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386)
! 589: include files).
! 590:
! 591: * *X11SRCDIR* -- Directory containing the X11R6 source. The main X11R6 source
! 592: is found in `X11SRCDIR/xfree/xc`.
! 593:
! 594: Default: `usr/xsrc`
! 595:
! 596: The following variables only affect the top level `Makefile` and do not affect
! 597: manually building subtrees of the NetBSD source code.
! 598:
! 599: * *INSTALLWORLDDIR* -- Location for the `make installworld` target to install
! 600: to.
! 601:
! 602: Default: `/`
! 603:
! 604: * *MKOBJDIRS* -- Can be set to `yes` or `no`. Indicates whether object
! 605: directories will be created automatically (via a `make obj` pass) at the
! 606: start of a build.
! 607:
! 608: Default: `no`
! 609:
! 610: * *MKUPDATE* -- Can be set to `yes` or `no`. If set, then addition to the
! 611: effects described for `MKUPDATE=yes` above, this implies the effect of
! 612: `NOCLEANDIR` (i.e., `make cleandir` is avoided).
! 613:
! 614: Default: `no`
! 615:
! 616: * *NOCLEANDIR* -- If set, avoids the `make cleandir` phase of a full build.
! 617: This has the effect of allowing only changed files in a source tree to
! 618: recompiled. This can speed up builds when updating only a few files in the
! 619: tree.
! 620:
! 621: Default: Unset
! 622:
! 623: * *NODISTRIBDIRS* -- If set, avoids the `make distrib-dirs` of a full build.
! 624: This skips running
! 625: [mtree(8)](http://netbsd.gw.com/cgi-bin/man-cgi?mtree+8+NetBSD-5.0.1+i386) on
! 626: `DESTDIR`, useful on systems where building as an unprivileged user, or where
! 627: it is known that the system wide mtree files have not changed.
! 628:
! 629: Default: Unset
! 630:
! 631: * *NOINCLUDES* -- If set, avoids the `make includes` phase of a full build.
! 632: This has the effect of preventing
! 633: [make(1)](http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386) from
! 634: thinking that some programs are out-of-date simply because system include
! 635: files have changed. However, this option should not be trusted when updating
! 636: the entire NetBSD source tree arbitrarily; it is suggested to use
! 637: `MKUPDATE=yes` in that case.
! 638:
! 639: Default: Unset
! 640:
! 641: * *RELEASEDIR* -- If set, specifies the directory to which a
! 642: [release(7)](http://netbsd.gw.com/cgi-bin/man-cgi?release+7+NetBSD-5.0.1+i386)
! 643: layout will be written at the end of a `make release`.
! 644:
! 645: Default: Unset
! 646:
! 647: * *TOOLCHAIN\_MISSING* -- Set to `yes` on platforms for which there is no
! 648: working in-tree toolchain, or if you need/wish using native system toolchain
! 649: (i.e. non-cross tools available via your shell search path).
! 650:
! 651: Default: depends on target platform; on platforms with in-tree toolchain is set to `no`.
! 652:
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb