Makefile.inc1 revision 119496
1132720Skan# 2132720Skan# $FreeBSD: head/Makefile.inc1 119496 2003-08-27 04:49:43Z imp $ 3169691Skan# 4132720Skan# Make command line options: 5132720Skan# -DNO_KERBEROS Do not build Heimdal (Kerberos 5) 6132720Skan# -DNO_RESCUE do not build rescue binaries 7132720Skan# -DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 8132720Skan# -DNOCLEAN do not clean at all 9132720Skan# -DNOCRYPT will prevent building of crypt versions 10132720Skan# -DNOMAN do not build the manual pages 11132720Skan# -DNOPROFILE do not build profiled libraries 12132720Skan# -DNOGAMES do not go into games subdir 13132720Skan# -DNOSHARE do not go into share subdir 14132720Skan# -DNOINFO do not make or install info files 15132720Skan# -DNOLIBC_R do not build libc_r. 16132720Skan# -DNO_FORTRAN do not build g77 and related libraries. 17132720Skan# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 18132720Skan# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 19169691Skan# -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel 20132720Skan# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 21132720Skan# -DNO_DOCUPDATE do not update doc in ${MAKE} update 22132720Skan# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 23132720Skan# TARGET_ARCH="arch" to crossbuild world to a different arch 24132720Skan 25132720Skan# 26132720Skan# The intended user-driven targets are: 27132720Skan# buildworld - rebuild *everything*, including glue to help do upgrades 28132720Skan# installworld- install everything built by "buildworld" 29132720Skan# update - convenient way to update your source tree (eg: sup/cvs) 30132720Skan# most - build user commands, no libraries or include files 31169691Skan# installmost - install user commands, no libraries or include files 32169691Skan# 33169691Skan# Standard targets (not defined here) are documented in the makefiles in 34169691Skan# /usr/share/mk. These include: 35132720Skan# obj depend all install clean cleandepend cleanobj 36132720Skan 37132720Skan# Put initial settings here. 38132720SkanSUBDIR= 39132720Skan 40132720Skan# We must do share/info early so that installation of info `dir' 41132720Skan# entries works correctly. Do it first since it is less likely to 42169691Skan# grow dependencies on include and lib than vice versa. 43132720Skan.if exists(${.CURDIR}/share/info) 44169691SkanSUBDIR+= share/info 45169691Skan.endif 46132720Skan 47132720Skan.if exists(${.CURDIR}/include) 48132720SkanSUBDIR+= include 49132720Skan.endif 50132720Skan.if exists(${.CURDIR}/lib) 51132720SkanSUBDIR+= lib 52132720Skan.endif 53132720Skan 54132720Skan.if exists(${.CURDIR}/bin) 55132720SkanSUBDIR+= bin 56132720Skan.endif 57132720Skan.if exists(${.CURDIR}/games) && !defined(NOGAMES) 58132720SkanSUBDIR+= games 59132720Skan.endif 60132720Skan.if exists(${.CURDIR}/gnu) 61132720SkanSUBDIR+= gnu 62132720Skan.endif 63132720Skan.if exists(${.CURDIR}/kerberos5) && exists(${.CURDIR}/crypto) && \ 64132720Skan !defined(NOCRYPT) && !defined(NO_OPENSSL) && !defined(NO_KERBEROS) 65132720SkanSUBDIR+= kerberos5 66132720Skan.endif 67132720Skan.if exists(${.CURDIR}/libexec) 68132720SkanSUBDIR+= libexec 69132720Skan.endif 70132720Skan.if exists(${.CURDIR}/rescue) && !defined(NO_RESCUE) 71132720SkanSUBDIR+= rescue 72132720Skan.endif 73132720Skan.if exists(${.CURDIR}/sbin) 74132720SkanSUBDIR+= sbin 75132720Skan.endif 76132720Skan.if exists(${.CURDIR}/secure) && !defined(NOCRYPT) 77169691SkanSUBDIR+= secure 78132720Skan.endif 79132720Skan.if exists(${.CURDIR}/share) && !defined(NOSHARE) 80132720SkanSUBDIR+= share 81132720Skan.endif 82132720Skan.if exists(${.CURDIR}/sys) 83132720SkanSUBDIR+= sys 84132720Skan.endif 85132720Skan.if exists(${.CURDIR}/usr.bin) 86132720SkanSUBDIR+= usr.bin 87169691Skan.endif 88132720Skan.if exists(${.CURDIR}/usr.sbin) 89132720SkanSUBDIR+= usr.sbin 90169691Skan.endif 91132720Skan 92132720Skan# etc must be last for "distribute" to work 93132720Skan.if exists(${.CURDIR}/etc) 94132720SkanSUBDIR+= etc 95132720Skan.endif 96132720Skan 97132720Skan# These are last, since it is nice to at least get the base system 98132720Skan# rebuilt before you do them. 99132720Skan.if defined(LOCAL_DIRS) 100169691Skan.for _DIR in ${LOCAL_DIRS} 101132720Skan.if exists(${.CURDIR}/${_DIR}) && exists(${.CURDIR}/${_DIR}/Makefile) 102132720SkanSUBDIR+= ${_DIR} 103132720Skan.endif 104132720Skan.endfor 105132720Skan.endif 106132720Skan 107132720Skan.if defined(SUBDIR_OVERRIDE) 108169691SkanSUBDIR= ${SUBDIR_OVERRIDE} 109132720Skan.endif 110132720Skan 111132720Skan.if defined(NOCLEANDIR) 112132720SkanCLEANDIR= clean cleandepend 113132720Skan.else 114132720SkanCLEANDIR= cleandir 115132720Skan.endif 116132720Skan 117169691SkanCVS?= cvs 118132720SkanSUP?= /usr/local/bin/cvsup 119132720SkanSUPFLAGS?= -g -L 2 -P - 120132720Skan.if defined(SUPHOST) 121132720SkanSUPFLAGS+= -h ${SUPHOST} 122132720Skan.endif 123132720Skan 124132720SkanMAKEOBJDIRPREFIX?= /usr/obj 125132720Skan.if !defined(OSRELDATE) 126132720Skan.if exists(/usr/include/osreldate.h) 127132720SkanOSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 128132720Skan /usr/include/osreldate.h 129132720Skan.else 130132720SkanOSRELDATE= 0 131132720Skan.endif 132132720Skan.endif 133132720SkanTARGET_ARCH?= ${MACHINE_ARCH} 134132720Skan.if ${TARGET_ARCH} == ${MACHINE_ARCH} 135132720SkanTARGET?= ${MACHINE} 136132720SkanTARGET_CPUTYPE?=${CPUTYPE} 137132720Skan.else 138132720SkanTARGET?= ${TARGET_ARCH} 139132720SkanTARGET_CPUTYPE?= 140132720Skan.endif 141132720Skan.if !empty(TARGET_CPUTYPE) 142132720Skan_TARGET_CPUTYPE=${TARGET_CPUTYPE} 143132720Skan.else 144132720Skan_TARGET_CPUTYPE=dummy 145132720Skan.endif 146132720Skan_CPUTYPE!= ${MAKE} -f /dev/null -m ${.CURDIR}/share/mk \ 147132720Skan CPUTYPE=${_TARGET_CPUTYPE} -V CPUTYPE 148132720Skan.if ${_CPUTYPE} != ${_TARGET_CPUTYPE} 149132720Skan.error CPUTYPE global should be set with ?=. 150132720Skan.endif 151132720Skan.if make(buildworld) 152132720SkanBUILD_ARCH!= sysctl -n hw.machine_arch 153132720Skan.if ${MACHINE_ARCH} != ${BUILD_ARCH} 154132720Skan.error To cross-build, set TARGET_ARCH. 155132720Skan.endif 156132720Skan.endif 157132720Skan.if ${MACHINE} == ${TARGET} 158132720SkanOBJTREE= ${MAKEOBJDIRPREFIX} 159132720Skan.else 160132720SkanOBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET} 161132720Skan.endif 162132720SkanWORLDTMP= ${OBJTREE}${.CURDIR}/${MACHINE_ARCH} 163132720Skan# /usr/games added for fortune which depend on strfile 164132720SkanBPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games 165132720SkanXPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games 166132720SkanSTRICTTMPPATH= ${BPATH}:${XPATH} 167132720SkanTMPPATH= ${STRICTTMPPATH}:${PATH} 168132720Skan 169132720SkanINSTALLTMP!= /usr/bin/mktemp -d -u -t install 170132720Skan 171132720Skan# 172132720Skan# Building a world goes through the following stages 173132720Skan# 174132720Skan# 1. legacy stage [BMAKE] 175132720Skan# This stage is responsible for creating compatibility 176132720Skan# shims that are needed by the bootstrap-tools, 177132720Skan# build-tools and cross-tools stages. 178132720Skan# 1. bootstrap-tools stage [BMAKE] 179132720Skan# This stage is responsible for creating programs that 180132720Skan# are needed for backward compatibility reasons. They 181132720Skan# are not built as cross-tools. 182132720Skan# 2. build-tools stage [TMAKE] 183132720Skan# This stage is responsible for creating the object 184132720Skan# tree and building any tools that are needed during 185132720Skan# the build process. 186132720Skan# 3. cross-tools stage [XMAKE] 187132720Skan# This stage is responsible for creating any tools that 188132720Skan# are needed for cross-builds. A cross-compiler is one 189132720Skan# of them. 190132720Skan# 4. world stage [WMAKE] 191132720Skan# This stage actually builds the world. 192132720Skan# 5. install stage (optional) [IMAKE] 193132720Skan# This stage installs a previously built world. 194132720Skan# 195132720Skan 196132720SkanBOOTSTRAPPING?= 0 197132720Skan 198132720Skan# Common environment for world related stages 199132720SkanCROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 200132720Skan MACHINE_ARCH=${TARGET_ARCH} \ 201132720Skan MACHINE=${TARGET} \ 202132720Skan CPUTYPE=${TARGET_CPUTYPE} \ 203132720Skan GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \ 204132720Skan GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \ 205132720Skan GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac 206132720Skan 207132720Skan# bootstrap-tools stage 208132720SkanBMAKEENV= DESTDIR= \ 209132720Skan INSTALL="sh ${.CURDIR}/tools/install.sh" \ 210132720Skan PATH=${BPATH}:${PATH} \ 211132720Skan WORLDTMP=${WORLDTMP} \ 212132720Skan MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" 213132720SkanBMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \ 214132720Skan ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 215132720Skan BOOTSTRAPPING=${OSRELDATE} \ 216132720Skan -DNOHTML -DNOINFO -DNOLINT -DNOMAN -DNOPIC -DNOPROFILE \ 217132720Skan -DNOSHARED -DNO_CPU_CFLAGS -DNO_WARNS 218132720Skan 219132720Skan# build-tools stage 220132720SkanTMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \ 221132720Skan ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 222132720Skan BOOTSTRAPPING=${OSRELDATE} -DNOLINT -DNO_CPU_CFLAGS -DNO_WARNS 223132720Skan 224132720Skan# cross-tools stage 225132720SkanXMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} -DNO_FORTRAN -DNO_GDB 226132720Skan 227132720Skan# world stage 228132720SkanWMAKEENV= ${CROSSENV} \ 229132720Skan DESTDIR=${WORLDTMP} \ 230132720Skan INSTALL="sh ${.CURDIR}/tools/install.sh" \ 231132720Skan PATH=${TMPPATH} 232132720SkanWMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 233132720Skan 234132720Skan# install stage 235132720SkanIMAKEENV= ${CROSSENV} \ 236132720Skan PATH=${STRICTTMPPATH}:${INSTALLTMP} 237132720SkanIMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 238132720Skan 239132720Skan# kernel stage 240132720SkanKMAKEENV= ${WMAKEENV} 241132720Skan 242132720Skan# 243132720Skan# buildworld 244132720Skan# 245132720Skan# Attempt to rebuild the entire system, with reasonable chance of 246132720Skan# success, regardless of how old your existing system is. 247132720Skan# 248169691Skan_worldtmp: 249169691Skan.if ${.CURDIR:C/[^,]//g} != "" 250169691Skan# The m4 build of sendmail files doesn't like it if ',' is used 251169691Skan# anywhere in the path of it's files. 252169691Skan @echo 253169691Skan @echo "*** Error: path to source tree contains a comma ','" 254169691Skan @echo 255169691Skan @false 256169691Skan.endif 257169691Skan @echo 258169691Skan @echo "--------------------------------------------------------------" 259169691Skan @echo ">>> Rebuilding the temporary build tree" 260169691Skan @echo "--------------------------------------------------------------" 261169691Skan.if !defined(NOCLEAN) 262169691Skan rm -rf ${WORLDTMP} 263169691Skan.else 264169691Skan rm -rf ${WORLDTMP}/legacy/usr/include 265169691Skan # XXX - These two can depend on any header file. 266169691Skan rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 267169691Skan rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 268169691Skan.endif 269169691Skan.for _dir in \ 270132720Skan usr/bin usr/games usr/include/sys usr/lib \ 271132720Skan usr/libexec usr/sbin usr/share/dict \ 272132720Skan usr/share/groff_font/devX100 \ 273132720Skan usr/share/groff_font/devX100-12 \ 274132720Skan usr/share/groff_font/devX75 \ 275132720Skan usr/share/groff_font/devX75-12 \ 276132720Skan usr/share/groff_font/devascii \ 277132720Skan usr/share/groff_font/devcp1047 \ 278132720Skan usr/share/groff_font/devdvi \ 279132720Skan usr/share/groff_font/devhtml \ 280132720Skan usr/share/groff_font/devkoi8-r \ 281132720Skan usr/share/groff_font/devlatin1 \ 282132720Skan usr/share/groff_font/devlbp \ 283132720Skan usr/share/groff_font/devlj4 \ 284132720Skan usr/share/groff_font/devps \ 285132720Skan usr/share/groff_font/devutf8 \ 286132720Skan usr/share/tmac/mdoc usr/share/tmac/mm 287132720Skan mkdir -p ${WORLDTMP}/legacy/${_dir} 288132720Skan.endfor 289132720Skan.for _dir in \ 290132720Skan lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \ 291132720Skan usr/libexec usr/share/misc 292132720Skan mkdir -p ${WORLDTMP}/${_dir} 293132720Skan.endfor 294132720Skan mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 295132720Skan -p ${WORLDTMP}/usr/include 296132720Skan ln -sf ${.CURDIR}/sys ${WORLDTMP} 297132720Skan_legacy: 298132720Skan @echo 299132720Skan @echo "--------------------------------------------------------------" 300132720Skan @echo ">>> stage 1: legacy release compatibility shims" 301132720Skan @echo "--------------------------------------------------------------" 302132720Skan cd ${.CURDIR}; ${BMAKE} legacy 303132720Skan_bootstrap-tools: 304132720Skan @echo 305132720Skan @echo "--------------------------------------------------------------" 306132720Skan @echo ">>> stage 1: bootstrap tools" 307132720Skan @echo "--------------------------------------------------------------" 308132720Skan cd ${.CURDIR}; ${BMAKE} bootstrap-tools 309132720Skan_cleanobj: 310132720Skan.if !defined(NOCLEAN) 311132720Skan @echo 312132720Skan @echo "--------------------------------------------------------------" 313132720Skan @echo ">>> stage 2: cleaning up the object tree" 314132720Skan @echo "--------------------------------------------------------------" 315132720Skan cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 316132720Skan.endif 317132720Skan_obj: 318132720Skan @echo 319132720Skan @echo "--------------------------------------------------------------" 320132720Skan @echo ">>> stage 2: rebuilding the object tree" 321132720Skan @echo "--------------------------------------------------------------" 322132720Skan cd ${.CURDIR}; ${WMAKE} par-obj 323132720Skan_build-tools: 324132720Skan @echo 325169691Skan @echo "--------------------------------------------------------------" 326169691Skan @echo ">>> stage 2: build tools" 327132720Skan @echo "--------------------------------------------------------------" 328132720Skan cd ${.CURDIR}; ${TMAKE} build-tools 329_cross-tools: 330 @echo 331 @echo "--------------------------------------------------------------" 332 @echo ">>> stage 3: cross tools" 333 @echo "--------------------------------------------------------------" 334 cd ${.CURDIR}; ${XMAKE} cross-tools 335_includes: 336 @echo 337 @echo "--------------------------------------------------------------" 338 @echo ">>> stage 4: populating ${WORLDTMP}/usr/include" 339 @echo "--------------------------------------------------------------" 340 cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 341_libraries: 342 @echo 343 @echo "--------------------------------------------------------------" 344 @echo ">>> stage 4: building libraries" 345 @echo "--------------------------------------------------------------" 346 cd ${.CURDIR}; ${WMAKE} -DNOHTML -DNOINFO -DNOMAN -DNOFSCHG -DNOLINT \ 347 libraries 348_depend: 349 @echo 350 @echo "--------------------------------------------------------------" 351 @echo ">>> stage 4: make dependencies" 352 @echo "--------------------------------------------------------------" 353 cd ${.CURDIR}; ${WMAKE} par-depend 354everything: 355 @echo 356 @echo "--------------------------------------------------------------" 357 @echo ">>> stage 4: building everything.." 358 @echo "--------------------------------------------------------------" 359 cd ${.CURDIR}; ${WMAKE} par-all 360 361 362WMAKE_TGTS= 363.if !defined(SUBDIR_OVERRIDE) 364WMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools 365.endif 366WMAKE_TGTS+= _cleanobj _obj _build-tools 367.if !defined(SUBDIR_OVERRIDE) 368WMAKE_TGTS+= _cross-tools 369.endif 370WMAKE_TGTS+= _includes _libraries _depend everything 371 372buildworld: ${WMAKE_TGTS} 373.ORDER: ${WMAKE_TGTS} 374 375# 376# installcheck 377# 378# Checks to be sure system is ready for installworld 379# 380installcheck: 381.if !defined(NO_SENDMAIL) 382 @if ! `id -u smmsp > /dev/null`; then \ 383 echo "ERROR: Required smmsp user is missing, see /usr/src/UPDATING."; \ 384 false; \ 385 fi 386 @if ! `id -g smmsp > /dev/null`; then \ 387 echo "ERROR: Required smmsp group is missing, see /usr/src/UPDATING."; \ 388 false; \ 389 fi 390.endif 391.if ${TARGET_ARCH} == ${MACHINE_ARCH} && !defined(DISTDIR) && \ 392 (!defined(DESTDIR) || empty(DESTDIR) || ${DESTDIR} == "/") 393 @echo "Checking to see if your booted kernel is fresh enough.." 394 @${.OBJDIR}/bin/sh/sh -c \ 395 'echo "Testing installed kernel for new sigaction(2) syscall"' 396 @echo "Seems ok.." 397.endif 398 399# 400# distributeworld 401# 402# Distributes everything compiled by a `buildworld'. 403# 404# installworld 405# 406# Installs everything compiled by a 'buildworld'. 407# 408distributeworld installworld: installcheck 409 mkdir -p ${INSTALLTMP} 410 for prog in [ awk cap_mkdb cat chflags chmod chown \ 411 date echo egrep find grep \ 412 ln make mkdir mtree mv pwd_mkdb rm sed sh sysctl \ 413 test true uname wc zic; do \ 414 cp `which $$prog` ${INSTALLTMP}; \ 415 done 416 cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//} 417 rm -rf ${INSTALLTMP} 418 419# 420# reinstall 421# 422# If you have a build server, you can NFS mount the source and obj directories 423# and do a 'make reinstall' on the *client* to install new binaries from the 424# most recent server build. 425# 426reinstall: 427 @echo "--------------------------------------------------------------" 428 @echo ">>> Making hierarchy" 429 @echo "--------------------------------------------------------------" 430 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy 431 @echo 432 @echo "--------------------------------------------------------------" 433 @echo ">>> Installing everything.." 434 @echo "--------------------------------------------------------------" 435 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 436.if !defined(NOMAN) && !defined(NO_MAKEDB_RUN) 437 @echo 438 @echo "--------------------------------------------------------------" 439 @echo ">>> Rebuilding man page indices" 440 @echo "--------------------------------------------------------------" 441 cd ${.CURDIR}/share/man; ${MAKE} makedb 442.endif 443 444redistribute: 445 @echo "--------------------------------------------------------------" 446 @echo ">>> Distributing everything.." 447 @echo "--------------------------------------------------------------" 448 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 449 450# 451# buildkernel and installkernel 452# 453# Which kernels to build and/or install is specified by setting 454# KERNCONF. If not defined a GENERIC kernel is built/installed. 455# Only the existing (depending TARGET) config files are used 456# for building kernels and only the first of these is designated 457# as the one being installed. 458# 459# Note that we have to use TARGET instead of TARGET_ARCH when 460# we're in kernel-land. Since only TARGET_ARCH is (expected) to 461# be set to cross-build, we have to make sure TARGET is set 462# properly. 463 464.if !defined(KERNCONF) && defined(KERNEL) 465KERNCONF= ${KERNEL} 466KERNWARN= yes 467.else 468KERNCONF?= GENERIC 469.endif 470INSTKERNNAME?= kernel 471 472KERNSRCDIR?= ${.CURDIR}/sys 473KRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf 474KRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} 475KERNCONFDIR?= ${KRNLCONFDIR} 476 477BUILDKERNELS= 478INSTALLKERNEL= 479.for _kernel in ${KERNCONF} 480.if exists(${KERNCONFDIR}/${_kernel}) 481BUILDKERNELS+= ${_kernel} 482.if empty(INSTALLKERNEL) 483INSTALLKERNEL= ${_kernel} 484.endif 485.endif 486.endfor 487 488# 489# buildkernel 490# 491# Builds all kernels defined by BUILDKERNELS. 492# 493buildkernel: 494.if empty(BUILDKERNELS) 495 @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; 496 @false 497.endif 498.if defined(KERNWARN) 499 @echo "--------------------------------------------------------------" 500 @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 501 @echo "--------------------------------------------------------------" 502 @sleep 3 503.endif 504 @echo 505.for _kernel in ${BUILDKERNELS} 506 @echo "--------------------------------------------------------------" 507 @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 508 @echo "--------------------------------------------------------------" 509 @echo "===> ${_kernel}" 510 mkdir -p ${KRNLOBJDIR} 511.if !defined(NO_KERNELCONFIG) 512 cd ${KRNLCONFDIR}; \ 513 PATH=${TMPPATH} \ 514 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 515 ${KERNCONFDIR}/${_kernel} 516.endif 517.if !defined(NOCLEAN) && !defined(NO_KERNELCLEAN) 518 cd ${KRNLOBJDIR}/${_kernel}; \ 519 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} ${CLEANDIR} 520.endif 521 cd ${KRNLOBJDIR}/${_kernel}; \ 522 MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \ 523 ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile 524 cd ${KRNLOBJDIR}/${_kernel}; \ 525 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} obj 526# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case. 527.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules) 528.for target in obj depend all 529 cd ${.CURDIR}/sys/modules/aic7xxx/aicasm; \ 530 MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \ 531 ${MAKE} -DNO_CPU_CFLAGS ${target} 532.endfor 533.endif 534.if !defined(NO_KERNELDEPEND) 535 cd ${KRNLOBJDIR}/${_kernel}; \ 536 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} depend -DNO_MODULES_OBJ 537.endif 538 cd ${KRNLOBJDIR}/${_kernel}; \ 539 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} all -DNO_MODULES_OBJ 540 @echo "--------------------------------------------------------------" 541 @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 542 @echo "--------------------------------------------------------------" 543.endfor 544 545# 546# installkernel 547# 548# Install the kernel defined by INSTALLKERNEL 549# 550installkernel reinstallkernel installkernel.debug reinstallkernel.debug: 551.if empty(INSTALLKERNEL) 552 @echo "ERROR: No kernel \"${KERNCONF}\" to install." 553 @false 554.endif 555 cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 556 ${CROSSENV} PATH=${TMPPATH} \ 557 ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} 558 559# 560# update 561# 562# Update the source tree, by running sup and/or running cvs to update to the 563# latest copy. 564# 565update: 566.if defined(SUP_UPDATE) 567 @echo "--------------------------------------------------------------" 568 @echo ">>> Running ${SUP}" 569 @echo "--------------------------------------------------------------" 570.if defined(SUPFILE) 571 @${SUP} ${SUPFLAGS} ${SUPFILE} 572.endif 573.if defined(SUPFILE1) 574 @${SUP} ${SUPFLAGS} ${SUPFILE1} 575.endif 576.if defined(SUPFILE2) 577 @${SUP} ${SUPFLAGS} ${SUPFILE2} 578.endif 579.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE) 580 @${SUP} ${SUPFLAGS} ${PORTSSUPFILE} 581.endif 582.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE) 583 @${SUP} ${SUPFLAGS} ${DOCSUPFILE} 584.endif 585.endif 586.if defined(CVS_UPDATE) 587 @echo "--------------------------------------------------------------" 588 @echo ">>> Updating ${.CURDIR} from cvs repository" ${CVSROOT} 589 @echo "--------------------------------------------------------------" 590 cd ${.CURDIR}; ${CVS} -R -q update -A -P -d 591.endif 592 593# 594# most 595# 596# Build most of the user binaries on the existing system libs and includes. 597# 598most: 599 @echo "--------------------------------------------------------------" 600 @echo ">>> Building programs only" 601 @echo "--------------------------------------------------------------" 602.for _dir in bin sbin libexec usr.bin usr.sbin gnu/usr.bin gnu/usr.sbin 603 cd ${.CURDIR}/${_dir}; ${MAKE} DIRPRFX=${_dir}/ all 604.endfor 605 606# 607# installmost 608# 609# Install the binaries built by the 'most' target. This does not include 610# libraries or include files. 611# 612installmost: 613 @echo "--------------------------------------------------------------" 614 @echo ">>> Installing programs only" 615 @echo "--------------------------------------------------------------" 616.for _dir in bin sbin libexec usr.bin usr.sbin gnu/usr.bin gnu/usr.sbin 617 cd ${.CURDIR}/${_dir}; ${MAKE} DIRPRFX=${_dir}/ install 618.endfor 619 620# 621# ------------------------------------------------------------------------ 622# 623# From here onwards are utility targets used by the 'make world' and 624# related targets. If your 'world' breaks, you may like to try to fix 625# the problem and manually run the following targets to attempt to 626# complete the build. Beware, this is *not* guaranteed to work, you 627# need to have a pretty good grip on the current state of the system 628# to attempt to manually finish it. If in doubt, 'make world' again. 629# 630 631# 632# legacy: Build compatibility shims for the next three targets 633# 634legacy: 635.for _tool in tools/build 636 @${ECHODIR} "===> ${_tool}"; \ 637 cd ${.CURDIR}/${_tool}; \ 638 ${MAKE} DIRPRFX=${_tool}/ obj; \ 639 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \ 640 ${MAKE} DIRPRFX=${_tool}/ depend; \ 641 ${MAKE} DIRPRFX=${_tool}/ all; \ 642 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 643.endfor 644 645# 646# bootstrap-tools: Build tools needed for compatibility 647# 648.if exists(${.CURDIR}/games) && !defined(NOGAMES) 649_strfile= games/fortune/strfile 650.endif 651 652.if !defined(NO_CXX) 653_gperf= gnu/usr.bin/gperf 654.if ${BOOTSTRAPPING} < 500113 655_groff= gnu/usr.bin/groff 656.else 657_groff= gnu/usr.bin/groff/tmac 658.endif 659.endif 660 661.if ${BOOTSTRAPPING} < 450005 || \ 662 ${BOOTSTRAPPING} >= 500000 && ${BOOTSTRAPPING} < 500034 663_uudecode= usr.bin/uudecode 664.endif 665 666.if ${BOOTSTRAPPING} < 430002 || \ 667 ${BOOTSTRAPPING} >= 500000 && ${BOOTSTRAPPING} < 500019 668_xargs= usr.bin/xargs 669.endif 670 671.if ${BOOTSTRAPPING} < 430002 || \ 672 ${BOOTSTRAPPING} >= 500000 && ${BOOTSTRAPPING} < 500018 673_yacc= usr.bin/yacc 674.endif 675 676.if !defined(NO_RESCUE) && \ 677 ${BOOTSTRAPPING} < 501100 678_crunchgen= usr.sbin/crunch/crunchgen 679.endif 680 681.if ${BOOTSTRAPPING} < 500019 682_kbdcontrol= usr.sbin/kbdcontrol 683.endif 684 685bootstrap-tools: 686.for _tool in \ 687 ${_strfile} \ 688 ${_gperf} \ 689 ${_groff} \ 690 gnu/usr.bin/texinfo \ 691 usr.bin/colldef \ 692 usr.bin/makewhatis \ 693 usr.bin/rpcgen \ 694 ${_uudecode} \ 695 ${_xargs} \ 696 usr.bin/xinstall \ 697 ${_yacc} \ 698 usr.sbin/config \ 699 ${_crunchgen} \ 700 ${_kbdcontrol} 701 @${ECHODIR} "===> ${_tool}"; \ 702 cd ${.CURDIR}/${_tool}; \ 703 ${MAKE} DIRPRFX=${_tool}/ obj; \ 704 ${MAKE} DIRPRFX=${_tool}/ depend; \ 705 ${MAKE} DIRPRFX=${_tool}/ all; \ 706 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 707.endfor 708 709# 710# build-tools: Build special purpose build tools 711# 712.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules) 713_aicasm= sys/modules/aic7xxx/aicasm 714.endif 715 716.if exists(${.CURDIR}/share) && !defined(NOSHARE) 717_share= share/syscons/scrnmaps 718.endif 719 720.if !defined(NO_FORTRAN) 721_fortran= gnu/usr.bin/cc/f771 722.endif 723 724.if exists(${.CURDIR}/kerberos5) && exists(${.CURDIR}/crypto) && \ 725 !defined(NOCRYPT) && !defined(NO_OPENSSL) && !defined(NO_KERBEROS) 726_libkrb5= kerberos5/lib/libroken kerberos5/lib/libvers \ 727 kerberos5/lib/libasn1 kerberos5/lib/libhdb kerberos5/lib/libsl 728.endif 729 730.if exists(${.CURDIR}/rescue) && !defined(NO_RESCUE) 731_rescue= rescue/rescue 732.endif 733 734build-tools: 735.for _tool in \ 736 bin/csh \ 737 bin/sh \ 738 ${_rescue} \ 739 gnu/usr.bin/cc/cc_tools \ 740 ${_fortran} \ 741 ${_libkrb5} \ 742 lib/libncurses \ 743 ${_share} \ 744 ${_aicasm} \ 745 usr.bin/awk \ 746 usr.bin/file \ 747 usr.sbin/sysinstall 748 @${ECHODIR} "===> ${_tool}"; \ 749 cd ${.CURDIR}/${_tool}; \ 750 ${MAKE} DIRPRFX=${_tool}/ obj; \ 751 ${MAKE} DIRPRFX=${_tool}/ build-tools 752.endfor 753 754# 755# cross-tools: Build cross-building tools 756# 757.if ${TARGET_ARCH} == "sparc64" && ${TARGET_ARCH} != ${MACHINE_ARCH} && \ 758 ${BOOTSTRAPPING} < 500037 759_elf2aout= usr.bin/elf2aout 760.endif 761 762.if ${TARGET_ARCH} == "i386" && ${TARGET_ARCH} != ${MACHINE_ARCH} 763_btxld= usr.sbin/btxld 764.endif 765 766.if (!defined(NO_RESCUE) || \ 767 defined(RELEASEDIR)) && \ 768 ( ${TARGET_ARCH} != ${MACHINE_ARCH} || ${BOOTSTRAPPING} < 501101 ) 769_crunchide= usr.sbin/crunch/crunchide 770.endif 771 772.if ${TARGET_ARCH} == "alpha" && ${TARGET_ARCH} != ${MACHINE_ARCH} 773_elf2exe= usr.sbin/elf2exe 774.endif 775 776.if ${TARGET_ARCH} == "i386" && ${TARGET_ARCH} != ${MACHINE_ARCH} && \ 777 defined(RELEASEDIR) 778_kgzip= usr.sbin/kgzip 779.endif 780 781cross-tools: 782.for _tool in \ 783 gnu/usr.bin/binutils \ 784 gnu/usr.bin/cc \ 785 ${_elf2aout} \ 786 usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \ 787 ${_btxld} \ 788 ${_crunchide} \ 789 ${_elf2exe} \ 790 ${_kgzip} 791 @${ECHODIR} "===> ${_tool}"; \ 792 cd ${.CURDIR}/${_tool}; \ 793 ${MAKE} DIRPRFX=${_tool}/ obj; \ 794 ${MAKE} DIRPRFX=${_tool}/ depend; \ 795 ${MAKE} DIRPRFX=${_tool}/ all; \ 796 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 797.endfor 798 799# 800# hierarchy - ensure that all the needed directories are present 801# 802hierarchy: 803 cd ${.CURDIR}/etc; ${MAKE} distrib-dirs 804 805# 806# libraries - build all libraries, and install them under ${DESTDIR}. 807# 808# The list of libraries with dependents (${_prebuild_libs}) and their 809# interdependencies (__L) are built automatically by the 810# ${.CURDIR}/tools/make_libdeps.sh script. 811# 812libraries: 813 cd ${.CURDIR}; \ 814 ${MAKE} -f Makefile.inc1 _startup_libs; \ 815 ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 816 ${MAKE} -f Makefile.inc1 _generic_libs; 817 818# These dependencies are not automatically generated: 819# 820# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all 821# shared libraries for ELF. 822# 823# lib/libc (libc_pic.a) must be built before lib/libpthread. 824# 825_startup_libs= gnu/lib/csu gnu/lib/libgcc 826.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf) 827_startup_libs+= lib/csu/${MACHINE_ARCH}-elf 828.else 829_startup_libs+= lib/csu/${MACHINE_ARCH} 830.endif 831 832_prebuild_libs= 833_generic_libs= gnu/lib 834 835.if exists(${.CURDIR}/kerberos5) && exists(${.CURDIR}/crypto) && \ 836 !defined(NOCRYPT) && !defined(NO_OPENSSL) && !defined(NO_KERBEROS) 837_prebuild_libs+= kerberos5/lib/libasn1 838_prebuild_libs+= kerberos5/lib/libgssapi 839_prebuild_libs+= kerberos5/lib/libkrb5 840_prebuild_libs+= kerberos5/lib/libroken 841_generic_libs+= kerberos5/lib 842.endif 843 844.if !defined(NOLIBPTHREAD) 845_prebuild_libs+= lib/libc 846.endif 847_prebuild_libs+= lib/libcom_err lib/libcrypt lib/libexpat \ 848 lib/libkvm lib/libmd \ 849 lib/libncurses lib/libopie lib/libpam lib/libradius \ 850 lib/librpcsvc \ 851 lib/libsbuf lib/libtacplus lib/libutil lib/libypclnt \ 852 lib/libz lib/msun 853 854lib/libopie__L lib/libradius__L lib/libtacplus__L: lib/libmd__L 855lib/libypclnt__L: lib/librpcsvc__L 856 857_generic_libs+= lib 858 859.if !defined(NOCRYPT) 860.if !defined(NO_OPENSSL) 861_prebuild_libs+= secure/lib/libcrypto secure/lib/libssl 862.if !defined(NO_OPENSSH) 863_prebuild_libs+= secure/lib/libssh 864secure/lib/libssh__L: secure/lib/libcrypto__L lib/libz__L 865.endif 866.endif 867_generic_libs+= secure/lib 868.endif 869 870_generic_libs+= usr.bin/lex/lib 871 872.if ${MACHINE_ARCH} == "i386" 873_generic_libs+= usr.sbin/pcvt/keycap 874.endif 875 876.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs} 877${_lib}__L: .PHONY 878.if exists(${.CURDIR}/${_lib}) 879 @${ECHODIR} "===> ${_lib}"; \ 880 cd ${.CURDIR}/${_lib}; \ 881 ${MAKE} DIRPRFX=${_lib}/ depend; \ 882 ${MAKE} DIRPRFX=${_lib}/ all; \ 883 ${MAKE} DIRPRFX=${_lib}/ install 884.endif 885.endfor 886 887# libpam is special: we need to build static PAM modules before 888# static PAM library, and dynamic PAM library before dynamic PAM 889# modules. 890lib/libpam__L: .PHONY 891 @${ECHODIR} "===> lib/libpam"; \ 892 cd ${.CURDIR}/lib/libpam; \ 893 ${MAKE} DIRPRFX=lib/libpam/ depend; \ 894 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \ 895 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install 896 897_startup_libs: ${_startup_libs:S/$/__L/} 898_prebuild_libs: ${_prebuild_libs:S/$/__L/} 899_generic_libs: ${_generic_libs:S/$/__L/} 900 901.for __target in all clean cleandepend cleandir depend includes obj 902.for entry in ${SUBDIR} 903${entry}.${__target}__D: .PHONY 904 @if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 905 ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH}"; \ 906 edir=${entry}.${MACHINE_ARCH}; \ 907 cd ${.CURDIR}/$${edir}; \ 908 else \ 909 ${ECHODIR} "===> ${DIRPRFX}${entry}"; \ 910 edir=${entry}; \ 911 cd ${.CURDIR}/$${edir}; \ 912 fi; \ 913 ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 914.endfor 915par-${__target}: ${SUBDIR:S/$/.${__target}__D/} 916.endfor 917 918.include <bsd.subdir.mk> 919