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