bsd.README revision 1.75
1# $NetBSD: bsd.README,v 1.75 2001/02/01 20:27:06 agc 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 61The following variables that control how things are made/installed that 62are not set by default. These should not be set by Makefiles; they're for 63the user to define in MAKECONF (see bsd.own.mk, below) or on the make(1) 64command line: 65 66BUILD If defined, 'make install' checks that the targets in the 67 source directories are up-to-date and remakes them if they 68 are out of date, instead of blindly trying to install 69 out of date or non-existant targets. 70 71UPDATE If defined, 'make install' only installs targets that are 72 more recently modified in the source directories that their 73 installed counterparts. 74 75UNPRIVILEGED If defined, don't set the owner/group/mode when installing 76 files or directories. This allows a non-root "make install". 77 78MKCATPAGES If "no", don't build or install the catman pages. 79 80MKDOC If "no", don't build or install the documentation. 81 82MKINFO If "no", don't build or install Info documentation from 83 Texinfo source files. 84 85MKLINT If "no", don't build or install the lint libraries. 86 87MKMAN If "no", don't build or install the man or catman pages. 88 Also acts as "MKCATPAGES=no" 89 90MKNLS If "no", don't build or install the NLS files and locale 91 definition files. 92 93MKOBJ If "no", don't enable the rule which creates objdirs. 94 "yes" by default. 95 96MKOBJDIRS If "no", don't create objdirs during a "make build". 97 "no" by default. 98 99MKPIC If "no", don't build or install shared libraries. 100 101MKPICINSTALL If "no", don't install the *_pic.a libraries. 102 103MKPROFILE If "no", don't build or install the profiling libraries. 104 105MKSHARE If "no", act as "MKCATPAGES=no MKDOC=no MKINFO=no MKMAN=no 106 MKNLS=no". I.e, don't build catman pages, documentation, 107 Info documentation, man pages, NLS files, ... 108 109=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 110 111The include file <sys.mk> has the default rules for all makes, in the BSD 112environment or otherwise. You probably don't want to touch this file. 113If you intend to run a cross build, you will need to supply the following 114host tools, and configure the following variables properly: 115 116OBJCOPY objcopy - copy and translate object files 117 118STRIP strip - Discard symbols from object files 119 120CONFIG config - build kernel compilation directories 121 122RPCGEN rpcgen - Remote Procedure Call (RPC) protocol compiler 123 124MKLOCALE mklocale - make LC_CTYPE locale files 125 126=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 127 128The include file <bsd.man.mk> handles installing manual pages and their 129links. 130 131It has a two targets: 132 133 maninstall: 134 Install the manual page sources and their links. 135 catinstall: 136 Install the preformatted manual pages and their links. 137 138It sets/uses the following variables: 139 140MANDIR Base path for manual installation. 141 142MANGRP Manual group. 143 144MANOWN Manual owner. 145 146MANMODE Manual mode. 147 148MANSUBDIR Subdirectory under the manual page section, i.e. "/vax" 149 or "/tahoe" for machine specific manual pages. 150 151MAN The manual pages to be installed (use a .1 - .9 suffix). 152 153MLINKS List of manual page links (using a .1 - .9 suffix). The 154 linked-to file must come first, the linked file second, 155 and there may be multiple pairs. The files are soft-linked. 156 157The include file <bsd.man.mk> includes a file named "../Makefile.inc" if 158it exists. 159 160=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 161 162The include file <bsd.own.mk> contains source tree configuration parameters, 163such as the owners, groups, etc. for both manual pages and binaries, and 164a few global "feature configuration" parameters. 165 166It has no targets. 167 168To get system-specific configuration parameters, bsd.own.mk will try to 169include the file specified by the "MAKECONF" variable. If MAKECONF is not 170set, or no such file exists, the system make configuration file, /etc/mk.conf 171is included. These files may define any of the variables described below. 172 173bsd.own.mk sets the following variables, if they are not already defined 174(defaults are in brackets): 175 176BSDSRCDIR The real path to the system sources, so that 'make obj' 177 will work correctly. [/usr/src] 178 179BSDOBJDIR The real path to the system 'obj' tree, so that 'make obj' 180 will work correctly. [/usr/obj] 181 182BINGRP Binary group. [wheel] 183 184BINOWN Binary owner. [root] 185 186BINMODE Binary mode. [555] 187 188NONBINMODE Mode for non-executable files. [444] 189 190MANDIR Base path for manual installation. [/usr/share/man/cat] 191 192MANGRP Manual group. [wheel] 193 194MANOWN Manual owner. [root] 195 196MANMODE Manual mode. [${NONBINMODE}] 197 198MANINSTALL Manual installation type: maninstall, catinstall, or both 199 200LIBDIR Base path for library installation. [/usr/lib] 201 202LINTLIBDIR Base path for lint(1) library installation. [/usr/libdata/lint] 203 204LIBGRP Library group. [${BINGRP}] 205 206LIBOWN Library owner. [${BINOWN}] 207 208LIBMODE Library mode. [${NONBINMODE}] 209 210DOCDIR Base path for system documentation (e.g. PSD, USD, etc.) 211 installation. [/usr/share/doc] 212 213HTMLDOCDIR Base path for html system documentation installation. 214 [/usr/share/doc/html] 215 216DOCGRP Documentation group. [wheel] 217 218DOCOWN Documentation owner. [root] 219 220DOCMODE Documentation mode. [${NONBINMODE}] 221 222NLSDIR Base path for National Language Support files installation. 223 [/usr/share/nls] 224 225NLSGRP National Language Support files group. [wheel] 226 227NLSOWN National Language Support files owner. [root] 228 229NLSMODE National Language Support files mode. [${NONBINMODE}] 230 231STRIPFLAG The flag passed to the install program to cause the binary 232 to be stripped. This is to be used when building your 233 own install script so that the entire system can be made 234 stripped/not-stripped using a single knob. [-s] 235 236COPY The flag passed to the install program to cause the binary 237 to be copied rather than moved. This is to be used when 238 building our own install script so that the entire system 239 can either be installed with copies, or with moves using 240 a single knob. [-c] 241 242Additionally, the following variables may be set by bsd.own.mk or in a 243make configuration file to modify the behaviour of the system build 244process (default values are in brackets along with comments, if set by 245bsd.own.mk): 246 247MKCRYPTO If set to "no", no cryptography support will be built 248 into the system. Defaults to "yes". 249 250NOCRYPTO If set, it is equivalent to setting MKCRYPTO to "no". 251 252MKCRYPTO_IDEA If set to "yes", IDEA support will be built into 253 libcrypto_idea.a. Defaults to "no". 254 255MKCRYPTO_RC5 If set to "yes", RC5 support will be built into 256 libcrypto_rc5.a. Defaults to "no". 257 258MKKERBEROS If set to "no", disables building Kerberos (v4 or v5) 259 support into various system utilities that support it. 260 Defaults to "yes". NOTE: This does not affect the 261 building of the Kerberos libraries or infrastructure 262 programs themselves. To completely disable Kerberos, 263 set MKCRYPTO to "no". 264 265NOKERBEROS If set, it is equivalent to setting MKKERBEROS to "no". 266 267SKEY Compile in support for S/key authentication. [yes, set 268 unconditionally] 269 270MANZ Compress manual pages at installation time. 271 272SYS_INCLUDE Copy or symlink kernel include files into /usr/include. 273 Possible values are "symlinks" or "copies" (which is 274 the same as the variable being unset). 275 276NOPROFILE Do not build profiled versions of system libraries 277 278NOPIC Do not build PIC versions of system libraries, and 279 do not build shared libraries. [set if ${MACHINE_ARCH} 280 is "sh3" and ${OBJECT_FMT} is "COFF", unset otherwise.] 281 282NOLINT Do not build lint libraries. 283 284OBJECT_FMT Object file format. [set to "ELF" on architectures that 285 use ELF -- currently if ${MACHINE_ARCH} is "alpha", 286 "mipsel", "mipseb", "powerpc", "sparc", "sparc64", 287 and "i386", or set to "a.out" on other architectures]. 288 289 290bsd.own.mk is generally useful when building your own Makefiles so that 291they use the same default owners etc. as the rest of the tree. 292 293=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 294 295The include file <bsd.prog.mk> handles building programs from one or 296more source files, along with their manual pages. It has a limited number 297of suffixes, consistent with the current needs of the BSD tree. 298 299It has eight targets: 300 301 all: 302 build the program and its manual page 303 clean: 304 remove the program, any object files and the files a.out, 305 Errs, errs, mklog, and ${PROG}.core. 306 cleandir: 307 remove all of the files removed by the target clean, as 308 well as .depend, tags, and any manual pages. 309 `distclean' is a synonym for `cleandir'. 310 depend: 311 make the dependencies for the source files, and store 312 them in the file .depend. 313 includes: 314 install any header files. 315 install: 316 install the program and its manual pages; if the Makefile 317 does not itself define the target install, the targets 318 beforeinstall and afterinstall may also be used to cause 319 actions immediately before and after the install target 320 is executed. 321 lint: 322 run lint on the source files 323 tags: 324 create a tags file for the source files. 325 326It sets/uses the following variables: 327 328BINGRP Binary group. 329 330BINOWN Binary owner. 331 332BINMODE Binary mode. 333 334CLEANFILES Additional files to remove for the clean and cleandir targets. 335 336COPTS Additional flags to the compiler when creating C objects. 337 338CPPFLAGS Additional flags to the C pre-processor 339 340LDADD Additional loader objects. Usually used for libraries. 341 For example, to load with the compatibility and utility 342 libraries, use: 343 344 LDADD+=-lutil -lcompat 345 346LDFLAGS Additional loader flags. 347 348LINKS The list of binary links; should be full pathnames, the 349 linked-to file coming first, followed by the linked 350 file. The files are hard-linked. For example, to link 351 /bin/test and /bin/[, use: 352 353 LINKS= ${DESTDIR}/bin/test ${DESTDIR}/bin/[ 354 355SYMLINKS The list of symbolic links; should be full pathnames. 356 Syntax is identical to LINKS. Note that DESTDIR is not 357 automatically included in the link. 358 359MAN Manual pages (should end in .1 - .9). If no MAN variable is 360 defined, "MAN=${PROG}.1" is assumed. 361 362PROG The name of the program to build. If not supplied, nothing 363 is built. 364 365PROGNAME The name that the above program will be installed as, if 366 different from ${PROG}. 367 368SRCS List of source files to build the program. If SRCS is not 369 defined, it's assumed to be ${PROG}.c. 370 371DPADD Additional dependencies for the program. Usually used for 372 libraries. For example, to depend on the compatibility and 373 utility libraries use: 374 375 DPADD+=${LIBCOMPAT} ${LIBUTIL} 376 377 The following libraries are predefined for DPADD: 378 379 LIBCRT0?= ${DESTDIR}/usr/lib/crt0.o 380 LIBC?= ${DESTDIR}/usr/lib/libc.a 381 LIBC_PIC?= ${DESTDIR}/usr/lib/libc_pic.a 382 LIBCOMPAT?= ${DESTDIR}/usr/lib/libcompat.a 383 LIBCRYPT?= ${DESTDIR}/usr/lib/libcrypt.a 384 LIBCURSES?= ${DESTDIR}/usr/lib/libcurses.a 385 LIBDBM?= ${DESTDIR}/usr/lib/libdbm.a 386 LIBDES?= ${DESTDIR}/usr/lib/libdes.a 387 LIBEDIT?= ${DESTDIR}/usr/lib/libedit.a 388 LIBFORM?= ${DESTDIR}/usr/lib/libform.a 389 LIBGCC?= ${DESTDIR}/usr/lib/libgcc.a 390 LIBGNUMALLOC?= ${DESTDIR}/usr/lib/libgnumalloc.a 391 LIBINTL?= ${DESTDIR}/usr/lib/libintl.a 392 LIBIPSEC?= ${DESTDIR}/usr/lib/libipsec.a 393 LIBKDB?= ${DESTDIR}/usr/lib/libkdb.a 394 LIBKRB?= ${DESTDIR}/usr/lib/libkrb.a 395 LIBKVM?= ${DESTDIR}/usr/lib/libkvm.a 396 LIBL?= ${DESTDIR}/usr/lib/libl.a 397 LIBM?= ${DESTDIR}/usr/lib/libm.a 398 LIBMENU?= ${DESTDIR}/usr/lib/libmenu.a 399 LIBMP?= ${DESTDIR}/usr/lib/libmp.a 400 LIBNTP?= ${DESTDIR}/usr/lib/libntp.a 401 LIBPC?= ${DESTDIR}/usr/lib/libpc.a 402 LIBPCAP?= ${DESTDIR}/usr/lib/libpcap.a 403 LIBPLOT?= ${DESTDIR}/usr/lib/libplot.a 404 LIBPOSIX?= ${DESTDIR}/usr/lib/libposix.a 405 LIBRESOLV?= ${DESTDIR}/usr/lib/libresolv.a 406 LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a 407 LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a 408 LIBTERMCAP?= ${DESTDIR}/usr/lib/libtermcap.a 409 LIBTELNET?= ${DESTDIR}/usr/lib/libtelnet.a 410 LIBUTIL?= ${DESTDIR}/usr/lib/libutil.a 411 LIBWRAP?= ${DESTDIR}/usr/lib/libwrap.a 412 LIBY?= ${DESTDIR}/usr/lib/liby.a 413 LIBZ?= ${DESTDIR}/usr/lib/libz.a 414 415 416SHAREDSTRINGS If defined, a new .c.o rule is used that results in shared 417 strings, using xstr(1). Note that this will not work with 418 parallel makes. 419 420STRIPFLAG The flag passed to the install program to cause the binary 421 to be stripped. 422 423SUBDIR A list of subdirectories that should be built as well. 424 Each of the targets will execute the same target in the 425 subdirectories. 426 427SCRIPTS A list of interpreter scripts [file.{sh,csh,pl,awk,...}]. 428 These are installed exactly like programs. 429 430SCRIPTSNAME The name that the above program will be installed as, if 431 different from ${SCRIPTS}. These can be further specialized 432 by setting SCRIPTSNAME_<script>. 433 434FILES A list of files to install. The installation is controlled 435 by the FILESNAME, FILESOWN, FILESGRP, FILESMODE, FILESDIR 436 variables that can be further specialized by FILES<VAR>_<file> 437 438The include file <bsd.prog.mk> includes the file named "../Makefile.inc" 439if it exists, as well as the include file <bsd.man.mk>. 440 441Some simple examples: 442 443To build foo from foo.c with a manual page foo.1, use: 444 445 PROG= foo 446 447 .include <bsd.prog.mk> 448 449To build foo from foo.c with a manual page foo.2, add the line: 450 451 MAN= foo.2 452 453If foo does not have a manual page at all, add the line: 454 455 MKMAN= no 456 457If foo has multiple source files, add the line: 458 459 SRCS= a.c b.c c.c d.c 460 461=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 462 463The include file <bsd.subdir.mk> contains the default targets for building 464subdirectories. It has the same eight targets as <bsd.prog.mk>: all, 465clean, cleandir, depend, includes, install, lint, and tags. For all of 466the directories listed in the variable SUBDIR, the specified directory 467will be visited and the target made. There is also a default target which 468allows the command "make subdir" where subdir is any directory listed in 469the variable SUBDIR. 470 471As a special case, the use of a token .WAIT as an entry in SUBDIR acts 472as a synchronization barrier when multiple make jobs are run; subdirs 473before the .WAIT must complete before any subdirs after .WAIT are 474started. See make(1) for some caveats on use of .WAIT and other 475special sources. 476 477=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 478 479The include file <bsd.links.mk> handles the LINKS and SYMLINKS variables 480and is included from from bsd.lib.mk and bsd.prog.mk. 481 482=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 483 484The include file <bsd.files.mk> handles the FILES variables and is included 485from bsd.lib.mk and bsd.prog.mk. 486 487=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 488 489The include file <bsd.inc.mk> defines the includes target and uses two 490variables: 491 492INCS The list of include files 493 494INCSDIR The location to install the include files. 495 496=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 497 498The include file <bsd.kinc.mk> defines the many targets (includes, 499subdirectories, etc.), and is used by kernel makefiles to handle 500include file installation. It is intended to be included alone, by 501kernel Makefiles. Please see bsd.kinc.mk for more details, and keep 502the documentation in that file up to date. 503 504=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 505 506The include file <bsd.info.mk> is used to generate and install GNU Info 507documentation from respective Texinfo source files. It defines three 508implicit targets (.txi.info, .texi.info, and .texinfo.info), and uses the 509following variables: 510 511TEXINFO List of Texinfo source files. Info documentation will 512 consist of single files with the extension replaced by 513 .info. 514 515INFOFLAGS Flags to pass to makeinfo. [] 516 517INSTALL_INFO Name of install-info program. [install-info] 518 519MAKEINFO Name of makeinfo program. [makeinfo] 520 521=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 522 523The include file <bsd.sys.mk> is used by <bsd.prog.mk> and 524<bsd.lib.mk>. It contains overrides that are used when building 525the NetBSD source tree. For instance, if "PARALLEL" is defined by 526the program/library Makefile, it includes a set of rules for lex and 527yacc that allow multiple lex and yacc targets to be built in parallel. 528 529Other variables of note (incomplete list): 530 531WARNS Crank up gcc warning options; WARNS=1 and WARNS=2 are the two 532 distinct levels. 533 534FORMAT_AUDIT If FORMAT_AUDIT is set, and WFORMAT is set and > 1, turn on 535WFORMAT -Wnetbsd-format-audit for extra-stringent format checking. 536 WFORMAT belongs in individual makefiles and/or 537 Makefile.inc files. (set WFORMAT=1 in individual 538 makefiles if a program is not security critical and is 539 doing bizarre things with format strings which would 540 be even uglier if rewritten) FORMAT_AUDIT should go in 541 mk.conf if you're doing format-string auditing. 542 FORMAT_AUDIT may go away in time. 543 544=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 545 546The include file <bsd.lib.mk> has support for building libraries. It has 547the same eight targets as <bsd.prog.mk>: all, clean, cleandir, depend, 548includes, install, lint, and tags. Additionally, it has a checkver target 549which checks for installed shared object libraries whose version is greater 550that the version of the source. It has a limited number of suffixes, 551consistent with the current needs of the BSD tree. 552 553It sets/uses the following variables: 554 555LIB The name of the library to build. 556 557LIBDIR Target directory for libraries. 558 559LINTLIBDIR Target directory for lint libraries. 560 561LIBGRP Library group. 562 563LIBOWN Library owner. 564 565LIBMODE Library mode. 566 567LDADD Additional loader objects. 568 569MAN The manual pages to be installed (use a .1 - .9 suffix). 570 571MKLINKLIB If "no", act as "MKPICINSTALL=no MKPROFILE=no". 572 Also: 573 - don't install the .a libraries 574 - don't install _pic.a libraries on PIC systems 575 - don't build .a libraries on PIC systems 576 - don't install the .so symlink on ELF systems 577 I.e, only install the shared library (and the .so.major 578 symlink on ELF). 579 580MKPICLIB If "no", don't build _pic.a libraries, and build the 581 shared object libraries from the .a libraries. A 582 symlink is installed in ${DESTDIR}/usr/lib for the 583 _pic.a library pointing to the .a library. 584 585NOCHECKVER_<library> 586NOCHECKVER If set, disables checking for installed shared object 587 libraries with versions greater than the source. A 588 particular library name, without the "lib" prefix, may 589 be appended to the variable name to disable the check for 590 only that library. 591 592SRCS List of source files to build the library. Suffix types 593 .s, .c, and .f are supported. Note, .s files are preferred 594 to .c files of the same name. (This is not the default for 595 versions of make.) 596 597The include file <bsd.lib.mk> includes the file named "../Makefile.inc" 598if it exists, as well as the include file <bsd.man.mk>. 599 600It has rules for building profiled objects; profiled libraries are 601built by default. 602 603Libraries are ranlib'd when made. 604 605=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 606 607The include file <bsd.obj.mk> defines targets related to the creation 608and use of separated object and source directories. 609 610If an environment variable named MAKEOBJDIRPREFIX is set, make(1) uses 611${MAKEOBJDIRPREFIX}${.CURDIR} as the name of the object directory if 612it exists. Otherwise make(1) looks for the existence of a 613subdirectory (or a symlink to a directory) of the source directory 614into which built targets should be placed. If an environment variable 615named MAKEOBJDIR is set, make(1) uses its value as the name of the 616object directory; failing that, make first looks for a subdirectory 617named "obj.${MACHINE}", and if that doesn't exist, it looks for "obj". 618 619Object directories are not created automatically by make(1) if they 620don't exist; you need to run a separate "make obj". (This will happen 621during a top-level build if "MKOBJDIRS" is set to a value other than 622"no"). When the source directory is a subdirectory of ${BSDSRCDIR} -- 623and this is determined by a simple string prefix comparison -- object 624directories are created in a separate object directory tree, and a 625symlink to the object directory in that tree is created in the source 626directory; otherwise, "make obj" assumes that you're not in the main 627source tree and that it's not safe to use a separate object tree. 628 629Several variables used by <bsd.obj.mk> control exactly what 630directories and links get created during a "make obj": 631 632MAKEOBJDIR If set, this is the component name of the object 633 directory. 634 635OBJMACHINE If this is set but MAKEOBJDIR is not set, creates 636 object directories or links named "obj.${MACHINE}"; 637 otherwise, just creates ones named "obj". 638 639USR_OBJMACHINE If set, and the current directory is a subdirectory of 640 ${BSDSRCDIR}, create object directory in the 641 corresponding subdirectory of ${BSDOBJDIR}.${MACHINE}; 642 otherwise, create it in the corresponding subdirectory 643 of ${BSDOBJDIR} 644 645=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 646 647The include file <bsd.kernobj.mk> defines variables related to the 648location of kernel sources and object directories. 649 650KERNSRCDIR Is the location of the top of the kernel src. 651 It defaults to ${BSDSRCDIR}/sys, but the top-level 652 Makefile.inc sets it to ${ABSTOP}/sys (ABSTOP is the 653 absolute path to the directory where the top-level 654 Makefile.inc was found. 655 656KERNARCHDIR Is the location of the machine dependent kernel 657 sources. It defaults to arch/${MACHINE} 658 659KERNCONFDIR Is where the configuration files for kernels are 660 found; default is ${KERNSRCDIR}/${KERNARCHDIR}/conf. 661 662KERNOBJDIR Is the kernel build directory. The kernel GENERIC for 663 instance will be compiled in ${KERNOBJDIR}/GENERIC. 664 The default value is 665 ${MAKEOBJDIRPREFIX}${KERNSRCDIR}/${KERNARCHDIR}/compile 666 if it exists or the target 'obj' is being made. 667 Otherwise the default is 668 ${KERNSRCDIR}/${KERNARCHDIR}/compile. 669 670It is important that Makefiles (such as those under src/distrib) that 671wish to find compiled kernels use bsd.kernobj.mk and ${KERNOBJDIR} 672rather than make assumptions about the location of the compiled kernel. 673 674=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 675