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