bsd.README revision 1.123
1# $NetBSD: bsd.README,v 1.123 2003/07/20 14:36:12 lukem Exp $ 2# @(#)bsd.README 8.2 (Berkeley) 4/2/94 3 4This is the README file for the new make "include" files for the BSD 5source tree. The files are installed in /usr/share/mk, and are, by 6convention, named with the suffix ".mk". 7 8Note, this file is not intended to replace reading through the .mk 9files for anything tricky. 10 11=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 12 13RANDOM THINGS WORTH KNOWING: 14 15The files are simply C-style #include files, and pretty much behave like 16you'd expect. The syntax is slightly different in that a single '.' is 17used instead of the hash mark, i.e. ".include <bsd.prog.mk>". 18 19One difference that will save you lots of debugging time is that inclusion 20of the file is normally done at the *end* of the Makefile. The reason for 21this is because .mk files often modify variables and behavior based on the 22values of variables set in the Makefile. To make this work, remember that 23the FIRST target found is the target that is used, i.e. if the Makefile has: 24 25 a: 26 echo a 27 a: 28 echo a number two 29 30the command "make a" will echo "a". To make things confusing, the SECOND 31variable assignment is the overriding one, i.e. if the Makefile has: 32 33 a= foo 34 a= bar 35 36 b: 37 echo ${a} 38 39the command "make b" will echo "bar". This is for compatibility with the 40way the V7 make behaved. 41 42It's fairly difficult to make the BSD .mk files work when you're building 43multiple programs in a single directory. It's a lot easier to split up the 44programs than to deal with the problem. Most of the agony comes from making 45the "obj" directory stuff work right, not because we switched to a new version 46of make. So, don't get mad at us, figure out a better way to handle multiple 47architectures so we can quit using the symbolic link stuff. (Imake doesn't 48count.) 49 50The file .depend in the source directory is expected to contain dependencies 51for the source files. This file is read automatically by make after reading 52the Makefile. 53 54The variable DESTDIR works as before. It's not set anywhere but will change 55the tree where the file gets installed. 56 57The profiled libraries are no longer built in a different directory than 58the regular libraries. A new suffix, ".po", is used to denote a profiled 59object, and ".so" denotes a shared (position-independent) object. 60 61There are various make variables used during the build. Basic rule for 62the variable naming scheme is as follows: 63 64MKxxx Can be set to "no" by a user to disable functionality. 65 Usually defaults to "yes". 66 67NOxxx If defined, disables a feature. 68 Not intended for users. 69 This is to allow Makefiles to disable functionality 70 that they don't support (such as missing man pages). 71 NOxxx variables must be defined before <bsd.own.mk> 72 is included. 73 74The following variables that control how things are made/installed that 75are not set by default. These should not be set by Makefiles; they're for 76the user to define in MAKECONF (see bsd.own.mk, below) or on the make(1) 77command line: 78 79BUILD If defined, 'make install' checks that the targets in the 80 source directories are up-to-date and remakes them if they 81 are out of date, instead of blindly trying to install 82 out of date or non-existent targets. 83 84MKBFD If "no", don't build libbfd, libiberty, or any of the things 85 that depend on them (binutils/gas/ld, gdb, dbsym, mdsetimage). 86 Default: yes 87 88MKCATPAGES If "no", don't build or install the catman pages. 89 Default: yes 90 91MKCRYPTO If "no", no cryptography support will be built into the system, 92 and also acts as MKKERBEROS=no. 93 Default: yes 94 95MKCRYPTO_IDEA If not "no", IDEA support will be built into libcrypto_idea.a. 96 Default: no 97 98MKCRYPTO_MDC2 If not "no", MDC2 support will be built into libcrypto_mdc2.a 99 Default: no 100 101MKCRYPTO_RC5 If not "no", RC5 support will be built into libcrypto_rc5.a. 102 Default: no 103 104MKDOC If "no", don't build or install the documentation. 105 Default: yes 106 107MKDYNAMICROOT If "no", build programs in /bin and /sbin statically, 108 don't install certain libraries in /lib, and don't 109 install the shared linker into /libexec. 110 Default: yes 111 112MKGCC If "no", don't build gcc or any of the gcc-related 113 libraries (libg2c, libgcc, libobjc, libstdc++). 114 Default: yes 115 116MKGDB If "no", don't build gdb. 117 Default: yes 118 119MKHESIOD If "no", disables building of Hesiod infrastructure 120 (libraries and support programs). 121 Default: yes 122 123MKHOSTOBJ If "yes", for programs intended to be run on the compile host, 124 the name, release, and architecture of the host operating 125 system will be suffixed to the name of the object directory 126 created by "make obj". 127 Default: no 128 129MKHTML If "no", don't build or install the html man pages. 130 Default: yes 131 132MKIEEEFP If "no", don't add code for IEEE754/IEC60559 conformance. 133 Has no effect on most platforms. 134 Default: yes 135 136MKINFO If "no", don't build or install Info documentation from 137 Texinfo source files. 138 Default: yes 139 140MKKERBEROS If "no", disables building of Kerberos (v4 or v5) 141 infrastructure (libraries and support programs). 142 Default: yes 143 144MKLINKLIB If "no", act as "MKPICINSTALL=no MKPROFILE=no". 145 Also: 146 - don't install the .a libraries 147 - don't install _pic.a libraries on PIC systems 148 - don't build .a libraries on PIC systems 149 - don't install the .so symlink on ELF systems 150 I.e, only install the shared library (and the .so.major 151 symlink on ELF). 152 Default: yes 153 154MKLINT If "no", don't build or install the lint libraries. 155 Default: yes 156 157MKMAN If "no", don't build or install the man or catman pages, 158 and also acts as "MKCATPAGES=no MKHTML=no" 159 Default: yes 160 161MKMANZ If not "no", compress manual pages at installation time. 162 Default: no 163 164MKNLS If "no", don't build or install the NLS files and locale 165 definition files. 166 Default: yes 167 168MKOBJ If "no", don't enable the rule which creates objdirs, 169 and also acts as "MKOBJDIRS=no" 170 Default: yes 171 172MKOBJDIRS If "no", don't create objdirs during a "make build". 173 Default: no 174 175MKPIC If "no", don't build or install shared libraries, and 176 also acts as "MKPICLIB=no" 177 Default: yes, except for ${MACHINE_ARCH} == "sh3" 178 179MKPICINSTALL If "no", don't install the *_pic.a libraries. 180 Default: yes 181 182MKPICLIB If "no", don't build *_pic.a libraries, and build the 183 shared object libraries from the .a libraries. 184 A symlink is installed in ${DESTDIR}/usr/lib for the 185 _pic.a library pointing to the .a library. 186 Default: yes 187 188MKPROFILE If "no", don't build or install the profiling libraries. 189 Default: yes 190 191MKSHARE If "no", act as "MKCATPAGES=no MKDOC=no MKHTML=no MKINFO=no 192 MKMAN=no MKNLS=no". 193 I.e, don't build catman pages, documentation, Info 194 documentation, man pages, NLS files, ... 195 Default: yes 196 197MKSKEY If "no", disables building of S/key authentication 198 infrastructure (libraries and support programs). 199 Default: yes 200 201MKSOFTFLOAT If not "no", build with options to enable the compiler to 202 generate output containing library calls for floating 203 point and possibly soft-float library support. 204 Default: no 205 206MKUNPRIVED If not "no", don't set the owner/group/mode when installing 207 files or directories, and keep a metadata log of what 208 the owner/group/mode should be. This allows a 209 non-root "make install". 210 Default: no 211 212MKUPDATE If not "no", 'make install' only installs targets that are 213 more recently modified in the source directories that their 214 installed counterparts. 215 Default: no 216 217MKYP If "no", disables building of YP (NIS) 218 infrastructure (libraries and support programs). 219 Default: yes 220 221USE_HESIOD If set to "no", disables building Hesiod support into 222 various system utilities/libraries that support it. 223 If MKHESIOD is set to "no", USE_HESIOD will also be 224 forced to "no". 225 226USE_KERBEROS If set to "no", disables building Kerberos (v4 or v5) 227 support into various system utilities/libraries that 228 support it. If MKKERBEROS is set to "no", USE_KERBEROS 229 will also be forced to "no". 230 231USE_SKEY If set to "no", disables building S/key authentication 232 support into various system utilities/libraries that 233 support it. If MKSKEY is set to "no", USE_SKEY will 234 also be forced to "no". 235 236USE_YP If set to "no", disables building YP (NIS) support into 237 various system utilities/libraries that support it. If 238 MKYP is set to "no", USE_YP will also be forced to "no". 239 240 241=-=-=-=-= sys.mk =-=-=-=-= 242 243The include file <sys.mk> has the default rules for all makes, in the BSD 244environment or otherwise. You probably don't want to touch this file. 245If you intend to run a cross build, you will need to supply the following 246host tools, and configure the following variables properly: 247 248OBJCOPY objcopy - copy and translate object files 249 250STRIP strip - Discard symbols from object files 251 252 253=-=-=-=-= bsd.own.mk =-=-=-=-= 254 255The include file <bsd.own.mk> contains source tree configuration parameters, 256such as the owners, groups, etc. for both manual pages and binaries, and 257a few global "feature configuration" parameters. 258 259It has no targets. 260 261To get system-specific configuration parameters, bsd.own.mk will try to 262include the file specified by the "MAKECONF" variable. If MAKECONF is not 263set, or no such file exists, the system make configuration file, /etc/mk.conf 264is included. These files may define any of the variables described below. 265 266bsd.own.mk sets the following variables, if they are not already defined 267(defaults are in brackets): 268 269NETBSDSRCDIR Top of the NetBSD source tree. 270 If _SRC_TOP_ != "", that will be used as the default, 271 otherwise BSDSRCDIR will be used as the default. 272 Various makefiles within the NetBSD source tree will 273 use this to reference the top level of the source tree. 274 275_SRC_TOP_ Top of the system source tree, as determined by <bsd.own.mk> 276 based on the presence of tools/ and build.sh. This variable 277 is "internal" to <bsd.own.mk>, although its value is only 278 determined once and then propagated to all sub-makes. 279 280BSDSRCDIR The real path to the system sources, so that 'make obj' 281 will work correctly. [/usr/src] 282 283BSDOBJDIR The real path to the system 'obj' tree, so that 'make obj' 284 will work correctly. [/usr/obj] 285 286BINGRP Binary group. [wheel] 287 288BINOWN Binary owner. [root] 289 290BINMODE Binary mode. [555] 291 292NONBINMODE Mode for non-executable files. [444] 293 294MANDIR Base path for manual installation. [/usr/share/man/cat] 295 296MANGRP Manual group. [wheel] 297 298MANOWN Manual owner. [root] 299 300MANMODE Manual mode. [${NONBINMODE}] 301 302MANINSTALL Manual installation type: maninstall, catinstall, or both 303 304LDSTATIC Control program linking; if set blank, link everything 305 dynamically. If set to "-static", link everything statically. 306 If not set, programs link according to their makefile. 307 308LIBDIR Base path for library installation. [/usr/lib] 309 310LINTLIBDIR Base path for lint(1) library installation. [/usr/libdata/lint] 311 312LIBGRP Library group. [${BINGRP}] 313 314LIBOWN Library owner. [${BINOWN}] 315 316LIBMODE Library mode. [${NONBINMODE}] 317 318DOCDIR Base path for system documentation (e.g. PSD, USD, etc.) 319 installation. [/usr/share/doc] 320 321HTMLDOCDIR Base path for html system documentation installation. 322 [/usr/share/doc/html] 323 324DOCGRP Documentation group. [wheel] 325 326DOCOWN Documentation owner. [root] 327 328DOCMODE Documentation mode. [${NONBINMODE}] 329 330NLSDIR Base path for Native Language Support files installation. 331 [/usr/share/nls] 332 333NLSGRP Native Language Support files group. [wheel] 334 335NLSOWN Native Language Support files owner. [root] 336 337NLSMODE Native Language Support files mode. [${NONBINMODE}] 338 339STRIPFLAG The flag passed to the install program to cause the binary 340 to be stripped. This is to be used when building your 341 own install script so that the entire system can be made 342 stripped/not-stripped using a single knob. [-s] 343 344COPY The flag passed to the install program to cause the binary 345 to be copied rather than moved. This is to be used when 346 building our own install script so that the entire system 347 can either be installed with copies, or with moves using 348 a single knob. [-c] 349 350Additionally, the following variables may be set by bsd.own.mk or in a 351make configuration file to modify the behaviour of the system build 352process (default values are in brackets along with comments, if set by 353bsd.own.mk): 354 355OBJECT_FMT Object file format. [set to "ELF" on architectures that 356 use ELF -- currently if ${MACHINE_ARCH} is "alpha", 357 "mipsel", "mipseb", "powerpc", "sparc", "sparc64", 358 "i386" and some m68k machines, or set to "a.out" on 359 other architectures]. 360 361TOOLCHAIN_MISSING 362 If "yes", this indicates that the platform being built 363 does not have a working in-tree toolchain. If the 364 MACHINE_ARCH in question falls into this category, the 365 variable is conditionally assigned the value "yes". 366 Otherwise, the variable is unconditionally assigned the 367 value "no". 368 369 If TOOLCHAIN_MISSING is "yes", the variables MKBFD, MKGCC, 370 and MKGDB are unconditionally assigned the value "no". 371 372EXTERNAL_TOOLCHAIN 373 This variable is not directly set by <bsd.own.mk>, but 374 including <bsd.own.mk> is the canonical way to gain 375 access to this variable. The variable should be defined 376 either in the user's environment or in the user's mk.conf 377 file. If defined, this variable indicates the root of 378 an external toolchain which will be used to build the 379 tree. For example, if a platform is a TOOLCHAIN_MISSING 380 platform, EXTERNAL_TOOLCHAIN can be used to re-enable the 381 cross-compile framework. 382 383 If EXTERNAL_TOOLCHAIN is defined, the variable MKGCC is 384 unconditionally assigned the value "no", since the external 385 version of the compiler may not be able to build the library 386 components of the in-tree compiler. 387 388 NOTE: This variable is not yet used in as many places as 389 it should be. Expect the exact semantics of this variable 390 to change in the short term as parts of the cross-compile 391 framework continue to be cleaned up. 392 393bsd.own.mk is generally useful when building your own Makefiles so that 394they use the same default owners etc. as the rest of the tree. 395 396 397=-=-=-=-= bsd.files.mk =-=-=-=-= 398 399The include file <bsd.files.mk> handles the FILES variables and is included 400from bsd.lib.mk and bsd.prog.mk. 401 402 403=-=-=-=-= bsd.gcc.mk =-=-=-=-= 404 405The include file <bsd.gcc.mk> computes various parameters related to GCC 406support libraries. It defines no targets. <bsd.own.mk> MUST be included 407before bsd.gcc.mk. 408 409The primary users of bsd.gcc.mk are <bsd.prog.mk> and <bsd.lib.mk>, each 410of which need to know where to find certain GCC support libraries. 411 412The behavior of bsd.gcc.mk is influenced by the EXTERNAL_TOOLCHAIN variable, 413which is generally set by the user. If EXTERNAL_TOOLCHAIN it set, then 414the compiler is asked where to find the support libraries, otherwise the 415support libraries are found in ${DESTDIR}/usr/lib. 416 417bsd.gcc.mk sets the following variables: 418 419_GCC_CRTBEGIN The full path name to crtbegin.o. 420 421_GCC_CRTBEGINS The full path name to crtbeginS.o. 422 423_GCC_CRTEND The full path name to crtend.o. 424 425_GCC_CRTENDS The full path name to crtendS.o. 426 427_GCC_LIBGCCDIR The directory where libgcc.a is located. 428 429 430=-=-=-=-= bsd.inc.mk =-=-=-=-= 431 432The include file <bsd.inc.mk> defines the includes target and uses two 433variables: 434 435INCS The list of include files 436 437INCSDIR The location to install the include files. 438 439INCSNAME Target name of the include file, if only one; same as 440 FILESNAME, but for include files. 441 442INCSNAME_<file> The name file <file> should be installed as, if not <file>, 443 same as FILESNAME_<file>, but for include files. 444 445 446=-=-=-=-= bsd.info.mk =-=-=-=-= 447 448The include file <bsd.info.mk> is used to generate and install GNU Info 449documentation from respective Texinfo source files. It defines three 450implicit targets (.txi.info, .texi.info, and .texinfo.info), and uses the 451following variables: 452 453TEXINFO List of Texinfo source files. Info documentation will 454 consist of single files with the extension replaced by 455 .info. 456 457INFOFLAGS Flags to pass to makeinfo. [] 458 459 460=-=-=-=-= bsd.kernobj.mk =-=-=-=-= 461 462The include file <bsd.kernobj.mk> defines variables related to the 463location of kernel sources and object directories. 464 465KERNSRCDIR Is the location of the top of the kernel src. 466 It defaults to ${_SRC_TOP_}/sys 467 468KERNARCHDIR Is the location of the machine dependent kernel 469 sources. It defaults to arch/${MACHINE} 470 471KERNCONFDIR Is where the configuration files for kernels are 472 found; default is ${KERNSRCDIR}/${KERNARCHDIR}/conf. 473 474KERNOBJDIR Is the kernel build directory. The kernel GENERIC for 475 instance will be compiled in ${KERNOBJDIR}/GENERIC. 476 The default value is 477 ${MAKEOBJDIRPREFIX}${KERNSRCDIR}/${KERNARCHDIR}/compile 478 if it exists or the target 'obj' is being made. 479 Otherwise the default is 480 ${KERNSRCDIR}/${KERNARCHDIR}/compile. 481 482It is important that Makefiles (such as those under src/distrib) that 483wish to find compiled kernels use bsd.kernobj.mk and ${KERNOBJDIR} 484rather than make assumptions about the location of the compiled kernel. 485 486 487=-=-=-=-= bsd.kinc.mk =-=-=-=-= 488 489The include file <bsd.kinc.mk> defines the many targets (includes, 490subdirectories, etc.), and is used by kernel makefiles to handle 491include file installation. It is intended to be included alone, by 492kernel Makefiles. Please see bsd.kinc.mk for more details, and keep 493the documentation in that file up to date. 494 495 496=-=-=-=-= bsd.lib.mk =-=-=-=-= 497 498The include file <bsd.lib.mk> has support for building libraries. It has 499the same eight targets as <bsd.prog.mk>: all, clean, cleandir, depend, 500includes, install, lint, and tags. Additionally, it has a checkver target 501which checks for installed shared object libraries whose version is greater 502that the version of the source. It has a limited number of suffixes, 503consistent with the current needs of the BSD tree. bsd.lib.mk includes 504<bsd.shlib.mk> to get shared library parameters. 505 506It sets/uses the following variables: 507 508LIB The name of the library to build. 509 510LIBDIR Target directory for libraries. 511 512SHLIBINSTALLDIR Target directory for shared libraries if ${USE_SHLIBDIR} 513 is "yes". 514 515USE_SHLIBDIR If "yes", use ${SHLIBINSTALLDIR} instead of ${LIBDIR} 516 as the path to install shared libraries to. 517 USE_SHLIBDIR must be defined before <bsd.own.mk> is included. 518 519LINTLIBDIR Target directory for lint libraries. 520 521LIBGRP Library group. 522 523LIBOWN Library owner. 524 525LIBMODE Library mode. 526 527LDADD Additional loader objects. 528 529MAN The manual pages to be installed (use a .1 - .9 suffix). 530 531NOCHECKVER_<library> 532NOCHECKVER If set, disables checking for installed shared object 533 libraries with versions greater than the source. A 534 particular library name, without the "lib" prefix, may 535 be appended to the variable name to disable the check for 536 only that library. 537 538SRCS List of source files to build the library. Suffix types 539 .s, .c, and .f are supported. Note, .s files are preferred 540 to .c files of the same name. (This is not the default for 541 versions of make.) 542 543The include file <bsd.lib.mk> includes the file named "../Makefile.inc" 544if it exists, as well as the include file <bsd.man.mk>. 545 546It has rules for building profiled objects; profiled libraries are 547built by default. 548 549Libraries are ranlib'd when made. 550 551 552=-=-=-=-= bsd.links.mk =-=-=-=-= 553 554The include file <bsd.links.mk> handles the LINKS and SYMLINKS variables 555and is included from from bsd.lib.mk and bsd.prog.mk. 556 557 558=-=-=-=-= bsd.man.mk =-=-=-=-= 559 560The include file <bsd.man.mk> handles installing manual pages and their 561links. 562 563It has a two targets: 564 565 maninstall: 566 Install the manual page sources and their links. 567 catinstall: 568 Install the preformatted manual pages and their links. 569 570It sets/uses the following variables: 571 572MANDIR Base path for manual installation. 573 574MANGRP Manual group. 575 576MANOWN Manual owner. 577 578MANMODE Manual mode. 579 580MANSUBDIR Subdirectory under the manual page section, i.e. "/vax" 581 or "/tahoe" for machine specific manual pages. 582 583MAN The manual pages to be installed (use a .1 - .9 suffix). 584 585MLINKS List of manual page links (using a .1 - .9 suffix). The 586 linked-to file must come first, the linked file second, 587 and there may be multiple pairs. The files are soft-linked. 588 589The include file <bsd.man.mk> includes a file named "../Makefile.inc" if 590it exists. 591 592 593=-=-=-=-= bsd.obj.mk =-=-=-=-= 594 595The include file <bsd.obj.mk> defines targets related to the creation 596and use of separated object and source directories. 597 598If an environment variable named MAKEOBJDIRPREFIX is set, make(1) uses 599${MAKEOBJDIRPREFIX}${.CURDIR} as the name of the object directory if 600it exists. Otherwise make(1) looks for the existence of a 601subdirectory (or a symlink to a directory) of the source directory 602into which built targets should be placed. If an environment variable 603named MAKEOBJDIR is set, make(1) uses its value as the name of the 604object directory; failing that, make first looks for a subdirectory 605named "obj.${MACHINE}", and if that doesn't exist, it looks for "obj". 606 607Object directories are not created automatically by make(1) if they 608don't exist; you need to run a separate "make obj". (This will happen 609during a top-level build if "MKOBJDIRS" is set to a value other than 610"no"). When the source directory is a subdirectory of ${BSDSRCDIR} -- 611and this is determined by a simple string prefix comparison -- object 612directories are created in a separate object directory tree, and a 613symlink to the object directory in that tree is created in the source 614directory; otherwise, "make obj" assumes that you're not in the main 615source tree and that it's not safe to use a separate object tree. 616 617Several variables used by <bsd.obj.mk> control exactly what 618directories and links get created during a "make obj": 619 620MAKEOBJDIR If set, this is the component name of the object 621 directory. 622 623OBJMACHINE If this is set but MAKEOBJDIR is not set, creates 624 object directories or links named "obj.${MACHINE}"; 625 otherwise, just creates ones named "obj". 626 627USR_OBJMACHINE If set, and the current directory is a subdirectory of 628 ${BSDSRCDIR}, create object directory in the 629 corresponding subdirectory of ${BSDOBJDIR}.${MACHINE}; 630 otherwise, create it in the corresponding subdirectory 631 of ${BSDOBJDIR} 632 633BUILDID If set, the contents of this variable are appended 634 to the object directory name. If OBJMACHINE is also 635 set, ".${BUILDID}" is added after ".${MACHINE}". 636 637 638=-=-=-=-= bsd.prog.mk =-=-=-=-= 639 640The include file <bsd.prog.mk> handles building programs from one or 641more source files, along with their manual pages. It has a limited number 642of suffixes, consistent with the current needs of the BSD tree. bsd.prog.mk 643includes <bsd.shlib.mk> to get shared library parameters. 644 645It has eight targets: 646 647 all: 648 build the program and its manual page. This also 649 creates a GDB initialization file (.gdbinit) in 650 the objdir. The .gdbinit file sets the shared library 651 prefix to ${DESTDIR} to facilitate cross-debugging. 652 clean: 653 remove the program, any object files and the files a.out, 654 Errs, errs, mklog, and ${PROG}.core. 655 cleandir: 656 remove all of the files removed by the target clean, as 657 well as .depend, tags, and any manual pages. 658 `distclean' is a synonym for `cleandir'. 659 depend: 660 make the dependencies for the source files, and store 661 them in the file .depend. 662 includes: 663 install any header files. 664 install: 665 install the program and its manual pages; if the Makefile 666 does not itself define the target install, the targets 667 beforeinstall and afterinstall may also be used to cause 668 actions immediately before and after the install target 669 is executed. 670 lint: 671 run lint on the source files 672 tags: 673 create a tags file for the source files. 674 675It sets/uses the following variables: 676 677BINGRP Binary group. 678 679BINOWN Binary owner. 680 681BINMODE Binary mode. 682 683CLEANFILES Additional files to remove for the clean and cleandir targets. 684 685COPTS Additional flags to the compiler when creating C objects. 686 687CPUFLAGS Additional flags to the compiler/assembler to select 688 CPU instruction set options, CPU tuning options, etc. 689 690CPPFLAGS Additional flags to the C pre-processor 691 692GDBINIT List of GDB initialization files to add to "source" 693 directives in the .gdbinit file that is created in the 694 objdir. 695 696LDADD Additional loader objects. Usually used for libraries. 697 For example, to load with the compatibility and utility 698 libraries, use: 699 700 LDADD+=-lutil -lcompat 701 702LDFLAGS Additional loader flags. 703 704LINKS The list of binary links; should be full pathnames, the 705 linked-to file coming first, followed by the linked 706 file. The files are hard-linked. For example, to link 707 /bin/test and /bin/[, use: 708 709 LINKS= ${DESTDIR}/bin/test ${DESTDIR}/bin/[ 710 711SYMLINKS The list of symbolic links; should be full pathnames. 712 Syntax is identical to LINKS. Note that DESTDIR is not 713 automatically included in the link. 714 715MAN Manual pages (should end in .1 - .9). If no MAN variable is 716 defined, "MAN=${PROG}.1" is assumed. 717 718PROG The name of the program to build. If not supplied, nothing 719 is built. 720 721PROG_CXX If defined, the name of the program to build. Also 722 causes <bsd.prog.mk> to link the program with the C++ 723 compiler rather than the C compiler. PROG_CXX overrides 724 the value of PROG if PROG is also set. 725 726PROGNAME The name that the above program will be installed as, if 727 different from ${PROG}. 728 729SRCS List of source files to build the program. If SRCS is not 730 defined, it's assumed to be ${PROG}.c. 731 732DPSRCS List of source files which are needed for generating 733 dependencies, but are not needed in ${SRCS}. 734 735DPADD Additional dependencies for the program. Usually used for 736 libraries. For example, to depend on the compatibility and 737 utility libraries use: 738 739 DPADD+=${LIBCOMPAT} ${LIBUTIL} 740 741 The following libraries are predefined for DPADD: 742 743 LIBCRT0?= ${DESTDIR}/usr/lib/crt0.o 744 LIBBZ2?= ${DESTDIR}/usr/lib/libbz2.a 745 LIBC?= ${DESTDIR}/usr/lib/libc.a 746 LIBC_PIC?= ${DESTDIR}/usr/lib/libc_pic.a 747 LIBCDK?= ${DESTDIR}/usr/lib/libcdk.a 748 LIBCOM_ERR?= ${DESTDIR}/usr/lib/libcom_err.a 749 LIBCOMPAT?= ${DESTDIR}/usr/lib/libcompat.a 750 LIBCRYPT?= ${DESTDIR}/usr/lib/libcrypt.a 751 LIBCRYPTO?= ${DESTDIR}/usr/lib/libcrypto.a 752 LIBCRYPTO_IDEA?=${DESTDIR}/usr/lib/libcrypto_idea.a 753 LIBCRYPTO_MDC2?=${DESTDIR}/usr/lib/libcrypto_mdc2.a 754 LIBCRYPTO_RC5?= ${DESTDIR}/usr/lib/libcrypto_rc5.a 755 LIBCURSES?= ${DESTDIR}/usr/lib/libcurses.a 756 LIBDBM?= ${DESTDIR}/usr/lib/libdbm.a 757 LIBDES?= ${DESTDIR}/usr/lib/libdes.a 758 LIBEDIT?= ${DESTDIR}/usr/lib/libedit.a 759 LIBEVENT?= ${DESTDIR}/usr/lib/libevent.a 760 LIBFORM?= ${DESTDIR}/usr/lib/libform.a 761 LIBGCC?= ${DESTDIR}/usr/lib/libgcc.a 762 LIBGNUMALLOC?= ${DESTDIR}/usr/lib/libgnumalloc.a 763 LIBGSSAPI?= ${DESTDIR}/usr/lib/libgssapi.a 764 LIBHDB?= ${DESTDIR}/usr/lib/libhdb.a 765 LIBINTL?= ${DESTDIR}/usr/lib/libintl.a 766 LIBIPSEC?= ${DESTDIR}/usr/lib/libipsec.a 767 LIBKADM?= ${DESTDIR}/usr/lib/libkadm.a 768 LIBKADM5CLNT?= ${DESTDIR}/usr/lib/libkadm5clnt.a 769 LIBKADM5SRV?= ${DESTDIR}/usr/lib/libkadm5srv.a 770 LIBKAFS?= ${DESTDIR}/usr/lib/libkafs.a 771 LIBKDB?= ${DESTDIR}/usr/lib/libkdb.a 772 LIBKRB?= ${DESTDIR}/usr/lib/libkrb.a 773 LIBKRB5?= ${DESTDIR}/usr/lib/libkrb5.a 774 LIBKSTREAM?= ${DESTDIR}/usr/lib/libkstream.a 775 LIBKVM?= ${DESTDIR}/usr/lib/libkvm.a 776 LIBL?= ${DESTDIR}/usr/lib/libl.a 777 LIBM?= ${DESTDIR}/usr/lib/libm.a 778 LIBMENU?= ${DESTDIR}/usr/lib/libmenu.a 779 LIBMP?= ${DESTDIR}/usr/lib/libmp.a 780 LIBNTP?= ${DESTDIR}/usr/lib/libntp.a 781 LIBOBJC?= ${DESTDIR}/usr/lib/libobjc.a 782 LIBOSSAUDIO?= ${DESTDIR}/usr/lib/libossaudio.a 783 LIBPC?= ${DESTDIR}/usr/lib/libpc.a 784 LIBPCAP?= ${DESTDIR}/usr/lib/libpcap.a 785 LIBPCI?= ${DESTDIR}/usr/lib/libpci.a 786 LIBPLOT?= ${DESTDIR}/usr/lib/libplot.a 787 LIBPMC?= ${DESTDIR}/usr/lib/libpmc.a 788 LIBPOSIX?= ${DESTDIR}/usr/lib/libposix.a 789 LIBPTHREAD?= ${DESTDIR}/usr/lib/libpthread.a 790 LIBPTHREAD_DBG?=${DESTDIR}/usr/lib/libpthread_dbg.a 791 LIBRESOLV?= ${DESTDIR}/usr/lib/libresolv.a 792 LIBRMT?= ${DESTDIR}/usr/lib/librmt.a 793 LIBROKEN?= ${DESTDIR}/usr/lib/libroken.a 794 LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a 795 LIBRT?= ${DESTDIR}/usr/lib/librt.a 796 LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a 797 LIBSS?= ${DESTDIR}/usr/lib/libss.a 798 LIBSSL?= ${DESTDIR}/usr/lib/libssl.a 799 LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a 800 LIBSL?= ${DESTDIR}/usr/lib/libsl.a 801 LIBTERMCAP?= ${DESTDIR}/usr/lib/libtermcap.a 802 LIBUSBHID?= ${DESTDIR}/usr/lib/libusbhid.a 803 LIBUTIL?= ${DESTDIR}/usr/lib/libutil.a 804 LIBWRAP?= ${DESTDIR}/usr/lib/libwrap.a 805 LIBY?= ${DESTDIR}/usr/lib/liby.a 806 LIBZ?= ${DESTDIR}/usr/lib/libz.a 807 808SHAREDSTRINGS If defined, a new .c.o rule is used that results in shared 809 strings, using xstr(1). Note that this will not work with 810 parallel makes. 811 812STRIPFLAG The flag passed to the install program to cause the binary 813 to be stripped. 814 815SUBDIR A list of subdirectories that should be built as well. 816 Each of the targets will execute the same target in the 817 subdirectories. 818 819SCRIPTS A list of interpreter scripts [file.{sh,csh,pl,awk,...}]. 820 These are installed exactly like programs. 821 822SCRIPTSNAME The name that the above program will be installed as, if 823 different from ${SCRIPTS}. These can be further specialized 824 by setting SCRIPTSNAME_<script>. 825 826FILES A list of files to install. The installation is controlled 827 by the FILESNAME, FILESOWN, FILESGRP, FILESMODE, FILESDIR 828 variables that can be further specialized by FILES<VAR>_<file> 829 830SHLINKDIR Target directory for shared linker. See description of 831 <bsd.own.mk> for additional information about this variable. 832 833The include file <bsd.prog.mk> includes the file named "../Makefile.inc" 834if it exists, as well as the include file <bsd.man.mk>. 835 836Some simple examples: 837 838To build foo from foo.c with a manual page foo.1, use: 839 840 PROG= foo 841 842 .include <bsd.prog.mk> 843 844To build foo from foo.c with a manual page foo.2, add the line: 845 846 MAN= foo.2 847 848If foo does not have a manual page at all, add the line: 849 850 MKMAN= no 851 852If foo has multiple source files, add the line: 853 854 SRCS= a.c b.c c.c d.c 855 856 857=-=-=-=-= bsd.rpc.mk =-=-=-=-= 858 859The include file <bsd.rpc.mk> contains a makefile fragment used to 860construct source files built by rpcgen. 861 862The following macros may be defined in makefiles which include 863<bsd.rpc.mk> in order to control which files get built and how they 864are to be built: 865 866RPC_INCS: construct .h file from .x file 867RPC_XDRFILES: construct _xdr.c from .x file 868 (for marshalling/unmarshalling data types) 869RPC_SVCFILES: construct _svc.c from .x file 870 (server-side stubs) 871RPC_SVCFLAGS: Additional flags passed to builds of RPC_SVCFILES. 872 873RPC_XDIR: Directory containing .x/.h files 874 875 876=-=-=-=-= bsd.shlib.mk =-=-=-=-= 877 878The include file <bsd.shlib.mk> computes parameters for shared library 879installation and use. It defines no targets. <bsd.own.mk> MUST be 880included before bsd.shlib.mk. 881 882bsd.own.mk sets the following variables, if they are not already defined 883(defaults are in brackets): 884 885SHLIBINSTALLDIR If ${USE_SHLIBDIR} is "yes", use ${SHLIBINSTALLDIR} instead of 886 ${LIBDIR} as the base path for shared library installation. 887 [/lib] 888 889SHLIBDIR The path to USE_SHLIBDIR shared libraries to use when building 890 a program. [/lib for programs in /bin and /sbin, /usr/lib 891 for all others.] 892 893_LIBSODIR Set to ${SHLIBINSTALLDIR} if ${USE_SHLIBDIR} is "yes", 894 otherwise set to ${LIBDIR} 895 896SHLINKINSTALLDIR Base path for shared linker. [/libexec] 897 898SHLINKDIR Path to use for shared linker when building a program. 899 [/libexec for programs in /bin and /sbin, /usr/libexec for 900 all others.] 901 902 903=-=-=-=-= bsd.subdir.mk =-=-=-=-= 904 905The include file <bsd.subdir.mk> contains the default targets for building 906subdirectories. It has the same eight targets as <bsd.prog.mk>: all, 907clean, cleandir, depend, includes, install, lint, and tags. For all of 908the directories listed in the variable SUBDIR, the specified directory 909will be visited and the target made. There is also a default target which 910allows the command "make subdir" where subdir is any directory listed in 911the variable SUBDIR. 912 913As a special case, the use of a token .WAIT as an entry in SUBDIR acts 914as a synchronization barrier when multiple make jobs are run; subdirs 915before the .WAIT must complete before any subdirs after .WAIT are 916started. See make(1) for some caveats on use of .WAIT and other 917special sources. 918 919 920=-=-=-=-= bsd.sys.mk =-=-=-=-= 921 922The include file <bsd.sys.mk> is used by <bsd.prog.mk> and 923<bsd.lib.mk>. It contains overrides that are used when building 924the NetBSD source tree. For instance, if "PARALLEL" is defined by 925the program/library Makefile, it includes a set of rules for lex and 926yacc that allow multiple lex and yacc targets to be built in parallel. 927 928The following variables are defined to commands to perform the 929appropriate operation, with the default in [brackets]. 930(Note that these are overridden in <bsd.own.mk> if USETOOLS=yes): 931 932TOOL_ASN1_COMPILE ASN1 compiler. [asn1_compile] 933 934TOOL_CAP_MKDB Create capability database. [cap_mkdb] 935 936TOOL_CAT Concatenate and print files. [cat] 937 938TOOL_CKSUM Display file checksums. [cksum] 939 940TOOL_COMPILE_ET Error table compiler. [compile_et] 941 942TOOL_CONFIG Build kernel compilation directories. [config] 943 944TOOL_CRUNCHGEN Generate crunched binary build environment. [crunchgen] 945 946TOOL_CTAGS Create a tags file. [ctags] 947 948TOOL_DB Manipulate db(3) databases. [db] 949 950TOOL_EQN Format equations for groff. [eqn] 951 952TOOL_FGEN IEEE 1275 Open Firmware FCode Tokenizer. [fgen] 953 954TOOL_GENCAT Generate NLS message catalogs. [gencat] 955 956TOOL_GROFF Front end for groff document formatting system. [groff] 957 958TOOL_HEXDUMP Ascii, decimal, hexadecimal, octal dump. [hexdump] 959 960TOOL_INDXBIB Make bibliographic database's inverted index. [indxbib] 961 962TOOL_INSTALLBOOT Install disk bootstrap software. [installboot] 963 964TOOL_INSTALL_INFO Update info/dir entries. [install-info] 965 966TOOL_M4 M4 macro language processor. [m4] 967 968TOOL_MAKEFS Create file system image from directory tree. [makefs] 969 970TOOL_MAKEINFO Translate Texinfo documents. [makeinfo] 971 972TOOL_MAKEWHATIS Create a whatis.db database. [makewhatis] 973 974TOOL_MDSETIMAGE Set kernel RAM disk image. [mdsetimage] 975 976TOOL_MENUC Menu compiler. [menuc] 977 978TOOL_MKCSMAPPER Make charset mapping table. [mkcsmapper] 979 980TOOL_MKESDB Make encoding scheme database. [mkesdb] 981 982TOOL_MKLOCALE Make LC_CTYPE locale files. [mklocale] 983 984TOOL_MKMAGIC Create database for file(1). [file] 985 986TOOL_MKTEMP Make (unique) temporary file name. [mktemp] 987 988TOOL_MSGC Simple message list compiler. [msgc] 989 990TOOL_MTREE Map a directory hierarchy. [mtree] 991 992TOOL_PAX Manipulate file archives and copy directories. [pax] 993 994TOOL_PIC Compile pictures for groff. [pic] 995 996TOOL_PREPMKBOOTIMAGE prep-mkbootimage (XXXBUILDSH). [prep-mkbootimage] 997 998TOOL_PWD_MKDB Generate the password databases. [pwd_mkdb] 999 1000TOOL_REFER Preprocess bibliographic references for groff. [refer] 1001 1002TOOL_ROFF_ASCII Generate ASCII groff output. [nroff] 1003 1004TOOL_ROFF_DVI Generate DVI groff output. [${TOOL_GROFF} -Tdvi] 1005 1006TOOL_ROFF_HTML Generate HTML groff output. 1007 [${TOOL_GROFF} -Tlatin1 -mdoc2html] 1008 1009TOOL_ROFF_PS Generate PS groff output. [${TOOL_GROFF} -Tps] 1010 1011TOOL_ROFF_RAW Generate "raw" groff output. [${TOOL_GROFF} -Z] 1012 1013TOOL_RPCGEN Remote Procedure Call (RPC) protocol compiler. [rpcgen] 1014 1015TOOL_SOELIM Eliminate .so's from groff input. [soelim] 1016 1017TOOL_STAT Display file status. [stat] 1018 1019TOOL_SUNLABEL Read or modify a SunOS disk label. [sunlabel] 1020 1021TOOL_TBL Format tables for groff. [tbl] 1022 1023TOOL_UUDECODE Uudecode a binary file. [uudecode] 1024 1025TOOL_VGRIND Grind nice listings of programs. [vgrind -f] 1026 1027TOOL_ZIC Time zone compiler. [zic] 1028 1029 1030Other variables of note (incomplete list): 1031 1032WARNS Crank up gcc warning options; the distinct levels are: 1033 WARNS=1 1034 WARNS=2 1035 WARNS=3 1036 1037FORMAT_AUDIT If FORMAT_AUDIT is set, and WFORMAT is set and > 1, turn on 1038WFORMAT -Wnetbsd-format-audit for extra-stringent format checking. 1039 WFORMAT belongs in individual makefiles and/or 1040 Makefile.inc files. (set WFORMAT=1 in individual 1041 makefiles if a program is not security critical and is 1042 doing bizarre things with format strings which would 1043 be even uglier if rewritten) FORMAT_AUDIT should go in 1044 mk.conf if you're doing format-string auditing. 1045 FORMAT_AUDIT may go away in time. 1046 1047=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 1048