1# 2# $FreeBSD: src/Makefile.inc1,v 1.141.2.62 2003/04/06 19:54:00 dwmalone Exp $ 3# $DragonFly: src/Makefile.inc1,v 1.2 2003/06/17 04:21:10 dillon Exp $ 4# 5# Make command line options: 6# -DMAKE_KERBEROS4 to build KerberosIV 7# -DMAKE_KERBEROS5 to build Kerberos5 8# -DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 9# -DNOCLEAN do not clean at all 10# -DNOCRYPT will prevent building of crypt versions 11# -DNOMAN do not build the manual pages 12# -DNOPROFILE do not build profiled libraries 13# -DNOSECURE do not go into secure subdir 14# -DNOGAMES do not go into games subdir 15# -DNOSHARE do not go into share subdir 16# -DNOINFO do not make or install info files 17# -DNOLIBC_R do not build libc_r. 18# -DNO_FORTRAN do not build g77 and related libraries. 19# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 20# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 21# -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel 22# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 23# -DNO_DOCUPDATE do not update doc in ${MAKE} update 24# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 25# TARGET_ARCH="arch" to crossbuild world to a different arch 26 27# 28# The intended user-driven targets are: 29# buildworld - rebuild *everything*, including glue to help do upgrades 30# installworld- install everything built by "buildworld" 31# update - convenient way to update your source tree (eg: sup/cvs) 32# most - build user commands, no libraries or include files 33# installmost - install user commands, no libraries or include files 34# 35# Standard targets (not defined here) are documented in the makefiles in 36# /usr/share/mk. These include: 37# obj depend all install clean cleandepend cleanobj 38 39# Put initial settings here. 40SUBDIR= 41 42# We must do share/info early so that installation of info `dir' 43# entries works correctly. Do it first since it is less likely to 44# grow dependencies on include and lib than vice versa. 45.if exists(${.CURDIR}/share/info) 46SUBDIR+= share/info 47.endif 48 49# We must do include and lib early so that the perl *.ph generation 50# works correctly as it uses the header files installed by this. 51.if exists(${.CURDIR}/include) 52SUBDIR+= include 53.endif 54.if exists(${.CURDIR}/lib) 55SUBDIR+= lib 56.endif 57 58.if exists(${.CURDIR}/bin) 59SUBDIR+= bin 60.endif 61.if exists(${.CURDIR}/games) && !defined(NOGAMES) 62SUBDIR+= games 63.endif 64.if exists(${.CURDIR}/gnu) 65SUBDIR+= gnu 66.endif 67.if exists(${.CURDIR}/kerberosIV) && exists(${.CURDIR}/crypto) && \ 68 !defined(NOCRYPT) && !defined(NO_OPENSSL) && defined(MAKE_KERBEROS4) 69SUBDIR+= kerberosIV 70.endif 71.if exists(${.CURDIR}/kerberos5) && exists(${.CURDIR}/crypto) && \ 72 !defined(NOCRYPT) && !defined(NO_OPENSSL) && defined(MAKE_KERBEROS5) 73SUBDIR+= kerberos5 74.endif 75.if exists(${.CURDIR}/libexec) 76SUBDIR+= libexec 77.endif 78.if exists(${.CURDIR}/sbin) 79SUBDIR+= sbin 80.endif 81.if exists(${.CURDIR}/secure) && !defined(NOCRYPT) && !defined(NOSECURE) 82SUBDIR+= secure 83.endif 84.if exists(${.CURDIR}/share) && !defined(NOSHARE) 85SUBDIR+= share 86.endif 87.if exists(${.CURDIR}/sys) 88SUBDIR+= sys 89.endif 90.if exists(${.CURDIR}/usr.bin) 91SUBDIR+= usr.bin 92.endif 93.if exists(${.CURDIR}/usr.sbin) 94SUBDIR+= usr.sbin 95.endif 96 97# etc must be last for "distribute" to work 98.if exists(${.CURDIR}/etc) 99SUBDIR+= etc 100.endif 101 102# These are last, since it is nice to at least get the base system 103# rebuilt before you do them. 104.if defined(LOCAL_DIRS) 105.for _DIR in ${LOCAL_DIRS} 106.if exists(${.CURDIR}/${_DIR}) & exists(${.CURDIR}/${_DIR}/Makefile) 107SUBDIR+= ${_DIR} 108.endif 109.endfor 110.endif 111 112.if defined(SUBDIR_OVERRIDE) 113SUBDIR= ${SUBDIR_OVERRIDE} 114.endif 115 116.if defined(NOCLEANDIR) 117CLEANDIR= clean cleandepend 118.else 119CLEANDIR= cleandir 120.endif 121 122SUP?= /usr/local/bin/cvsup 123SUPFLAGS?= -g -L 2 -P - 124.if defined(SUPHOST) 125SUPFLAGS+= -h ${SUPHOST} 126.endif 127 128MAKEOBJDIRPREFIX?= /usr/obj 129TARGET_ARCH?= ${MACHINE_ARCH} 130.if ${TARGET_ARCH} == ${MACHINE_ARCH} 131TARGET?= ${MACHINE} 132.else 133TARGET?= ${TARGET_ARCH} 134.endif 135.if make(buildworld) 136BUILD_ARCH!= sysctl -n hw.machine_arch 137.if ${MACHINE_ARCH} != ${BUILD_ARCH} 138.error To cross-build, set TARGET_ARCH. 139.endif 140.endif 141.if ${MACHINE} == ${TARGET} 142OBJTREE= ${MAKEOBJDIRPREFIX} 143.else 144OBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET} 145.endif 146WORLDTMP= ${OBJTREE}${.CURDIR}/${MACHINE_ARCH} 147# /usr/games added for fortune which depend on strfile 148STRICTTMPPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games 149TMPPATH= ${STRICTTMPPATH}:${PATH} 150OBJFORMAT_PATH?= /usr/libexec 151 152TMPDIR?= /tmp 153TMPPID!= echo $$$$ 154INSTALLTMP= ${TMPDIR}/install.${TMPPID} 155 156# 157# Building a world goes through the following stages 158# 159# 1. bootstrap-tool stage [BMAKE] 160# This stage is responsible for creating programs that 161# are needed for backward compatibility reasons. They 162# are not built as cross-tools. 163# 2. build-tool stage [TMAKE] 164# This stage is responsible for creating the object 165# tree and building any tools that are needed during 166# the build process. 167# 3. cross-tool stage [XMAKE] 168# This stage is responsible for creating any tools that 169# are needed for cross-builds. A cross-compiler is one 170# of them. 171# 4. world stage [WMAKE] 172# This stage actually builds the world. 173# 5. install stage (optional) [IMAKE] 174# This stage installs a previously built world. 175# 176 177# Common environment for world related stages 178CROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 179 MACHINE_ARCH=${TARGET_ARCH} \ 180 MACHINE=${TARGET} \ 181 OBJFORMAT_PATH=${WORLDTMP}/usr/libexec \ 182 PERL5LIB=${WORLDTMP}/usr/libdata/perl/5.00503 \ 183 GROFF_BIN_PATH=${WORLDTMP}/usr/bin \ 184 GROFF_FONT_PATH=${WORLDTMP}/usr/share/groff_font \ 185 GROFF_TMAC_PATH=${WORLDTMP}/usr/share/tmac 186 187# bootstrap-tool stage 188BMAKEENV= MAKEOBJDIRPREFIX=${WORLDTMP} \ 189 DESTDIR= \ 190 INSTALL="sh ${.CURDIR}/tools/install.sh" 191BMAKE= ${BMAKEENV} ${MAKE} -f Makefile.inc1 -DBOOTSTRAPPING \ 192 -DNOHTML -DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED \ 193 -DNO_WERROR 194 195# build-tool stage 196TMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 197 DESTDIR= \ 198 INSTALL="sh ${.CURDIR}/tools/install.sh" 199TMAKE= ${TMAKEENV} ${MAKE} -f Makefile.inc1 -DBOOTSTRAPPING 200 201# cross-tool stage 202XMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} -DNO_FORTRAN -DNO_GDB 203 204# world stage 205WMAKEENV= ${CROSSENV} \ 206 DESTDIR=${WORLDTMP} \ 207 INSTALL="sh ${.CURDIR}/tools/install.sh" \ 208 PATH=${TMPPATH} 209WMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 210 211# install stage 212IMAKEENV= ${CROSSENV} \ 213 PATH=${STRICTTMPPATH}:${INSTALLTMP} 214IMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 215 216# kernel stage 217KMAKEENV= ${WMAKEENV} \ 218 OBJFORMAT_PATH=${WORLDTMP}/usr/libexec:${OBJFORMAT_PATH} 219 220USRDIRS= usr/bin usr/lib/compat/aout usr/games usr/libdata/ldscripts \ 221 usr/libexec/${OBJFORMAT} usr/sbin usr/share/misc \ 222 usr/share/dict \ 223 usr/share/groff_font/devX100 \ 224 usr/share/groff_font/devX100-12 \ 225 usr/share/groff_font/devX75 \ 226 usr/share/groff_font/devX75-12 \ 227 usr/share/groff_font/devascii \ 228 usr/share/groff_font/devcp1047 \ 229 usr/share/groff_font/devdvi \ 230 usr/share/groff_font/devhtml \ 231 usr/share/groff_font/devkoi8-r \ 232 usr/share/groff_font/devlatin1 \ 233 usr/share/groff_font/devlbp \ 234 usr/share/groff_font/devlj4 \ 235 usr/share/groff_font/devps \ 236 usr/share/groff_font/devutf8 \ 237 usr/share/tmac/mdoc usr/share/tmac/mm 238 239INCDIRS= arpa dev fs g++/std isc isofs libmilter objc openssl \ 240 protocols readline rpc rpcsvc security ufs 241 242# 243# buildworld 244# 245# Attempt to rebuild the entire system, with reasonable chance of 246# success, regardless of how old your existing system is. 247# 248_worldtmp: 249 @echo 250 @echo "--------------------------------------------------------------" 251 @echo ">>> Rebuilding the temporary build tree" 252 @echo "--------------------------------------------------------------" 253.if !defined(NOCLEAN) 254 rm -rf ${WORLDTMP} 255.else 256 # XXX - These two can depend on any header file. 257 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 258 rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 259.endif 260.for _dir in ${USRDIRS} 261 mkdir -p ${WORLDTMP}/${_dir} 262.endfor 263.for _dir in ${INCDIRS} 264 mkdir -p ${WORLDTMP}/usr/include/${_dir} 265.endfor 266 ln -sf ${.CURDIR}/sys ${WORLDTMP} 267_bootstrap-tools: 268 @echo 269 @echo "--------------------------------------------------------------" 270 @echo ">>> stage 1: bootstrap tools" 271 @echo "--------------------------------------------------------------" 272 cd ${.CURDIR}; ${BMAKE} bootstrap-tools 273_cleanobj: 274.if !defined(NOCLEAN) 275 @echo 276 @echo "--------------------------------------------------------------" 277 @echo ">>> stage 2: cleaning up the object tree" 278 @echo "--------------------------------------------------------------" 279 cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 280.endif 281_obj: 282 @echo 283 @echo "--------------------------------------------------------------" 284 @echo ">>> stage 2: rebuilding the object tree" 285 @echo "--------------------------------------------------------------" 286 cd ${.CURDIR}; ${WMAKE} par-obj 287_build-tools: 288 @echo 289 @echo "--------------------------------------------------------------" 290 @echo ">>> stage 2: build tools" 291 @echo "--------------------------------------------------------------" 292 cd ${.CURDIR}; ${TMAKE} build-tools 293_cross-tools: 294 @echo 295 @echo "--------------------------------------------------------------" 296 @echo ">>> stage 3: cross tools" 297 @echo "--------------------------------------------------------------" 298 cd ${.CURDIR}; ${XMAKE} cross-tools 299_includes: 300 @echo 301 @echo "--------------------------------------------------------------" 302 @echo ">>> stage 4: populating ${WORLDTMP}/usr/include" 303 @echo "--------------------------------------------------------------" 304 cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 305_libraries: 306 @echo 307 @echo "--------------------------------------------------------------" 308 @echo ">>> stage 4: building libraries" 309 @echo "--------------------------------------------------------------" 310 cd ${.CURDIR}; ${WMAKE} -DNOHTML -DNOINFO -DNOMAN -DNOFSCHG libraries 311_depend: 312 @echo 313 @echo "--------------------------------------------------------------" 314 @echo ">>> stage 4: make dependencies" 315 @echo "--------------------------------------------------------------" 316 cd ${.CURDIR}; ${WMAKE} par-depend 317everything: 318 @echo 319 @echo "--------------------------------------------------------------" 320 @echo ">>> stage 4: building everything.." 321 @echo "--------------------------------------------------------------" 322 cd ${.CURDIR}; ${WMAKE} all 323 324 325WMAKE_TGTS= 326.if !defined(SUBDIR_OVERRIDE) 327WMAKE_TGTS+= _worldtmp _bootstrap-tools 328.endif 329WMAKE_TGTS+= _cleanobj _obj _build-tools 330.if !defined(SUBDIR_OVERRIDE) 331WMAKE_TGTS+= _cross-tools 332.endif 333WMAKE_TGTS+= _includes _libraries _depend everything 334 335buildworld: ${WMAKE_TGTS} 336.ORDER: ${WMAKE_TGTS} 337 338# 339# installcheck 340# 341# Checks to be sure system is ready for installworld 342# 343installcheck: 344.if !defined(NO_SENDMAIL) 345 @if ! `grep -q '^smmsp:' /etc/passwd`; then \ 346 echo "ERROR: Required smmsp user is missing, see /usr/src/UPDATING."; \ 347 false; \ 348 fi 349 @if ! `grep -q '^smmsp:' /etc/group`; then \ 350 echo "ERROR: Required smmsp group is missing, see /usr/src/UPDATING."; \ 351 false; \ 352 fi 353.endif 354 355# 356# distributeworld 357# 358# Distributes everything compiled by a `buildworld'. 359# 360# installworld 361# 362# Installs everything compiled by a 'buildworld'. 363# 364distributeworld installworld: installcheck 365 mkdir -p ${INSTALLTMP} 366 for prog in [ awk cap_mkdb cat chflags chmod chown \ 367 date echo egrep find grep \ 368 ln make makewhatis mkdir mtree mv perl pwd_mkdb rm sed sh sysctl \ 369 test true uname wc zic; do \ 370 cp `which $$prog` ${INSTALLTMP}; \ 371 done 372 cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//} 373 rm -rf ${INSTALLTMP} 374 375# 376# reinstall 377# 378# If you have a build server, you can NFS mount the source and obj directories 379# and do a 'make reinstall' on the *client* to install new binaries from the 380# most recent server build. 381# 382reinstall: 383 @echo "--------------------------------------------------------------" 384 @echo ">>> Making hierarchy" 385 @echo "--------------------------------------------------------------" 386 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy 387 @echo 388 @echo "--------------------------------------------------------------" 389 @echo ">>> Installing everything.." 390 @echo "--------------------------------------------------------------" 391 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 392.if !defined(NOMAN) && !defined(NO_MAKEDB_RUN) 393 @echo 394 @echo "--------------------------------------------------------------" 395 @echo ">>> Rebuilding man page indices" 396 @echo "--------------------------------------------------------------" 397 cd ${.CURDIR}/share/man; ${MAKE} makedb 398.endif 399 400redistribute: 401 @echo "--------------------------------------------------------------" 402 @echo ">>> Distributing everything.." 403 @echo "--------------------------------------------------------------" 404 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 405 406# 407# buildkernel and installkernel 408# 409# Which kernels to build and/or install is specified by setting 410# KERNCONF. If not defined a GENERIC kernel is built/installed. 411# Only the existing (depending TARGET) config files are used 412# for building kernels and only the first of these is designated 413# as the one being installed. 414# 415# Note that we have to use TARGET instead of TARGET_ARCH when 416# we're in kernel-land. Since only TARGET_ARCH is (expected) to 417# be set to cross-build, we have to make sure TARGET is set 418# properly. 419 420.if !defined(KERNCONF) && defined(KERNEL) 421KERNCONF= ${KERNEL} 422KERNWARN= yes 423.else 424KERNCONF?= GENERIC 425.endif 426INSTKERNNAME?= kernel 427 428KRNLSRCDIR= ${.CURDIR}/sys 429KRNLCONFDIR= ${KRNLSRCDIR}/${TARGET}/conf 430KRNLOBJDIR= ${OBJTREE}${KRNLSRCDIR} 431KERNCONFDIR?= ${KRNLCONFDIR} 432 433BUILDKERNELS= 434INSTALLKERNEL= 435.for _kernel in ${KERNCONF} 436.if exists(${KERNCONFDIR}/${_kernel}) 437BUILDKERNELS+= ${_kernel} 438.if empty(INSTALLKERNEL) 439INSTALLKERNEL= ${_kernel} 440.endif 441.endif 442.endfor 443 444# 445# buildkernel 446# 447# Builds all kernels defined by BUILDKERNELS. 448# 449buildkernel: 450.if empty(BUILDKERNELS) 451 @echo ">>> ERROR: Missing kernel configuration file(s) (${KERNCONF})." 452 @false 453.endif 454.if defined(KERNWARN) 455 @echo "--------------------------------------------------------------" 456 @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 457 @echo "--------------------------------------------------------------" 458 @sleep 3 459.endif 460 @echo 461.for _kernel in ${BUILDKERNELS} 462 @echo "--------------------------------------------------------------" 463 @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 464 @echo "--------------------------------------------------------------" 465 @echo "===> ${_kernel}" 466 mkdir -p ${KRNLOBJDIR} 467.if !defined(NO_KERNELCONFIG) 468 cd ${KRNLCONFDIR}; \ 469 PATH=${TMPPATH} \ 470 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 471 ${KERNCONFDIR}/${_kernel} 472.endif 473.if !defined(NOCLEAN) && !defined(NO_KERNELCLEAN) 474 cd ${KRNLOBJDIR}/${_kernel}; \ 475 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} -DNO_MODULES clean 476.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KRNLSRCDIR}/modules) 477 cd ${KRNLOBJDIR}/${_kernel}; \ 478 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} cleandir 479.endif 480.endif 481 cd ${KRNLOBJDIR}/${_kernel}; \ 482 MAKESRCPATH=${KRNLSRCDIR}/dev/aic7xxx/aicasm \ 483 ${MAKE} -DBOOTSTRAPPING -f ${KRNLSRCDIR}/dev/aic7xxx/aicasm/Makefile 484.if !defined(NO_KERNELDEPEND) 485 cd ${KRNLOBJDIR}/${_kernel}; \ 486 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} depend 487.endif 488 cd ${KRNLOBJDIR}/${_kernel}; \ 489 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} all 490 @echo "--------------------------------------------------------------" 491 @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 492 @echo "--------------------------------------------------------------" 493.endfor 494 495# 496# installkernel 497# 498# Install the kernel defined by INSTALLKERNEL 499# 500installkernel reinstallkernel: 501 cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 502 ${CROSSENV} ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel$//} 503 504# 505# update 506# 507# Update the source tree, by running sup and/or running cvs to update to the 508# latest copy. 509# 510update: 511.if defined(SUP_UPDATE) 512 @echo "--------------------------------------------------------------" 513 @echo ">>> Running ${SUP}" 514 @echo "--------------------------------------------------------------" 515.if defined(SUPFILE) 516 @${SUP} ${SUPFLAGS} ${SUPFILE} 517.endif 518.if defined(SUPFILE1) 519 @${SUP} ${SUPFLAGS} ${SUPFILE1} 520.endif 521.if defined(SUPFILE2) 522 @${SUP} ${SUPFLAGS} ${SUPFILE2} 523.endif 524.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE) 525 @${SUP} ${SUPFLAGS} ${PORTSSUPFILE} 526.endif 527.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE) 528 @${SUP} ${SUPFLAGS} ${DOCSUPFILE} 529.endif 530.endif 531.if defined(CVS_UPDATE) 532 @echo "--------------------------------------------------------------" 533 @echo ">>> Updating ${.CURDIR} from cvs repository" ${CVSROOT} 534 @echo "--------------------------------------------------------------" 535 cd ${.CURDIR}; cvs -q update -rRELENG_4 -P -d 536.endif 537 538# 539# most 540# 541# Build most of the user binaries on the existing system libs and includes. 542# 543most: 544 @echo "--------------------------------------------------------------" 545 @echo ">>> Building programs only" 546 @echo "--------------------------------------------------------------" 547.for _dir in bin sbin libexec usr.bin usr.sbin gnu/libexec gnu/usr.bin gnu/usr.sbin 548 cd ${.CURDIR}/${_dir}; ${MAKE} DIRPRFX=${_dir}/ all 549.endfor 550 551# 552# installmost 553# 554# Install the binaries built by the 'most' target. This does not include 555# libraries or include files. 556# 557installmost: 558 @echo "--------------------------------------------------------------" 559 @echo ">>> Installing programs only" 560 @echo "--------------------------------------------------------------" 561.for _dir in bin sbin libexec usr.bin usr.sbin gnu/libexec gnu/usr.bin gnu/usr.sbin 562 cd ${.CURDIR}/${_dir}; ${MAKE} DIRPRFX=${_dir}/ install 563.endfor 564 565# 566# ------------------------------------------------------------------------ 567# 568# From here onwards are utility targets used by the 'make world' and 569# related targets. If your 'world' breaks, you may like to try to fix 570# the problem and manually run the following targets to attempt to 571# complete the build. Beware, this is *not* guaranteed to work, you 572# need to have a pretty good grip on the current state of the system 573# to attempt to manually finish it. If in doubt, 'make world' again. 574# 575 576# 577# bootstrap-tools: Build tools needed for compatibility 578# 579.if exists(${.CURDIR}/games) && !defined(NOGAMES) 580_strfile= games/fortune/strfile 581.endif 582 583bootstrap-tools: 584.for _tool in ${_strfile} usr.bin/yacc usr.bin/colldef \ 585 usr.bin/uudecode usr.bin/xinstall \ 586 usr.sbin/config \ 587 gnu/usr.bin/gperf gnu/usr.bin/groff gnu/usr.bin/texinfo 588 ${ECHODIR} "===> ${_tool}"; \ 589 cd ${.CURDIR}/${_tool}; \ 590 ${MAKE} DIRPRFX=${_tool}/ obj; \ 591 ${MAKE} DIRPRFX=${_tool}/ depend; \ 592 ${MAKE} DIRPRFX=${_tool}/ all; \ 593 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 594.endfor 595 596# 597# build-tools: Build special purpose build tools 598# 599.if exists(${.CURDIR}/games) && !defined(NOGAMES) 600_games= games/adventure games/hack games/phantasia 601.endif 602 603.if exists(${.CURDIR}/share) && !defined(NOSHARE) 604_share= share/syscons/scrnmaps 605.endif 606 607.if !defined(NO_FORTRAN) 608_fortran= gnu/usr.bin/cc/f771 609.endif 610 611.if !defined(NOPERL) 612_perl= gnu/usr.bin/perl/miniperl 613.endif 614 615.if exists(${.CURDIR}/kerberosIV) && exists(${.CURDIR}/crypto) && \ 616 !defined(NOCRYPT) && defined(MAKE_KERBEROS4) 617_libroken4= kerberosIV/lib/libroken 618.endif 619 620.if exists(${.CURDIR}/kerberos5) && exists(${.CURDIR}/crypto) && \ 621 !defined(NOCRYPT) && defined(MAKE_KERBEROS5) 622_libkrb5= kerberos5/lib/libroken kerberos5/lib/libvers \ 623 kerberos5/lib/libasn1 kerberos5/lib/libhdb kerberos5/lib/libsl 624.endif 625 626.if defined(RELEASEDIR) 627_sysinstall= release/sysinstall 628.endif 629 630build-tools: 631.for _tool in bin/csh bin/sh ${_games} gnu/usr.bin/cc/cc_tools ${_fortran} \ 632 ${_perl} ${_libroken4} ${_libkrb5} lib/libncurses ${_share} \ 633 usr.bin/awk usr.bin/file ${_sysinstall} 634 ${ECHODIR} "===> ${_tool}"; \ 635 cd ${.CURDIR}/${_tool}; \ 636 ${MAKE} DIRPRFX=${_tool}/ obj; \ 637 ${MAKE} DIRPRFX=${_tool}/ build-tools 638.endfor 639 640# 641# cross-tools: Build cross-building tools 642# 643.if ${TARGET_ARCH} == "alpha" && ${MACHINE_ARCH} != "alpha" 644_elf2exe= usr.sbin/elf2exe 645.endif 646 647.if ${TARGET_ARCH} == "i386" && ${MACHINE_ARCH} != "i386" 648_btxld= usr.sbin/btxld 649.endif 650 651cross-tools: 652.for _tool in ${_btxld} ${_elf2exe} usr.bin/genassym usr.bin/gensetdefs \ 653 gnu/usr.bin/binutils usr.bin/objformat usr.sbin/crunch/crunchide \ 654 gnu/usr.bin/cc 655 ${ECHODIR} "===> ${_tool}"; \ 656 cd ${.CURDIR}/${_tool}; \ 657 ${MAKE} DIRPRFX=${_tool}/ obj; \ 658 ${MAKE} DIRPRFX=${_tool}/ depend; \ 659 ${MAKE} DIRPRFX=${_tool}/ all; \ 660 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 661.endfor 662 663# 664# hierarchy - ensure that all the needed directories are present 665# 666hierarchy: 667 cd ${.CURDIR}/etc; ${MAKE} distrib-dirs 668 669# 670# libraries - build all libraries, and install them under ${DESTDIR}. 671# 672# The list of libraries with dependents (${_prebuild_libs}) and their 673# interdependencies (__L) are built automatically by the 674# ${.CURDIR}/tools/make_libdeps.sh script. 675# 676libraries: 677 cd ${.CURDIR}; \ 678 ${MAKE} -f Makefile.inc1 _startup_libs; \ 679 ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 680 ${MAKE} -f Makefile.inc1 _generic_libs; 681 682# These dependencies are not automatically generated: 683# 684# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all 685# shared libraries for ELF. 686# 687_startup_libs= gnu/lib/csu gnu/lib/libgcc 688.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-${OBJFORMAT}) 689_startup_libs+= lib/csu/${MACHINE_ARCH}-${OBJFORMAT} 690.else 691_startup_libs+= lib/csu/${MACHINE_ARCH} 692.endif 693 694_prebuild_libs= 695 696_generic_libs= gnu/lib 697 698.if !defined(NOPERL) 699_generic_libs+= gnu/usr.bin/perl/libperl 700.endif 701 702.if !defined(NOCRYPT) && defined(MAKE_KERBEROS5) 703_prebuild_libs+= kerberos5/lib/libasn1 704_prebuild_libs+= kerberos5/lib/libgssapi 705_prebuild_libs+= kerberos5/lib/libkrb5 706_prebuild_libs+= kerberos5/lib/libroken 707_generic_libs+= kerberos5/lib 708.endif 709 710.if !defined(NOCRYPT) && defined(MAKE_KERBEROS4) 711_prebuild_libs+= kerberosIV/lib/libkrb 712kerberosIV/lib/libkrb__L: lib/libcrypt__L 713_generic_libs+= kerberosIV/lib 714.endif 715 716_prebuild_libs+= lib/libcom_err lib/libcrypt lib/libmd \ 717 lib/libncurses lib/libopie lib/libradius lib/libskey \ 718 lib/libtacplus lib/libutil \ 719 lib/libz lib/msun 720 721lib/libopie__L lib/libradius__L lib/libtacplus__L: lib/libmd__L 722lib/libskey__L: lib/libcrypt__L lib/libmd__L 723 724_generic_libs+= lib 725 726.if !defined(NOCRYPT) && !defined(NOSECURE) 727.if !defined(NO_OPENSSL) 728_prebuild_libs+= secure/lib/libcrypto secure/lib/libssl 729.if !defined(NO_OPENSSH) 730_prebuild_libs+= secure/lib/libssh 731secure/lib/libssh__L: secure/lib/libcrypto__L lib/libz__L 732.endif 733.endif 734_generic_libs+= secure/lib 735.endif 736 737_generic_libs+= usr.bin/lex/lib 738 739.if ${MACHINE_ARCH} == "i386" 740_generic_libs+= usr.sbin/pcvt/keycap 741.endif 742 743.for _lib in ${_startup_libs} ${_prebuild_libs} ${_generic_libs} 744${_lib}__L: .PHONY 745.if exists(${.CURDIR}/${_lib}) 746 ${ECHODIR} "===> ${_lib}"; \ 747 cd ${.CURDIR}/${_lib}; \ 748 ${MAKE} DIRPRFX=${_lib}/ depend; \ 749 ${MAKE} DIRPRFX=${_lib}/ all; \ 750 ${MAKE} DIRPRFX=${_lib}/ install 751.endif 752.endfor 753 754_startup_libs: ${_startup_libs:S/$/__L/} 755_prebuild_libs: ${_prebuild_libs:S/$/__L/} 756_generic_libs: ${_generic_libs:S/$/__L/} 757 758.for __target in clean cleandepend cleandir depend includes obj 759.for entry in ${SUBDIR} 760${entry}.${__target}__D: .PHONY 761 @if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 762 ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH}"; \ 763 edir=${entry}.${MACHINE_ARCH}; \ 764 cd ${.CURDIR}/$${edir}; \ 765 else \ 766 ${ECHODIR} "===> ${DIRPRFX}${entry}"; \ 767 edir=${entry}; \ 768 cd ${.CURDIR}/$${edir}; \ 769 fi; \ 770 ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 771.endfor 772par-${__target}: ${SUBDIR:S/$/.${__target}__D/} 773.endfor 774 775.include <bsd.subdir.mk> 776