Makefile.libcompat revision 163099
1212904Sdim# 2193323Sed# $FreeBSD: head/Makefile.inc1 163099 2006-10-07 18:34:08Z ru $ 3193323Sed# 4193323Sed# Make command line options: 5193323Sed# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 6193323Sed# -DNO_CLEAN do not clean at all 7193323Sed# -DNO_SHARE do not go into share subdir 8193323Sed# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 9193323Sed# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 10193323Sed# -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel 11193323Sed# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 12193323Sed# -DNO_DOCUPDATE do not update doc in ${MAKE} update 13193323Sed# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 14193323Sed# TARGET="machine" to crossbuild world for a different machine type 15193323Sed 16193323Sed# 17193323Sed# The intended user-driven targets are: 18193323Sed# buildworld - rebuild *everything*, including glue to help do upgrades 19193323Sed# installworld- install everything built by "buildworld" 20193323Sed# doxygen - build API documentation of the kernel 21193323Sed# update - convenient way to update your source tree (eg: cvsup/cvs) 22193323Sed# 23193323Sed# Standard targets (not defined here) are documented in the makefiles in 24193323Sed# /usr/share/mk. These include: 25193323Sed# obj depend all install clean cleandepend cleanobj 26252723Sdim 27252723Sdim.include <bsd.own.mk> 28263509Sdim 29252723Sdim# We must do share/info early so that installation of info `dir' 30252723Sdim# entries works correctly. Do it first since it is less likely to 31212904Sdim# grow dependencies on include and lib than vice versa. 32252723Sdim# 33193323Sed# We must do lib and libexec before bin, because if installworld 34252723Sdim# installs a new /bin/sh, the 'make' command will *immediately* 35252723Sdim# use that new version. And the new (dynamically-linked) /bin/sh 36235633Sdim# will expect to find appropriate libraries in /lib and /libexec. 37198090Srdivacky# 38193323Sed# We must do etc last for install/distribute to work. 39252723Sdim# 40252723SdimSUBDIR= share/info include lib libexec bin 41252723Sdim.if ${MK_GAMES} != "no" 42223017SdimSUBDIR+=games 43193323Sed.endif 44198090SrdivackySUBDIR+=gnu 45198090Srdivacky.if ${MK_KERBEROS} != "no" 46252723SdimSUBDIR+=kerberos5 47252723Sdim.endif 48252723Sdim.if ${MK_RESCUE} != "no" 49193323SedSUBDIR+=rescue 50193323Sed.endif 51193323SedSUBDIR+=sbin 52199511Srdivacky.if ${MK_CRYPT} != "no" 53193323SedSUBDIR+=secure 54218893Sdim.endif 55199511Srdivacky.if !defined(NO_SHARE) 56218893SdimSUBDIR+=share 57193323Sed.endif 58199511SrdivackySUBDIR+=sys usr.bin usr.sbin etc 59193323Sed 60193323Sed# These are last, since it is nice to at least get the base system 61193323Sed# rebuilt before you do them. 62199511Srdivacky.for _DIR in ${LOCAL_DIRS} 63218893Sdim.if exists(${.CURDIR}/${_DIR}/Makefile) 64193323SedSUBDIR+= ${_DIR} 65198090Srdivacky.endif 66193323Sed.endfor 67193323Sed 68224145Sdim.if defined(SUBDIR_OVERRIDE) 69193323SedSUBDIR= ${SUBDIR_OVERRIDE} 70193323Sed.endif 71193323Sed 72193323Sed.if defined(NOCLEAN) 73193323SedNO_CLEAN= ${NOCLEAN} 74193323Sed.endif 75235633Sdim.if defined(NO_CLEANDIR) 76193323SedCLEANDIR= clean cleandepend 77193323Sed.else 78245431SdimCLEANDIR= cleandir 79193323Sed.endif 80226890Sdim 81245431SdimCVS?= cvs 82226890SdimCVSFLAGS?= -A -P -d -I! 83193323SedSUP?= /usr/bin/csup 84193323SedSUPFLAGS?= -g -L 2 85198090Srdivacky.if defined(SUPHOST) 86235633SdimSUPFLAGS+= -h ${SUPHOST} 87198090Srdivacky.endif 88193323Sed 89218893SdimMAKEOBJDIRPREFIX?= /usr/obj 90218893Sdim.if !defined(OSRELDATE) 91193323Sed.if exists(/usr/include/osreldate.h) 92193323SedOSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 93193323Sed /usr/include/osreldate.h 94193323Sed.else 95245431SdimOSRELDATE= 0 96245431Sdim.endif 97193323Sed.endif 98193323Sed 99193323Sed# Guess machine architecture from machine type, and vice versa. 100193323Sed.if !defined(TARGET_ARCH) && defined(TARGET) 101193323SedTARGET_ARCH= ${TARGET:S/pc98/i386/} 102193323Sed.elif !defined(TARGET) && defined(TARGET_ARCH) && \ 103193323Sed ${TARGET_ARCH} != ${MACHINE_ARCH} 104193323SedTARGET= ${TARGET_ARCH} 105193323Sed.endif 106193323Sed# Otherwise, default to current machine type and architecture. 107193323SedTARGET?= ${MACHINE} 108193323SedTARGET_ARCH?= ${MACHINE_ARCH} 109193323Sed 110193323SedKNOWN_ARCHES?= amd64 arm i386 i386/pc98 ia64 powerpc sparc64 111193323Sed.if ${TARGET} == ${TARGET_ARCH} 112193323Sed_t= ${TARGET} 113193323Sed.else 114193323Sed_t= ${TARGET_ARCH}/${TARGET} 115193323Sed.endif 116193323Sed.for _t in ${_t} 117193323Sed.if empty(KNOWN_ARCHES:M${_t}) 118193323Sed.error Unknown target ${TARGET_ARCH}:${TARGET}. 119199511Srdivacky.endif 120199511Srdivacky.endfor 121199511Srdivacky 122199511Srdivacky.if ${TARGET} == ${MACHINE} 123245431SdimTARGET_CPUTYPE?=${CPUTYPE} 124245431Sdim.else 125245431SdimTARGET_CPUTYPE?= 126193323Sed.endif 127193323Sed 128193323Sed.if !empty(TARGET_CPUTYPE) 129193323Sed_TARGET_CPUTYPE=${TARGET_CPUTYPE} 130193323Sed.else 131193323Sed_TARGET_CPUTYPE=dummy 132193323Sed.endif 133193323Sed_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \ 134193323Sed -f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE 135193323Sed.if ${_CPUTYPE} != ${_TARGET_CPUTYPE} 136193323Sed.error CPUTYPE global should be set with ?=. 137193323Sed.endif 138193323Sed.if make(buildworld) 139193323SedBUILD_ARCH!= uname -p 140193323Sed.if ${MACHINE_ARCH} != ${BUILD_ARCH} 141193323Sed.error To cross-build, set TARGET_ARCH. 142193323Sed.endif 143193323Sed.endif 144193323Sed.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING) 145193323SedOBJTREE= ${MAKEOBJDIRPREFIX} 146193323Sed.else 147199511SrdivackyOBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET} 148199511Srdivacky.endif 149199511SrdivackyWORLDTMP= ${OBJTREE}${.CURDIR}/tmp 150199511Srdivacky# /usr/games added for fortune which depend on strfile 151199511SrdivackyBPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games 152199511SrdivackyXPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games 153199511SrdivackySTRICTTMPPATH= ${BPATH}:${XPATH} 154199511SrdivackyTMPPATH= ${STRICTTMPPATH}:${PATH} 155199511Srdivacky 156199511SrdivackyINSTALLTMP!= /usr/bin/mktemp -d -u -t install 157199511Srdivacky 158199511Srdivacky# 159199511Srdivacky# Building a world goes through the following stages 160199511Srdivacky# 161199511Srdivacky# 1. legacy stage [BMAKE] 162199511Srdivacky# This stage is responsible for creating compatibility 163199511Srdivacky# shims that are needed by the bootstrap-tools, 164199511Srdivacky# build-tools and cross-tools stages. 165199511Srdivacky# 1. bootstrap-tools stage [BMAKE] 166199511Srdivacky# This stage is responsible for creating programs that 167199511Srdivacky# are needed for backward compatibility reasons. They 168199511Srdivacky# are not built as cross-tools. 169199511Srdivacky# 2. build-tools stage [TMAKE] 170199511Srdivacky# This stage is responsible for creating the object 171199511Srdivacky# tree and building any tools that are needed during 172199511Srdivacky# the build process. 173199511Srdivacky# 3. cross-tools stage [XMAKE] 174199511Srdivacky# This stage is responsible for creating any tools that 175193323Sed# are needed for cross-builds. A cross-compiler is one 176193323Sed# of them. 177193323Sed# 4. world stage [WMAKE] 178193323Sed# This stage actually builds the world. 179193323Sed# 5. install stage (optional) [IMAKE] 180193323Sed# This stage installs a previously built world. 181193323Sed# 182193323Sed 183193323SedBOOTSTRAPPING?= 0 184193323Sed 185198090Srdivacky# Common environment for world related stages 186193323SedCROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 187193323Sed MACHINE_ARCH=${TARGET_ARCH} \ 188235633Sdim MACHINE=${TARGET} \ 189245431Sdim CPUTYPE=${TARGET_CPUTYPE} \ 190235633Sdim GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \ 191235633Sdim GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \ 192199511Srdivacky GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac 193199511Srdivacky 194218893Sdim# bootstrap-tools stage 195218893SdimBMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ 196218893Sdim PATH=${BPATH}:${PATH} \ 197199511Srdivacky WORLDTMP=${WORLDTMP} \ 198193323Sed MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" 199193323SedBMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \ 200245431Sdim ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 201193323Sed DESTDIR= \ 202193323Sed BOOTSTRAPPING=${OSRELDATE} \ 203193323Sed -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \ 204245431Sdim -DWITHOUT_NLS -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \ 205193323Sed -DNO_CPU_CFLAGS -DNO_WARNS 206193323Sed 207193323Sed# build-tools stage 208193323SedTMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \ 209193323Sed ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 210193323Sed TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 211193323Sed DESTDIR= \ 212245431Sdim BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS 213245431Sdim 214245431Sdim# cross-tools stage 215245431SdimXMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \ 216263509Sdim TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 217263509Sdim -DWITHOUT_FORTRAN -DWITHOUT_GDB 218263509Sdim 219263509Sdim# world stage 220193323SedWMAKEENV= ${CROSSENV} \ 221245431Sdim _SHLIBDIRPREFIX=${WORLDTMP} \ 222245431Sdim INSTALL="sh ${.CURDIR}/tools/install.sh" \ 223235633Sdim PATH=${TMPPATH} 224193323SedWMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP} 225202375Srdivacky 226193323Sed.if ${TARGET_ARCH} == "amd64" 227199511Srdivacky# 32 bit world 228199511SrdivackyLIB32TMP= ${OBJTREE}${.CURDIR}/lib32 229199511Srdivacky 230212904Sdim.if empty(TARGET_CPUTYPE) 231245431SdimLIB32CPUTYPE= k8 232263509Sdim.else 233263509SdimLIB32CPUTYPE= ${TARGET_CPUTYPE} 234263509Sdim.endif 235263509SdimLIB32PREFLAGS= -m32 -march=${LIB32CPUTYPE} -mfancy-math-387 -DCOMPAT_32BIT 236263509SdimLIB32POSTFLAGS= -I${LIB32TMP}/usr/include \ 237263509Sdim -L${LIB32TMP}/usr/lib32 \ 238193323Sed -B${LIB32TMP}/usr/lib32 239199511SrdivackyLIB32CC= ${LIB32PREFLAGS} \ 240199511Srdivacky ${LIB32POSTFLAGS} 241199511SrdivackyLIB32CXX= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/c++/3.4 \ 242218893Sdim ${LIB32POSTFLAGS} 243199511SrdivackyLIB32OBJC= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/objc \ 244218893Sdim ${LIB32POSTFLAGS} 245218893Sdim 246218893Sdim# Yes, the flags are redundant. 247218893SdimLIB32MAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \ 248199511Srdivacky _SHLIBDIRPREFIX=${LIB32TMP} \ 249199511Srdivacky MACHINE=i386 \ 250199511Srdivacky MACHINE_ARCH=i386 \ 251199511Srdivacky INSTALL="sh ${.CURDIR}/tools/install.sh" \ 252199511Srdivacky PATH=${TMPPATH} \ 253199511Srdivacky CC="${CC} ${LIB32CC}" \ 254199511Srdivacky CXX="${CXX} ${LIB32CXX}" \ 255218893Sdim OBJC="${OBJC} ${LIB32OBJC}" \ 256199511Srdivacky LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \ 257199511Srdivacky AS="${AS} --32" \ 258199511Srdivacky LIBDIR=/usr/lib32 \ 259199511Srdivacky SHLIBDIR=/usr/lib32 260193323Sed 261193323SedLIB32MAKE= ${LIB32MAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \ 262199511Srdivacky -DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_INFO \ 263212904Sdim -DWITHOUT_HTML 264218893SdimLIB32IMAKE= ${LIB32MAKE:NINSTALL=*} -DNO_INCS 265193323Sed.endif 266218893Sdim 267218893Sdim# install stage 268193323Sed.if empty(.MAKEFLAGS:M-n) 269193323SedIMAKEENV= ${CROSSENV} \ 270218893Sdim PATH=${STRICTTMPPATH}:${INSTALLTMP} 271218893Sdim.else 272218893SdimIMAKEENV= ${CROSSENV} \ 273199481Srdivacky PATH=${TMPPATH}:${INSTALLTMP} 274199481Srdivacky.endif 275198090SrdivackyIMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 276198090Srdivacky 277193323Sed# kernel stage 278198090SrdivackyKMAKEENV= ${WMAKEENV} 279263509SdimKMAKE= ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} 280198090Srdivacky 281198090Srdivacky# 282198090Srdivacky# buildworld 283198090Srdivacky# 284198090Srdivacky# Attempt to rebuild the entire system, with reasonable chance of 285198090Srdivacky# success, regardless of how old your existing system is. 286193323Sed# 287198090Srdivacky_worldtmp: 288193323Sed.if ${.CURDIR:C/[^,]//g} != "" 289193323Sed# The m4 build of sendmail files doesn't like it if ',' is used 290193323Sed# anywhere in the path of it's files. 291193323Sed @echo 292193323Sed @echo "*** Error: path to source tree contains a comma ','" 293193323Sed @echo 294224145Sdim false 295193323Sed.endif 296193323Sed @echo 297193323Sed @echo "--------------------------------------------------------------" 298212904Sdim @echo ">>> Rebuilding the temporary build tree" 299212904Sdim @echo "--------------------------------------------------------------" 300218893Sdim.if !defined(NO_CLEAN) 301218893Sdim rm -rf ${WORLDTMP} 302199511Srdivacky.if ${TARGET_ARCH} == "amd64" 303212904Sdim rm -rf ${LIB32TMP} 304212904Sdim.endif 305212904Sdim.else 306212904Sdim rm -rf ${WORLDTMP}/legacy/usr/include 307218893Sdim# XXX - These two can depend on any header file. 308218893Sdim rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 309199511Srdivacky rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 310199511Srdivacky.endif 311193323Sed.for _dir in \ 312193323Sed usr/bin usr/games usr/include/c++/3.4 usr/include/sys usr/lib \ 313193323Sed usr/libexec usr/sbin usr/share/dict \ 314193323Sed usr/share/groff_font/devX100 \ 315245431Sdim usr/share/groff_font/devX100-12 \ 316245431Sdim usr/share/groff_font/devX75 \ 317252723Sdim usr/share/groff_font/devX75-12 \ 318252723Sdim usr/share/groff_font/devascii \ 319252723Sdim usr/share/groff_font/devcp1047 \ 320235633Sdim usr/share/groff_font/devdvi \ 321235633Sdim usr/share/groff_font/devhtml \ 322218893Sdim usr/share/groff_font/devkoi8-r \ 323218893Sdim usr/share/groff_font/devlatin1 \ 324218893Sdim usr/share/groff_font/devlbp \ 325218893Sdim usr/share/groff_font/devlj4 \ 326218893Sdim usr/share/groff_font/devps \ 327252723Sdim usr/share/groff_font/devutf8 \ 328252723Sdim usr/share/tmac/mdoc usr/share/tmac/mm 329252723Sdim mkdir -p ${WORLDTMP}/legacy/${_dir} 330252723Sdim.endfor 331252723Sdim.for _dir in \ 332252723Sdim lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \ 333252723Sdim usr/libexec usr/sbin usr/share/misc \ 334252723Sdim usr/share/snmp/defs usr/share/snmp/mibs 335252723Sdim mkdir -p ${WORLDTMP}/${_dir} 336245431Sdim.endfor 337245431Sdim mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 338245431Sdim -p ${WORLDTMP}/usr/include >/dev/null 339245431Sdim ln -sf ${.CURDIR}/sys ${WORLDTMP} 340245431Sdim.if ${MK_BIND_LIBS} != "no" 341245431Sdim mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \ 342245431Sdim -p ${WORLDTMP}/usr/include >/dev/null 343245431Sdim.endif 344193323Sed_legacy: 345193323Sed @echo 346193323Sed @echo "--------------------------------------------------------------" 347193323Sed @echo ">>> stage 1.1: legacy release compatibility shims" 348252723Sdim @echo "--------------------------------------------------------------" 349252723Sdim ${_+_}cd ${.CURDIR}; ${BMAKE} legacy 350252723Sdim_bootstrap-tools: 351193323Sed @echo 352245431Sdim @echo "--------------------------------------------------------------" 353245431Sdim @echo ">>> stage 1.2: bootstrap tools" 354252723Sdim @echo "--------------------------------------------------------------" 355252723Sdim ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools 356193323Sed_cleanobj: 357193323Sed.if !defined(NO_CLEAN) 358193323Sed @echo 359193323Sed @echo "--------------------------------------------------------------" 360198090Srdivacky @echo ">>> stage 2.1: cleaning up the object tree" 361198090Srdivacky @echo "--------------------------------------------------------------" 362198090Srdivacky ${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 363207618Srdivacky.if ${TARGET_ARCH} == "amd64" 364193323Sed rm -rf ${OBJTREE}/lib32 365198090Srdivacky.endif 366198090Srdivacky.endif 367198090Srdivacky_obj: 368198090Srdivacky @echo 369198090Srdivacky @echo "--------------------------------------------------------------" 370235633Sdim @echo ">>> stage 2.2: rebuilding the object tree" 371198090Srdivacky @echo "--------------------------------------------------------------" 372198090Srdivacky ${_+_}cd ${.CURDIR}; ${WMAKE} par-obj 373193323Sed_build-tools: 374193323Sed @echo 375193323Sed @echo "--------------------------------------------------------------" 376193323Sed @echo ">>> stage 2.3: build tools" 377198090Srdivacky @echo "--------------------------------------------------------------" 378193323Sed ${_+_}cd ${.CURDIR}; ${TMAKE} build-tools 379198090Srdivacky_cross-tools: 380218893Sdim @echo 381218893Sdim @echo "--------------------------------------------------------------" 382218893Sdim @echo ">>> stage 3: cross tools" 383218893Sdim @echo "--------------------------------------------------------------" 384218893Sdim ${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools 385193323Sed_includes: 386245431Sdim @echo 387193323Sed @echo "--------------------------------------------------------------" 388193323Sed @echo ">>> stage 4.1: building includes" 389198090Srdivacky @echo "--------------------------------------------------------------" 390193323Sed ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 391193323Sed_libraries: 392245431Sdim @echo 393245431Sdim @echo "--------------------------------------------------------------" 394245431Sdim @echo ">>> stage 4.2: building libraries" 395218893Sdim @echo "--------------------------------------------------------------" 396218893Sdim ${_+_}cd ${.CURDIR}; \ 397218893Sdim ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ 398218893Sdim -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE libraries 399193323Sed_depend: 400193323Sed @echo 401198090Srdivacky @echo "--------------------------------------------------------------" 402193323Sed @echo ">>> stage 4.3: make dependencies" 403193323Sed @echo "--------------------------------------------------------------" 404193323Sed ${_+_}cd ${.CURDIR}; ${WMAKE} par-depend 405218893Sdimeverything: 406218893Sdim @echo 407198090Srdivacky @echo "--------------------------------------------------------------" 408193323Sed @echo ">>> stage 4.4: building everything" 409193323Sed @echo "--------------------------------------------------------------" 410198090Srdivacky ${_+_}cd ${.CURDIR}; ${WMAKE} par-all 411198090Srdivacky.if ${TARGET_ARCH} == "amd64" 412193323Sedbuild32: 413193323Sed @echo 414193323Sed @echo "--------------------------------------------------------------" 415193323Sed @echo ">>> stage 5.1: building 32 bit shim libraries" 416193323Sed @echo "--------------------------------------------------------------" 417193323Sed.for _dir in \ 418193323Sed lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \ 419245431Sdim usr/libexec usr/sbin usr/share/misc \ 420245431Sdim usr/share/snmp/defs usr/share/snmp/mibs 421245431Sdim mkdir -p ${LIB32TMP}/${_dir} 422263509Sdim.endfor 423245431Sdim mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 424245431Sdim -p ${LIB32TMP}/usr/include >/dev/null 425245431Sdim mkdir -p ${WORLDTMP} 426245431Sdim ln -sf ${.CURDIR}/sys ${WORLDTMP} 427245431Sdim.if ${MK_KERBEROS} != "no" 428263509Sdim.for _t in obj depend all 429245431Sdim cd ${.CURDIR}/kerberos5/tools; \ 430245431Sdim MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t} 431263509Sdim.endfor 432263509Sdim.endif 433263509Sdim.for _t in obj includes 434263509Sdim cd ${.CURDIR}/include; \ 435263509Sdim ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 436263509Sdim cd ${.CURDIR}/lib; \ 437263509Sdim ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 438263509Sdim cd ${.CURDIR}/gnu/lib; \ 439263509Sdim ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 440263509Sdim.if ${MK_CRYPT} != "no" 441263509Sdim cd ${.CURDIR}/secure/lib; \ 442263509Sdim ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 443198090Srdivacky.endif 444193323Sed.if ${MK_KERBEROS} != "no" 445193323Sed cd ${.CURDIR}/kerberos5/lib; \ 446193323Sed ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 447193323Sed.endif 448193323Sed.endfor 449193323Sed.for _dir in usr.bin/lex/lib 450193323Sed cd ${.CURDIR}/${_dir}; \ 451193323Sed ${LIB32MAKE} DESTDIR=${LIB32TMP} obj 452193323Sed.endfor 453198090Srdivacky.for _dir in lib/libncurses lib/libmagic 454218893Sdim cd ${.CURDIR}/${_dir}; \ 455245431Sdim MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= build-tools 456198090Srdivacky.endfor 457198090Srdivacky cd ${.CURDIR}; \ 458198090Srdivacky ${LIB32MAKE} -f Makefile.inc1 DESTDIR=${LIB32TMP} libraries 459198090Srdivacky.for _t in obj depend all 460245431Sdim cd ${.CURDIR}/libexec/rtld-elf; \ 461198090Srdivacky PROG=ld-elf32.so.1 ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 462245431Sdim.endfor 463245431Sdim 464198090Srdivackydistribute32 install32: 465198090Srdivacky.if make(distribute32) 466235633Sdim mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32 # XXX add to mtree 467245431Sdim.else 468235633Sdim mkdir -p ${DESTDIR}/usr/lib32 # XXX add to mtree 469245431Sdim.endif 470245431Sdim cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 471245431Sdim cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 472245431Sdim.if ${MK_CRYPT} != "no" 473245431Sdim cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 474245431Sdim.endif 475245431Sdim cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//} 476245431Sdim.endif 477245431Sdim 478245431Sdim 479245431SdimWMAKE_TGTS= 480245431Sdim.if !defined(SUBDIR_OVERRIDE) 481245431SdimWMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools 482245431Sdim.endif 483245431SdimWMAKE_TGTS+= _cleanobj _obj _build-tools 484252723Sdim.if !defined(SUBDIR_OVERRIDE) 485252723SdimWMAKE_TGTS+= _cross-tools 486252723Sdim.endif 487263509SdimWMAKE_TGTS+= _includes _libraries _depend everything 488263509Sdim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 489193323SedWMAKE_TGTS+= build32 490193323Sed.endif 491199481Srdivacky 492207618Srdivackybuildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 493207618Srdivacky.ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 494199481Srdivacky 495199481Srdivackybuildworld_prologue: 496199481Srdivacky @echo "--------------------------------------------------------------" 497199481Srdivacky @echo ">>> World build started on `LC_ALL=C date`" 498199481Srdivacky @echo "--------------------------------------------------------------" 499199481Srdivacky 500199481Srdivackybuildworld_epilogue: 501199481Srdivacky @echo 502199481Srdivacky @echo "--------------------------------------------------------------" 503226890Sdim @echo ">>> World build completed on `LC_ALL=C date`" 504226890Sdim @echo "--------------------------------------------------------------" 505235633Sdim 506235633Sdim# 507235633Sdim# We need to have this as a target because the indirection between Makefile 508235633Sdim# and Makefile.inc1 causes the correct PATH to be used, rather than a 509235633Sdim# modification of the current environment's PATH. In addition, we need 510235633Sdim# to quote multiword values. 511235633Sdim# 512235633Sdimbuildenvvars: 513235633Sdim @echo ${WMAKEENV:Q} 514235633Sdim 515235633Sdimbuildenv: 516235633Sdim @echo Entering world for ${TARGET_ARCH}:${TARGET} 517235633Sdim @cd ${.CURDIR} && env ${WMAKEENV} sh || true 518235633Sdim 519218893SdimTOOLCHAIN_TGTS= ${WMAKE_TGTS:N_depend:Neverything:Nbuild32} 520218893Sdimtoolchain: ${TOOLCHAIN_TGTS} 521218893Sdimkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries} 522218893Sdim 523218893Sdim# 524218893Sdim# installcheck 525245431Sdim# 526245431Sdim# Checks to be sure system is ready for installworld/installkernel. 527245431Sdim# 528245431Sdiminstallcheck: 529245431Sdim 530245431Sdim# 531245431Sdim# Require DESTDIR to be set if installing for a different architecture. 532218893Sdim# 533223017Sdim.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE} 534245431Sdim.if !make(distributeworld) 535245431Sdiminstallcheck: installcheck_DESTDIR 536245431Sdiminstallcheck_DESTDIR: 537245431Sdim.if !defined(DESTDIR) || empty(DESTDIR) 538245431Sdim @echo "ERROR: Please set DESTDIR!"; \ 539245431Sdim false 540245431Sdim.endif 541245431Sdim.endif 542245431Sdim.endif 543245431Sdim 544245431Sdim# 545245431Sdim# Check for missing UIDs/GIDs. 546223017Sdim# 547223017SdimCHECK_UIDS= 548223017SdimCHECK_GIDS= audit 549223017Sdim.if ${MK_SENDMAIL} != "no" 550223017SdimCHECK_UIDS+= smmsp 551223017SdimCHECK_GIDS+= smmsp 552218893Sdim.endif 553218893Sdim.if ${MK_PF} != "no" 554198090SrdivackyCHECK_UIDS+= proxy 555198090SrdivackyCHECK_GIDS+= proxy authpf 556198090Srdivacky.endif 557198090Srdivackyinstallcheck: installcheck_UGID 558198090Srdivackyinstallcheck_UGID: 559198090Srdivacky.for uid in ${CHECK_UIDS} 560198090Srdivacky @if ! `id -u ${uid} >/dev/null 2>&1`; then \ 561198090Srdivacky echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \ 562198090Srdivacky false; \ 563198090Srdivacky fi 564198090Srdivacky.endfor 565198090Srdivacky.for gid in ${CHECK_GIDS} 566198090Srdivacky @if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \ 567198090Srdivacky echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \ 568198090Srdivacky false; \ 569218893Sdim fi 570198090Srdivacky.endfor 571198090Srdivacky 572198090Srdivacky# 573218893Sdim# distributeworld 574198090Srdivacky# 575198090Srdivacky# Distributes everything compiled by a `buildworld'. 576218893Sdim# 577198090Srdivacky# installworld 578198090Srdivacky# 579198090Srdivacky# Installs everything compiled by a 'buildworld'. 580245431Sdim# 581245431Sdimdistributeworld installworld: installcheck 582198090Srdivacky mkdir -p ${INSTALLTMP} 583198090Srdivacky for prog in [ awk cap_mkdb cat chflags chmod chown \ 584198090Srdivacky date echo egrep find grep install-info \ 585198090Srdivacky ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \ 586198090Srdivacky test true uname wc zic; do \ 587198090Srdivacky cp `which $$prog` ${INSTALLTMP}; \ 588198090Srdivacky done 589198090Srdivacky ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//} 590198090Srdivacky rm -rf ${INSTALLTMP} 591218893Sdim 592198090Srdivacky# 593198090Srdivacky# reinstall 594218893Sdim# 595198090Srdivacky# If you have a build server, you can NFS mount the source and obj directories 596198090Srdivacky# and do a 'make reinstall' on the *client* to install new binaries from the 597198090Srdivacky# most recent server build. 598198090Srdivacky# 599198090Srdivackyreinstall: 600198090Srdivacky @echo "--------------------------------------------------------------" 601245431Sdim @echo ">>> Making hierarchy" 602198090Srdivacky @echo "--------------------------------------------------------------" 603198090Srdivacky ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy 604245431Sdim @echo 605198090Srdivacky @echo "--------------------------------------------------------------" 606198090Srdivacky @echo ">>> Installing everything" 607198090Srdivacky @echo "--------------------------------------------------------------" 608198090Srdivacky ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 609198090Srdivacky.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 610198090Srdivacky ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32 611198090Srdivacky.endif 612198090Srdivacky 613198090Srdivackyredistribute: 614252723Sdim @echo "--------------------------------------------------------------" 615245431Sdim @echo ">>> Distributing everything" 616245431Sdim @echo "--------------------------------------------------------------" 617245431Sdim ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 618245431Sdim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 619245431Sdim ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 DISTRIBUTION=lib32 620245431Sdim.endif 621245431Sdim 622245431Sdimdistrib-dirs distribution: 623198090Srdivacky cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET} 624198090Srdivacky 625199481Srdivacky# 626198090Srdivacky# buildkernel and installkernel 627198090Srdivacky# 628198090Srdivacky# Which kernels to build and/or install is specified by setting 629198090Srdivacky# KERNCONF. If not defined a GENERIC kernel is built/installed. 630198090Srdivacky# Only the existing (depending TARGET) config files are used 631198090Srdivacky# for building kernels and only the first of these is designated 632245431Sdim# as the one being installed. 633198090Srdivacky# 634198090Srdivacky# Note that we have to use TARGET instead of TARGET_ARCH when 635245431Sdim# we're in kernel-land. Since only TARGET_ARCH is (expected) to 636198090Srdivacky# be set to cross-build, we have to make sure TARGET is set 637198090Srdivacky# properly. 638198090Srdivacky 639198090Srdivacky.if !defined(KERNCONF) && defined(KERNEL) 640198090SrdivackyKERNCONF= ${KERNEL} 641198090SrdivackyKERNWARN= 642245431Sdim.else 643245431SdimKERNCONF?= GENERIC 644245431Sdim.endif 645245431SdimINSTKERNNAME?= kernel 646245431Sdim 647245431SdimKERNSRCDIR?= ${.CURDIR}/sys 648245431SdimKRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf 649245431SdimKRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} 650245431SdimKERNCONFDIR?= ${KRNLCONFDIR} 651198090Srdivacky 652198090SrdivackyBUILDKERNELS= 653199481SrdivackyINSTALLKERNEL= 654198090Srdivacky.for _kernel in ${KERNCONF} 655198090Srdivacky.if exists(${KERNCONFDIR}/${_kernel}) 656198090SrdivackyBUILDKERNELS+= ${_kernel} 657198090Srdivacky.if empty(INSTALLKERNEL) 658198090SrdivackyINSTALLKERNEL= ${_kernel} 659198090Srdivacky.endif 660245431Sdim.endif 661198090Srdivacky.endfor 662198090Srdivacky 663245431Sdim# 664198090Srdivacky# buildkernel 665198090Srdivacky# 666198090Srdivacky# Builds all kernels defined by BUILDKERNELS. 667198090Srdivacky# 668198090Srdivackybuildkernel: 669198090Srdivacky.if empty(BUILDKERNELS) 670198090Srdivacky @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \ 671198090Srdivacky false 672198090Srdivacky.endif 673198090Srdivacky.if defined(KERNWARN) 674198090Srdivacky @echo "--------------------------------------------------------------" 675198090Srdivacky @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 676193323Sed @echo "--------------------------------------------------------------" 677207618Srdivacky @sleep 3 678193323Sed.endif 679193323Sed @echo 680193323Sed.for _kernel in ${BUILDKERNELS} 681193323Sed @echo "--------------------------------------------------------------" 682193323Sed @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 683263509Sdim @echo "--------------------------------------------------------------" 684263509Sdim @echo "===> ${_kernel}" 685245431Sdim mkdir -p ${KRNLOBJDIR} 686193323Sed.if !defined(NO_KERNELCONFIG) 687198090Srdivacky @echo 688198090Srdivacky @echo "--------------------------------------------------------------" 689198090Srdivacky @echo ">>> stage 1: configuring the kernel" 690198090Srdivacky @echo "--------------------------------------------------------------" 691198090Srdivacky cd ${KRNLCONFDIR}; \ 692198090Srdivacky PATH=${TMPPATH} \ 693263509Sdim config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 694263509Sdim ${KERNCONFDIR}/${_kernel} 695245431Sdim.endif 696198090Srdivacky.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN) 697198090Srdivacky @echo 698193323Sed @echo "--------------------------------------------------------------" 699193323Sed @echo ">>> stage 2.1: cleaning up the object tree" 700218893Sdim @echo "--------------------------------------------------------------" 701218893Sdim cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR} 702218893Sdim.endif 703193323Sed @echo 704193323Sed @echo "--------------------------------------------------------------" 705245431Sdim @echo ">>> stage 2.2: rebuilding the object tree" 706245431Sdim @echo "--------------------------------------------------------------" 707245431Sdim cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj 708245431Sdim @echo 709245431Sdim @echo "--------------------------------------------------------------" 710245431Sdim @echo ">>> stage 2.3: build tools" 711245431Sdim @echo "--------------------------------------------------------------" 712245431Sdim cd ${KRNLOBJDIR}/${_kernel}; \ 713245431Sdim MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \ 714245431Sdim ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile 715245431Sdim# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case. 716245431Sdim.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules) 717245431Sdim.for target in obj depend all 718245431Sdim cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \ 719245431Sdim MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \ 720245431Sdim ${MAKE} -DNO_CPU_CFLAGS ${target} 721245431Sdim.endfor 722245431Sdim.endif 723245431Sdim.if !defined(NO_KERNELDEPEND) 724245431Sdim @echo 725245431Sdim @echo "--------------------------------------------------------------" 726245431Sdim @echo ">>> stage 3.1: making dependencies" 727245431Sdim @echo "--------------------------------------------------------------" 728245431Sdim cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ 729245431Sdim.endif 730245431Sdim @echo 731245431Sdim @echo "--------------------------------------------------------------" 732245431Sdim @echo ">>> stage 3.2: building everything" 733245431Sdim @echo "--------------------------------------------------------------" 734245431Sdim cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ 735245431Sdim @echo "--------------------------------------------------------------" 736245431Sdim @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 737245431Sdim @echo "--------------------------------------------------------------" 738245431Sdim.endfor 739245431Sdim 740245431Sdim# 741245431Sdim# installkernel, etc. 742245431Sdim# 743245431Sdim# Install the kernel defined by INSTALLKERNEL 744245431Sdim# 745245431Sdiminstallkernel installkernel.debug \ 746245431Sdimreinstallkernel reinstallkernel.debug: installcheck 747245431Sdim.if empty(INSTALLKERNEL) 748245431Sdim @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \ 749245431Sdim false 750245431Sdim.endif 751245431Sdim @echo "--------------------------------------------------------------" 752245431Sdim @echo ">>> Installing kernel" 753245431Sdim @echo "--------------------------------------------------------------" 754245431Sdim cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 755245431Sdim ${CROSSENV} PATH=${TMPPATH} \ 756245431Sdim ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} 757245431Sdim 758245431Sdim# 759245431Sdim# doxygen 760245431Sdim# 761245431Sdim# Build the API documentation with doxygen 762245431Sdim# 763245431Sdimdoxygen: 764245431Sdim @if [ ! -x `/usr/bin/which doxygen` ]; then \ 765245431Sdim echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \ 766245431Sdim exit 1; \ 767245431Sdim fi 768245431Sdim cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all 769245431Sdim 770245431Sdim# 771245431Sdim# update 772245431Sdim# 773198090Srdivacky# Update the source tree, by running cvsup and/or running cvs to update to the 774224145Sdim# latest copy. 775224145Sdim# 776193323Sedupdate: 777224145Sdim.if defined(SUP_UPDATE) 778263509Sdim @echo "--------------------------------------------------------------" 779193323Sed @echo ">>> Running ${SUP}" 780198090Srdivacky @echo "--------------------------------------------------------------" 781245431Sdim.if defined(SUPFILE) 782245431Sdim @${SUP} ${SUPFLAGS} ${SUPFILE} 783245431Sdim.endif 784245431Sdim.if defined(SUPFILE1) 785198090Srdivacky @${SUP} ${SUPFLAGS} ${SUPFILE1} 786198090Srdivacky.endif 787198090Srdivacky.if defined(SUPFILE2) 788235633Sdim @${SUP} ${SUPFLAGS} ${SUPFILE2} 789198090Srdivacky.endif 790235633Sdim.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE) 791198090Srdivacky @${SUP} ${SUPFLAGS} ${PORTSSUPFILE} 792193323Sed.endif 793212904Sdim.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE) 794212904Sdim @${SUP} ${SUPFLAGS} ${DOCSUPFILE} 795235633Sdim.endif 796212904Sdim.endif 797212904Sdim.if defined(CVS_UPDATE) 798212904Sdim @echo "--------------------------------------------------------------" 799212904Sdim @echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT} 800212904Sdim @echo "--------------------------------------------------------------" 801235633Sdim cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS} 802235633Sdim.endif 803235633Sdim 804212904Sdim# 805212904Sdim# ------------------------------------------------------------------------ 806212904Sdim# 807212904Sdim# From here onwards are utility targets used by the 'make world' and 808212904Sdim# related targets. If your 'world' breaks, you may like to try to fix 809212904Sdim# the problem and manually run the following targets to attempt to 810226890Sdim# complete the build. Beware, this is *not* guaranteed to work, you 811226890Sdim# need to have a pretty good grip on the current state of the system 812226890Sdim# to attempt to manually finish it. If in doubt, 'make world' again. 813193323Sed# 814193323Sed 815193323Sed# 816198090Srdivacky# legacy: Build compatibility shims for the next three targets 817193323Sed# 818224145Sdimlegacy: 819193323Sed.if ${BOOTSTRAPPING} < 503000 820224145Sdim @echo "ERROR: Source upgrades from versions prior to 5.3 not supported."; \ 821224145Sdim false 822245431Sdim.endif 823193323Sed.for _tool in tools/build 824193323Sed ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \ 825245431Sdim cd ${.CURDIR}/${_tool}; \ 826193323Sed ${MAKE} DIRPRFX=${_tool}/ obj; \ 827193323Sed ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \ 828193323Sed ${MAKE} DIRPRFX=${_tool}/ depend; \ 829224145Sdim ${MAKE} DIRPRFX=${_tool}/ all; \ 830245431Sdim ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 831218893Sdim.endfor 832218893Sdim 833224145Sdim# 834235633Sdim# bootstrap-tools: Build tools needed for compatibility 835224145Sdim# 836263509Sdim.if ${MK_GAMES} != "no" 837198090Srdivacky_strfile= games/fortune/strfile 838198090Srdivacky.endif 839198090Srdivacky 840245431Sdim.if ${MK_CXX} != "no" 841245431Sdim_gperf= gnu/usr.bin/gperf 842245431Sdim.if ${BOOTSTRAPPING} < 700004 843245431Sdim_groff= gnu/usr.bin/groff 844245431Sdim.else 845245431Sdim_groff= gnu/usr.bin/groff/tmac 846245431Sdim.endif 847245431Sdim.endif 848245431Sdim 849245431Sdim.if ${BOOTSTRAPPING} < 600029 850245431Sdim_texinfo= gnu/usr.bin/texinfo 851198090Srdivacky.endif 852201360Srdivacky 853235633Sdim.if ${BOOTSTRAPPING} < 600015 854198090Srdivacky_cap_mkdb= usr.bin/cap_mkdb 855193323Sed.endif 856193323Sed 857193323Sed.if ${BOOTSTRAPPING} < 600018 858193323Sed_colldef= usr.bin/colldef 859193323Sed.endif 860193323Sed 861193323Sed.if ${BOOTSTRAPPING} < 600017 862235633Sdim_gencat= usr.bin/gencat 863235633Sdim.endif 864193323Sed 865245431Sdim.if ${BOOTSTRAPPING} < 600016 866245431Sdim_mklocale= usr.bin/mklocale 867245431Sdim.endif 868245431Sdim 869245431Sdim.if ${BOOTSTRAPPING} < 700015 870245431Sdim_gensnmptree= usr.sbin/bsnmpd/gensnmptree 871245431Sdim.endif 872245431Sdim 873245431Sdim.if ${MK_RESCUE} != "no" && \ 874245431Sdim ${BOOTSTRAPPING} < 600008 875245431Sdim_crunchgen= usr.sbin/crunch/crunchgen 876245431Sdim.endif 877245431Sdim 878245431Sdim.if ${BOOTSTRAPPING} < 600020 879245431Sdim_pwd_mkdb= usr.sbin/pwd_mkdb 880245431Sdim.endif 881245431Sdim 882245431Sdimbootstrap-tools: 883245431Sdim.for _tool in \ 884245431Sdim ${_strfile} \ 885245431Sdim ${_gperf} \ 886198090Srdivacky ${_groff} \ 887245431Sdim ${_texinfo} \ 888245431Sdim ${_cap_mkdb} \ 889245431Sdim ${_colldef} \ 890245431Sdim ${_gencat} \ 891245431Sdim usr.bin/lorder \ 892245431Sdim usr.bin/makewhatis \ 893245431Sdim ${_mklocale} \ 894193323Sed usr.bin/rpcgen \ 895224145Sdim usr.bin/xinstall \ 896193323Sed ${_gensnmptree} \ 897193323Sed usr.sbin/config \ 898193323Sed ${_crunchgen} \ 899193323Sed ${_pwd_mkdb} 900226890Sdim ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 901226890Sdim cd ${.CURDIR}/${_tool}; \ 902193323Sed ${MAKE} DIRPRFX=${_tool}/ obj; \ 903245431Sdim ${MAKE} DIRPRFX=${_tool}/ depend; \ 904245431Sdim ${MAKE} DIRPRFX=${_tool}/ all; \ 905226890Sdim ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 906193323Sed.endfor 907226890Sdim 908193323Sed# 909193323Sed# build-tools: Build special purpose build tools 910193323Sed# 911193323Sed.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules) 912193323Sed_aicasm= sys/modules/aic7xxx/aicasm 913193323Sed.endif 914193323Sed 915226890Sdim.if !defined(NO_SHARE) 916226890Sdim_share= share/syscons/scrnmaps 917208599Srdivacky.endif 918193323Sed 919208599Srdivacky.if ${MK_KERBEROS} != "no" 920208599Srdivacky_kerberos5_tools= kerberos5/tools 921193323Sed.endif 922193323Sed 923226890Sdim.if ${MK_RESCUE} != "no" 924226890Sdim_rescue= rescue/rescue 925226890Sdim.endif 926226890Sdim 927226890Sdimbuild-tools: 928226890Sdim.for _tool in \ 929193323Sed bin/csh \ 930245431Sdim bin/sh \ 931245431Sdim ${_rescue} \ 932226890Sdim lib/libncurses \ 933226890Sdim ${_share} \ 934226890Sdim ${_aicasm} \ 935226890Sdim usr.bin/awk \ 936226890Sdim lib/libmagic \ 937226890Sdim usr.sbin/sysinstall 938226890Sdim ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \ 939226890Sdim cd ${.CURDIR}/${_tool}; \ 940226890Sdim ${MAKE} DIRPRFX=${_tool}/ obj; \ 941226890Sdim ${MAKE} DIRPRFX=${_tool}/ build-tools 942226890Sdim.endfor 943226890Sdim.for _tool in \ 944226890Sdim gnu/usr.bin/cc/cc_tools \ 945223017Sdim ${_kerberos5_tools} 946193323Sed ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \ 947193323Sed cd ${.CURDIR}/${_tool}; \ 948193323Sed ${MAKE} DIRPRFX=${_tool}/ obj; \ 949193323Sed ${MAKE} DIRPRFX=${_tool}/ depend; \ 950193323Sed ${MAKE} DIRPRFX=${_tool}/ all 951193323Sed.endfor 952193323Sed 953193323Sed# 954193323Sed# cross-tools: Build cross-building tools 955198090Srdivacky# 956235633Sdim.if ${TARGET_ARCH} != ${MACHINE_ARCH} 957235633Sdim.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386" 958235633Sdim_btxld= usr.sbin/btxld 959235633Sdim.endif 960198090Srdivacky.if ${MK_RESCUE} != "no" || defined(RELEASEDIR) 961203954Srdivacky_crunchide= usr.sbin/crunch/crunchide 962203954Srdivacky.endif 963198090Srdivacky.if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR) 964198090Srdivacky_kgzip= usr.sbin/kgzip 965218893Sdim.endif 966218893Sdim.endif 967218893Sdim 968218893Sdimcross-tools: 969218893Sdim.for _tool in \ 970235633Sdim gnu/usr.bin/binutils \ 971218893Sdim gnu/usr.bin/cc \ 972218893Sdim usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \ 973218893Sdim ${_btxld} \ 974235633Sdim ${_crunchide} \ 975218893Sdim ${_kgzip} 976218893Sdim ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 977218893Sdim cd ${.CURDIR}/${_tool}; \ 978218893Sdim ${MAKE} DIRPRFX=${_tool}/ obj; \ 979218893Sdim ${MAKE} DIRPRFX=${_tool}/ depend; \ 980218893Sdim ${MAKE} DIRPRFX=${_tool}/ all; \ 981193323Sed ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 982193323Sed.endfor 983193323Sed 984193323Sed# 985193323Sed# hierarchy - ensure that all the needed directories are present 986235633Sdim# 987235633Sdimhierarchy: 988235633Sdim cd ${.CURDIR}/etc; ${MAKE} distrib-dirs 989235633Sdim 990235633Sdim# 991235633Sdim# libraries - build all libraries, and install them under ${DESTDIR}. 992235633Sdim# 993235633Sdim# The list of libraries with dependents (${_prebuild_libs}) and their 994245431Sdim# interdependencies (__L) are built automatically by the 995235633Sdim# ${.CURDIR}/tools/make_libdeps.sh script. 996235633Sdim# 997235633Sdimlibraries: 998235633Sdim cd ${.CURDIR}; \ 999235633Sdim ${MAKE} -f Makefile.inc1 _startup_libs; \ 1000235633Sdim ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 1001235633Sdim ${MAKE} -f Makefile.inc1 _generic_libs; 1002235633Sdim 1003235633Sdim# These dependencies are not automatically generated: 1004235633Sdim# 1005235633Sdim# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all 1006245431Sdim# shared libraries for ELF. 1007245431Sdim# 1008245431Sdim_startup_libs= gnu/lib/csu gnu/lib/libgcc 1009245431Sdim.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf) 1010245431Sdim_startup_libs+= lib/csu/${MACHINE_ARCH}-elf 1011263509Sdim.else 1012263509Sdim_startup_libs+= lib/csu/${MACHINE_ARCH} 1013245431Sdim.endif 1014263509Sdim 1015245431Sdim_prebuild_libs= 1016263509Sdim 1017245431Sdim_generic_libs= gnu/lib 1018245431Sdim 1019245431Sdim.if ${MK_IPX} != "no" 1020263509Sdim_prebuild_libs+= lib/libipx 1021245431Sdim.endif 1022245431Sdim 1023235633Sdim.if ${MK_KERBEROS} != "no" 1024245431Sdim_prebuild_libs+= kerberos5/lib/libasn1 1025245431Sdim_prebuild_libs+= kerberos5/lib/libkrb5 1026245431Sdim_prebuild_libs+= kerberos5/lib/libroken 1027245431Sdim_prebuild_libs+= lib/libgssapi 1028245431Sdim_generic_libs+= kerberos5/lib 1029245431Sdim.endif 1030263509Sdim 1031245431Sdim_prebuild_libs+= lib/libbz2 lib/libcom_err lib/libcrypt lib/libexpat \ 1032263509Sdim lib/libkiconv lib/libkvm lib/libmd \ 1033245431Sdim lib/libncurses lib/libopie lib/libpam \ 1034245431Sdim lib/libradius \ 1035245431Sdim lib/libsbuf lib/libtacplus lib/libutil \ 1036245431Sdim lib/libz lib/msun 1037245431Sdim 1038245431Sdimlib/libopie__L lib/libtacplus__L: lib/libmd__L 1039245431Sdim 1040245431Sdim_generic_libs+= lib 1041245431Sdim 1042245431Sdim.if ${MK_CRYPT} != "no" 1043235633Sdim.if ${MK_OPENSSL} != "no" 1044235633Sdim_prebuild_libs+= secure/lib/libcrypto secure/lib/libssl 1045235633Sdimlib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L 1046235633Sdim.if ${MK_OPENSSH} != "no" 1047235633Sdim_prebuild_libs+= secure/lib/libssh 1048235633Sdimsecure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L 1049235633Sdim.if ${MK_KERBEROS} != "no" 1050235633Sdimsecure/lib/libssh__L: lib/libgssapi__L kerberos5/lib/libkrb5__L \ 1051235633Sdim kerberos5/lib/libasn1__L lib/libcom_err__L lib/libmd__L \ 1052235633Sdim kerberos5/lib/libroken__L 1053245431Sdim.endif 1054245431Sdim.endif 1055235633Sdim.endif 1056235633Sdim_generic_libs+= secure/lib 1057235633Sdim.endif 1058235633Sdim 1059235633Sdim.if ${MK_OPENSSL} == "no" 1060235633Sdimlib/libradius__L: lib/libmd__L 1061235633Sdim.endif 1062235633Sdim 1063235633Sdim.if ${MK_NIS} != "no" 1064235633Sdim_prebuild_libs+= lib/libypclnt 1065235633Sdim.endif 1066235633Sdim 1067235633Sdim_generic_libs+= usr.bin/lex/lib 1068235633Sdim 1069235633Sdim.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs} 1070235633Sdim${_lib}__L: .PHONY 1071235633Sdim.if exists(${.CURDIR}/${_lib}) 1072235633Sdim ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \ 1073235633Sdim cd ${.CURDIR}/${_lib}; \ 1074235633Sdim ${MAKE} DIRPRFX=${_lib}/ obj; \ 1075235633Sdim ${MAKE} DIRPRFX=${_lib}/ depend; \ 1076235633Sdim ${MAKE} DIRPRFX=${_lib}/ all; \ 1077235633Sdim ${MAKE} DIRPRFX=${_lib}/ install 1078235633Sdim.endif 1079235633Sdim.endfor 1080235633Sdim 1081263509Sdim# libpam is special: we need to build static PAM modules before 1082235633Sdim# static PAM library, and dynamic PAM library before dynamic PAM 1083235633Sdim# modules. 1084245431Sdimlib/libpam__L: .PHONY 1085245431Sdim ${_+_}@${ECHODIR} "===> lib/libpam (obj,depend,all,install)"; \ 1086235633Sdim cd ${.CURDIR}/lib/libpam; \ 1087235633Sdim ${MAKE} DIRPRFX=lib/libpam/ obj; \ 1088235633Sdim ${MAKE} DIRPRFX=lib/libpam/ depend; \ 1089235633Sdim ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \ 1090245431Sdim ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install 1091235633Sdim 1092235633Sdim_startup_libs: ${_startup_libs:S/$/__L/} 1093235633Sdim_prebuild_libs: ${_prebuild_libs:S/$/__L/} 1094235633Sdim_generic_libs: ${_generic_libs:S/$/__L/} 1095235633Sdim 1096263509Sdim.for __target in all clean cleandepend cleandir depend includes obj 1097235633Sdim.for entry in ${SUBDIR} 1098235633Sdim${entry}.${__target}__D: .PHONY 1099263509Sdim ${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 1100263509Sdim ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \ 1101263509Sdim edir=${entry}.${MACHINE_ARCH}; \ 1102263509Sdim cd ${.CURDIR}/$${edir}; \ 1103263509Sdim else \ 1104263509Sdim ${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \ 1105263509Sdim edir=${entry}; \ 1106263509Sdim cd ${.CURDIR}/$${edir}; \ 1107235633Sdim fi; \ 1108235633Sdim ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 1109235633Sdim.endfor 1110235633Sdimpar-${__target}: ${SUBDIR:S/$/.${__target}__D/} 1111235633Sdim.endfor 1112235633Sdim 1113235633Sdim.include <bsd.subdir.mk> 1114198090Srdivacky 1115245431Sdim.if make(delete-old) || make(delete-old-libs) || make(check-old) 1116245431Sdim 1117245431Sdim# 1118245431Sdim# check for / delete old files section 1119245431Sdim# 1120245431Sdim 1121245431Sdim.include "ObsoleteFiles.inc" 1122193323Sed 1123193323SedOLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \ 1124212904Sdimelse you can not start such an application. Consult UPDATING for more \ 1125235633Sdiminformation regarding how to cope with the removal/revision bump of a \ 1126235633Sdimspecific library." 1127235633Sdim 1128235633Sdim.if !defined(BATCH_DELETE_OLD_FILES) 1129235633SdimRM_I=-i 1130235633Sdim.else 1131235633SdimRM_I=-v 1132235633Sdim.endif 1133212904Sdim 1134212904Sdimdelete-old-files: 1135193323Sed @echo ">>> Removing old files (only deletes safe to delete libs)" 1136193323Sed.for file in ${OLD_FILES} 1137193323Sed# Ask for every old file if the user really wants to remove it. 1138198090Srdivacky# It's annoying, but better safe than sorry. 1139193323Sed @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 1140193323Sed rm ${RM_I} "${DESTDIR}/${file}" || true; \ 1141218893Sdim if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\ 1142218893Sdim echo "Removing schg flag on ${DESTDIR}/${file}"; \ 1143218893Sdim chflags noschg "${DESTDIR}/${file}"; \ 1144218893Sdim rm ${RM_I} "${DESTDIR}/${file}"; \ 1145218893Sdim fi; \ 1146218893Sdim fi 1147218893Sdim.endfor 1148218893Sdim# Remove catpages without corresponding manpages. 1149218893Sdim @3<&0; \ 1150218893Sdim find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1151193323Sed sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1152193323Sed while read catpage; do \ 1153193323Sed read manpage; \ 1154193323Sed if [ ! -e "$${manpage}" ]; then \ 1155193323Sed rm ${RM_I} $${catpage} <&3 ; \ 1156202375Srdivacky fi; \ 1157193323Sed done 1158193323Sed @echo ">>> Old files removed" 1159235633Sdim 1160193323Sedcheck-old-files: 1161193323Sed @echo ">>> Checking for old files" 1162193323Sed.for file in ${OLD_FILES} 1163193323Sed @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 1164193323Sed echo "${DESTDIR}/${file}"; \ 1165193323Sed fi 1166193323Sed.endfor 1167193323Sed# Check for catpages without corresponding manpages. 1168193323Sed @find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1169193323Sed sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1170193323Sed while read catpage; do \ 1171193323Sed read manpage; \ 1172193323Sed if [ ! -e "$${manpage}" ]; then \ 1173193323Sed echo $${catpage} ; \ 1174193323Sed fi; \ 1175193323Sed done 1176193323Sed 1177193323Seddelete-old-libs: 1178193323Sed @echo ">>> Removing old libraries" 1179193323Sed @echo "${OLD_LIBS_MESSAGE}" | fmt 1180193323Sed.for file in ${OLD_LIBS} 1181193323Sed @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 1182193323Sed rm ${RM_I} "${DESTDIR}/${file}" || true; \ 1183193323Sed if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\ 1184193323Sed echo "Removing schg flag on ${DESTDIR}/${file}"; \ 1185193323Sed chflags noschg "${DESTDIR}/${file}"; \ 1186193323Sed rm ${RM_I} "${DESTDIR}/${file}"; \ 1187193323Sed fi; \ 1188193323Sed fi 1189193323Sed.endfor 1190193323Sed @echo ">>> Old libraries removed" 1191199511Srdivacky 1192199511Srdivackycheck-old-libs: 1193202375Srdivacky @echo ">>> Checking for old libraries" 1194199511Srdivacky.for file in ${OLD_LIBS} 1195199511Srdivacky @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 1196235633Sdim echo "${DESTDIR}/${file}"; \ 1197199511Srdivacky fi 1198199511Srdivacky.endfor 1199199511Srdivacky 1200199511Srdivackydelete-old-dirs: 1201199511Srdivacky @echo ">>> Removing old directories" 1202199511Srdivacky.for dir in ${OLD_DIRS} 1203199511Srdivacky# Don't fail if an old directory isn't empty. 1204199511Srdivacky @if [ -d "${DESTDIR}/${dir}" ]; then \ 1205199511Srdivacky rmdir -v "${DESTDIR}/${dir}" || true; \ 1206199511Srdivacky else \ 1207199511Srdivacky if [ -L "${DESTDIR}/${dir}" ]; then \ 1208199511Srdivacky echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \ 1209199511Srdivacky fi; \ 1210199511Srdivacky fi 1211199511Srdivacky.endfor 1212199511Srdivacky @echo ">>> Old directories removed" 1213199511Srdivacky 1214199511Srdivackycheck-old-dirs: 1215199511Srdivacky @echo ">>> Checking for old directories" 1216199511Srdivacky.for dir in ${OLD_DIRS} 1217199511Srdivacky @if [ -d "${DESTDIR}/${dir}" ]; then \ 1218199511Srdivacky echo "${DESTDIR}/${dir}"; \ 1219199511Srdivacky else \ 1220199511Srdivacky if [ -L "${DESTDIR}/${dir}" ]; then \ 1221199511Srdivacky echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \ 1222199511Srdivacky fi; \ 1223199511Srdivacky fi 1224199511Srdivacky.endfor 1225199511Srdivacky 1226193323Seddelete-old: delete-old-files delete-old-dirs 1227202375Srdivacky @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1228198090Srdivacky 1229235633Sdimcheck-old: check-old-files check-old-libs check-old-dirs 1230193323Sed @echo "To remove old files and directories run '${MAKE} delete-old'." 1231203954Srdivacky @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1232235633Sdim 1233193323Sed.endif 1234193323Sed 1235193323Sed# 1236193323Sed# showconfig - show build configuration. 1237193323Sed# 1238193323Sedshowconfig: 1239193323Sed @${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort 1240193323Sed