1#
| 1#
|
2# $FreeBSD: head/Makefile.inc1 208964 2010-06-09 19:57:20Z rdivacky $
| 2# $FreeBSD: head/Makefile.inc1 209128 2010-06-13 13:02:43Z raj $
|
3# 4# Make command line options: 5# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 6# -DNO_CLEAN do not clean at all 7# -DNO_SHARE do not go into share subdir 8# -DKERNFAST define NO_KERNEL{CONFIG,CLEAN,DEPEND,OBJ} 9# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 10# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 11# -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel 12# -DNO_KERNELOBJ do not run ${MAKE} obj in ${MAKE} buildkernel 13# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 14# -DNO_DOCUPDATE do not update doc in ${MAKE} update 15# -DNO_CTF do not run the DTrace CTF conversion tools on built objects 16# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 17# TARGET="machine" to crossbuild world for a different machine type 18# TARGET_ARCH= may be required when a TARGET supports multiple endians 19 20# 21# The intended user-driven targets are: 22# buildworld - rebuild *everything*, including glue to help do upgrades 23# installworld- install everything built by "buildworld" 24# doxygen - build API documentation of the kernel 25# update - convenient way to update your source tree (eg: cvsup/cvs) 26# 27# Standard targets (not defined here) are documented in the makefiles in 28# /usr/share/mk. These include: 29# obj depend all install clean cleandepend cleanobj 30 31.include <bsd.own.mk> 32 33.if ${MACHINE_ARCH} == "mips" 34MK_RESCUE=no # not yet 35.endif 36 37# We must do share/info early so that installation of info `dir' 38# entries works correctly. Do it first since it is less likely to 39# grow dependencies on include and lib than vice versa. 40# 41# We must do lib/ and libexec/ before bin/, because if installworld 42# installs a new /bin/sh, the 'make' command will *immediately* 43# use that new version. And the new (dynamically-linked) /bin/sh 44# will expect to find appropriate libraries in /lib and /libexec. 45# 46SUBDIR= share/info lib libexec 47SUBDIR+=bin 48.if ${MK_GAMES} != "no" 49SUBDIR+=games 50.endif 51.if ${MK_CDDL} != "no" 52SUBDIR+=cddl 53.else 54NO_CTF=1 55.endif 56SUBDIR+=gnu include 57.if ${MK_KERBEROS} != "no" 58SUBDIR+=kerberos5 59.endif 60.if ${MK_RESCUE} != "no" 61SUBDIR+=rescue 62.endif 63SUBDIR+=sbin 64.if ${MK_CRYPT} != "no" 65SUBDIR+=secure 66.endif 67.if !defined(NO_SHARE) 68SUBDIR+=share 69.endif 70SUBDIR+=sys usr.bin usr.sbin 71# 72# We must do etc/ last for install/distribute to work. 73# 74SUBDIR+=etc 75 76# These are last, since it is nice to at least get the base system 77# rebuilt before you do them. 78.for _DIR in ${LOCAL_DIRS} 79.if exists(${.CURDIR}/${_DIR}/Makefile) 80SUBDIR+= ${_DIR} 81.endif 82.endfor 83 84.if defined(SUBDIR_OVERRIDE) 85SUBDIR= ${SUBDIR_OVERRIDE} 86.endif 87 88.if defined(NOCLEAN) 89NO_CLEAN= ${NOCLEAN} 90.endif 91.if defined(NO_CLEANDIR) 92CLEANDIR= clean cleandepend 93.else 94CLEANDIR= cleandir 95.endif 96 97CVS?= cvs 98CVSFLAGS?= -A -P -d -I! 99SVN?= svn 100SVNFLAGS?= -r HEAD 101SUP?= /usr/bin/csup 102SUPFLAGS?= -g -L 2 103.if defined(SUPHOST) 104SUPFLAGS+= -h ${SUPHOST} 105.endif 106 107MAKEOBJDIRPREFIX?= /usr/obj 108.if !defined(OSRELDATE) 109.if exists(/usr/include/osreldate.h) 110OSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 111 /usr/include/osreldate.h 112.else 113OSRELDATE= 0 114.endif 115.endif 116 117.if !defined(VERSION) 118VERSION!= uname -srp 119VERSION+= ${OSRELDATE} 120.endif 121 122# Guess machine architecture from machine type, and vice versa. 123.if !defined(TARGET_ARCH) && defined(TARGET) 124TARGET_ARCH= ${TARGET:S/pc98/i386/:S/sun4v/sparc64/} 125.elif !defined(TARGET) && defined(TARGET_ARCH) && \ 126 ${TARGET_ARCH} != ${MACHINE_ARCH} 127TARGET= ${TARGET_ARCH} 128.endif 129# Otherwise, default to current machine type and architecture. 130TARGET?= ${MACHINE} 131TARGET_ARCH?= ${MACHINE_ARCH} 132 133KNOWN_ARCHES?= amd64 arm i386 i386/pc98 ia64 mips powerpc sparc64 sparc64/sun4v 134.if ${TARGET} == ${TARGET_ARCH} 135_t= ${TARGET} 136.else 137_t= ${TARGET_ARCH}/${TARGET} 138.endif 139.for _t in ${_t} 140.if empty(KNOWN_ARCHES:M${_t}) 141.error Unknown target ${TARGET_ARCH}:${TARGET}. 142.endif 143.endfor 144 145.if ${TARGET} == ${MACHINE} 146TARGET_CPUTYPE?=${CPUTYPE} 147.else 148TARGET_CPUTYPE?= 149.endif 150 151.if !empty(TARGET_CPUTYPE) 152_TARGET_CPUTYPE=${TARGET_CPUTYPE} 153.else 154_TARGET_CPUTYPE=dummy 155.endif 156_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \ 157 -f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE 158.if ${_CPUTYPE} != ${_TARGET_CPUTYPE} 159.error CPUTYPE global should be set with ?=. 160.endif 161.if make(buildworld) 162BUILD_ARCH!= uname -p 163.if ${MACHINE_ARCH} != ${BUILD_ARCH} 164.error To cross-build, set TARGET_ARCH. 165.endif 166.endif 167.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING) 168OBJTREE= ${MAKEOBJDIRPREFIX} 169.else 170OBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET} 171.endif 172WORLDTMP= ${OBJTREE}${.CURDIR}/tmp 173# /usr/games added for fortune which depend on strfile 174BPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games 175XPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games 176STRICTTMPPATH= ${BPATH}:${XPATH} 177TMPPATH= ${STRICTTMPPATH}:${PATH} 178 179# 180# Avoid running mktemp(1) unless actually needed. 181# It may not be functional, e.g., due to new ABI 182# when in the middle of installing over this system. 183# 184.if make(distributeworld) || make(installworld) 185INSTALLTMP!= /usr/bin/mktemp -d -u -t install 186.endif 187 188# 189# Building a world goes through the following stages 190# 191# 1. legacy stage [BMAKE] 192# This stage is responsible for creating compatibility 193# shims that are needed by the bootstrap-tools, 194# build-tools and cross-tools stages. 195# 1. bootstrap-tools stage [BMAKE] 196# This stage is responsible for creating programs that 197# are needed for backward compatibility reasons. They 198# are not built as cross-tools. 199# 2. build-tools stage [TMAKE] 200# This stage is responsible for creating the object 201# tree and building any tools that are needed during 202# the build process. 203# 3. cross-tools stage [XMAKE] 204# This stage is responsible for creating any tools that 205# are needed for cross-builds. A cross-compiler is one 206# of them. 207# 4. world stage [WMAKE] 208# This stage actually builds the world. 209# 5. install stage (optional) [IMAKE] 210# This stage installs a previously built world. 211# 212 213BOOTSTRAPPING?= 0 214 215# Common environment for world related stages 216CROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 217 MACHINE_ARCH=${TARGET_ARCH} \ 218 MACHINE=${TARGET} \ 219 CPUTYPE=${TARGET_CPUTYPE} \ 220 GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \ 221 GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \ 222 GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac 223.if ${OSRELDATE} < 700044 224CROSSENV+= AR=gnu-ar RANLIB=gnu-ranlib 225.endif 226 227# bootstrap-tools stage 228BMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ 229 PATH=${BPATH}:${PATH} \ 230 WORLDTMP=${WORLDTMP} \ 231 VERSION="${VERSION}" \ 232 MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" 233BMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \ 234 ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 235 DESTDIR= \ 236 BOOTSTRAPPING=${OSRELDATE} \ 237 SSP_CFLAGS= \ 238 -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \ 239 -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \ 240 -DNO_CPU_CFLAGS -DNO_WARNS -DNO_CTF 241 242# build-tools stage 243TMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \ 244 ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 245 TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 246 DESTDIR= \ 247 SSP_CFLAGS= \ 248 BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS \ 249 -DNO_WARNS -DNO_CTF 250 251# cross-tools stage 252XMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \ 253 TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 254 -DWITHOUT_GDB 255 256# world stage 257WMAKEENV= ${CROSSENV} \ 258 _SHLIBDIRPREFIX=${WORLDTMP} \ 259 VERSION="${VERSION}" \ 260 INSTALL="sh ${.CURDIR}/tools/install.sh" \ 261 PATH=${TMPPATH} 262.if ${MK_CDDL} == "no" 263WMAKEENV+= NO_CTF=1 264.endif 265WMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP} 266 267.if ${TARGET_ARCH} == "amd64" 268# 32 bit world 269LIB32TMP= ${OBJTREE}${.CURDIR}/lib32 270 271.if empty(TARGET_CPUTYPE) 272LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2 273.else 274LIB32CPUFLAGS= -march=${TARGET_CPUTYPE} 275.endif 276LIB32FLAGS= -m32 ${LIB32CPUFLAGS} -mfancy-math-387 -DCOMPAT_32BIT \ 277 -isystem ${LIB32TMP}/usr/include/ \ 278 -L${LIB32TMP}/usr/lib32 \ 279 -B${LIB32TMP}/usr/lib32 280 281# Yes, the flags are redundant. 282LIB32WMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \ 283 _SHLIBDIRPREFIX=${LIB32TMP} \ 284 VERSION="${VERSION}" \ 285 MACHINE=i386 \ 286 MACHINE_ARCH=i386 \ 287 MACHINE_CPU="i686 mmx sse sse2" \ 288 INSTALL="sh ${.CURDIR}/tools/install.sh" \ 289 PATH=${TMPPATH} \ 290 CC="${CC} ${LIB32FLAGS}" \ 291 CXX="${CXX} ${LIB32FLAGS}" \ 292 OBJC="${OBJC} ${LIB32FLAGS}" \ 293 LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \ 294 AS="${AS} --32" \ 295 LIBDIR=/usr/lib32 \ 296 SHLIBDIR=/usr/lib32 297 298LIB32WMAKE= ${LIB32WMAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \ 299 -DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_INFO \ 300 -DWITHOUT_HTML -DNO_CTF DESTDIR=${LIB32TMP} 301LIB32IMAKE= ${LIB32WMAKE:NINSTALL=*:NDESTDIR=*} -DNO_INCS 302.endif 303 304# install stage 305IMAKEENV= ${CROSSENV} 306IMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 307.if empty(.MAKEFLAGS:M-n) 308IMAKEENV+= PATH=${STRICTTMPPATH}:${INSTALLTMP} \ 309 LD_LIBRARY_PATH=${INSTALLTMP} \ 310 PATH_LOCALE=${INSTALLTMP}/locale 311IMAKE+= __MAKE_SHELL=${INSTALLTMP}/sh 312.else 313IMAKEENV+= PATH=${TMPPATH}:${INSTALLTMP} 314.endif 315 316# kernel stage 317KMAKEENV= ${WMAKEENV} 318KMAKE= ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} 319 320# 321# buildworld 322# 323# Attempt to rebuild the entire system, with reasonable chance of 324# success, regardless of how old your existing system is. 325# 326_worldtmp: 327.if ${.CURDIR:C/[^,]//g} != "" 328# The m4 build of sendmail files doesn't like it if ',' is used 329# anywhere in the path of it's files. 330 @echo 331 @echo "*** Error: path to source tree contains a comma ','" 332 @echo 333 false 334.endif 335 @echo 336 @echo "--------------------------------------------------------------" 337 @echo ">>> Rebuilding the temporary build tree" 338 @echo "--------------------------------------------------------------" 339.if !defined(NO_CLEAN) 340 rm -rf ${WORLDTMP} 341.if ${TARGET_ARCH} == "amd64" 342 rm -rf ${LIB32TMP} 343.endif 344.else 345 rm -rf ${WORLDTMP}/legacy/usr/include 346# XXX - These three can depend on any header file. 347 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 348 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/kdump_subr.c 349 rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 350.endif 351.for _dir in \ 352 lib usr legacy/usr 353 mkdir -p ${WORLDTMP}/${_dir} 354.endfor 355 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 356 -p ${WORLDTMP}/legacy/usr >/dev/null 357 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 358 -p ${WORLDTMP}/usr >/dev/null 359 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 360 -p ${WORLDTMP}/usr/include >/dev/null 361 ln -sf ${.CURDIR}/sys ${WORLDTMP} 362.if ${MK_BIND_LIBS} != "no" 363 mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \ 364 -p ${WORLDTMP}/usr/include >/dev/null 365.endif 366_legacy: 367 @echo 368 @echo "--------------------------------------------------------------" 369 @echo ">>> stage 1.1: legacy release compatibility shims" 370 @echo "--------------------------------------------------------------" 371 ${_+_}cd ${.CURDIR}; ${BMAKE} legacy 372_bootstrap-tools: 373 @echo 374 @echo "--------------------------------------------------------------" 375 @echo ">>> stage 1.2: bootstrap tools" 376 @echo "--------------------------------------------------------------" 377 ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools 378_cleanobj: 379.if !defined(NO_CLEAN) 380 @echo 381 @echo "--------------------------------------------------------------" 382 @echo ">>> stage 2.1: cleaning up the object tree" 383 @echo "--------------------------------------------------------------" 384 ${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 385.if ${TARGET_ARCH} == "amd64" 386 ${_+_}cd ${.CURDIR}; ${LIB32WMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/} 387.endif 388.endif 389_obj: 390 @echo 391 @echo "--------------------------------------------------------------" 392 @echo ">>> stage 2.2: rebuilding the object tree" 393 @echo "--------------------------------------------------------------" 394 ${_+_}cd ${.CURDIR}; ${WMAKE} par-obj 395_build-tools: 396 @echo 397 @echo "--------------------------------------------------------------" 398 @echo ">>> stage 2.3: build tools" 399 @echo "--------------------------------------------------------------" 400 ${_+_}cd ${.CURDIR}; ${TMAKE} build-tools 401_cross-tools: 402 @echo 403 @echo "--------------------------------------------------------------" 404 @echo ">>> stage 3: cross tools" 405 @echo "--------------------------------------------------------------" 406 ${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools 407_includes: 408 @echo 409 @echo "--------------------------------------------------------------" 410 @echo ">>> stage 4.1: building includes" 411 @echo "--------------------------------------------------------------" 412 ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 413_libraries: 414 @echo 415 @echo "--------------------------------------------------------------" 416 @echo ">>> stage 4.2: building libraries" 417 @echo "--------------------------------------------------------------" 418 ${_+_}cd ${.CURDIR}; \ 419 ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ 420 -DWITHOUT_MAN -DWITHOUT_PROFILE libraries 421_depend: 422 @echo 423 @echo "--------------------------------------------------------------" 424 @echo ">>> stage 4.3: make dependencies" 425 @echo "--------------------------------------------------------------" 426 ${_+_}cd ${.CURDIR}; ${WMAKE} par-depend 427everything: 428 @echo 429 @echo "--------------------------------------------------------------" 430 @echo ">>> stage 4.4: building everything" 431 @echo "--------------------------------------------------------------" 432 ${_+_}cd ${.CURDIR}; ${WMAKE} par-all 433.if ${TARGET_ARCH} == "amd64" 434build32: 435 @echo 436 @echo "--------------------------------------------------------------" 437 @echo ">>> stage 5.1: building 32 bit shim libraries" 438 @echo "--------------------------------------------------------------" 439 mkdir -p ${LIB32TMP}/usr/lib32 440 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 441 -p ${LIB32TMP}/usr >/dev/null 442 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 443 -p ${LIB32TMP}/usr/include >/dev/null 444 mkdir -p ${WORLDTMP} 445 ln -sf ${.CURDIR}/sys ${WORLDTMP} 446.if ${MK_KERBEROS} != "no" 447.for _t in obj depend all 448 cd ${.CURDIR}/kerberos5/tools; \ 449 MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} SSP_CFLAGS= DESTDIR= \ 450 ${_t} 451.endfor 452.endif 453.for _t in obj includes 454 cd ${.CURDIR}/include; ${LIB32WMAKE} ${_t} 455 cd ${.CURDIR}/lib; ${LIB32WMAKE} ${_t} 456.if ${MK_CDDL} != "no" 457 cd ${.CURDIR}/cddl/lib; ${LIB32WMAKE} ${_t} 458.endif 459 cd ${.CURDIR}/gnu/lib; ${LIB32WMAKE} ${_t} 460.if ${MK_CRYPT} != "no" 461 cd ${.CURDIR}/secure/lib; ${LIB32WMAKE} ${_t} 462.endif 463.if ${MK_KERBEROS} != "no" 464 cd ${.CURDIR}/kerberos5/lib; ${LIB32WMAKE} ${_t} 465.endif 466.endfor 467.for _dir in usr.bin/lex/lib 468 cd ${.CURDIR}/${_dir}; ${LIB32WMAKE} obj 469.endfor 470.for _dir in lib/ncurses/ncurses lib/ncurses/ncursesw lib/libmagic 471 cd ${.CURDIR}/${_dir}; \ 472 MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} SSP_CFLAGS= DESTDIR= \ 473 build-tools 474.endfor 475 cd ${.CURDIR}; \ 476 ${LIB32WMAKE} -f Makefile.inc1 libraries 477.for _t in obj depend all 478 cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32WMAKE} ${_t} 479 cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32WMAKE} ${_t} 480.endfor 481 482distribute32 install32: 483.if make(distribute32) 484 mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32 # XXX add to mtree 485 mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32/dtrace # XXX add to mtree 486.else 487 mkdir -p ${DESTDIR}/usr/lib32 # XXX add to mtree 488 mkdir -p ${DESTDIR}/usr/lib32/dtrace # XXX add to mtree 489.endif 490 cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 491.if ${MK_CDDL} != "no" 492 cd ${.CURDIR}/cddl/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 493.endif 494 cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 495.if ${MK_CRYPT} != "no" 496 cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 497.endif 498.if ${MK_KERBEROS} != "no" 499 cd ${.CURDIR}/kerberos5/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 500.endif 501 cd ${.CURDIR}/libexec/rtld-elf; \ 502 PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//} 503 cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32IMAKE} ${.TARGET:S/32$//} 504.endif 505 506WMAKE_TGTS= 507.if !defined(SUBDIR_OVERRIDE) 508WMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools 509.endif 510WMAKE_TGTS+= _cleanobj _obj _build-tools 511.if !defined(SUBDIR_OVERRIDE) 512WMAKE_TGTS+= _cross-tools 513.endif 514WMAKE_TGTS+= _includes _libraries _depend everything 515.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 516WMAKE_TGTS+= build32 517.endif 518 519buildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 520.ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 521 522buildworld_prologue: 523 @echo "--------------------------------------------------------------" 524 @echo ">>> World build started on `LC_ALL=C date`" 525 @echo "--------------------------------------------------------------" 526 527buildworld_epilogue: 528 @echo 529 @echo "--------------------------------------------------------------" 530 @echo ">>> World build completed on `LC_ALL=C date`" 531 @echo "--------------------------------------------------------------" 532 533# 534# We need to have this as a target because the indirection between Makefile 535# and Makefile.inc1 causes the correct PATH to be used, rather than a 536# modification of the current environment's PATH. In addition, we need 537# to quote multiword values. 538# 539buildenvvars: 540 @echo ${WMAKEENV:Q} 541 542buildenv: 543 @echo Entering world for ${TARGET_ARCH}:${TARGET} 544 @cd ${.CURDIR} && env ${WMAKEENV} sh || true 545 546TOOLCHAIN_TGTS= ${WMAKE_TGTS:N_depend:Neverything:Nbuild32} 547toolchain: ${TOOLCHAIN_TGTS} 548kernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries} 549 550# 551# installcheck 552# 553# Checks to be sure system is ready for installworld/installkernel. 554# 555installcheck: 556 557# 558# Require DESTDIR to be set if installing for a different architecture. 559# 560.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE} 561.if !make(distributeworld) 562installcheck: installcheck_DESTDIR 563installcheck_DESTDIR: 564.if !defined(DESTDIR) || empty(DESTDIR) 565 @echo "ERROR: Please set DESTDIR!"; \ 566 false 567.endif 568.endif 569.endif 570 571# 572# Check for missing UIDs/GIDs. 573# 574CHECK_UIDS= 575CHECK_GIDS= audit 576.if ${MK_SENDMAIL} != "no" 577CHECK_UIDS+= smmsp 578CHECK_GIDS+= smmsp 579.endif 580.if ${MK_PF} != "no" 581CHECK_UIDS+= proxy 582CHECK_GIDS+= proxy authpf 583.endif 584installcheck: installcheck_UGID 585installcheck_UGID: 586.for uid in ${CHECK_UIDS} 587 @if ! `id -u ${uid} >/dev/null 2>&1`; then \ 588 echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \ 589 false; \ 590 fi 591.endfor 592.for gid in ${CHECK_GIDS} 593 @if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \ 594 echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \ 595 false; \ 596 fi 597.endfor 598 599# 600# Required install tools to be saved in a scratch dir for safety. 601# 602.if ${MK_INFO} != "no" 603_install-info= install-info 604.endif 605.if ${MK_ZONEINFO} != "no" 606_zoneinfo= zic tzsetup 607.endif 608 609ITOOLS= [ awk cap_mkdb cat chflags chmod chown \ 610 date echo egrep find grep ${_install-info} \ 611 ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \ 612 test true uname wc ${_zoneinfo} 613 614# 615# distributeworld 616# 617# Distributes everything compiled by a `buildworld'. 618# 619# installworld 620# 621# Installs everything compiled by a 'buildworld'. 622# 623distributeworld installworld: installcheck 624 mkdir -p ${INSTALLTMP} 625 progs=$$(for prog in ${ITOOLS}; do \ 626 if progpath=`which $$prog`; then \ 627 echo $$progpath; \ 628 else \ 629 echo "Required tool $$prog not found in PATH." >&2; \ 630 exit 1; \ 631 fi; \ 632 done); \ 633 libs=$$(ldd -f "%o %p\n" -f "%o %p\n" $$progs 2>/dev/null | sort -u | \ 634 while read line; do \ 635 set -- $$line; \ 636 if [ "$$2 $$3" != "not found" ]; then \ 637 echo $$2; \ 638 else \ 639 echo "Required library $$1 not found." >&2; \ 640 exit 1; \ 641 fi; \ 642 done); \ 643 cp $$libs $$progs ${INSTALLTMP} 644 cp -R $${PATH_LOCALE:-"/usr/share/locale"} ${INSTALLTMP}/locale 645 ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}; \ 646 ${IMAKEENV} rm -rf ${INSTALLTMP} 647 648# 649# reinstall 650# 651# If you have a build server, you can NFS mount the source and obj directories 652# and do a 'make reinstall' on the *client* to install new binaries from the 653# most recent server build. 654# 655reinstall: 656 @echo "--------------------------------------------------------------" 657 @echo ">>> Making hierarchy" 658 @echo "--------------------------------------------------------------" 659 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy 660 @echo 661 @echo "--------------------------------------------------------------" 662 @echo ">>> Installing everything" 663 @echo "--------------------------------------------------------------" 664 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 665.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 666 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32 667.endif 668 669redistribute: 670 @echo "--------------------------------------------------------------" 671 @echo ">>> Distributing everything" 672 @echo "--------------------------------------------------------------" 673 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 674.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 675 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 \ 676 DISTRIBUTION=lib32 677.endif 678 679distrib-dirs distribution: 680 cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET} 681 682# 683# buildkernel and installkernel 684# 685# Which kernels to build and/or install is specified by setting 686# KERNCONF. If not defined a GENERIC kernel is built/installed. 687# Only the existing (depending TARGET) config files are used 688# for building kernels and only the first of these is designated 689# as the one being installed. 690# 691# Note that we have to use TARGET instead of TARGET_ARCH when 692# we're in kernel-land. Since only TARGET_ARCH is (expected) to 693# be set to cross-build, we have to make sure TARGET is set 694# properly. 695 696.if defined(KERNFAST) 697NO_KERNELCLEAN= t 698NO_KERNELCONFIG= t 699NO_KERNELDEPEND= t 700NO_KERNELOBJ= t 701# Shortcut for KERNCONF=Blah -DKERNFAST is now KERNFAST=Blah 702.if !defined(KERNCONF) && ${KERNFAST} != "1" 703KERNCONF=${KERNFAST} 704.endif 705.endif 706.if !defined(KERNCONF) && defined(KERNEL) 707KERNCONF= ${KERNEL} 708KERNWARN= 709.else 710KERNCONF?= GENERIC 711.endif 712INSTKERNNAME?= kernel 713 714KERNSRCDIR?= ${.CURDIR}/sys 715KRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf 716KRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} 717KERNCONFDIR?= ${KRNLCONFDIR} 718 719BUILDKERNELS= 720INSTALLKERNEL= 721.for _kernel in ${KERNCONF} 722.if exists(${KERNCONFDIR}/${_kernel}) 723BUILDKERNELS+= ${_kernel} 724.if empty(INSTALLKERNEL) 725INSTALLKERNEL= ${_kernel} 726.endif 727.endif 728.endfor 729 730# 731# buildkernel 732# 733# Builds all kernels defined by BUILDKERNELS. 734# 735buildkernel: 736.if empty(BUILDKERNELS) 737 @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \ 738 false 739.endif 740.if defined(KERNWARN) 741 @echo "--------------------------------------------------------------" 742 @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 743 @echo "--------------------------------------------------------------" 744 @sleep 3 745.endif 746 @echo 747.for _kernel in ${BUILDKERNELS} 748 @echo "--------------------------------------------------------------" 749 @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 750 @echo "--------------------------------------------------------------" 751 @echo "===> ${_kernel}" 752 mkdir -p ${KRNLOBJDIR} 753.if !defined(NO_KERNELCONFIG) 754 @echo 755 @echo "--------------------------------------------------------------" 756 @echo ">>> stage 1: configuring the kernel" 757 @echo "--------------------------------------------------------------" 758 cd ${KRNLCONFDIR}; \ 759 PATH=${TMPPATH} \ 760 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 761 ${KERNCONFDIR}/${_kernel} 762.endif 763.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN) 764 @echo 765 @echo "--------------------------------------------------------------" 766 @echo ">>> stage 2.1: cleaning up the object tree" 767 @echo "--------------------------------------------------------------" 768 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR} 769.endif 770.if !defined(NO_KERNELOBJ) 771 @echo 772 @echo "--------------------------------------------------------------" 773 @echo ">>> stage 2.2: rebuilding the object tree" 774 @echo "--------------------------------------------------------------" 775 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj 776.endif 777 @echo 778 @echo "--------------------------------------------------------------" 779 @echo ">>> stage 2.3: build tools" 780 @echo "--------------------------------------------------------------" 781 cd ${KRNLOBJDIR}/${_kernel}; \ 782 MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \ 783 ${MAKE} SSP_CFLAGS= -DNO_CPU_CFLAGS \ 784 -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile 785# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case. 786.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules) 787.for target in obj depend all 788 cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \ 789 MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \ 790 ${MAKE} SSP_CFLAGS= -DNO_CPU_CFLAGS -DNO_CTF ${target} 791.endfor 792.endif 793.if !defined(NO_KERNELDEPEND) 794 @echo 795 @echo "--------------------------------------------------------------" 796 @echo ">>> stage 3.1: making dependencies" 797 @echo "--------------------------------------------------------------" 798 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ 799.endif 800 @echo 801 @echo "--------------------------------------------------------------" 802 @echo ">>> stage 3.2: building everything" 803 @echo "--------------------------------------------------------------" 804 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ 805 @echo "--------------------------------------------------------------" 806 @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 807 @echo "--------------------------------------------------------------" 808.endfor 809 810# 811# installkernel, etc. 812# 813# Install the kernel defined by INSTALLKERNEL 814# 815installkernel installkernel.debug \ 816reinstallkernel reinstallkernel.debug: installcheck 817.if empty(INSTALLKERNEL) 818 @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \ 819 false 820.endif 821 @echo "--------------------------------------------------------------" 822 @echo ">>> Installing kernel" 823 @echo "--------------------------------------------------------------" 824 cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 825 ${CROSSENV} PATH=${TMPPATH} \ 826 ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} 827 828# 829# doxygen 830# 831# Build the API documentation with doxygen 832# 833doxygen: 834 @if [ ! -x `/usr/bin/which doxygen` ]; then \ 835 echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \ 836 exit 1; \ 837 fi 838 cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all 839 840# 841# update 842# 843# Update the source tree, by running cvsup and/or running cvs to update to the 844# latest copy. 845# 846update: 847.if defined(SUP_UPDATE) 848 @echo "--------------------------------------------------------------" 849 @echo ">>> Running ${SUP}" 850 @echo "--------------------------------------------------------------" 851.if defined(SUPFILE) 852 @${SUP} ${SUPFLAGS} ${SUPFILE} 853.endif 854.if defined(SUPFILE1) 855 @${SUP} ${SUPFLAGS} ${SUPFILE1} 856.endif 857.if defined(SUPFILE2) 858 @${SUP} ${SUPFLAGS} ${SUPFILE2} 859.endif 860.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE) 861 @${SUP} ${SUPFLAGS} ${PORTSSUPFILE} 862.endif 863.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE) 864 @${SUP} ${SUPFLAGS} ${DOCSUPFILE} 865.endif 866.endif 867.if defined(CVS_UPDATE) 868 @cd ${.CURDIR} ; \ 869 if [ -d CVS ] ; then \ 870 echo "--------------------------------------------------------------" ; \ 871 echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT} ; \ 872 echo "--------------------------------------------------------------" ; \ 873 echo ${CVS} -R -q update ${CVSFLAGS} ; \ 874 ${CVS} -R -q update ${CVSFLAGS} ; \ 875 fi 876.endif 877.if defined(SVN_UPDATE) 878 @cd ${.CURDIR} ; \ 879 if [ -d .svn ] ; then \ 880 echo "--------------------------------------------------------------" ; \ 881 echo ">>> Updating ${.CURDIR} using Subversion" ; \ 882 echo "--------------------------------------------------------------" ; \ 883 echo ${SVN} update ${SVNFLAGS} ; \ 884 ${SVN} update ${SVNFLAGS} ; \ 885 fi 886.endif 887 888# 889# ------------------------------------------------------------------------ 890# 891# From here onwards are utility targets used by the 'make world' and 892# related targets. If your 'world' breaks, you may like to try to fix 893# the problem and manually run the following targets to attempt to 894# complete the build. Beware, this is *not* guaranteed to work, you 895# need to have a pretty good grip on the current state of the system 896# to attempt to manually finish it. If in doubt, 'make world' again. 897# 898 899# 900# legacy: Build compatibility shims for the next three targets 901# 902legacy: 903.if ${BOOTSTRAPPING} < 600034 && ${BOOTSTRAPPING} != 0 904 @echo "ERROR: Source upgrades from versions prior to 6.0 not supported."; \ 905 false 906.endif 907.for _tool in tools/build 908 ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \ 909 cd ${.CURDIR}/${_tool}; \ 910 ${MAKE} DIRPRFX=${_tool}/ obj; \ 911 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \ 912 ${MAKE} DIRPRFX=${_tool}/ depend; \ 913 ${MAKE} DIRPRFX=${_tool}/ all; \ 914 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 915.endfor 916 917# 918# bootstrap-tools: Build tools needed for compatibility 919# 920.if ${MK_GAMES} != "no" 921_strfile= games/fortune/strfile 922.endif 923 924.if ${MK_CXX} != "no" 925_gperf= gnu/usr.bin/gperf 926.if ${BOOTSTRAPPING} < 700004 927_groff= gnu/usr.bin/groff 928.else 929_groff= gnu/usr.bin/groff/tmac 930.endif 931.endif 932 933.if ${BOOTSTRAPPING} >= 700044 && ${BOOTSTRAPPING} < 800022 934_ar= usr.bin/ar 935.endif 936 937.if ${BOOTSTRAPPING} < 800013 938_mklocale= usr.bin/mklocale 939.endif 940 941.if ${BOOTSTRAPPING} < 900002 942_sed= usr.bin/sed 943.endif 944 945.if ${BOOTSTRAPPING} < 900006 946_lex= usr.bin/lex 947_yacc= usr.bin/yacc 948.endif 949 950.if ${BOOTSTRAPPING} < 700018 951_gensnmptree= usr.sbin/bsnmpd/gensnmptree 952.endif 953 954.if ${MK_RESCUE} != "no" && \ 955 ${BOOTSTRAPPING} < 700026 956_crunchgen= usr.sbin/crunch/crunchgen 957.endif 958 959# XXX: There is no way to specify bootstrap tools depending on MK-flags 960# with different per-architecture default values. Always build tblgen. 961_clang_tblgen= \ 962 lib/clang/libllvmsupport \ 963 lib/clang/libllvmsystem \ 964 usr.bin/clang/tblgen 965 966.if ${MK_CDDL} != "no" 967_dtrace_tools= cddl/usr.bin/sgsmsg cddl/lib/libctf lib/libelf \ 968 lib/libdwarf cddl/usr.bin/ctfconvert cddl/usr.bin/ctfmerge 969.endif 970
| 3# 4# Make command line options: 5# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 6# -DNO_CLEAN do not clean at all 7# -DNO_SHARE do not go into share subdir 8# -DKERNFAST define NO_KERNEL{CONFIG,CLEAN,DEPEND,OBJ} 9# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 10# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 11# -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel 12# -DNO_KERNELOBJ do not run ${MAKE} obj in ${MAKE} buildkernel 13# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 14# -DNO_DOCUPDATE do not update doc in ${MAKE} update 15# -DNO_CTF do not run the DTrace CTF conversion tools on built objects 16# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 17# TARGET="machine" to crossbuild world for a different machine type 18# TARGET_ARCH= may be required when a TARGET supports multiple endians 19 20# 21# The intended user-driven targets are: 22# buildworld - rebuild *everything*, including glue to help do upgrades 23# installworld- install everything built by "buildworld" 24# doxygen - build API documentation of the kernel 25# update - convenient way to update your source tree (eg: cvsup/cvs) 26# 27# Standard targets (not defined here) are documented in the makefiles in 28# /usr/share/mk. These include: 29# obj depend all install clean cleandepend cleanobj 30 31.include <bsd.own.mk> 32 33.if ${MACHINE_ARCH} == "mips" 34MK_RESCUE=no # not yet 35.endif 36 37# We must do share/info early so that installation of info `dir' 38# entries works correctly. Do it first since it is less likely to 39# grow dependencies on include and lib than vice versa. 40# 41# We must do lib/ and libexec/ before bin/, because if installworld 42# installs a new /bin/sh, the 'make' command will *immediately* 43# use that new version. And the new (dynamically-linked) /bin/sh 44# will expect to find appropriate libraries in /lib and /libexec. 45# 46SUBDIR= share/info lib libexec 47SUBDIR+=bin 48.if ${MK_GAMES} != "no" 49SUBDIR+=games 50.endif 51.if ${MK_CDDL} != "no" 52SUBDIR+=cddl 53.else 54NO_CTF=1 55.endif 56SUBDIR+=gnu include 57.if ${MK_KERBEROS} != "no" 58SUBDIR+=kerberos5 59.endif 60.if ${MK_RESCUE} != "no" 61SUBDIR+=rescue 62.endif 63SUBDIR+=sbin 64.if ${MK_CRYPT} != "no" 65SUBDIR+=secure 66.endif 67.if !defined(NO_SHARE) 68SUBDIR+=share 69.endif 70SUBDIR+=sys usr.bin usr.sbin 71# 72# We must do etc/ last for install/distribute to work. 73# 74SUBDIR+=etc 75 76# These are last, since it is nice to at least get the base system 77# rebuilt before you do them. 78.for _DIR in ${LOCAL_DIRS} 79.if exists(${.CURDIR}/${_DIR}/Makefile) 80SUBDIR+= ${_DIR} 81.endif 82.endfor 83 84.if defined(SUBDIR_OVERRIDE) 85SUBDIR= ${SUBDIR_OVERRIDE} 86.endif 87 88.if defined(NOCLEAN) 89NO_CLEAN= ${NOCLEAN} 90.endif 91.if defined(NO_CLEANDIR) 92CLEANDIR= clean cleandepend 93.else 94CLEANDIR= cleandir 95.endif 96 97CVS?= cvs 98CVSFLAGS?= -A -P -d -I! 99SVN?= svn 100SVNFLAGS?= -r HEAD 101SUP?= /usr/bin/csup 102SUPFLAGS?= -g -L 2 103.if defined(SUPHOST) 104SUPFLAGS+= -h ${SUPHOST} 105.endif 106 107MAKEOBJDIRPREFIX?= /usr/obj 108.if !defined(OSRELDATE) 109.if exists(/usr/include/osreldate.h) 110OSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 111 /usr/include/osreldate.h 112.else 113OSRELDATE= 0 114.endif 115.endif 116 117.if !defined(VERSION) 118VERSION!= uname -srp 119VERSION+= ${OSRELDATE} 120.endif 121 122# Guess machine architecture from machine type, and vice versa. 123.if !defined(TARGET_ARCH) && defined(TARGET) 124TARGET_ARCH= ${TARGET:S/pc98/i386/:S/sun4v/sparc64/} 125.elif !defined(TARGET) && defined(TARGET_ARCH) && \ 126 ${TARGET_ARCH} != ${MACHINE_ARCH} 127TARGET= ${TARGET_ARCH} 128.endif 129# Otherwise, default to current machine type and architecture. 130TARGET?= ${MACHINE} 131TARGET_ARCH?= ${MACHINE_ARCH} 132 133KNOWN_ARCHES?= amd64 arm i386 i386/pc98 ia64 mips powerpc sparc64 sparc64/sun4v 134.if ${TARGET} == ${TARGET_ARCH} 135_t= ${TARGET} 136.else 137_t= ${TARGET_ARCH}/${TARGET} 138.endif 139.for _t in ${_t} 140.if empty(KNOWN_ARCHES:M${_t}) 141.error Unknown target ${TARGET_ARCH}:${TARGET}. 142.endif 143.endfor 144 145.if ${TARGET} == ${MACHINE} 146TARGET_CPUTYPE?=${CPUTYPE} 147.else 148TARGET_CPUTYPE?= 149.endif 150 151.if !empty(TARGET_CPUTYPE) 152_TARGET_CPUTYPE=${TARGET_CPUTYPE} 153.else 154_TARGET_CPUTYPE=dummy 155.endif 156_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \ 157 -f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE 158.if ${_CPUTYPE} != ${_TARGET_CPUTYPE} 159.error CPUTYPE global should be set with ?=. 160.endif 161.if make(buildworld) 162BUILD_ARCH!= uname -p 163.if ${MACHINE_ARCH} != ${BUILD_ARCH} 164.error To cross-build, set TARGET_ARCH. 165.endif 166.endif 167.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING) 168OBJTREE= ${MAKEOBJDIRPREFIX} 169.else 170OBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET} 171.endif 172WORLDTMP= ${OBJTREE}${.CURDIR}/tmp 173# /usr/games added for fortune which depend on strfile 174BPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games 175XPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games 176STRICTTMPPATH= ${BPATH}:${XPATH} 177TMPPATH= ${STRICTTMPPATH}:${PATH} 178 179# 180# Avoid running mktemp(1) unless actually needed. 181# It may not be functional, e.g., due to new ABI 182# when in the middle of installing over this system. 183# 184.if make(distributeworld) || make(installworld) 185INSTALLTMP!= /usr/bin/mktemp -d -u -t install 186.endif 187 188# 189# Building a world goes through the following stages 190# 191# 1. legacy stage [BMAKE] 192# This stage is responsible for creating compatibility 193# shims that are needed by the bootstrap-tools, 194# build-tools and cross-tools stages. 195# 1. bootstrap-tools stage [BMAKE] 196# This stage is responsible for creating programs that 197# are needed for backward compatibility reasons. They 198# are not built as cross-tools. 199# 2. build-tools stage [TMAKE] 200# This stage is responsible for creating the object 201# tree and building any tools that are needed during 202# the build process. 203# 3. cross-tools stage [XMAKE] 204# This stage is responsible for creating any tools that 205# are needed for cross-builds. A cross-compiler is one 206# of them. 207# 4. world stage [WMAKE] 208# This stage actually builds the world. 209# 5. install stage (optional) [IMAKE] 210# This stage installs a previously built world. 211# 212 213BOOTSTRAPPING?= 0 214 215# Common environment for world related stages 216CROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 217 MACHINE_ARCH=${TARGET_ARCH} \ 218 MACHINE=${TARGET} \ 219 CPUTYPE=${TARGET_CPUTYPE} \ 220 GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \ 221 GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \ 222 GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac 223.if ${OSRELDATE} < 700044 224CROSSENV+= AR=gnu-ar RANLIB=gnu-ranlib 225.endif 226 227# bootstrap-tools stage 228BMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ 229 PATH=${BPATH}:${PATH} \ 230 WORLDTMP=${WORLDTMP} \ 231 VERSION="${VERSION}" \ 232 MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" 233BMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \ 234 ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 235 DESTDIR= \ 236 BOOTSTRAPPING=${OSRELDATE} \ 237 SSP_CFLAGS= \ 238 -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \ 239 -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \ 240 -DNO_CPU_CFLAGS -DNO_WARNS -DNO_CTF 241 242# build-tools stage 243TMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \ 244 ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 245 TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 246 DESTDIR= \ 247 SSP_CFLAGS= \ 248 BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS \ 249 -DNO_WARNS -DNO_CTF 250 251# cross-tools stage 252XMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \ 253 TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 254 -DWITHOUT_GDB 255 256# world stage 257WMAKEENV= ${CROSSENV} \ 258 _SHLIBDIRPREFIX=${WORLDTMP} \ 259 VERSION="${VERSION}" \ 260 INSTALL="sh ${.CURDIR}/tools/install.sh" \ 261 PATH=${TMPPATH} 262.if ${MK_CDDL} == "no" 263WMAKEENV+= NO_CTF=1 264.endif 265WMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP} 266 267.if ${TARGET_ARCH} == "amd64" 268# 32 bit world 269LIB32TMP= ${OBJTREE}${.CURDIR}/lib32 270 271.if empty(TARGET_CPUTYPE) 272LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2 273.else 274LIB32CPUFLAGS= -march=${TARGET_CPUTYPE} 275.endif 276LIB32FLAGS= -m32 ${LIB32CPUFLAGS} -mfancy-math-387 -DCOMPAT_32BIT \ 277 -isystem ${LIB32TMP}/usr/include/ \ 278 -L${LIB32TMP}/usr/lib32 \ 279 -B${LIB32TMP}/usr/lib32 280 281# Yes, the flags are redundant. 282LIB32WMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \ 283 _SHLIBDIRPREFIX=${LIB32TMP} \ 284 VERSION="${VERSION}" \ 285 MACHINE=i386 \ 286 MACHINE_ARCH=i386 \ 287 MACHINE_CPU="i686 mmx sse sse2" \ 288 INSTALL="sh ${.CURDIR}/tools/install.sh" \ 289 PATH=${TMPPATH} \ 290 CC="${CC} ${LIB32FLAGS}" \ 291 CXX="${CXX} ${LIB32FLAGS}" \ 292 OBJC="${OBJC} ${LIB32FLAGS}" \ 293 LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \ 294 AS="${AS} --32" \ 295 LIBDIR=/usr/lib32 \ 296 SHLIBDIR=/usr/lib32 297 298LIB32WMAKE= ${LIB32WMAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \ 299 -DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_INFO \ 300 -DWITHOUT_HTML -DNO_CTF DESTDIR=${LIB32TMP} 301LIB32IMAKE= ${LIB32WMAKE:NINSTALL=*:NDESTDIR=*} -DNO_INCS 302.endif 303 304# install stage 305IMAKEENV= ${CROSSENV} 306IMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 307.if empty(.MAKEFLAGS:M-n) 308IMAKEENV+= PATH=${STRICTTMPPATH}:${INSTALLTMP} \ 309 LD_LIBRARY_PATH=${INSTALLTMP} \ 310 PATH_LOCALE=${INSTALLTMP}/locale 311IMAKE+= __MAKE_SHELL=${INSTALLTMP}/sh 312.else 313IMAKEENV+= PATH=${TMPPATH}:${INSTALLTMP} 314.endif 315 316# kernel stage 317KMAKEENV= ${WMAKEENV} 318KMAKE= ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} 319 320# 321# buildworld 322# 323# Attempt to rebuild the entire system, with reasonable chance of 324# success, regardless of how old your existing system is. 325# 326_worldtmp: 327.if ${.CURDIR:C/[^,]//g} != "" 328# The m4 build of sendmail files doesn't like it if ',' is used 329# anywhere in the path of it's files. 330 @echo 331 @echo "*** Error: path to source tree contains a comma ','" 332 @echo 333 false 334.endif 335 @echo 336 @echo "--------------------------------------------------------------" 337 @echo ">>> Rebuilding the temporary build tree" 338 @echo "--------------------------------------------------------------" 339.if !defined(NO_CLEAN) 340 rm -rf ${WORLDTMP} 341.if ${TARGET_ARCH} == "amd64" 342 rm -rf ${LIB32TMP} 343.endif 344.else 345 rm -rf ${WORLDTMP}/legacy/usr/include 346# XXX - These three can depend on any header file. 347 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 348 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/kdump_subr.c 349 rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 350.endif 351.for _dir in \ 352 lib usr legacy/usr 353 mkdir -p ${WORLDTMP}/${_dir} 354.endfor 355 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 356 -p ${WORLDTMP}/legacy/usr >/dev/null 357 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 358 -p ${WORLDTMP}/usr >/dev/null 359 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 360 -p ${WORLDTMP}/usr/include >/dev/null 361 ln -sf ${.CURDIR}/sys ${WORLDTMP} 362.if ${MK_BIND_LIBS} != "no" 363 mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \ 364 -p ${WORLDTMP}/usr/include >/dev/null 365.endif 366_legacy: 367 @echo 368 @echo "--------------------------------------------------------------" 369 @echo ">>> stage 1.1: legacy release compatibility shims" 370 @echo "--------------------------------------------------------------" 371 ${_+_}cd ${.CURDIR}; ${BMAKE} legacy 372_bootstrap-tools: 373 @echo 374 @echo "--------------------------------------------------------------" 375 @echo ">>> stage 1.2: bootstrap tools" 376 @echo "--------------------------------------------------------------" 377 ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools 378_cleanobj: 379.if !defined(NO_CLEAN) 380 @echo 381 @echo "--------------------------------------------------------------" 382 @echo ">>> stage 2.1: cleaning up the object tree" 383 @echo "--------------------------------------------------------------" 384 ${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 385.if ${TARGET_ARCH} == "amd64" 386 ${_+_}cd ${.CURDIR}; ${LIB32WMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/} 387.endif 388.endif 389_obj: 390 @echo 391 @echo "--------------------------------------------------------------" 392 @echo ">>> stage 2.2: rebuilding the object tree" 393 @echo "--------------------------------------------------------------" 394 ${_+_}cd ${.CURDIR}; ${WMAKE} par-obj 395_build-tools: 396 @echo 397 @echo "--------------------------------------------------------------" 398 @echo ">>> stage 2.3: build tools" 399 @echo "--------------------------------------------------------------" 400 ${_+_}cd ${.CURDIR}; ${TMAKE} build-tools 401_cross-tools: 402 @echo 403 @echo "--------------------------------------------------------------" 404 @echo ">>> stage 3: cross tools" 405 @echo "--------------------------------------------------------------" 406 ${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools 407_includes: 408 @echo 409 @echo "--------------------------------------------------------------" 410 @echo ">>> stage 4.1: building includes" 411 @echo "--------------------------------------------------------------" 412 ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 413_libraries: 414 @echo 415 @echo "--------------------------------------------------------------" 416 @echo ">>> stage 4.2: building libraries" 417 @echo "--------------------------------------------------------------" 418 ${_+_}cd ${.CURDIR}; \ 419 ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ 420 -DWITHOUT_MAN -DWITHOUT_PROFILE libraries 421_depend: 422 @echo 423 @echo "--------------------------------------------------------------" 424 @echo ">>> stage 4.3: make dependencies" 425 @echo "--------------------------------------------------------------" 426 ${_+_}cd ${.CURDIR}; ${WMAKE} par-depend 427everything: 428 @echo 429 @echo "--------------------------------------------------------------" 430 @echo ">>> stage 4.4: building everything" 431 @echo "--------------------------------------------------------------" 432 ${_+_}cd ${.CURDIR}; ${WMAKE} par-all 433.if ${TARGET_ARCH} == "amd64" 434build32: 435 @echo 436 @echo "--------------------------------------------------------------" 437 @echo ">>> stage 5.1: building 32 bit shim libraries" 438 @echo "--------------------------------------------------------------" 439 mkdir -p ${LIB32TMP}/usr/lib32 440 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 441 -p ${LIB32TMP}/usr >/dev/null 442 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 443 -p ${LIB32TMP}/usr/include >/dev/null 444 mkdir -p ${WORLDTMP} 445 ln -sf ${.CURDIR}/sys ${WORLDTMP} 446.if ${MK_KERBEROS} != "no" 447.for _t in obj depend all 448 cd ${.CURDIR}/kerberos5/tools; \ 449 MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} SSP_CFLAGS= DESTDIR= \ 450 ${_t} 451.endfor 452.endif 453.for _t in obj includes 454 cd ${.CURDIR}/include; ${LIB32WMAKE} ${_t} 455 cd ${.CURDIR}/lib; ${LIB32WMAKE} ${_t} 456.if ${MK_CDDL} != "no" 457 cd ${.CURDIR}/cddl/lib; ${LIB32WMAKE} ${_t} 458.endif 459 cd ${.CURDIR}/gnu/lib; ${LIB32WMAKE} ${_t} 460.if ${MK_CRYPT} != "no" 461 cd ${.CURDIR}/secure/lib; ${LIB32WMAKE} ${_t} 462.endif 463.if ${MK_KERBEROS} != "no" 464 cd ${.CURDIR}/kerberos5/lib; ${LIB32WMAKE} ${_t} 465.endif 466.endfor 467.for _dir in usr.bin/lex/lib 468 cd ${.CURDIR}/${_dir}; ${LIB32WMAKE} obj 469.endfor 470.for _dir in lib/ncurses/ncurses lib/ncurses/ncursesw lib/libmagic 471 cd ${.CURDIR}/${_dir}; \ 472 MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} SSP_CFLAGS= DESTDIR= \ 473 build-tools 474.endfor 475 cd ${.CURDIR}; \ 476 ${LIB32WMAKE} -f Makefile.inc1 libraries 477.for _t in obj depend all 478 cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32WMAKE} ${_t} 479 cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32WMAKE} ${_t} 480.endfor 481 482distribute32 install32: 483.if make(distribute32) 484 mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32 # XXX add to mtree 485 mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32/dtrace # XXX add to mtree 486.else 487 mkdir -p ${DESTDIR}/usr/lib32 # XXX add to mtree 488 mkdir -p ${DESTDIR}/usr/lib32/dtrace # XXX add to mtree 489.endif 490 cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 491.if ${MK_CDDL} != "no" 492 cd ${.CURDIR}/cddl/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 493.endif 494 cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 495.if ${MK_CRYPT} != "no" 496 cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 497.endif 498.if ${MK_KERBEROS} != "no" 499 cd ${.CURDIR}/kerberos5/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 500.endif 501 cd ${.CURDIR}/libexec/rtld-elf; \ 502 PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//} 503 cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32IMAKE} ${.TARGET:S/32$//} 504.endif 505 506WMAKE_TGTS= 507.if !defined(SUBDIR_OVERRIDE) 508WMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools 509.endif 510WMAKE_TGTS+= _cleanobj _obj _build-tools 511.if !defined(SUBDIR_OVERRIDE) 512WMAKE_TGTS+= _cross-tools 513.endif 514WMAKE_TGTS+= _includes _libraries _depend everything 515.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 516WMAKE_TGTS+= build32 517.endif 518 519buildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 520.ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 521 522buildworld_prologue: 523 @echo "--------------------------------------------------------------" 524 @echo ">>> World build started on `LC_ALL=C date`" 525 @echo "--------------------------------------------------------------" 526 527buildworld_epilogue: 528 @echo 529 @echo "--------------------------------------------------------------" 530 @echo ">>> World build completed on `LC_ALL=C date`" 531 @echo "--------------------------------------------------------------" 532 533# 534# We need to have this as a target because the indirection between Makefile 535# and Makefile.inc1 causes the correct PATH to be used, rather than a 536# modification of the current environment's PATH. In addition, we need 537# to quote multiword values. 538# 539buildenvvars: 540 @echo ${WMAKEENV:Q} 541 542buildenv: 543 @echo Entering world for ${TARGET_ARCH}:${TARGET} 544 @cd ${.CURDIR} && env ${WMAKEENV} sh || true 545 546TOOLCHAIN_TGTS= ${WMAKE_TGTS:N_depend:Neverything:Nbuild32} 547toolchain: ${TOOLCHAIN_TGTS} 548kernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries} 549 550# 551# installcheck 552# 553# Checks to be sure system is ready for installworld/installkernel. 554# 555installcheck: 556 557# 558# Require DESTDIR to be set if installing for a different architecture. 559# 560.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE} 561.if !make(distributeworld) 562installcheck: installcheck_DESTDIR 563installcheck_DESTDIR: 564.if !defined(DESTDIR) || empty(DESTDIR) 565 @echo "ERROR: Please set DESTDIR!"; \ 566 false 567.endif 568.endif 569.endif 570 571# 572# Check for missing UIDs/GIDs. 573# 574CHECK_UIDS= 575CHECK_GIDS= audit 576.if ${MK_SENDMAIL} != "no" 577CHECK_UIDS+= smmsp 578CHECK_GIDS+= smmsp 579.endif 580.if ${MK_PF} != "no" 581CHECK_UIDS+= proxy 582CHECK_GIDS+= proxy authpf 583.endif 584installcheck: installcheck_UGID 585installcheck_UGID: 586.for uid in ${CHECK_UIDS} 587 @if ! `id -u ${uid} >/dev/null 2>&1`; then \ 588 echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \ 589 false; \ 590 fi 591.endfor 592.for gid in ${CHECK_GIDS} 593 @if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \ 594 echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \ 595 false; \ 596 fi 597.endfor 598 599# 600# Required install tools to be saved in a scratch dir for safety. 601# 602.if ${MK_INFO} != "no" 603_install-info= install-info 604.endif 605.if ${MK_ZONEINFO} != "no" 606_zoneinfo= zic tzsetup 607.endif 608 609ITOOLS= [ awk cap_mkdb cat chflags chmod chown \ 610 date echo egrep find grep ${_install-info} \ 611 ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \ 612 test true uname wc ${_zoneinfo} 613 614# 615# distributeworld 616# 617# Distributes everything compiled by a `buildworld'. 618# 619# installworld 620# 621# Installs everything compiled by a 'buildworld'. 622# 623distributeworld installworld: installcheck 624 mkdir -p ${INSTALLTMP} 625 progs=$$(for prog in ${ITOOLS}; do \ 626 if progpath=`which $$prog`; then \ 627 echo $$progpath; \ 628 else \ 629 echo "Required tool $$prog not found in PATH." >&2; \ 630 exit 1; \ 631 fi; \ 632 done); \ 633 libs=$$(ldd -f "%o %p\n" -f "%o %p\n" $$progs 2>/dev/null | sort -u | \ 634 while read line; do \ 635 set -- $$line; \ 636 if [ "$$2 $$3" != "not found" ]; then \ 637 echo $$2; \ 638 else \ 639 echo "Required library $$1 not found." >&2; \ 640 exit 1; \ 641 fi; \ 642 done); \ 643 cp $$libs $$progs ${INSTALLTMP} 644 cp -R $${PATH_LOCALE:-"/usr/share/locale"} ${INSTALLTMP}/locale 645 ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}; \ 646 ${IMAKEENV} rm -rf ${INSTALLTMP} 647 648# 649# reinstall 650# 651# If you have a build server, you can NFS mount the source and obj directories 652# and do a 'make reinstall' on the *client* to install new binaries from the 653# most recent server build. 654# 655reinstall: 656 @echo "--------------------------------------------------------------" 657 @echo ">>> Making hierarchy" 658 @echo "--------------------------------------------------------------" 659 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy 660 @echo 661 @echo "--------------------------------------------------------------" 662 @echo ">>> Installing everything" 663 @echo "--------------------------------------------------------------" 664 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 665.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 666 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32 667.endif 668 669redistribute: 670 @echo "--------------------------------------------------------------" 671 @echo ">>> Distributing everything" 672 @echo "--------------------------------------------------------------" 673 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 674.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 675 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 \ 676 DISTRIBUTION=lib32 677.endif 678 679distrib-dirs distribution: 680 cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET} 681 682# 683# buildkernel and installkernel 684# 685# Which kernels to build and/or install is specified by setting 686# KERNCONF. If not defined a GENERIC kernel is built/installed. 687# Only the existing (depending TARGET) config files are used 688# for building kernels and only the first of these is designated 689# as the one being installed. 690# 691# Note that we have to use TARGET instead of TARGET_ARCH when 692# we're in kernel-land. Since only TARGET_ARCH is (expected) to 693# be set to cross-build, we have to make sure TARGET is set 694# properly. 695 696.if defined(KERNFAST) 697NO_KERNELCLEAN= t 698NO_KERNELCONFIG= t 699NO_KERNELDEPEND= t 700NO_KERNELOBJ= t 701# Shortcut for KERNCONF=Blah -DKERNFAST is now KERNFAST=Blah 702.if !defined(KERNCONF) && ${KERNFAST} != "1" 703KERNCONF=${KERNFAST} 704.endif 705.endif 706.if !defined(KERNCONF) && defined(KERNEL) 707KERNCONF= ${KERNEL} 708KERNWARN= 709.else 710KERNCONF?= GENERIC 711.endif 712INSTKERNNAME?= kernel 713 714KERNSRCDIR?= ${.CURDIR}/sys 715KRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf 716KRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} 717KERNCONFDIR?= ${KRNLCONFDIR} 718 719BUILDKERNELS= 720INSTALLKERNEL= 721.for _kernel in ${KERNCONF} 722.if exists(${KERNCONFDIR}/${_kernel}) 723BUILDKERNELS+= ${_kernel} 724.if empty(INSTALLKERNEL) 725INSTALLKERNEL= ${_kernel} 726.endif 727.endif 728.endfor 729 730# 731# buildkernel 732# 733# Builds all kernels defined by BUILDKERNELS. 734# 735buildkernel: 736.if empty(BUILDKERNELS) 737 @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \ 738 false 739.endif 740.if defined(KERNWARN) 741 @echo "--------------------------------------------------------------" 742 @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 743 @echo "--------------------------------------------------------------" 744 @sleep 3 745.endif 746 @echo 747.for _kernel in ${BUILDKERNELS} 748 @echo "--------------------------------------------------------------" 749 @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 750 @echo "--------------------------------------------------------------" 751 @echo "===> ${_kernel}" 752 mkdir -p ${KRNLOBJDIR} 753.if !defined(NO_KERNELCONFIG) 754 @echo 755 @echo "--------------------------------------------------------------" 756 @echo ">>> stage 1: configuring the kernel" 757 @echo "--------------------------------------------------------------" 758 cd ${KRNLCONFDIR}; \ 759 PATH=${TMPPATH} \ 760 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 761 ${KERNCONFDIR}/${_kernel} 762.endif 763.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN) 764 @echo 765 @echo "--------------------------------------------------------------" 766 @echo ">>> stage 2.1: cleaning up the object tree" 767 @echo "--------------------------------------------------------------" 768 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR} 769.endif 770.if !defined(NO_KERNELOBJ) 771 @echo 772 @echo "--------------------------------------------------------------" 773 @echo ">>> stage 2.2: rebuilding the object tree" 774 @echo "--------------------------------------------------------------" 775 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj 776.endif 777 @echo 778 @echo "--------------------------------------------------------------" 779 @echo ">>> stage 2.3: build tools" 780 @echo "--------------------------------------------------------------" 781 cd ${KRNLOBJDIR}/${_kernel}; \ 782 MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \ 783 ${MAKE} SSP_CFLAGS= -DNO_CPU_CFLAGS \ 784 -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile 785# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case. 786.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules) 787.for target in obj depend all 788 cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \ 789 MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \ 790 ${MAKE} SSP_CFLAGS= -DNO_CPU_CFLAGS -DNO_CTF ${target} 791.endfor 792.endif 793.if !defined(NO_KERNELDEPEND) 794 @echo 795 @echo "--------------------------------------------------------------" 796 @echo ">>> stage 3.1: making dependencies" 797 @echo "--------------------------------------------------------------" 798 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ 799.endif 800 @echo 801 @echo "--------------------------------------------------------------" 802 @echo ">>> stage 3.2: building everything" 803 @echo "--------------------------------------------------------------" 804 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ 805 @echo "--------------------------------------------------------------" 806 @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 807 @echo "--------------------------------------------------------------" 808.endfor 809 810# 811# installkernel, etc. 812# 813# Install the kernel defined by INSTALLKERNEL 814# 815installkernel installkernel.debug \ 816reinstallkernel reinstallkernel.debug: installcheck 817.if empty(INSTALLKERNEL) 818 @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \ 819 false 820.endif 821 @echo "--------------------------------------------------------------" 822 @echo ">>> Installing kernel" 823 @echo "--------------------------------------------------------------" 824 cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 825 ${CROSSENV} PATH=${TMPPATH} \ 826 ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} 827 828# 829# doxygen 830# 831# Build the API documentation with doxygen 832# 833doxygen: 834 @if [ ! -x `/usr/bin/which doxygen` ]; then \ 835 echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \ 836 exit 1; \ 837 fi 838 cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all 839 840# 841# update 842# 843# Update the source tree, by running cvsup and/or running cvs to update to the 844# latest copy. 845# 846update: 847.if defined(SUP_UPDATE) 848 @echo "--------------------------------------------------------------" 849 @echo ">>> Running ${SUP}" 850 @echo "--------------------------------------------------------------" 851.if defined(SUPFILE) 852 @${SUP} ${SUPFLAGS} ${SUPFILE} 853.endif 854.if defined(SUPFILE1) 855 @${SUP} ${SUPFLAGS} ${SUPFILE1} 856.endif 857.if defined(SUPFILE2) 858 @${SUP} ${SUPFLAGS} ${SUPFILE2} 859.endif 860.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE) 861 @${SUP} ${SUPFLAGS} ${PORTSSUPFILE} 862.endif 863.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE) 864 @${SUP} ${SUPFLAGS} ${DOCSUPFILE} 865.endif 866.endif 867.if defined(CVS_UPDATE) 868 @cd ${.CURDIR} ; \ 869 if [ -d CVS ] ; then \ 870 echo "--------------------------------------------------------------" ; \ 871 echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT} ; \ 872 echo "--------------------------------------------------------------" ; \ 873 echo ${CVS} -R -q update ${CVSFLAGS} ; \ 874 ${CVS} -R -q update ${CVSFLAGS} ; \ 875 fi 876.endif 877.if defined(SVN_UPDATE) 878 @cd ${.CURDIR} ; \ 879 if [ -d .svn ] ; then \ 880 echo "--------------------------------------------------------------" ; \ 881 echo ">>> Updating ${.CURDIR} using Subversion" ; \ 882 echo "--------------------------------------------------------------" ; \ 883 echo ${SVN} update ${SVNFLAGS} ; \ 884 ${SVN} update ${SVNFLAGS} ; \ 885 fi 886.endif 887 888# 889# ------------------------------------------------------------------------ 890# 891# From here onwards are utility targets used by the 'make world' and 892# related targets. If your 'world' breaks, you may like to try to fix 893# the problem and manually run the following targets to attempt to 894# complete the build. Beware, this is *not* guaranteed to work, you 895# need to have a pretty good grip on the current state of the system 896# to attempt to manually finish it. If in doubt, 'make world' again. 897# 898 899# 900# legacy: Build compatibility shims for the next three targets 901# 902legacy: 903.if ${BOOTSTRAPPING} < 600034 && ${BOOTSTRAPPING} != 0 904 @echo "ERROR: Source upgrades from versions prior to 6.0 not supported."; \ 905 false 906.endif 907.for _tool in tools/build 908 ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \ 909 cd ${.CURDIR}/${_tool}; \ 910 ${MAKE} DIRPRFX=${_tool}/ obj; \ 911 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \ 912 ${MAKE} DIRPRFX=${_tool}/ depend; \ 913 ${MAKE} DIRPRFX=${_tool}/ all; \ 914 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 915.endfor 916 917# 918# bootstrap-tools: Build tools needed for compatibility 919# 920.if ${MK_GAMES} != "no" 921_strfile= games/fortune/strfile 922.endif 923 924.if ${MK_CXX} != "no" 925_gperf= gnu/usr.bin/gperf 926.if ${BOOTSTRAPPING} < 700004 927_groff= gnu/usr.bin/groff 928.else 929_groff= gnu/usr.bin/groff/tmac 930.endif 931.endif 932 933.if ${BOOTSTRAPPING} >= 700044 && ${BOOTSTRAPPING} < 800022 934_ar= usr.bin/ar 935.endif 936 937.if ${BOOTSTRAPPING} < 800013 938_mklocale= usr.bin/mklocale 939.endif 940 941.if ${BOOTSTRAPPING} < 900002 942_sed= usr.bin/sed 943.endif 944 945.if ${BOOTSTRAPPING} < 900006 946_lex= usr.bin/lex 947_yacc= usr.bin/yacc 948.endif 949 950.if ${BOOTSTRAPPING} < 700018 951_gensnmptree= usr.sbin/bsnmpd/gensnmptree 952.endif 953 954.if ${MK_RESCUE} != "no" && \ 955 ${BOOTSTRAPPING} < 700026 956_crunchgen= usr.sbin/crunch/crunchgen 957.endif 958 959# XXX: There is no way to specify bootstrap tools depending on MK-flags 960# with different per-architecture default values. Always build tblgen. 961_clang_tblgen= \ 962 lib/clang/libllvmsupport \ 963 lib/clang/libllvmsystem \ 964 usr.bin/clang/tblgen 965 966.if ${MK_CDDL} != "no" 967_dtrace_tools= cddl/usr.bin/sgsmsg cddl/lib/libctf lib/libelf \ 968 lib/libdwarf cddl/usr.bin/ctfconvert cddl/usr.bin/ctfmerge 969.endif 970
|
| 971.if ${MK_FDT} != "no" 972_dtc= gnu/usr.bin/dtc 973.endif 974
|
971bootstrap-tools: 972.for _tool in \ 973 ${_clang_tblgen} \ 974 ${_dtrace_tools} \ 975 ${_strfile} \ 976 ${_gperf} \ 977 ${_groff} \ 978 ${_ar} \
| 975bootstrap-tools: 976.for _tool in \ 977 ${_clang_tblgen} \ 978 ${_dtrace_tools} \ 979 ${_strfile} \ 980 ${_gperf} \ 981 ${_groff} \ 982 ${_ar} \
|
| 983 ${_dtc} \
|
979 usr.bin/lorder \ 980 usr.bin/makewhatis \ 981 ${_mklocale} \ 982 usr.bin/rpcgen \ 983 ${_sed} \ 984 ${_lex} \ 985 ${_yacc} \ 986 usr.bin/xinstall \ 987 ${_gensnmptree} \ 988 usr.sbin/config \ 989 ${_crunchgen} 990 ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 991 cd ${.CURDIR}/${_tool}; \ 992 ${MAKE} DIRPRFX=${_tool}/ obj; \ 993 ${MAKE} DIRPRFX=${_tool}/ depend; \ 994 ${MAKE} DIRPRFX=${_tool}/ all; \ 995 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 996.endfor 997 998# 999# build-tools: Build special purpose build tools 1000# 1001.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules) 1002_aicasm= sys/modules/aic7xxx/aicasm 1003.endif 1004 1005.if !defined(NO_SHARE) 1006_share= share/syscons/scrnmaps 1007.endif 1008 1009.if ${MK_KERBEROS} != "no" 1010_kerberos5_tools= kerberos5/tools 1011.endif 1012 1013.if ${MK_RESCUE} != "no" 1014_rescue= rescue/rescue 1015.endif 1016 1017build-tools: 1018.for _tool in \ 1019 bin/csh \ 1020 bin/sh \ 1021 ${_rescue} \ 1022 lib/ncurses/ncurses \ 1023 lib/ncurses/ncursesw \ 1024 ${_share} \ 1025 ${_aicasm} \ 1026 usr.bin/awk \ 1027 lib/libmagic \ 1028 usr.sbin/sysinstall 1029 ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \ 1030 cd ${.CURDIR}/${_tool}; \ 1031 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1032 ${MAKE} DIRPRFX=${_tool}/ build-tools 1033.endfor 1034.for _tool in \ 1035 gnu/usr.bin/cc/cc_tools \ 1036 ${_kerberos5_tools} 1037 ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \ 1038 cd ${.CURDIR}/${_tool}; \ 1039 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1040 ${MAKE} DIRPRFX=${_tool}/ depend; \ 1041 ${MAKE} DIRPRFX=${_tool}/ all 1042.endfor 1043 1044# 1045# cross-tools: Build cross-building tools 1046# 1047.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${BOOTSTRAPPING} < 800035 1048.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386" 1049_btxld= usr.sbin/btxld 1050.endif 1051.endif 1052.if ${TARGET_ARCH} != ${MACHINE_ARCH} 1053.if ${MK_RESCUE} != "no" || defined(RELEASEDIR) 1054_crunchide= usr.sbin/crunch/crunchide 1055.endif 1056.if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR) 1057_kgzip= usr.sbin/kgzip 1058.endif 1059.endif 1060 1061cross-tools: 1062.for _tool in \ 1063 gnu/usr.bin/binutils \ 1064 gnu/usr.bin/cc \ 1065 usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \ 1066 ${_btxld} \ 1067 ${_crunchide} \ 1068 ${_kgzip} 1069 ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 1070 cd ${.CURDIR}/${_tool}; \ 1071 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1072 ${MAKE} DIRPRFX=${_tool}/ depend; \ 1073 ${MAKE} DIRPRFX=${_tool}/ all; \ 1074 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 1075.endfor 1076 1077# 1078# hierarchy - ensure that all the needed directories are present 1079# 1080hierarchy: 1081 cd ${.CURDIR}/etc; ${MAKE} distrib-dirs 1082 1083# 1084# libraries - build all libraries, and install them under ${DESTDIR}. 1085# 1086# The list of libraries with dependents (${_prebuild_libs}) and their 1087# interdependencies (__L) are built automatically by the 1088# ${.CURDIR}/tools/make_libdeps.sh script. 1089# 1090libraries: 1091 cd ${.CURDIR}; \ 1092 ${MAKE} -f Makefile.inc1 _prereq_libs; \ 1093 ${MAKE} -f Makefile.inc1 _startup_libs; \ 1094 ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 1095 ${MAKE} -f Makefile.inc1 _generic_libs; 1096 1097# 1098# static libgcc.a prerequisite for shared libc 1099# 1100_prereq_libs= gnu/lib/libssp/libssp_nonshared gnu/lib/libgcc 1101 1102# These dependencies are not automatically generated: 1103# 1104# gnu/lib/csu, gnu/lib/libgcc, lib/csu and lib/libc must be built before 1105# all shared libraries for ELF. 1106# 1107_startup_libs= gnu/lib/csu 1108.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf) 1109_startup_libs+= lib/csu/${MACHINE_ARCH}-elf 1110.else 1111_startup_libs+= lib/csu/${MACHINE_ARCH} 1112.endif 1113_startup_libs+= gnu/lib/libgcc 1114_startup_libs+= lib/libc 1115 1116gnu/lib/libgcc__L: lib/libc__L 1117 1118_prebuild_libs= ${_kerberos5_lib_libasn1} ${_kerberos5_lib_libheimntlm} \ 1119 ${_kerberos5_lib_libhx509} ${_kerberos5_lib_libkrb5} \ 1120 ${_kerberos5_lib_libroken} \ 1121 lib/libbz2 lib/libcom_err lib/libcrypt \ 1122 lib/libexpat lib/libfetch \ 1123 ${_lib_libgssapi} ${_lib_libipx} \ 1124 lib/libkiconv lib/libkvm lib/liblzma lib/libmd \ 1125 lib/ncurses/ncurses lib/ncurses/ncursesw \ 1126 lib/libopie lib/libpam ${_lib_libthr} \ 1127 lib/libradius lib/libsbuf lib/libtacplus \ 1128 lib/libutil ${_lib_libypclnt} lib/libz lib/msun \ 1129 ${_secure_lib_libcrypto} ${_secure_lib_libssh} \ 1130 ${_secure_lib_libssl} 1131 1132.if ${MK_LIBTHR} != "no" 1133_lib_libthr= lib/libthr 1134.endif 1135 1136_generic_libs= ${_cddl_lib} gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib 1137 1138lib/libopie__L lib/libtacplus__L: lib/libmd__L 1139 1140.if ${MK_CDDL} != "no" 1141_cddl_lib= cddl/lib 1142.endif 1143 1144.if ${MK_CRYPT} != "no" 1145.if ${MK_OPENSSL} != "no" 1146_secure_lib_libcrypto= secure/lib/libcrypto 1147_secure_lib_libssl= secure/lib/libssl 1148lib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L 1149lib/libfetch__L: secure/lib/libcrypto__L secure/lib/libssl__L lib/libmd__L 1150.if ${MK_OPENSSH} != "no" 1151_secure_lib_libssh= secure/lib/libssh 1152secure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L 1153.if ${MK_KERBEROS_SUPPORT} != "no" 1154secure/lib/libssh__L: lib/libgssapi__L kerberos5/lib/libkrb5__L \ 1155 kerberos5/lib/libhx509__L kerberos5/lib/libasn1__L lib/libcom_err__L \ 1156 lib/libmd__L kerberos5/lib/libroken__L 1157.endif 1158.endif 1159.endif 1160_secure_lib= secure/lib 1161.endif 1162 1163.if ${MK_GSSAPI} != "no" 1164_lib_libgssapi= lib/libgssapi 1165.endif 1166 1167.if ${MK_IPX} != "no" 1168_lib_libipx= lib/libipx 1169.endif 1170 1171.if ${MK_KERBEROS} != "no" 1172_kerberos5_lib= kerberos5/lib 1173_kerberos5_lib_libasn1= kerberos5/lib/libasn1 1174_kerberos5_lib_libkrb5= kerberos5/lib/libkrb5 1175_kerberos5_lib_libhx509= kerberos5/lib/libhx509 1176_kerberos5_lib_libroken= kerberos5/lib/libroken 1177_kerberos5_lib_libheimntlm= kerberos5/lib/libheimntlm 1178.endif 1179 1180.if ${MK_NIS} != "no" 1181_lib_libypclnt= lib/libypclnt 1182.endif 1183 1184.if ${MK_OPENSSL} == "no" 1185lib/libfetch__L lib/libradius__L: lib/libmd__L 1186.endif 1187 1188.for _lib in ${_prereq_libs} 1189${_lib}__PL: .PHONY 1190.if exists(${.CURDIR}/${_lib}) 1191 ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \ 1192 cd ${.CURDIR}/${_lib}; \ 1193 ${MAKE} DIRPRFX=${_lib}/ obj; \ 1194 ${MAKE} DIRPRFX=${_lib}/ depend; \ 1195 ${MAKE} -DWITHOUT_PROFILE -DNO_PIC DIRPRFX=${_lib}/ all; \ 1196 ${MAKE} -DWITHOUT_PROFILE -DNO_PIC DIRPRFX=${_lib}/ install 1197.endif 1198.endfor 1199 1200.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs} 1201${_lib}__L: .PHONY 1202.if exists(${.CURDIR}/${_lib}) 1203 ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \ 1204 cd ${.CURDIR}/${_lib}; \ 1205 ${MAKE} DIRPRFX=${_lib}/ obj; \ 1206 ${MAKE} DIRPRFX=${_lib}/ depend; \ 1207 ${MAKE} DIRPRFX=${_lib}/ all; \ 1208 ${MAKE} DIRPRFX=${_lib}/ install 1209.endif 1210.endfor 1211 1212# libpam is special: we need to build static PAM modules before 1213# static PAM library, and dynamic PAM library before dynamic PAM 1214# modules. 1215lib/libpam__L: .PHONY 1216 ${_+_}@${ECHODIR} "===> lib/libpam (obj,depend,all,install)"; \ 1217 cd ${.CURDIR}/lib/libpam; \ 1218 ${MAKE} DIRPRFX=lib/libpam/ obj; \ 1219 ${MAKE} DIRPRFX=lib/libpam/ depend; \ 1220 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \ 1221 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install 1222 1223_prereq_libs: ${_prereq_libs:S/$/__PL/} 1224_startup_libs: ${_startup_libs:S/$/__L/} 1225_prebuild_libs: ${_prebuild_libs:S/$/__L/} 1226_generic_libs: ${_generic_libs:S/$/__L/} 1227 1228.for __target in all clean cleandepend cleandir depend includes obj 1229.for entry in ${SUBDIR} 1230${entry}.${__target}__D: .PHONY 1231 ${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 1232 ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \ 1233 edir=${entry}.${MACHINE_ARCH}; \ 1234 cd ${.CURDIR}/$${edir}; \ 1235 else \ 1236 ${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \ 1237 edir=${entry}; \ 1238 cd ${.CURDIR}/$${edir}; \ 1239 fi; \ 1240 ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 1241.endfor 1242par-${__target}: ${SUBDIR:S/$/.${__target}__D/} 1243.endfor 1244 1245.include <bsd.subdir.mk> 1246 1247.if make(check-old) || make(check-old-dirs) || \ 1248 make(check-old-files) || make(check-old-libs) || \ 1249 make(delete-old) || make(delete-old-dirs) || \ 1250 make(delete-old-files) || make(delete-old-libs) 1251 1252# 1253# check for / delete old files section 1254# 1255 1256.include "ObsoleteFiles.inc" 1257 1258OLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \ 1259else you can not start such an application. Consult UPDATING for more \ 1260information regarding how to cope with the removal/revision bump of a \ 1261specific library." 1262 1263.if !defined(BATCH_DELETE_OLD_FILES) 1264RM_I=-i 1265.else 1266RM_I=-v 1267.endif 1268 1269delete-old-files: 1270 @echo ">>> Removing old files (only deletes safe to delete libs)" 1271# Ask for every old file if the user really wants to remove it. 1272# It's annoying, but better safe than sorry. 1273 @for file in ${OLD_FILES} ${OLD_FILES:Musr/share/*.gz:R}; do \ 1274 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 1275 chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \ 1276 rm ${RM_I} "${DESTDIR}/$${file}"; \ 1277 fi; \ 1278 done 1279# Remove catpages without corresponding manpages. 1280 @exec 3<&0; \ 1281 find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1282 sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1283 while read catpage; do \ 1284 read manpage; \ 1285 if [ ! -e "$${manpage}" ]; then \ 1286 rm ${RM_I} $${catpage} <&3 ; \ 1287 fi; \ 1288 done 1289 @echo ">>> Old files removed" 1290 1291check-old-files: 1292 @echo ">>> Checking for old files" 1293 @for file in ${OLD_FILES} ${OLD_FILES:Musr/share/*.gz:R}; do \ 1294 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 1295 echo "${DESTDIR}/$${file}"; \ 1296 fi; \ 1297 done 1298# Check for catpages without corresponding manpages. 1299 @find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1300 sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1301 while read catpage; do \ 1302 read manpage; \ 1303 if [ ! -e "$${manpage}" ]; then \ 1304 echo $${catpage} ; \ 1305 fi; \ 1306 done 1307 1308delete-old-libs: 1309 @echo ">>> Removing old libraries" 1310 @echo "${OLD_LIBS_MESSAGE}" | fmt 1311 @for file in ${OLD_LIBS}; do \ 1312 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 1313 chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \ 1314 rm ${RM_I} "${DESTDIR}/$${file}"; \ 1315 fi; \ 1316 done 1317 @echo ">>> Old libraries removed" 1318 1319check-old-libs: 1320 @echo ">>> Checking for old libraries" 1321 @for file in ${OLD_LIBS}; do \ 1322 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 1323 echo "${DESTDIR}/$${file}"; \ 1324 fi; \ 1325 done 1326 1327delete-old-dirs: 1328 @echo ">>> Removing old directories" 1329 @for dir in ${OLD_DIRS}; do \ 1330 if [ -d "${DESTDIR}/$${dir}" ]; then \ 1331 rmdir -v "${DESTDIR}/$${dir}" || true; \ 1332 elif [ -L "${DESTDIR}/$${dir}" ]; then \ 1333 echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \ 1334 fi; \ 1335 done 1336 @echo ">>> Old directories removed" 1337 1338check-old-dirs: 1339 @echo ">>> Checking for old directories" 1340 @for dir in ${OLD_DIRS}; do \ 1341 if [ -d "${DESTDIR}/$${dir}" ]; then \ 1342 echo "${DESTDIR}/$${dir}"; \ 1343 elif [ -L "${DESTDIR}/$${dir}" ]; then \ 1344 echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \ 1345 fi; \ 1346 done 1347 1348delete-old: delete-old-files delete-old-dirs 1349 @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1350 1351check-old: check-old-files check-old-libs check-old-dirs 1352 @echo "To remove old files and directories run '${MAKE} delete-old'." 1353 @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1354 1355.endif 1356 1357# 1358# showconfig - show build configuration. 1359# 1360showconfig: 1361 @${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort 1362 1363 1364############### 1365 1366.if defined(XDEV) && defined(XDEV_ARCH) 1367 1368NOFUN=-DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ 1369 -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE \ 1370 -DWITHOUT_KERBEROS -DWITHOUT_RESCUE -DNO_WARNS 1371 1372XDDIR=${XDEV}-freebsd 1373XDTP=/usr/${XDDIR} 1374CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} \ 1375 TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} 1376CDENV= ${CDBENV} \ 1377 _SHLIBDIRPREFIX=${XDTP} \ 1378 TOOLS_PREFIX=${XDTP} 1379CD2ENV=${CDENV} \ 1380 MACHINE=${XDEV} MACHINE_ARCH=${XDEV_ARCH} 1381 1382CDTMP= ${MAKEOBJDIRPREFIX}/${XDEV}/${.CURDIR}/tmp 1383CDMAKE=${CDENV} ${MAKE} ${NOFUN} 1384CD2MAKE=${CD2ENV} PATH=${CDTMP}/usr/bin:${XDTP}/usr/bin:${PATH} ${MAKE} ${NOFUN} 1385XDDESTDIR=${DESTDIR}${XDTP} 1386.if !defined(OSREL) 1387OSREL!= uname -r | sed -e 's/[-(].*//' 1388.endif 1389 1390.ORDER: xdev-build xdev-install 1391xdev: xdev-build xdev-install 1392 1393.ORDER: _xb-build-tools _xb-cross-tools 1394xdev-build: _xb-build-tools _xb-cross-tools 1395 1396_xb-build-tools: 1397 ${_+_}cd ${.CURDIR}; \ 1398 ${CDBENV} ${MAKE} -f Makefile.inc1 ${NOFUN} build-tools 1399 1400_xb-cross-tools: 1401.for _tool in \ 1402 gnu/usr.bin/binutils \ 1403 gnu/usr.bin/cc 1404 ${_+_}@${ECHODIR} "===> xdev ${_tool} (obj,depend,all)"; \ 1405 cd ${.CURDIR}/${_tool}; \ 1406 ${CDMAKE} DIRPRFX=${_tool}/ obj; \ 1407 ${CDMAKE} DIRPRFX=${_tool}/ depend; \ 1408 ${CDMAKE} DIRPRFX=${_tool}/ all 1409.endfor 1410 1411_xi-mtree: 1412 ${_+_}@${ECHODIR} "mtree populating ${XDDESTDIR}" 1413 mkdir -p ${XDDESTDIR} 1414 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \ 1415 -p ${XDDESTDIR} >/dev/null 1416 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 1417 -p ${XDDESTDIR}/usr >/dev/null 1418 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 1419 -p ${XDDESTDIR}/usr/include >/dev/null 1420 1421.ORDER: _xi-mtree _xi-cross-tools _xi-includes _xi-libraries _xi-links 1422xdev-install: _xi-mtree _xi-cross-tools _xi-includes _xi-libraries _xi-links 1423 1424_xi-cross-tools: 1425 @echo "_xi-cross-tools" 1426.for _tool in \ 1427 gnu/usr.bin/binutils \ 1428 gnu/usr.bin/cc 1429 ${_+_}@${ECHODIR} "===> xdev ${_tool} (install)"; \ 1430 cd ${.CURDIR}/${_tool}; \ 1431 ${CDMAKE} DIRPRFX=${_tool}/ install DESTDIR=${XDDESTDIR} 1432.endfor 1433 1434_xi-includes: 1435 ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 par-includes \ 1436 DESTDIR=${XDDESTDIR} 1437 1438_xi-libraries: 1439 ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 libraries \ 1440 DESTDIR=${XDDESTDIR} 1441 1442_xi-links: 1443 ${_+_}cd ${XDDESTDIR}/usr/bin; \ 1444 for i in *; do \ 1445 ln -sf ../../${XDTP}/usr/bin/$$i \ 1446 ../../../../usr/bin/${XDDIR}-$$i; \ 1447 ln -sf ../../${XDTP}/usr/bin/$$i \ 1448 ../../../../usr/bin/${XDDIR}${OSREL}-$$i; \ 1449 done 1450.endif
| 984 usr.bin/lorder \ 985 usr.bin/makewhatis \ 986 ${_mklocale} \ 987 usr.bin/rpcgen \ 988 ${_sed} \ 989 ${_lex} \ 990 ${_yacc} \ 991 usr.bin/xinstall \ 992 ${_gensnmptree} \ 993 usr.sbin/config \ 994 ${_crunchgen} 995 ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 996 cd ${.CURDIR}/${_tool}; \ 997 ${MAKE} DIRPRFX=${_tool}/ obj; \ 998 ${MAKE} DIRPRFX=${_tool}/ depend; \ 999 ${MAKE} DIRPRFX=${_tool}/ all; \ 1000 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 1001.endfor 1002 1003# 1004# build-tools: Build special purpose build tools 1005# 1006.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules) 1007_aicasm= sys/modules/aic7xxx/aicasm 1008.endif 1009 1010.if !defined(NO_SHARE) 1011_share= share/syscons/scrnmaps 1012.endif 1013 1014.if ${MK_KERBEROS} != "no" 1015_kerberos5_tools= kerberos5/tools 1016.endif 1017 1018.if ${MK_RESCUE} != "no" 1019_rescue= rescue/rescue 1020.endif 1021 1022build-tools: 1023.for _tool in \ 1024 bin/csh \ 1025 bin/sh \ 1026 ${_rescue} \ 1027 lib/ncurses/ncurses \ 1028 lib/ncurses/ncursesw \ 1029 ${_share} \ 1030 ${_aicasm} \ 1031 usr.bin/awk \ 1032 lib/libmagic \ 1033 usr.sbin/sysinstall 1034 ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \ 1035 cd ${.CURDIR}/${_tool}; \ 1036 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1037 ${MAKE} DIRPRFX=${_tool}/ build-tools 1038.endfor 1039.for _tool in \ 1040 gnu/usr.bin/cc/cc_tools \ 1041 ${_kerberos5_tools} 1042 ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \ 1043 cd ${.CURDIR}/${_tool}; \ 1044 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1045 ${MAKE} DIRPRFX=${_tool}/ depend; \ 1046 ${MAKE} DIRPRFX=${_tool}/ all 1047.endfor 1048 1049# 1050# cross-tools: Build cross-building tools 1051# 1052.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${BOOTSTRAPPING} < 800035 1053.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386" 1054_btxld= usr.sbin/btxld 1055.endif 1056.endif 1057.if ${TARGET_ARCH} != ${MACHINE_ARCH} 1058.if ${MK_RESCUE} != "no" || defined(RELEASEDIR) 1059_crunchide= usr.sbin/crunch/crunchide 1060.endif 1061.if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR) 1062_kgzip= usr.sbin/kgzip 1063.endif 1064.endif 1065 1066cross-tools: 1067.for _tool in \ 1068 gnu/usr.bin/binutils \ 1069 gnu/usr.bin/cc \ 1070 usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \ 1071 ${_btxld} \ 1072 ${_crunchide} \ 1073 ${_kgzip} 1074 ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 1075 cd ${.CURDIR}/${_tool}; \ 1076 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1077 ${MAKE} DIRPRFX=${_tool}/ depend; \ 1078 ${MAKE} DIRPRFX=${_tool}/ all; \ 1079 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 1080.endfor 1081 1082# 1083# hierarchy - ensure that all the needed directories are present 1084# 1085hierarchy: 1086 cd ${.CURDIR}/etc; ${MAKE} distrib-dirs 1087 1088# 1089# libraries - build all libraries, and install them under ${DESTDIR}. 1090# 1091# The list of libraries with dependents (${_prebuild_libs}) and their 1092# interdependencies (__L) are built automatically by the 1093# ${.CURDIR}/tools/make_libdeps.sh script. 1094# 1095libraries: 1096 cd ${.CURDIR}; \ 1097 ${MAKE} -f Makefile.inc1 _prereq_libs; \ 1098 ${MAKE} -f Makefile.inc1 _startup_libs; \ 1099 ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 1100 ${MAKE} -f Makefile.inc1 _generic_libs; 1101 1102# 1103# static libgcc.a prerequisite for shared libc 1104# 1105_prereq_libs= gnu/lib/libssp/libssp_nonshared gnu/lib/libgcc 1106 1107# These dependencies are not automatically generated: 1108# 1109# gnu/lib/csu, gnu/lib/libgcc, lib/csu and lib/libc must be built before 1110# all shared libraries for ELF. 1111# 1112_startup_libs= gnu/lib/csu 1113.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf) 1114_startup_libs+= lib/csu/${MACHINE_ARCH}-elf 1115.else 1116_startup_libs+= lib/csu/${MACHINE_ARCH} 1117.endif 1118_startup_libs+= gnu/lib/libgcc 1119_startup_libs+= lib/libc 1120 1121gnu/lib/libgcc__L: lib/libc__L 1122 1123_prebuild_libs= ${_kerberos5_lib_libasn1} ${_kerberos5_lib_libheimntlm} \ 1124 ${_kerberos5_lib_libhx509} ${_kerberos5_lib_libkrb5} \ 1125 ${_kerberos5_lib_libroken} \ 1126 lib/libbz2 lib/libcom_err lib/libcrypt \ 1127 lib/libexpat lib/libfetch \ 1128 ${_lib_libgssapi} ${_lib_libipx} \ 1129 lib/libkiconv lib/libkvm lib/liblzma lib/libmd \ 1130 lib/ncurses/ncurses lib/ncurses/ncursesw \ 1131 lib/libopie lib/libpam ${_lib_libthr} \ 1132 lib/libradius lib/libsbuf lib/libtacplus \ 1133 lib/libutil ${_lib_libypclnt} lib/libz lib/msun \ 1134 ${_secure_lib_libcrypto} ${_secure_lib_libssh} \ 1135 ${_secure_lib_libssl} 1136 1137.if ${MK_LIBTHR} != "no" 1138_lib_libthr= lib/libthr 1139.endif 1140 1141_generic_libs= ${_cddl_lib} gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib 1142 1143lib/libopie__L lib/libtacplus__L: lib/libmd__L 1144 1145.if ${MK_CDDL} != "no" 1146_cddl_lib= cddl/lib 1147.endif 1148 1149.if ${MK_CRYPT} != "no" 1150.if ${MK_OPENSSL} != "no" 1151_secure_lib_libcrypto= secure/lib/libcrypto 1152_secure_lib_libssl= secure/lib/libssl 1153lib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L 1154lib/libfetch__L: secure/lib/libcrypto__L secure/lib/libssl__L lib/libmd__L 1155.if ${MK_OPENSSH} != "no" 1156_secure_lib_libssh= secure/lib/libssh 1157secure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L 1158.if ${MK_KERBEROS_SUPPORT} != "no" 1159secure/lib/libssh__L: lib/libgssapi__L kerberos5/lib/libkrb5__L \ 1160 kerberos5/lib/libhx509__L kerberos5/lib/libasn1__L lib/libcom_err__L \ 1161 lib/libmd__L kerberos5/lib/libroken__L 1162.endif 1163.endif 1164.endif 1165_secure_lib= secure/lib 1166.endif 1167 1168.if ${MK_GSSAPI} != "no" 1169_lib_libgssapi= lib/libgssapi 1170.endif 1171 1172.if ${MK_IPX} != "no" 1173_lib_libipx= lib/libipx 1174.endif 1175 1176.if ${MK_KERBEROS} != "no" 1177_kerberos5_lib= kerberos5/lib 1178_kerberos5_lib_libasn1= kerberos5/lib/libasn1 1179_kerberos5_lib_libkrb5= kerberos5/lib/libkrb5 1180_kerberos5_lib_libhx509= kerberos5/lib/libhx509 1181_kerberos5_lib_libroken= kerberos5/lib/libroken 1182_kerberos5_lib_libheimntlm= kerberos5/lib/libheimntlm 1183.endif 1184 1185.if ${MK_NIS} != "no" 1186_lib_libypclnt= lib/libypclnt 1187.endif 1188 1189.if ${MK_OPENSSL} == "no" 1190lib/libfetch__L lib/libradius__L: lib/libmd__L 1191.endif 1192 1193.for _lib in ${_prereq_libs} 1194${_lib}__PL: .PHONY 1195.if exists(${.CURDIR}/${_lib}) 1196 ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \ 1197 cd ${.CURDIR}/${_lib}; \ 1198 ${MAKE} DIRPRFX=${_lib}/ obj; \ 1199 ${MAKE} DIRPRFX=${_lib}/ depend; \ 1200 ${MAKE} -DWITHOUT_PROFILE -DNO_PIC DIRPRFX=${_lib}/ all; \ 1201 ${MAKE} -DWITHOUT_PROFILE -DNO_PIC DIRPRFX=${_lib}/ install 1202.endif 1203.endfor 1204 1205.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs} 1206${_lib}__L: .PHONY 1207.if exists(${.CURDIR}/${_lib}) 1208 ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \ 1209 cd ${.CURDIR}/${_lib}; \ 1210 ${MAKE} DIRPRFX=${_lib}/ obj; \ 1211 ${MAKE} DIRPRFX=${_lib}/ depend; \ 1212 ${MAKE} DIRPRFX=${_lib}/ all; \ 1213 ${MAKE} DIRPRFX=${_lib}/ install 1214.endif 1215.endfor 1216 1217# libpam is special: we need to build static PAM modules before 1218# static PAM library, and dynamic PAM library before dynamic PAM 1219# modules. 1220lib/libpam__L: .PHONY 1221 ${_+_}@${ECHODIR} "===> lib/libpam (obj,depend,all,install)"; \ 1222 cd ${.CURDIR}/lib/libpam; \ 1223 ${MAKE} DIRPRFX=lib/libpam/ obj; \ 1224 ${MAKE} DIRPRFX=lib/libpam/ depend; \ 1225 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \ 1226 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install 1227 1228_prereq_libs: ${_prereq_libs:S/$/__PL/} 1229_startup_libs: ${_startup_libs:S/$/__L/} 1230_prebuild_libs: ${_prebuild_libs:S/$/__L/} 1231_generic_libs: ${_generic_libs:S/$/__L/} 1232 1233.for __target in all clean cleandepend cleandir depend includes obj 1234.for entry in ${SUBDIR} 1235${entry}.${__target}__D: .PHONY 1236 ${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 1237 ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \ 1238 edir=${entry}.${MACHINE_ARCH}; \ 1239 cd ${.CURDIR}/$${edir}; \ 1240 else \ 1241 ${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \ 1242 edir=${entry}; \ 1243 cd ${.CURDIR}/$${edir}; \ 1244 fi; \ 1245 ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 1246.endfor 1247par-${__target}: ${SUBDIR:S/$/.${__target}__D/} 1248.endfor 1249 1250.include <bsd.subdir.mk> 1251 1252.if make(check-old) || make(check-old-dirs) || \ 1253 make(check-old-files) || make(check-old-libs) || \ 1254 make(delete-old) || make(delete-old-dirs) || \ 1255 make(delete-old-files) || make(delete-old-libs) 1256 1257# 1258# check for / delete old files section 1259# 1260 1261.include "ObsoleteFiles.inc" 1262 1263OLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \ 1264else you can not start such an application. Consult UPDATING for more \ 1265information regarding how to cope with the removal/revision bump of a \ 1266specific library." 1267 1268.if !defined(BATCH_DELETE_OLD_FILES) 1269RM_I=-i 1270.else 1271RM_I=-v 1272.endif 1273 1274delete-old-files: 1275 @echo ">>> Removing old files (only deletes safe to delete libs)" 1276# Ask for every old file if the user really wants to remove it. 1277# It's annoying, but better safe than sorry. 1278 @for file in ${OLD_FILES} ${OLD_FILES:Musr/share/*.gz:R}; do \ 1279 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 1280 chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \ 1281 rm ${RM_I} "${DESTDIR}/$${file}"; \ 1282 fi; \ 1283 done 1284# Remove catpages without corresponding manpages. 1285 @exec 3<&0; \ 1286 find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1287 sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1288 while read catpage; do \ 1289 read manpage; \ 1290 if [ ! -e "$${manpage}" ]; then \ 1291 rm ${RM_I} $${catpage} <&3 ; \ 1292 fi; \ 1293 done 1294 @echo ">>> Old files removed" 1295 1296check-old-files: 1297 @echo ">>> Checking for old files" 1298 @for file in ${OLD_FILES} ${OLD_FILES:Musr/share/*.gz:R}; do \ 1299 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 1300 echo "${DESTDIR}/$${file}"; \ 1301 fi; \ 1302 done 1303# Check for catpages without corresponding manpages. 1304 @find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1305 sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1306 while read catpage; do \ 1307 read manpage; \ 1308 if [ ! -e "$${manpage}" ]; then \ 1309 echo $${catpage} ; \ 1310 fi; \ 1311 done 1312 1313delete-old-libs: 1314 @echo ">>> Removing old libraries" 1315 @echo "${OLD_LIBS_MESSAGE}" | fmt 1316 @for file in ${OLD_LIBS}; do \ 1317 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 1318 chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \ 1319 rm ${RM_I} "${DESTDIR}/$${file}"; \ 1320 fi; \ 1321 done 1322 @echo ">>> Old libraries removed" 1323 1324check-old-libs: 1325 @echo ">>> Checking for old libraries" 1326 @for file in ${OLD_LIBS}; do \ 1327 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 1328 echo "${DESTDIR}/$${file}"; \ 1329 fi; \ 1330 done 1331 1332delete-old-dirs: 1333 @echo ">>> Removing old directories" 1334 @for dir in ${OLD_DIRS}; do \ 1335 if [ -d "${DESTDIR}/$${dir}" ]; then \ 1336 rmdir -v "${DESTDIR}/$${dir}" || true; \ 1337 elif [ -L "${DESTDIR}/$${dir}" ]; then \ 1338 echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \ 1339 fi; \ 1340 done 1341 @echo ">>> Old directories removed" 1342 1343check-old-dirs: 1344 @echo ">>> Checking for old directories" 1345 @for dir in ${OLD_DIRS}; do \ 1346 if [ -d "${DESTDIR}/$${dir}" ]; then \ 1347 echo "${DESTDIR}/$${dir}"; \ 1348 elif [ -L "${DESTDIR}/$${dir}" ]; then \ 1349 echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \ 1350 fi; \ 1351 done 1352 1353delete-old: delete-old-files delete-old-dirs 1354 @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1355 1356check-old: check-old-files check-old-libs check-old-dirs 1357 @echo "To remove old files and directories run '${MAKE} delete-old'." 1358 @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1359 1360.endif 1361 1362# 1363# showconfig - show build configuration. 1364# 1365showconfig: 1366 @${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort 1367 1368 1369############### 1370 1371.if defined(XDEV) && defined(XDEV_ARCH) 1372 1373NOFUN=-DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ 1374 -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE \ 1375 -DWITHOUT_KERBEROS -DWITHOUT_RESCUE -DNO_WARNS 1376 1377XDDIR=${XDEV}-freebsd 1378XDTP=/usr/${XDDIR} 1379CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} \ 1380 TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} 1381CDENV= ${CDBENV} \ 1382 _SHLIBDIRPREFIX=${XDTP} \ 1383 TOOLS_PREFIX=${XDTP} 1384CD2ENV=${CDENV} \ 1385 MACHINE=${XDEV} MACHINE_ARCH=${XDEV_ARCH} 1386 1387CDTMP= ${MAKEOBJDIRPREFIX}/${XDEV}/${.CURDIR}/tmp 1388CDMAKE=${CDENV} ${MAKE} ${NOFUN} 1389CD2MAKE=${CD2ENV} PATH=${CDTMP}/usr/bin:${XDTP}/usr/bin:${PATH} ${MAKE} ${NOFUN} 1390XDDESTDIR=${DESTDIR}${XDTP} 1391.if !defined(OSREL) 1392OSREL!= uname -r | sed -e 's/[-(].*//' 1393.endif 1394 1395.ORDER: xdev-build xdev-install 1396xdev: xdev-build xdev-install 1397 1398.ORDER: _xb-build-tools _xb-cross-tools 1399xdev-build: _xb-build-tools _xb-cross-tools 1400 1401_xb-build-tools: 1402 ${_+_}cd ${.CURDIR}; \ 1403 ${CDBENV} ${MAKE} -f Makefile.inc1 ${NOFUN} build-tools 1404 1405_xb-cross-tools: 1406.for _tool in \ 1407 gnu/usr.bin/binutils \ 1408 gnu/usr.bin/cc 1409 ${_+_}@${ECHODIR} "===> xdev ${_tool} (obj,depend,all)"; \ 1410 cd ${.CURDIR}/${_tool}; \ 1411 ${CDMAKE} DIRPRFX=${_tool}/ obj; \ 1412 ${CDMAKE} DIRPRFX=${_tool}/ depend; \ 1413 ${CDMAKE} DIRPRFX=${_tool}/ all 1414.endfor 1415 1416_xi-mtree: 1417 ${_+_}@${ECHODIR} "mtree populating ${XDDESTDIR}" 1418 mkdir -p ${XDDESTDIR} 1419 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \ 1420 -p ${XDDESTDIR} >/dev/null 1421 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 1422 -p ${XDDESTDIR}/usr >/dev/null 1423 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 1424 -p ${XDDESTDIR}/usr/include >/dev/null 1425 1426.ORDER: _xi-mtree _xi-cross-tools _xi-includes _xi-libraries _xi-links 1427xdev-install: _xi-mtree _xi-cross-tools _xi-includes _xi-libraries _xi-links 1428 1429_xi-cross-tools: 1430 @echo "_xi-cross-tools" 1431.for _tool in \ 1432 gnu/usr.bin/binutils \ 1433 gnu/usr.bin/cc 1434 ${_+_}@${ECHODIR} "===> xdev ${_tool} (install)"; \ 1435 cd ${.CURDIR}/${_tool}; \ 1436 ${CDMAKE} DIRPRFX=${_tool}/ install DESTDIR=${XDDESTDIR} 1437.endfor 1438 1439_xi-includes: 1440 ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 par-includes \ 1441 DESTDIR=${XDDESTDIR} 1442 1443_xi-libraries: 1444 ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 libraries \ 1445 DESTDIR=${XDDESTDIR} 1446 1447_xi-links: 1448 ${_+_}cd ${XDDESTDIR}/usr/bin; \ 1449 for i in *; do \ 1450 ln -sf ../../${XDTP}/usr/bin/$$i \ 1451 ../../../../usr/bin/${XDDIR}-$$i; \ 1452 ln -sf ../../${XDTP}/usr/bin/$$i \ 1453 ../../../../usr/bin/${XDDIR}${OSREL}-$$i; \ 1454 done 1455.endif
|
| 1456 1457.if !empty(KRNLOBJDIR) && !empty(KERNCONF) 1458DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/ 1459 1460.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE) 1461FDT_DTS_FILE!= grep "^makeoptions[[:space:]]\+FDT_DTS_FILE" \ 1462 ${KERNCONFDIR}/${KERNCONF} 2> /dev/null | cut -d= -f2 1463.endif 1464 1465.endif 1466 1467.if !defined(DTBOUTPUTPATH) || !exists(${DTBOUTPUTPATH}) 1468DTBOUTPUTPATH= ${.CURDIR} 1469.endif 1470 1471# 1472# Build 'standalone' Device Tree Blob 1473# 1474builddtb: 1475 @if [ "${FDT_DTS_FILE}" = "" ]; then \ 1476 echo "ERROR: FDT_DTS_FILE must be specified!"; \ 1477 exit 1; \ 1478 fi; \ 1479 if [ ! -f ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} ]; then \ 1480 echo "ERROR: Specified DTS file (${FDT_DTS_FILE}) does not \ 1481 exist!"; \ 1482 exit 1; \ 1483 fi; \ 1484 if [ "${DTBOUTPUTPATH}" = "${.CURDIR}" ]; then \ 1485 echo "WARNING: DTB will be placed in the current working \ 1486 directory"; \ 1487 fi 1488 @PATH=${TMPPATH} \ 1489 dtc -O dtb -o \ 1490 ${DTBOUTPUTPATH}/`echo ${FDT_DTS_FILE} | cut -d. -f1`.dtb -b 0 \ 1491 -p 1024 ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE}
|
| |