Makefile.inc1 revision 159353
1251881Speter# 2251881Speter# $FreeBSD: head/Makefile.inc1 159353 2006-06-06 18:07:58Z imp $ 3251881Speter# 4251881Speter# Make command line options: 5251881Speter# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 6251881Speter# -DNO_CLEAN do not clean at all 7251881Speter# -DNO_SHARE do not go into share subdir 8251881Speter# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 9251881Speter# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 10251881Speter# -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel 11251881Speter# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 12251881Speter# -DNO_DOCUPDATE do not update doc in ${MAKE} update 13251881Speter# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 14251881Speter# TARGET_ARCH="arch" to crossbuild world to a different arch 15251881Speter 16251881Speter# 17251881Speter# The intended user-driven targets are: 18251881Speter# buildworld - rebuild *everything*, including glue to help do upgrades 19251881Speter# installworld- install everything built by "buildworld" 20251881Speter# doxygen - build API documentation of the kernel 21251881Speter# update - convenient way to update your source tree (eg: cvsup/cvs) 22251881Speter# 23251881Speter# Standard targets (not defined here) are documented in the makefiles in 24251881Speter# /usr/share/mk. These include: 25251881Speter# obj depend all install clean cleandepend cleanobj 26251881Speter 27251881Speter.include <bsd.own.mk> 28251881Speter 29251881Speter# We must do share/info early so that installation of info `dir' 30251881Speter# entries works correctly. Do it first since it is less likely to 31251881Speter# grow dependencies on include and lib than vice versa. 32251881Speter# 33251881Speter# We must do lib and libexec before bin, because if installworld 34251881Speter# installs a new /bin/sh, the 'make' command will *immediately* 35251881Speter# use that new version. And the new (dynamically-linked) /bin/sh 36251881Speter# will expect to find appropriate libraries in /lib and /libexec. 37251881Speter# 38262253Speter# We must do etc last for install/distribute to work. 39251881Speter# 40251881SpeterSUBDIR= share/info include lib libexec bin 41251881Speter.if ${MK_GAMES} != "no" 42251881SpeterSUBDIR+=games 43251881Speter.endif 44251881SpeterSUBDIR+=gnu 45251881Speter.if ${MK_KERBEROS} != "no" 46251881SpeterSUBDIR+=kerberos5 47251881Speter.endif 48251881Speter.if ${MK_RESCUE} != "no" 49251881SpeterSUBDIR+=rescue 50251881Speter.endif 51251881SpeterSUBDIR+=sbin 52251881Speter.if ${MK_CRYPT} != "no" 53251881SpeterSUBDIR+=secure 54251881Speter.endif 55251881Speter.if !defined(NO_SHARE) 56251881SpeterSUBDIR+=share 57251881Speter.endif 58251881SpeterSUBDIR+=sys usr.bin usr.sbin etc 59251881Speter 60251881Speter# These are last, since it is nice to at least get the base system 61251881Speter# rebuilt before you do them. 62251881Speter.for _DIR in ${LOCAL_DIRS} 63251881Speter.if exists(${.CURDIR}/${_DIR}/Makefile) 64251881SpeterSUBDIR+= ${_DIR} 65251881Speter.endif 66251881Speter.endfor 67251881Speter 68251881Speter.if defined(SUBDIR_OVERRIDE) 69251881SpeterSUBDIR= ${SUBDIR_OVERRIDE} 70251881Speter.endif 71251881Speter 72251881Speter.if defined(NOCLEAN) 73251881SpeterNO_CLEAN= ${NOCLEAN} 74251881Speter.endif 75251881Speter.if defined(NO_CLEANDIR) 76251881SpeterCLEANDIR= clean cleandepend 77251881Speter.else 78251881SpeterCLEANDIR= cleandir 79251881Speter.endif 80251881Speter 81251881SpeterCVS?= cvs 82251881SpeterCVSFLAGS?= -A -P -d -I! 83251881SpeterSUP?= /usr/bin/csup 84251881SpeterSUPFLAGS?= -g -L 2 85251881Speter.if defined(SUPHOST) 86251881SpeterSUPFLAGS+= -h ${SUPHOST} 87251881Speter.endif 88251881Speter 89251881SpeterMAKEOBJDIRPREFIX?= /usr/obj 90251881Speter.if !defined(OSRELDATE) 91251881Speter.if exists(/usr/include/osreldate.h) 92251881SpeterOSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 93251881Speter /usr/include/osreldate.h 94251881Speter.else 95251881SpeterOSRELDATE= 0 96251881Speter.endif 97251881Speter.endif 98251881SpeterTARGET_ARCH?= ${MACHINE_ARCH} 99251881Speter.if ${TARGET_ARCH} == ${MACHINE_ARCH} 100251881SpeterTARGET?= ${MACHINE} 101251881SpeterTARGET_CPUTYPE?=${CPUTYPE} 102251881Speter.else 103251881SpeterTARGET?= ${TARGET_ARCH} 104251881SpeterTARGET_CPUTYPE?= 105251881Speter.endif 106251881Speter.if !empty(TARGET_CPUTYPE) 107251881Speter_TARGET_CPUTYPE=${TARGET_CPUTYPE} 108251881Speter.else 109251881Speter_TARGET_CPUTYPE=dummy 110251881Speter.endif 111251881Speter_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \ 112299742Sdim -f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE 113251881Speter.if ${_CPUTYPE} != ${_TARGET_CPUTYPE} 114251881Speter.error CPUTYPE global should be set with ?=. 115251881Speter.endif 116251881Speter.if make(buildworld) 117251881SpeterBUILD_ARCH!= uname -p 118251881Speter.if ${MACHINE_ARCH} != ${BUILD_ARCH} 119251881Speter.error To cross-build, set TARGET_ARCH. 120251881Speter.endif 121251881Speter.endif 122251881Speter.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING) 123251881SpeterOBJTREE= ${MAKEOBJDIRPREFIX} 124251881Speter.else 125251881SpeterOBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET} 126251881Speter.endif 127251881SpeterWORLDTMP= ${OBJTREE}${.CURDIR}/tmp 128299742Sdim# /usr/games added for fortune which depend on strfile 129251881SpeterBPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games 130251881SpeterXPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games 131251881SpeterSTRICTTMPPATH= ${BPATH}:${XPATH} 132251881SpeterTMPPATH= ${STRICTTMPPATH}:${PATH} 133251881Speter 134251881SpeterINSTALLTMP!= /usr/bin/mktemp -d -u -t install 135251881Speter 136251881Speter# 137251881Speter# Building a world goes through the following stages 138251881Speter# 139251881Speter# 1. legacy stage [BMAKE] 140251881Speter# This stage is responsible for creating compatibility 141251881Speter# shims that are needed by the bootstrap-tools, 142251881Speter# build-tools and cross-tools stages. 143251881Speter# 1. bootstrap-tools stage [BMAKE] 144251881Speter# This stage is responsible for creating programs that 145251881Speter# are needed for backward compatibility reasons. They 146299742Sdim# are not built as cross-tools. 147251881Speter# 2. build-tools stage [TMAKE] 148251881Speter# This stage is responsible for creating the object 149251881Speter# tree and building any tools that are needed during 150251881Speter# the build process. 151251881Speter# 3. cross-tools stage [XMAKE] 152251881Speter# This stage is responsible for creating any tools that 153251881Speter# are needed for cross-builds. A cross-compiler is one 154251881Speter# of them. 155251881Speter# 4. world stage [WMAKE] 156251881Speter# This stage actually builds the world. 157251881Speter# 5. install stage (optional) [IMAKE] 158251881Speter# This stage installs a previously built world. 159251881Speter# 160251881Speter 161251881SpeterBOOTSTRAPPING?= 0 162251881Speter 163251881Speter# Common environment for world related stages 164251881SpeterCROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 165251881Speter MACHINE_ARCH=${TARGET_ARCH} \ 166251881Speter MACHINE=${TARGET} \ 167251881Speter CPUTYPE=${TARGET_CPUTYPE} \ 168251881Speter GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \ 169251881Speter GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \ 170251881Speter GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac 171251881Speter 172251881Speter# bootstrap-tools stage 173251881SpeterBMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ 174251881Speter PATH=${BPATH}:${PATH} \ 175299742Sdim WORLDTMP=${WORLDTMP} \ 176299742Sdim MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" 177251881SpeterBMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \ 178251881Speter ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 179251881Speter DESTDIR= \ 180251881Speter BOOTSTRAPPING=${OSRELDATE} \ 181251881Speter -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \ 182251881Speter -DWITHOUT_NLS -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \ 183299742Sdim -DNO_CPU_CFLAGS -DNO_WARNS 184299742Sdim 185299742Sdim# build-tools stage 186299742SdimTMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \ 187299742Sdim ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 188299742Sdim DESTDIR= \ 189299742Sdim BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS 190299742Sdim 191299742Sdim# cross-tools stage 192299742SdimXMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \ 193299742Sdim -DWITHOUT_FORTRAN -DWITHOUT_GDB 194299742Sdim 195251881Speter# world stage 196251881SpeterWMAKEENV= ${CROSSENV} \ 197251881Speter _SHLIBDIRPREFIX=${WORLDTMP} \ 198251881Speter INSTALL="sh ${.CURDIR}/tools/install.sh" \ 199251881Speter PATH=${TMPPATH} 200251881SpeterWMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP} 201299742Sdim 202299742Sdim.if ${TARGET_ARCH} == "amd64" 203299742Sdim# 32 bit world 204299742SdimLIB32TMP= ${OBJTREE}${.CURDIR}/lib32 205299742Sdim 206299742Sdim.if empty(TARGET_CPUTYPE) 207299742SdimLIB32CPUTYPE= k8 208299742Sdim.else 209299742SdimLIB32CPUTYPE= ${TARGET_CPUTYPE} 210299742Sdim.endif 211299742SdimLIB32PREFLAGS= -m32 -march=${LIB32CPUTYPE} -mfancy-math-387 -DCOMPAT_32BIT 212299742SdimLIB32POSTFLAGS= -I${LIB32TMP}/usr/include \ 213251881Speter -L${LIB32TMP}/usr/lib32 \ 214251881Speter -B${LIB32TMP}/usr/lib32 215251881SpeterLIB32CC= ${LIB32PREFLAGS} \ 216251881Speter ${LIB32POSTFLAGS} 217251881SpeterLIB32CXX= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/c++/3.4 \ 218251881Speter ${LIB32POSTFLAGS} 219251881SpeterLIB32OBJC= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/objc \ 220251881Speter ${LIB32POSTFLAGS} 221251881Speter 222251881Speter# Yes, the flags are redundant. 223251881SpeterLIB32MAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \ 224299742Sdim _SHLIBDIRPREFIX=${LIB32TMP} \ 225251881Speter MACHINE=i386 \ 226251881Speter MACHINE_ARCH=i386 \ 227251881Speter INSTALL="sh ${.CURDIR}/tools/install.sh" \ 228251881Speter PATH=${TMPPATH} \ 229251881Speter CC="${CC} ${LIB32CC}" \ 230251881Speter CXX="${CXX} ${LIB32CXX}" \ 231251881Speter OBJC="${OBJC} ${LIB32OBJC}" \ 232251881Speter LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \ 233251881Speter AS="${AS} --32" \ 234251881Speter LIBDIR=/usr/lib32 \ 235251881Speter SHLIBDIR=/usr/lib32 236251881Speter 237251881SpeterLIB32MAKE= ${LIB32MAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \ 238251881Speter -DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_INFO \ 239251881Speter -DWITHOUT_HTML 240251881SpeterLIB32IMAKE= ${LIB32MAKE:NINSTALL=*} -DNO_INCS 241251881Speter.endif 242251881Speter 243299742Sdim# install stage 244251881Speter.if empty(.MAKEFLAGS:M-n) 245299742SdimIMAKEENV= ${CROSSENV} \ 246299742Sdim PATH=${STRICTTMPPATH}:${INSTALLTMP} 247299742Sdim.else 248299742SdimIMAKEENV= ${CROSSENV} \ 249251881Speter PATH=${TMPPATH}:${INSTALLTMP} 250251881Speter.endif 251251881SpeterIMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 252251881Speter 253251881Speter# kernel stage 254251881SpeterKMAKEENV= ${WMAKEENV} 255251881SpeterKMAKE= ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} 256299742Sdim 257299742Sdim# 258299742Sdim# buildworld 259299742Sdim# 260299742Sdim# Attempt to rebuild the entire system, with reasonable chance of 261299742Sdim# success, regardless of how old your existing system is. 262299742Sdim# 263299742Sdim_worldtmp: 264299742Sdim.if ${.CURDIR:C/[^,]//g} != "" 265299742Sdim# The m4 build of sendmail files doesn't like it if ',' is used 266299742Sdim# anywhere in the path of it's files. 267299742Sdim @echo 268299742Sdim @echo "*** Error: path to source tree contains a comma ','" 269299742Sdim @echo 270299742Sdim false 271299742Sdim.endif 272299742Sdim @echo 273299742Sdim @echo "--------------------------------------------------------------" 274299742Sdim @echo ">>> Rebuilding the temporary build tree" 275299742Sdim @echo "--------------------------------------------------------------" 276251881Speter.if !defined(NO_CLEAN) 277251881Speter rm -rf ${WORLDTMP} 278251881Speter.if ${TARGET_ARCH} == "amd64" 279251881Speter rm -rf ${LIB32TMP} 280251881Speter.endif 281251881Speter.else 282251881Speter rm -rf ${WORLDTMP}/legacy/usr/include 283251881Speter# XXX - These two can depend on any header file. 284251881Speter rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 285251881Speter rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 286251881Speter.endif 287251881Speter.for _dir in \ 288251881Speter usr/bin usr/games usr/include/c++/3.4 usr/include/sys usr/lib \ 289251881Speter usr/libexec usr/sbin usr/share/dict \ 290251881Speter usr/share/groff_font/devX100 \ 291251881Speter usr/share/groff_font/devX100-12 \ 292251881Speter usr/share/groff_font/devX75 \ 293299742Sdim usr/share/groff_font/devX75-12 \ 294251881Speter usr/share/groff_font/devascii \ 295251881Speter usr/share/groff_font/devcp1047 \ 296251881Speter usr/share/groff_font/devdvi \ 297251881Speter usr/share/groff_font/devhtml \ 298251881Speter usr/share/groff_font/devkoi8-r \ 299251881Speter usr/share/groff_font/devlatin1 \ 300251881Speter usr/share/groff_font/devlbp \ 301251881Speter usr/share/groff_font/devlj4 \ 302251881Speter usr/share/groff_font/devps \ 303251881Speter usr/share/groff_font/devutf8 \ 304251881Speter usr/share/tmac/mdoc usr/share/tmac/mm 305251881Speter mkdir -p ${WORLDTMP}/legacy/${_dir} 306299742Sdim.endfor 307299742Sdim.for _dir in \ 308299742Sdim lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \ 309251881Speter usr/libexec usr/sbin usr/share/misc \ 310251881Speter usr/share/snmp/defs usr/share/snmp/mibs 311251881Speter mkdir -p ${WORLDTMP}/${_dir} 312251881Speter.endfor 313251881Speter mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 314251881Speter -p ${WORLDTMP}/usr/include >/dev/null 315251881Speter ln -sf ${.CURDIR}/sys ${WORLDTMP} 316251881Speter.if ${MK_BIND_LIBS} != "no" 317251881Speter mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \ 318251881Speter -p ${WORLDTMP}/usr/include >/dev/null 319251881Speter.endif 320299742Sdim_legacy: 321251881Speter @echo 322251881Speter @echo "--------------------------------------------------------------" 323251881Speter @echo ">>> stage 1.1: legacy release compatibility shims" 324251881Speter @echo "--------------------------------------------------------------" 325251881Speter ${_+_}cd ${.CURDIR}; ${BMAKE} legacy 326251881Speter_bootstrap-tools: 327251881Speter @echo 328251881Speter @echo "--------------------------------------------------------------" 329251881Speter @echo ">>> stage 1.2: bootstrap tools" 330251881Speter @echo "--------------------------------------------------------------" 331251881Speter ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools 332251881Speter_cleanobj: 333251881Speter.if !defined(NO_CLEAN) 334251881Speter @echo 335251881Speter @echo "--------------------------------------------------------------" 336251881Speter @echo ">>> stage 2.1: cleaning up the object tree" 337251881Speter @echo "--------------------------------------------------------------" 338251881Speter ${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 339251881Speter.if ${TARGET_ARCH} == "amd64" 340251881Speter rm -rf ${OBJTREE}/lib32 341251881Speter.endif 342251881Speter.endif 343251881Speter_obj: 344251881Speter @echo 345251881Speter @echo "--------------------------------------------------------------" 346251881Speter @echo ">>> stage 2.2: rebuilding the object tree" 347251881Speter @echo "--------------------------------------------------------------" 348251881Speter ${_+_}cd ${.CURDIR}; ${WMAKE} par-obj 349251881Speter_build-tools: 350251881Speter @echo 351251881Speter @echo "--------------------------------------------------------------" 352251881Speter @echo ">>> stage 2.3: build tools" 353251881Speter @echo "--------------------------------------------------------------" 354251881Speter ${_+_}cd ${.CURDIR}; ${TMAKE} build-tools 355251881Speter_cross-tools: 356251881Speter @echo 357299742Sdim @echo "--------------------------------------------------------------" 358251881Speter @echo ">>> stage 3: cross tools" 359251881Speter @echo "--------------------------------------------------------------" 360251881Speter ${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools 361251881Speter_includes: 362251881Speter @echo 363299742Sdim @echo "--------------------------------------------------------------" 364299742Sdim @echo ">>> stage 4.1: building includes" 365299742Sdim @echo "--------------------------------------------------------------" 366299742Sdim ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 367299742Sdim_libraries: 368299742Sdim @echo 369251881Speter @echo "--------------------------------------------------------------" 370251881Speter @echo ">>> stage 4.2: building libraries" 371251881Speter @echo "--------------------------------------------------------------" 372251881Speter ${_+_}cd ${.CURDIR}; \ 373251881Speter ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ 374299742Sdim -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE libraries 375299742Sdim_depend: 376299742Sdim @echo 377251881Speter @echo "--------------------------------------------------------------" 378251881Speter @echo ">>> stage 4.3: make dependencies" 379251881Speter @echo "--------------------------------------------------------------" 380251881Speter ${_+_}cd ${.CURDIR}; ${WMAKE} par-depend 381251881Spetereverything: 382251881Speter @echo 383251881Speter @echo "--------------------------------------------------------------" 384251881Speter @echo ">>> stage 4.4: building everything" 385251881Speter @echo "--------------------------------------------------------------" 386251881Speter ${_+_}cd ${.CURDIR}; ${WMAKE} par-all 387251881Speter.if ${TARGET_ARCH} == "amd64" 388251881Speterbuild32: 389251881Speter @echo 390251881Speter @echo "--------------------------------------------------------------" 391251881Speter @echo ">>> stage 5.1: building 32 bit shim libraries" 392251881Speter @echo "--------------------------------------------------------------" 393251881Speter.for _dir in \ 394251881Speter lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \ 395251881Speter usr/libexec usr/sbin usr/share/misc \ 396251881Speter usr/share/snmp/defs usr/share/snmp/mibs 397251881Speter mkdir -p ${LIB32TMP}/${_dir} 398251881Speter.endfor 399251881Speter mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 400251881Speter -p ${LIB32TMP}/usr/include >/dev/null 401251881Speter mkdir -p ${WORLDTMP} 402251881Speter ln -sf ${.CURDIR}/sys ${WORLDTMP} 403251881Speter.if ${MK_KERBEROS} != "no" 404251881Speter.for _t in obj depend all 405251881Speter cd ${.CURDIR}/kerberos5/tools; \ 406251881Speter MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t} 407251881Speter.endfor 408251881Speter.endif 409299742Sdim.for _t in obj includes 410251881Speter cd ${.CURDIR}/include; \ 411251881Speter ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 412251881Speter cd ${.CURDIR}/lib; \ 413251881Speter ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 414251881Speter cd ${.CURDIR}/gnu/lib; \ 415251881Speter ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 416251881Speter.if ${MK_CRYPT} != "no" 417251881Speter cd ${.CURDIR}/secure/lib; \ 418251881Speter ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 419251881Speter.endif 420251881Speter.if ${MK_KERBEROS} != "no" 421251881Speter cd ${.CURDIR}/kerberos5/lib; \ 422299742Sdim ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 423251881Speter.endif 424251881Speter.endfor 425251881Speter.for _dir in usr.bin/lex/lib 426251881Speter cd ${.CURDIR}/${_dir}; \ 427251881Speter ${LIB32MAKE} DESTDIR=${LIB32TMP} obj 428251881Speter.endfor 429251881Speter.for _dir in lib/libncurses lib/libmagic 430251881Speter cd ${.CURDIR}/${_dir}; \ 431251881Speter MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= build-tools 432251881Speter.endfor 433251881Speter cd ${.CURDIR}; \ 434251881Speter ${LIB32MAKE} -f Makefile.inc1 DESTDIR=${LIB32TMP} libraries 435251881Speter.for _t in obj depend all 436299742Sdim cd ${.CURDIR}/libexec/rtld-elf; \ 437299742Sdim PROG=ld-elf32.so.1 ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 438299742Sdim.endfor 439299742Sdim 440299742Sdimdistribute32 install32: 441251881Speter.if make(distribute32) 442251881Speter mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32 # XXX add to mtree 443251881Speter.else 444251881Speter mkdir -p ${DESTDIR}/usr/lib32 # XXX add to mtree 445251881Speter.endif 446251881Speter cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 447251881Speter cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 448251881Speter.if ${MK_CRYPT} != "no" 449251881Speter cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 450251881Speter.endif 451251881Speter cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//} 452251881Speter.endif 453251881Speter 454251881Speter 455251881SpeterWMAKE_TGTS= 456251881Speter.if !defined(SUBDIR_OVERRIDE) 457251881SpeterWMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools 458251881Speter.endif 459251881SpeterWMAKE_TGTS+= _cleanobj _obj _build-tools 460251881Speter.if !defined(SUBDIR_OVERRIDE) 461251881SpeterWMAKE_TGTS+= _cross-tools 462251881Speter.endif 463251881SpeterWMAKE_TGTS+= _includes _libraries _depend everything 464251881Speter.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 465251881SpeterWMAKE_TGTS+= build32 466251881Speter.endif 467251881Speter 468251881Speterbuildworld: ${WMAKE_TGTS} 469251881Speter.ORDER: ${WMAKE_TGTS} 470251881Speter 471251881Speter 472251881Speter# 473251881Speter# We need to have this as a target because the indirection between Makefile 474251881Speter# and Makefile.inc1 causes the correct PATH to be used, rather than a 475251881Speter# modification of the current environment's PATH. In addition, we need 476251881Speter# to quote multiword values. 477251881Speter# 478251881Speterbuildenvvars: 479251881Speter @echo ${WMAKEENV:Q} 480251881Speter 481251881Speterbuildenv: 482251881Speter @echo Entering world for ${TARGET_ARCH}:${TARGET} 483251881Speter @cd ${.CURDIR} && env ${WMAKEENV} sh || true 484251881Speter 485251881SpeterTOOLCHAIN_TGTS= ${WMAKE_TGTS:N_depend:Neverything:Nbuild32} 486251881Spetertoolchain: ${TOOLCHAIN_TGTS} 487251881Speterkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries} 488251881Speter 489251881Speter# 490251881Speter# installcheck 491251881Speter# 492251881Speter# Checks to be sure system is ready for installworld/installkernel. 493251881Speter# 494251881Speterinstallcheck: 495251881Speter 496251881Speter# 497251881Speter# Require DESTDIR to be set if installing for a different architecture. 498251881Speter# 499251881Speter.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE} 500251881Speter.if !make(distributeworld) 501251881Speterinstallcheck: installcheck_DESTDIR 502251881Speterinstallcheck_DESTDIR: 503251881Speter.if !defined(DESTDIR) || empty(DESTDIR) 504251881Speter @echo "ERROR: Please set DESTDIR!"; \ 505251881Speter false 506251881Speter.endif 507251881Speter.endif 508251881Speter.endif 509251881Speter 510251881Speter# 511251881Speter# Check for missing UIDs/GIDs. 512251881Speter# 513251881SpeterCHECK_UIDS= 514251881SpeterCHECK_GIDS= audit 515251881Speter.if ${MK_SENDMAIL} != "no" 516251881SpeterCHECK_UIDS+= smmsp 517251881SpeterCHECK_GIDS+= smmsp 518251881Speter.endif 519251881Speter.if ${MK_PF} != "no" 520251881SpeterCHECK_UIDS+= proxy 521251881SpeterCHECK_GIDS+= proxy authpf 522251881Speter.endif 523251881Speterinstallcheck: installcheck_UGID 524251881Speterinstallcheck_UGID: 525251881Speter.for uid in ${CHECK_UIDS} 526251881Speter @if ! `id -u ${uid} >/dev/null 2>&1`; then \ 527251881Speter echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \ 528251881Speter false; \ 529251881Speter fi 530251881Speter.endfor 531251881Speter.for gid in ${CHECK_GIDS} 532251881Speter @if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \ 533251881Speter echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \ 534251881Speter false; \ 535251881Speter fi 536251881Speter.endfor 537251881Speter 538251881Speter# 539262253Speter# distributeworld 540262253Speter# 541251881Speter# Distributes everything compiled by a `buildworld'. 542251881Speter# 543251881Speter# installworld 544251881Speter# 545251881Speter# Installs everything compiled by a 'buildworld'. 546251881Speter# 547251881Speterdistributeworld installworld: installcheck 548251881Speter mkdir -p ${INSTALLTMP} 549251881Speter for prog in [ awk cap_mkdb cat chflags chmod chown \ 550251881Speter date echo egrep find grep install-info \ 551251881Speter ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \ 552251881Speter test true uname wc zic; do \ 553251881Speter cp `which $$prog` ${INSTALLTMP}; \ 554251881Speter done 555251881Speter ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//} 556251881Speter rm -rf ${INSTALLTMP} 557251881Speter 558251881Speter# 559251881Speter# reinstall 560251881Speter# 561251881Speter# If you have a build server, you can NFS mount the source and obj directories 562251881Speter# and do a 'make reinstall' on the *client* to install new binaries from the 563251881Speter# most recent server build. 564251881Speter# 565251881Speterreinstall: 566251881Speter @echo "--------------------------------------------------------------" 567251881Speter @echo ">>> Making hierarchy" 568299742Sdim @echo "--------------------------------------------------------------" 569251881Speter ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy 570251881Speter @echo 571251881Speter @echo "--------------------------------------------------------------" 572251881Speter @echo ">>> Installing everything" 573251881Speter @echo "--------------------------------------------------------------" 574251881Speter ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 575299742Sdim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 576251881Speter ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32 577251881Speter.endif 578251881Speter 579251881Speterredistribute: 580299742Sdim @echo "--------------------------------------------------------------" 581251881Speter @echo ">>> Distributing everything" 582251881Speter @echo "--------------------------------------------------------------" 583251881Speter ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 584251881Speter.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 585251881Speter ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 DISTRIBUTION=lib32 586251881Speter.endif 587251881Speter 588299742Sdimdistrib-dirs distribution: 589251881Speter cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET} 590251881Speter 591251881Speter# 592251881Speter# buildkernel and installkernel 593299742Sdim# 594251881Speter# Which kernels to build and/or install is specified by setting 595251881Speter# KERNCONF. If not defined a GENERIC kernel is built/installed. 596251881Speter# Only the existing (depending TARGET) config files are used 597251881Speter# for building kernels and only the first of these is designated 598299742Sdim# as the one being installed. 599251881Speter# 600262253Speter# Note that we have to use TARGET instead of TARGET_ARCH when 601299742Sdim# we're in kernel-land. Since only TARGET_ARCH is (expected) to 602262253Speter# be set to cross-build, we have to make sure TARGET is set 603262253Speter# properly. 604262253Speter 605251881Speter.if !defined(KERNCONF) && defined(KERNEL) 606251881SpeterKERNCONF= ${KERNEL} 607251881SpeterKERNWARN= 608251881Speter.else 609251881SpeterKERNCONF?= GENERIC 610251881Speter.endif 611251881SpeterINSTKERNNAME?= kernel 612251881Speter 613251881SpeterKERNSRCDIR?= ${.CURDIR}/sys 614251881SpeterKRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf 615251881SpeterKRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} 616251881SpeterKERNCONFDIR?= ${KRNLCONFDIR} 617251881Speter 618251881SpeterBUILDKERNELS= 619251881SpeterINSTALLKERNEL= 620251881Speter.for _kernel in ${KERNCONF} 621251881Speter.if exists(${KERNCONFDIR}/${_kernel}) 622251881SpeterBUILDKERNELS+= ${_kernel} 623251881Speter.if empty(INSTALLKERNEL) 624251881SpeterINSTALLKERNEL= ${_kernel} 625251881Speter.endif 626251881Speter.endif 627251881Speter.endfor 628251881Speter 629251881Speter# 630251881Speter# buildkernel 631251881Speter# 632251881Speter# Builds all kernels defined by BUILDKERNELS. 633251881Speter# 634251881Speterbuildkernel: 635251881Speter.if empty(BUILDKERNELS) 636251881Speter @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \ 637251881Speter false 638251881Speter.endif 639251881Speter.if defined(KERNWARN) 640251881Speter @echo "--------------------------------------------------------------" 641251881Speter @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 642251881Speter @echo "--------------------------------------------------------------" 643251881Speter @sleep 3 644251881Speter.endif 645251881Speter @echo 646251881Speter.for _kernel in ${BUILDKERNELS} 647251881Speter @echo "--------------------------------------------------------------" 648251881Speter @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 649251881Speter @echo "--------------------------------------------------------------" 650251881Speter @echo "===> ${_kernel}" 651251881Speter mkdir -p ${KRNLOBJDIR} 652251881Speter.if !defined(NO_KERNELCONFIG) 653251881Speter @echo 654251881Speter @echo "--------------------------------------------------------------" 655251881Speter @echo ">>> stage 1: configuring the kernel" 656251881Speter @echo "--------------------------------------------------------------" 657251881Speter cd ${KRNLCONFDIR}; \ 658251881Speter PATH=${TMPPATH} \ 659251881Speter config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 660251881Speter ${KERNCONFDIR}/${_kernel} 661251881Speter.endif 662251881Speter.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN) 663251881Speter @echo 664251881Speter @echo "--------------------------------------------------------------" 665251881Speter @echo ">>> stage 2.1: cleaning up the object tree" 666251881Speter @echo "--------------------------------------------------------------" 667251881Speter cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR} 668251881Speter.endif 669251881Speter @echo 670251881Speter @echo "--------------------------------------------------------------" 671251881Speter @echo ">>> stage 2.2: rebuilding the object tree" 672251881Speter @echo "--------------------------------------------------------------" 673251881Speter cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj 674251881Speter @echo 675251881Speter @echo "--------------------------------------------------------------" 676251881Speter @echo ">>> stage 2.3: build tools" 677251881Speter @echo "--------------------------------------------------------------" 678251881Speter cd ${KRNLOBJDIR}/${_kernel}; \ 679251881Speter MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \ 680251881Speter ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile 681251881Speter# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case. 682251881Speter.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules) 683251881Speter.for target in obj depend all 684251881Speter cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \ 685251881Speter MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \ 686251881Speter ${MAKE} -DNO_CPU_CFLAGS ${target} 687251881Speter.endfor 688251881Speter.endif 689251881Speter.if !defined(NO_KERNELDEPEND) 690251881Speter @echo 691251881Speter @echo "--------------------------------------------------------------" 692251881Speter @echo ">>> stage 3.1: making dependencies" 693251881Speter @echo "--------------------------------------------------------------" 694251881Speter cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ 695251881Speter.endif 696251881Speter @echo 697251881Speter @echo "--------------------------------------------------------------" 698251881Speter @echo ">>> stage 3.2: building everything" 699251881Speter @echo "--------------------------------------------------------------" 700251881Speter cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ 701251881Speter @echo "--------------------------------------------------------------" 702251881Speter @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 703251881Speter @echo "--------------------------------------------------------------" 704251881Speter.endfor 705251881Speter 706251881Speter# 707251881Speter# installkernel, etc. 708251881Speter# 709251881Speter# Install the kernel defined by INSTALLKERNEL 710251881Speter# 711251881Speterinstallkernel installkernel.debug \ 712251881Speterreinstallkernel reinstallkernel.debug: installcheck 713251881Speter.if empty(INSTALLKERNEL) 714251881Speter @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \ 715299742Sdim false 716299742Sdim.endif 717299742Sdim @echo "--------------------------------------------------------------" 718299742Sdim @echo ">>> Installing kernel" 719299742Sdim @echo "--------------------------------------------------------------" 720299742Sdim cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 721299742Sdim ${CROSSENV} PATH=${TMPPATH} \ 722299742Sdim ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} 723299742Sdim 724299742Sdim# 725299742Sdim# doxygen 726299742Sdim# 727299742Sdim# Build the API documentation with doxygen 728299742Sdim# 729299742Sdimdoxygen: 730299742Sdim @if [ ! -x `/usr/bin/which doxygen` ]; then \ 731299742Sdim echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \ 732251881Speter exit 1; \ 733251881Speter fi 734299742Sdim cd ${.CURDIR}/sys/doc/subsys && ${MAKE} obj all 735299742Sdim 736299742Sdim# 737299742Sdim# update 738299742Sdim# 739299742Sdim# Update the source tree, by running cvsup and/or running cvs to update to the 740299742Sdim# latest copy. 741299742Sdim# 742299742Sdimupdate: 743299742Sdim.if defined(SUP_UPDATE) 744299742Sdim @echo "--------------------------------------------------------------" 745299742Sdim @echo ">>> Running ${SUP}" 746299742Sdim @echo "--------------------------------------------------------------" 747299742Sdim.if defined(SUPFILE) 748299742Sdim @${SUP} ${SUPFLAGS} ${SUPFILE} 749299742Sdim.endif 750299742Sdim.if defined(SUPFILE1) 751299742Sdim @${SUP} ${SUPFLAGS} ${SUPFILE1} 752299742Sdim.endif 753299742Sdim.if defined(SUPFILE2) 754299742Sdim @${SUP} ${SUPFLAGS} ${SUPFILE2} 755299742Sdim.endif 756299742Sdim.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE) 757299742Sdim @${SUP} ${SUPFLAGS} ${PORTSSUPFILE} 758299742Sdim.endif 759299742Sdim.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE) 760299742Sdim @${SUP} ${SUPFLAGS} ${DOCSUPFILE} 761299742Sdim.endif 762299742Sdim.endif 763299742Sdim.if defined(CVS_UPDATE) 764299742Sdim @echo "--------------------------------------------------------------" 765299742Sdim @echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT} 766299742Sdim @echo "--------------------------------------------------------------" 767299742Sdim cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS} 768299742Sdim.endif 769299742Sdim 770299742Sdim# 771299742Sdim# ------------------------------------------------------------------------ 772299742Sdim# 773299742Sdim# From here onwards are utility targets used by the 'make world' and 774299742Sdim# related targets. If your 'world' breaks, you may like to try to fix 775299742Sdim# the problem and manually run the following targets to attempt to 776299742Sdim# complete the build. Beware, this is *not* guaranteed to work, you 777299742Sdim# need to have a pretty good grip on the current state of the system 778299742Sdim# to attempt to manually finish it. If in doubt, 'make world' again. 779299742Sdim# 780299742Sdim 781299742Sdim# 782299742Sdim# legacy: Build compatibility shims for the next three targets 783299742Sdim# 784299742Sdimlegacy: 785299742Sdim.if ${BOOTSTRAPPING} < 503000 786299742Sdim @echo "ERROR: Source upgrades from versions prior to 5.3 not supported."; \ 787299742Sdim false 788299742Sdim.endif 789299742Sdim.for _tool in tools/build 790299742Sdim ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \ 791299742Sdim cd ${.CURDIR}/${_tool}; \ 792299742Sdim ${MAKE} DIRPRFX=${_tool}/ obj; \ 793299742Sdim ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \ 794299742Sdim ${MAKE} DIRPRFX=${_tool}/ depend; \ 795299742Sdim ${MAKE} DIRPRFX=${_tool}/ all; \ 796299742Sdim ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 797299742Sdim.endfor 798299742Sdim 799299742Sdim# 800299742Sdim# bootstrap-tools: Build tools needed for compatibility 801299742Sdim# 802299742Sdim.if ${MK_GAMES} != "no" 803299742Sdim_strfile= games/fortune/strfile 804299742Sdim.endif 805299742Sdim 806299742Sdim.if ${MK_CXX} != "no" 807299742Sdim_gperf= gnu/usr.bin/gperf 808299742Sdim.if ${BOOTSTRAPPING} < 700004 809299742Sdim_groff= gnu/usr.bin/groff 810299742Sdim.else 811299742Sdim_groff= gnu/usr.bin/groff/tmac 812299742Sdim.endif 813299742Sdim.endif 814299742Sdim 815299742Sdim.if ${BOOTSTRAPPING} < 600029 816299742Sdim_texinfo= gnu/usr.bin/texinfo 817299742Sdim.endif 818299742Sdim 819299742Sdim.if ${BOOTSTRAPPING} < 600015 820299742Sdim_cap_mkdb= usr.bin/cap_mkdb 821299742Sdim.endif 822299742Sdim 823299742Sdim.if ${BOOTSTRAPPING} < 600018 824299742Sdim_colldef= usr.bin/colldef 825299742Sdim.endif 826299742Sdim 827299742Sdim.if ${BOOTSTRAPPING} < 600017 828299742Sdim_gencat= usr.bin/gencat 829299742Sdim.endif 830299742Sdim 831299742Sdim.if ${BOOTSTRAPPING} < 600016 832299742Sdim_mklocale= usr.bin/mklocale 833299742Sdim.endif 834299742Sdim 835299742Sdim.if ${BOOTSTRAPPING} < 700015 836299742Sdim_gensnmptree= usr.sbin/bsnmpd/gensnmptree 837299742Sdim.endif 838299742Sdim 839299742Sdim.if ${MK_RESCUE} != "no" && \ 840299742Sdim ${BOOTSTRAPPING} < 600008 841299742Sdim_crunchgen= usr.sbin/crunch/crunchgen 842299742Sdim.endif 843299742Sdim 844299742Sdim.if ${BOOTSTRAPPING} < 600020 845299742Sdim_pwd_mkdb= usr.sbin/pwd_mkdb 846299742Sdim.endif 847299742Sdim 848299742Sdimbootstrap-tools: 849299742Sdim.for _tool in \ 850299742Sdim ${_strfile} \ 851299742Sdim ${_gperf} \ 852299742Sdim ${_groff} \ 853299742Sdim ${_texinfo} \ 854299742Sdim ${_cap_mkdb} \ 855299742Sdim ${_colldef} \ 856299742Sdim ${_gencat} \ 857299742Sdim usr.bin/lorder \ 858299742Sdim usr.bin/makewhatis \ 859299742Sdim ${_mklocale} \ 860299742Sdim usr.bin/rpcgen \ 861299742Sdim usr.bin/xinstall \ 862299742Sdim ${_gensnmptree} \ 863299742Sdim usr.sbin/config \ 864299742Sdim ${_crunchgen} \ 865299742Sdim ${_pwd_mkdb} 866299742Sdim ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 867299742Sdim cd ${.CURDIR}/${_tool}; \ 868299742Sdim ${MAKE} DIRPRFX=${_tool}/ obj; \ 869299742Sdim ${MAKE} DIRPRFX=${_tool}/ depend; \ 870299742Sdim ${MAKE} DIRPRFX=${_tool}/ all; \ 871299742Sdim ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 872299742Sdim.endfor 873299742Sdim 874299742Sdim# 875299742Sdim# build-tools: Build special purpose build tools 876299742Sdim# 877299742Sdim.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules) 878299742Sdim_aicasm= sys/modules/aic7xxx/aicasm 879299742Sdim.endif 880299742Sdim 881299742Sdim.if !defined(NO_SHARE) 882299742Sdim_share= share/syscons/scrnmaps 883299742Sdim.endif 884299742Sdim 885299742Sdim.if ${MK_KERBEROS} != "no" 886299742Sdim_kerberos5_tools= kerberos5/tools 887299742Sdim.endif 888299742Sdim 889299742Sdim.if ${MK_RESCUE} != "no" 890299742Sdim_rescue= rescue/rescue 891299742Sdim.endif 892299742Sdim 893299742Sdimbuild-tools: 894299742Sdim.for _tool in \ 895299742Sdim bin/csh \ 896299742Sdim bin/sh \ 897299742Sdim ${_rescue} \ 898299742Sdim lib/libncurses \ 899299742Sdim ${_share} \ 900299742Sdim ${_aicasm} \ 901299742Sdim usr.bin/awk \ 902299742Sdim lib/libmagic \ 903299742Sdim usr.sbin/sysinstall 904299742Sdim ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \ 905299742Sdim cd ${.CURDIR}/${_tool}; \ 906299742Sdim ${MAKE} DIRPRFX=${_tool}/ obj; \ 907299742Sdim ${MAKE} DIRPRFX=${_tool}/ build-tools 908299742Sdim.endfor 909299742Sdim.for _tool in \ 910299742Sdim gnu/usr.bin/cc/cc_tools \ 911299742Sdim ${_kerberos5_tools} 912299742Sdim ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \ 913299742Sdim cd ${.CURDIR}/${_tool}; \ 914299742Sdim ${MAKE} DIRPRFX=${_tool}/ obj; \ 915299742Sdim ${MAKE} DIRPRFX=${_tool}/ depend; \ 916299742Sdim ${MAKE} DIRPRFX=${_tool}/ all 917299742Sdim.endfor 918299742Sdim 919299742Sdim# 920299742Sdim# cross-tools: Build cross-building tools 921299742Sdim# 922.if ${TARGET_ARCH} != ${MACHINE_ARCH} 923.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386" 924_btxld= usr.sbin/btxld 925.endif 926.if ${MK_RESCUE} != "no" || defined(RELEASEDIR) 927_crunchide= usr.sbin/crunch/crunchide 928.endif 929.if ${TARGET_ARCH} == "alpha" 930_elf2exe= usr.sbin/elf2exe 931.endif 932.if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR) 933_kgzip= usr.sbin/kgzip 934.endif 935.endif 936 937cross-tools: 938.for _tool in \ 939 gnu/usr.bin/binutils \ 940 gnu/usr.bin/cc \ 941 usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \ 942 ${_btxld} \ 943 ${_crunchide} \ 944 ${_elf2exe} \ 945 ${_kgzip} 946 ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 947 cd ${.CURDIR}/${_tool}; \ 948 ${MAKE} DIRPRFX=${_tool}/ obj; \ 949 ${MAKE} DIRPRFX=${_tool}/ depend; \ 950 ${MAKE} DIRPRFX=${_tool}/ all; \ 951 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 952.endfor 953 954# 955# hierarchy - ensure that all the needed directories are present 956# 957hierarchy: 958 cd ${.CURDIR}/etc; ${MAKE} distrib-dirs 959 960# 961# libraries - build all libraries, and install them under ${DESTDIR}. 962# 963# The list of libraries with dependents (${_prebuild_libs}) and their 964# interdependencies (__L) are built automatically by the 965# ${.CURDIR}/tools/make_libdeps.sh script. 966# 967libraries: 968 cd ${.CURDIR}; \ 969 ${MAKE} -f Makefile.inc1 _startup_libs; \ 970 ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 971 ${MAKE} -f Makefile.inc1 _generic_libs; 972 973# These dependencies are not automatically generated: 974# 975# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all 976# shared libraries for ELF. 977# 978_startup_libs= gnu/lib/csu gnu/lib/libgcc 979.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf) 980_startup_libs+= lib/csu/${MACHINE_ARCH}-elf 981.else 982_startup_libs+= lib/csu/${MACHINE_ARCH} 983.endif 984 985_prebuild_libs= 986 987_generic_libs= gnu/lib 988 989.if ${MK_IPX} != "no" 990_prebuild_libs+= lib/libipx 991.endif 992 993.if ${MK_KERBEROS} != "no" 994_prebuild_libs+= kerberos5/lib/libasn1 995_prebuild_libs+= kerberos5/lib/libkrb5 996_prebuild_libs+= kerberos5/lib/libroken 997_generic_libs+= kerberos5/lib 998.endif 999 1000_prebuild_libs+= lib/libbz2 lib/libcom_err lib/libcrypt lib/libexpat \ 1001 lib/libkiconv lib/libkvm lib/libmd \ 1002 lib/libncurses lib/libnetgraph lib/libopie lib/libpam \ 1003 lib/libradius \ 1004 lib/libsbuf lib/libtacplus lib/libutil \ 1005 lib/libz lib/msun lib/libgssapi 1006 1007lib/libopie__L lib/libtacplus__L: lib/libmd__L 1008 1009_generic_libs+= lib 1010 1011.if ${MK_CRYPT} != "no" 1012.if ${MK_OPENSSL} != "no" 1013_prebuild_libs+= secure/lib/libcrypto secure/lib/libssl 1014lib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L 1015.if ${MK_OPENSSH} != "no" 1016_prebuild_libs+= secure/lib/libssh 1017secure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L 1018.if ${MK_KERBEROS} != "no" 1019secure/lib/libssh__L: lib/libgssapi__L 1020.endif 1021.endif 1022.endif 1023_generic_libs+= secure/lib 1024.endif 1025 1026.if ${MK_OPENSSL} == "no" 1027lib/libradius__L: lib/libmd__L 1028.endif 1029 1030.if ${MK_NIS} != "no" 1031_prebuild_libs+= lib/libypclnt 1032.endif 1033 1034_generic_libs+= usr.bin/lex/lib 1035 1036.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs} 1037${_lib}__L: .PHONY 1038.if exists(${.CURDIR}/${_lib}) 1039 ${_+_}@${ECHODIR} "===> ${_lib} (depend,all,install)"; \ 1040 cd ${.CURDIR}/${_lib}; \ 1041 ${MAKE} DIRPRFX=${_lib}/ depend; \ 1042 ${MAKE} DIRPRFX=${_lib}/ all; \ 1043 ${MAKE} DIRPRFX=${_lib}/ install 1044.endif 1045.endfor 1046 1047# libpam is special: we need to build static PAM modules before 1048# static PAM library, and dynamic PAM library before dynamic PAM 1049# modules. 1050lib/libpam__L: .PHONY 1051 ${_+_}@${ECHODIR} "===> lib/libpam (depend,all,install)"; \ 1052 cd ${.CURDIR}/lib/libpam; \ 1053 ${MAKE} DIRPRFX=lib/libpam/ depend; \ 1054 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \ 1055 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install 1056 1057_startup_libs: ${_startup_libs:S/$/__L/} 1058_prebuild_libs: ${_prebuild_libs:S/$/__L/} 1059_generic_libs: ${_generic_libs:S/$/__L/} 1060 1061.for __target in all clean cleandepend cleandir depend includes obj 1062.for entry in ${SUBDIR} 1063${entry}.${__target}__D: .PHONY 1064 ${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 1065 ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \ 1066 edir=${entry}.${MACHINE_ARCH}; \ 1067 cd ${.CURDIR}/$${edir}; \ 1068 else \ 1069 ${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \ 1070 edir=${entry}; \ 1071 cd ${.CURDIR}/$${edir}; \ 1072 fi; \ 1073 ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 1074.endfor 1075par-${__target}: ${SUBDIR:S/$/.${__target}__D/} 1076.endfor 1077 1078.include <bsd.subdir.mk> 1079 1080.if make(delete-old) || make(delete-old-libs) || make(check-old) 1081 1082# 1083# check for / delete old files section 1084# 1085 1086.include "ObsoleteFiles.inc" 1087 1088OLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \ 1089else you can not start such an application. Consult UPDATING for more \ 1090information regarding how to cope with the removal/revision bump of a \ 1091specific library." 1092 1093.if !defined(BATCH_DELETE_OLD_FILES) 1094RM_I=-i 1095.else 1096RM_I=-v 1097.endif 1098 1099delete-old-files: 1100 @echo ">>> Removing old files (only deletes safe to delete libs)" 1101.for file in ${OLD_FILES} 1102# Ask for every old file if the user really wants to remove it. 1103# It's annoying, but better safe than sorry. 1104 @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 1105 rm ${RM_I} "${DESTDIR}/${file}" || true; \ 1106 if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\ 1107 echo "Removing schg flag on ${DESTDIR}/${file}"; \ 1108 chflags noschg "${DESTDIR}/${file}"; \ 1109 rm ${RM_I} "${DESTDIR}/${file}"; \ 1110 fi; \ 1111 fi 1112.endfor 1113# Remove catpages without corresponding manpages. 1114 @3<&0; \ 1115 find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1116 sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1117 while read catpage; do \ 1118 read manpage; \ 1119 if [ ! -e "$${manpage}" ]; then \ 1120 rm ${RM_I} $${catpage} <&3 ; \ 1121 fi; \ 1122 done 1123 @echo ">>> Old files removed" 1124 1125check-old-files: 1126 @echo ">>> Checking for old files" 1127.for file in ${OLD_FILES} 1128 @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 1129 echo "${DESTDIR}/${file}"; \ 1130 fi 1131.endfor 1132# Check for catpages without corresponding manpages. 1133 @find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1134 sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1135 while read catpage; do \ 1136 read manpage; \ 1137 if [ ! -e "$${manpage}" ]; then \ 1138 echo $${catpage} ; \ 1139 fi; \ 1140 done 1141 1142delete-old-libs: 1143 @echo ">>> Removing old libraries" 1144 @echo "${OLD_LIBS_MESSAGE}" | fmt 1145.for file in ${OLD_LIBS} 1146 @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 1147 rm ${RM_I} "${DESTDIR}/${file}" || true; \ 1148 if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\ 1149 echo "Removing schg flag on ${DESTDIR}/${file}"; \ 1150 chflags noschg "${DESTDIR}/${file}"; \ 1151 rm ${RM_I} "${DESTDIR}/${file}"; \ 1152 fi; \ 1153 fi 1154.endfor 1155 @echo ">>> Old libraries removed" 1156 1157check-old-libs: 1158 @echo ">>> Checking for old libraries" 1159.for file in ${OLD_LIBS} 1160 @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 1161 echo "${DESTDIR}/${file}"; \ 1162 fi 1163.endfor 1164 1165delete-old-dirs: 1166 @echo ">>> Removing old directories" 1167.for dir in ${OLD_DIRS} 1168# Don't fail if an old directory isn't empty. 1169 @if [ -d "${DESTDIR}/${dir}" ]; then \ 1170 rmdir -v "${DESTDIR}/${dir}" || true; \ 1171 else \ 1172 if [ -L "${DESTDIR}/${dir}" ]; then \ 1173 echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \ 1174 fi; \ 1175 fi 1176.endfor 1177 @echo ">>> Old directories removed" 1178 1179check-old-dirs: 1180 @echo ">>> Checking for old directories" 1181.for dir in ${OLD_DIRS} 1182 @if [ -d "${DESTDIR}/${dir}" ]; then \ 1183 echo "${DESTDIR}/${dir}"; \ 1184 else \ 1185 if [ -L "${DESTDIR}/${dir}" ]; then \ 1186 echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \ 1187 fi; \ 1188 fi 1189.endfor 1190 1191delete-old: delete-old-files delete-old-dirs 1192 @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1193 1194check-old: check-old-files check-old-libs check-old-dirs 1195 @echo "To remove old files and directories run '${MAKE} delete-old'." 1196 @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1197 1198.endif 1199 1200# 1201# showconfig - show build configuration. 1202# 1203showconfig: 1204 @${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort 1205