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