Makefile.inc1 revision 163148
189857Sobrien# 289857Sobrien# $FreeBSD: head/Makefile.inc1 163148 2006-10-09 04:58:45Z kmacy $ 389857Sobrien# 489857Sobrien# Make command line options: 589857Sobrien# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 689857Sobrien# -DNO_CLEAN do not clean at all 789857Sobrien# -DNO_SHARE do not go into share subdir 889857Sobrien# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 989857Sobrien# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 1089857Sobrien# -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel 1189857Sobrien# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 1289857Sobrien# -DNO_DOCUPDATE do not update doc in ${MAKE} update 1389857Sobrien# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 1489857Sobrien# TARGET="machine" to crossbuild world for a different machine type 1589857Sobrien 1689857Sobrien# 1789857Sobrien# The intended user-driven targets are: 1889857Sobrien# buildworld - rebuild *everything*, including glue to help do upgrades 1989857Sobrien# installworld- install everything built by "buildworld" 2089857Sobrien# doxygen - build API documentation of the kernel 2189857Sobrien# update - convenient way to update your source tree (eg: cvsup/cvs) 2289857Sobrien# 2389857Sobrien# Standard targets (not defined here) are documented in the makefiles in 2489857Sobrien# /usr/share/mk. These include: 2589857Sobrien# obj depend all install clean cleandepend cleanobj 2689857Sobrien 2789857Sobrien.include <bsd.own.mk> 2889857Sobrien 2989857Sobrien# We must do share/info early so that installation of info `dir' 3089857Sobrien# entries works correctly. Do it first since it is less likely to 3189857Sobrien# grow dependencies on include and lib than vice versa. 3289857Sobrien# 3389857Sobrien# We must do lib and libexec before bin, because if installworld 3489857Sobrien# installs a new /bin/sh, the 'make' command will *immediately* 3589857Sobrien# use that new version. And the new (dynamically-linked) /bin/sh 3689857Sobrien# will expect to find appropriate libraries in /lib and /libexec. 3789857Sobrien# 3889857Sobrien# We must do etc last for install/distribute to work. 3989857Sobrien# 4089857SobrienSUBDIR= share/info include lib libexec bin 4189857Sobrien.if ${MK_GAMES} != "no" 4289857SobrienSUBDIR+=games 4389857Sobrien.endif 4489857SobrienSUBDIR+=gnu 4589857Sobrien.if ${MK_KERBEROS} != "no" 4689857SobrienSUBDIR+=kerberos5 4789857Sobrien.endif 4889857Sobrien.if ${MK_RESCUE} != "no" 4989857SobrienSUBDIR+=rescue 5089857Sobrien.endif 5189857SobrienSUBDIR+=sbin 5289857Sobrien.if ${MK_CRYPT} != "no" 5389857SobrienSUBDIR+=secure 5489857Sobrien.endif 5589857Sobrien.if !defined(NO_SHARE) 5689857SobrienSUBDIR+=share 5789857Sobrien.endif 5889857SobrienSUBDIR+=sys usr.bin usr.sbin etc 5989857Sobrien 6089857Sobrien# These are last, since it is nice to at least get the base system 6189857Sobrien# rebuilt before you do them. 6289857Sobrien.for _DIR in ${LOCAL_DIRS} 6389857Sobrien.if exists(${.CURDIR}/${_DIR}/Makefile) 6489857SobrienSUBDIR+= ${_DIR} 6589857Sobrien.endif 6689857Sobrien.endfor 6789857Sobrien 6889857Sobrien.if defined(SUBDIR_OVERRIDE) 6989857SobrienSUBDIR= ${SUBDIR_OVERRIDE} 7089857Sobrien.endif 7189857Sobrien 7289857Sobrien.if defined(NOCLEAN) 7389857SobrienNO_CLEAN= ${NOCLEAN} 7489857Sobrien.endif 7589857Sobrien.if defined(NO_CLEANDIR) 7689857SobrienCLEANDIR= clean cleandepend 7789857Sobrien.else 7889857SobrienCLEANDIR= cleandir 7989857Sobrien.endif 8089857Sobrien 8189857SobrienCVS?= cvs 8289857SobrienCVSFLAGS?= -A -P -d -I! 8389857SobrienSUP?= /usr/bin/csup 8489857SobrienSUPFLAGS?= -g -L 2 8589857Sobrien.if defined(SUPHOST) 8689857SobrienSUPFLAGS+= -h ${SUPHOST} 8789857Sobrien.endif 8889857Sobrien 8989857SobrienMAKEOBJDIRPREFIX?= /usr/obj 9089857Sobrien.if !defined(OSRELDATE) 9189857Sobrien.if exists(/usr/include/osreldate.h) 9289857SobrienOSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 9389857Sobrien /usr/include/osreldate.h 9489857Sobrien.else 9589857SobrienOSRELDATE= 0 9689857Sobrien.endif 9789857Sobrien.endif 9889857Sobrien 9989857Sobrien# Guess machine architecture from machine type, and vice versa. 10089857Sobrien.if !defined(TARGET_ARCH) && defined(TARGET) 10189857SobrienTARGET_ARCH= ${TARGET:S/pc98/i386/} 10289857Sobrien.elif !defined(TARGET) && defined(TARGET_ARCH) && \ 10389857Sobrien ${TARGET_ARCH} != ${MACHINE_ARCH} 10489857SobrienTARGET= ${TARGET_ARCH} 10589857Sobrien.endif 10689857Sobrien# Otherwise, default to current machine type and architecture. 10789857SobrienTARGET?= ${MACHINE} 10889857SobrienTARGET_ARCH?= ${MACHINE_ARCH} 10989857Sobrien 11089857SobrienKNOWN_ARCHES?= amd64 arm i386 i386/pc98 ia64 powerpc sparc64 sparc64/sun4v 11189857Sobrien.if ${TARGET} == ${TARGET_ARCH} 11289857Sobrien_t= ${TARGET} 11389857Sobrien.else 11489857Sobrien_t= ${TARGET_ARCH}/${TARGET} 11589857Sobrien.endif 11689857Sobrien.for _t in ${_t} 11789857Sobrien.if empty(KNOWN_ARCHES:M${_t}) 11889857Sobrien.error Unknown target ${TARGET_ARCH}:${TARGET}. 11989857Sobrien.endif 12089857Sobrien.endfor 12189857Sobrien 12289857Sobrien.if ${TARGET} == ${MACHINE} 12389857SobrienTARGET_CPUTYPE?=${CPUTYPE} 12489857Sobrien.else 12589857SobrienTARGET_CPUTYPE?= 12689857Sobrien.endif 12789857Sobrien 12889857Sobrien.if !empty(TARGET_CPUTYPE) 12989857Sobrien_TARGET_CPUTYPE=${TARGET_CPUTYPE} 13089857Sobrien.else 13189857Sobrien_TARGET_CPUTYPE=dummy 13289857Sobrien.endif 13389857Sobrien_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \ 13489857Sobrien -f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE 13589857Sobrien.if ${_CPUTYPE} != ${_TARGET_CPUTYPE} 13689857Sobrien.error CPUTYPE global should be set with ?=. 13789857Sobrien.endif 13889857Sobrien.if make(buildworld) 13989857SobrienBUILD_ARCH!= uname -p 14089857Sobrien.if ${MACHINE_ARCH} != ${BUILD_ARCH} 14189857Sobrien.error To cross-build, set TARGET_ARCH. 14289857Sobrien.endif 14389857Sobrien.endif 14489857Sobrien.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING) 14589857SobrienOBJTREE= ${MAKEOBJDIRPREFIX} 14689857Sobrien.else 14789857SobrienOBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET} 14889857Sobrien.endif 14989857SobrienWORLDTMP= ${OBJTREE}${.CURDIR}/tmp 15089857Sobrien# /usr/games added for fortune which depend on strfile 15189857SobrienBPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games 15289857SobrienXPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games 15389857SobrienSTRICTTMPPATH= ${BPATH}:${XPATH} 15489857SobrienTMPPATH= ${STRICTTMPPATH}:${PATH} 15589857Sobrien 15689857SobrienINSTALLTMP!= /usr/bin/mktemp -d -u -t install 15789857Sobrien 15889857Sobrien# 15989857Sobrien# Building a world goes through the following stages 16089857Sobrien# 16189857Sobrien# 1. legacy stage [BMAKE] 16289857Sobrien# This stage is responsible for creating compatibility 16389857Sobrien# shims that are needed by the bootstrap-tools, 16489857Sobrien# build-tools and cross-tools stages. 16589857Sobrien# 1. bootstrap-tools stage [BMAKE] 16689857Sobrien# This stage is responsible for creating programs that 16789857Sobrien# are needed for backward compatibility reasons. They 16889857Sobrien# are not built as cross-tools. 16989857Sobrien# 2. build-tools stage [TMAKE] 17089857Sobrien# This stage is responsible for creating the object 17189857Sobrien# tree and building any tools that are needed during 17289857Sobrien# the build process. 17389857Sobrien# 3. cross-tools stage [XMAKE] 17489857Sobrien# This stage is responsible for creating any tools that 17589857Sobrien# are needed for cross-builds. A cross-compiler is one 17689857Sobrien# of them. 17789857Sobrien# 4. world stage [WMAKE] 17889857Sobrien# This stage actually builds the world. 17989857Sobrien# 5. install stage (optional) [IMAKE] 18089857Sobrien# This stage installs a previously built world. 18189857Sobrien# 18289857Sobrien 18389857SobrienBOOTSTRAPPING?= 0 18489857Sobrien 18589857Sobrien# Common environment for world related stages 18689857SobrienCROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 18789857Sobrien MACHINE_ARCH=${TARGET_ARCH} \ 18889857Sobrien MACHINE=${TARGET} \ 18989857Sobrien CPUTYPE=${TARGET_CPUTYPE} \ 19089857Sobrien GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \ 19189857Sobrien GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \ 19289857Sobrien GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac 19389857Sobrien 19489857Sobrien# bootstrap-tools stage 19589857SobrienBMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ 19689857Sobrien PATH=${BPATH}:${PATH} \ 19789857Sobrien WORLDTMP=${WORLDTMP} \ 19889857Sobrien MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" 19989857SobrienBMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \ 20089857Sobrien ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 20189857Sobrien DESTDIR= \ 20289857Sobrien BOOTSTRAPPING=${OSRELDATE} \ 20389857Sobrien -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \ 20489857Sobrien -DWITHOUT_NLS -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \ 20589857Sobrien -DNO_CPU_CFLAGS -DNO_WARNS 20689857Sobrien 20789857Sobrien# build-tools stage 20889857SobrienTMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \ 20989857Sobrien ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 21089857Sobrien TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 21189857Sobrien DESTDIR= \ 21289857Sobrien BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS 21389857Sobrien 21489857Sobrien# cross-tools stage 21589857SobrienXMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \ 21689857Sobrien TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 21789857Sobrien -DWITHOUT_FORTRAN -DWITHOUT_GDB 21889857Sobrien 21989857Sobrien# world stage 22089857SobrienWMAKEENV= ${CROSSENV} \ 22189857Sobrien _SHLIBDIRPREFIX=${WORLDTMP} \ 22289857Sobrien INSTALL="sh ${.CURDIR}/tools/install.sh" \ 22389857Sobrien PATH=${TMPPATH} 22489857SobrienWMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP} 22589857Sobrien 22689857Sobrien.if ${TARGET_ARCH} == "amd64" 22789857Sobrien# 32 bit world 22889857SobrienLIB32TMP= ${OBJTREE}${.CURDIR}/lib32 22989857Sobrien 23089857Sobrien.if empty(TARGET_CPUTYPE) 23189857SobrienLIB32CPUTYPE= k8 23289857Sobrien.else 23389857SobrienLIB32CPUTYPE= ${TARGET_CPUTYPE} 23489857Sobrien.endif 23589857SobrienLIB32PREFLAGS= -m32 -march=${LIB32CPUTYPE} -mfancy-math-387 -DCOMPAT_32BIT 23689857SobrienLIB32POSTFLAGS= -I${LIB32TMP}/usr/include \ 23789857Sobrien -L${LIB32TMP}/usr/lib32 \ 23889857Sobrien -B${LIB32TMP}/usr/lib32 23989857SobrienLIB32CC= ${LIB32PREFLAGS} \ 24089857Sobrien ${LIB32POSTFLAGS} 24189857SobrienLIB32CXX= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/c++/3.4 \ 24289857Sobrien ${LIB32POSTFLAGS} 24389857SobrienLIB32OBJC= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/objc \ 24489857Sobrien ${LIB32POSTFLAGS} 24589857Sobrien 24689857Sobrien# Yes, the flags are redundant. 24789857SobrienLIB32MAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \ 24889857Sobrien _SHLIBDIRPREFIX=${LIB32TMP} \ 24989857Sobrien MACHINE=i386 \ 25089857Sobrien MACHINE_ARCH=i386 \ 25189857Sobrien INSTALL="sh ${.CURDIR}/tools/install.sh" \ 25289857Sobrien PATH=${TMPPATH} \ 25389857Sobrien CC="${CC} ${LIB32CC}" \ 25489857Sobrien CXX="${CXX} ${LIB32CXX}" \ 25589857Sobrien OBJC="${OBJC} ${LIB32OBJC}" \ 25689857Sobrien LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \ 25789857Sobrien AS="${AS} --32" \ 25889857Sobrien LIBDIR=/usr/lib32 \ 25989857Sobrien SHLIBDIR=/usr/lib32 26089857Sobrien 26189857SobrienLIB32MAKE= ${LIB32MAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \ 26289857Sobrien -DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_INFO \ 26389857Sobrien -DWITHOUT_HTML 26489857SobrienLIB32IMAKE= ${LIB32MAKE:NINSTALL=*} -DNO_INCS 26589857Sobrien.endif 26689857Sobrien 26789857Sobrien# install stage 26889857Sobrien.if empty(.MAKEFLAGS:M-n) 26989857SobrienIMAKEENV= ${CROSSENV} \ 27089857Sobrien PATH=${STRICTTMPPATH}:${INSTALLTMP} 27189857Sobrien.else 27289857SobrienIMAKEENV= ${CROSSENV} \ 27389857Sobrien PATH=${TMPPATH}:${INSTALLTMP} 27489857Sobrien.endif 27589857SobrienIMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 27689857Sobrien 27789857Sobrien# kernel stage 27889857SobrienKMAKEENV= ${WMAKEENV} 27989857SobrienKMAKE= ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} 28089857Sobrien 28189857Sobrien# 28289857Sobrien# buildworld 28389857Sobrien# 28489857Sobrien# Attempt to rebuild the entire system, with reasonable chance of 28589857Sobrien# success, regardless of how old your existing system is. 28689857Sobrien# 28789857Sobrien_worldtmp: 28889857Sobrien.if ${.CURDIR:C/[^,]//g} != "" 28989857Sobrien# The m4 build of sendmail files doesn't like it if ',' is used 29089857Sobrien# anywhere in the path of it's files. 29189857Sobrien @echo 29289857Sobrien @echo "*** Error: path to source tree contains a comma ','" 29389857Sobrien @echo 29489857Sobrien false 29589857Sobrien.endif 29689857Sobrien @echo 29789857Sobrien @echo "--------------------------------------------------------------" 29889857Sobrien @echo ">>> Rebuilding the temporary build tree" 29989857Sobrien @echo "--------------------------------------------------------------" 30089857Sobrien.if !defined(NO_CLEAN) 30189857Sobrien rm -rf ${WORLDTMP} 30289857Sobrien.if ${TARGET_ARCH} == "amd64" 30389857Sobrien rm -rf ${LIB32TMP} 30489857Sobrien.endif 30589857Sobrien.else 30689857Sobrien rm -rf ${WORLDTMP}/legacy/usr/include 30789857Sobrien# XXX - These two can depend on any header file. 30889857Sobrien rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 30989857Sobrien rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 31089857Sobrien.endif 31189857Sobrien.for _dir in \ 31289857Sobrien usr/bin usr/games usr/include/c++/3.4 usr/include/sys usr/lib \ 31389857Sobrien usr/libexec usr/sbin usr/share/dict \ 31489857Sobrien usr/share/groff_font/devX100 \ 31589857Sobrien usr/share/groff_font/devX100-12 \ 31689857Sobrien usr/share/groff_font/devX75 \ 31789857Sobrien usr/share/groff_font/devX75-12 \ 31889857Sobrien usr/share/groff_font/devascii \ 31989857Sobrien usr/share/groff_font/devcp1047 \ 32089857Sobrien usr/share/groff_font/devdvi \ 32189857Sobrien usr/share/groff_font/devhtml \ 32289857Sobrien usr/share/groff_font/devkoi8-r \ 32389857Sobrien usr/share/groff_font/devlatin1 \ 32489857Sobrien usr/share/groff_font/devlbp \ 32589857Sobrien usr/share/groff_font/devlj4 \ 32689857Sobrien usr/share/groff_font/devps \ 32789857Sobrien usr/share/groff_font/devutf8 \ 32889857Sobrien usr/share/tmac/mdoc usr/share/tmac/mm 32989857Sobrien mkdir -p ${WORLDTMP}/legacy/${_dir} 33089857Sobrien.endfor 33189857Sobrien.for _dir in \ 33289857Sobrien lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \ 33389857Sobrien usr/libexec usr/sbin usr/share/misc \ 33489857Sobrien usr/share/snmp/defs usr/share/snmp/mibs 33589857Sobrien mkdir -p ${WORLDTMP}/${_dir} 33689857Sobrien.endfor 33789857Sobrien mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 33889857Sobrien -p ${WORLDTMP}/usr/include >/dev/null 33989857Sobrien ln -sf ${.CURDIR}/sys ${WORLDTMP} 34089857Sobrien.if ${MK_BIND_LIBS} != "no" 34189857Sobrien mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \ 34289857Sobrien -p ${WORLDTMP}/usr/include >/dev/null 34389857Sobrien.endif 34489857Sobrien_legacy: 34589857Sobrien @echo 34689857Sobrien @echo "--------------------------------------------------------------" 34789857Sobrien @echo ">>> stage 1.1: legacy release compatibility shims" 34889857Sobrien @echo "--------------------------------------------------------------" 34989857Sobrien ${_+_}cd ${.CURDIR}; ${BMAKE} legacy 35089857Sobrien_bootstrap-tools: 35189857Sobrien @echo 35289857Sobrien @echo "--------------------------------------------------------------" 35389857Sobrien @echo ">>> stage 1.2: bootstrap tools" 35489857Sobrien @echo "--------------------------------------------------------------" 35589857Sobrien ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools 35689857Sobrien_cleanobj: 35789857Sobrien.if !defined(NO_CLEAN) 35889857Sobrien @echo 35989857Sobrien @echo "--------------------------------------------------------------" 36089857Sobrien @echo ">>> stage 2.1: cleaning up the object tree" 36189857Sobrien @echo "--------------------------------------------------------------" 36289857Sobrien ${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 36389857Sobrien.if ${TARGET_ARCH} == "amd64" 36489857Sobrien rm -rf ${OBJTREE}/lib32 36589857Sobrien.endif 36689857Sobrien.endif 36789857Sobrien_obj: 36889857Sobrien @echo 36989857Sobrien @echo "--------------------------------------------------------------" 37089857Sobrien @echo ">>> stage 2.2: rebuilding the object tree" 37189857Sobrien @echo "--------------------------------------------------------------" 37289857Sobrien ${_+_}cd ${.CURDIR}; ${WMAKE} par-obj 37389857Sobrien_build-tools: 37489857Sobrien @echo 37589857Sobrien @echo "--------------------------------------------------------------" 37689857Sobrien @echo ">>> stage 2.3: build tools" 37789857Sobrien @echo "--------------------------------------------------------------" 37889857Sobrien ${_+_}cd ${.CURDIR}; ${TMAKE} build-tools 37989857Sobrien_cross-tools: 38089857Sobrien @echo 38189857Sobrien @echo "--------------------------------------------------------------" 38289857Sobrien @echo ">>> stage 3: cross tools" 38389857Sobrien @echo "--------------------------------------------------------------" 38489857Sobrien ${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools 38589857Sobrien_includes: 38689857Sobrien @echo 38789857Sobrien @echo "--------------------------------------------------------------" 38889857Sobrien @echo ">>> stage 4.1: building includes" 38989857Sobrien @echo "--------------------------------------------------------------" 39089857Sobrien ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 39189857Sobrien_libraries: 39289857Sobrien @echo 39389857Sobrien @echo "--------------------------------------------------------------" 39489857Sobrien @echo ">>> stage 4.2: building libraries" 39589857Sobrien @echo "--------------------------------------------------------------" 39689857Sobrien ${_+_}cd ${.CURDIR}; \ 39789857Sobrien ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ 39889857Sobrien -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE libraries 39989857Sobrien_depend: 40089857Sobrien @echo 40189857Sobrien @echo "--------------------------------------------------------------" 40289857Sobrien @echo ">>> stage 4.3: make dependencies" 40389857Sobrien @echo "--------------------------------------------------------------" 40489857Sobrien ${_+_}cd ${.CURDIR}; ${WMAKE} par-depend 40589857Sobrieneverything: 40689857Sobrien @echo 40789857Sobrien @echo "--------------------------------------------------------------" 40889857Sobrien @echo ">>> stage 4.4: building everything" 40989857Sobrien @echo "--------------------------------------------------------------" 41089857Sobrien ${_+_}cd ${.CURDIR}; ${WMAKE} par-all 41189857Sobrien.if ${TARGET_ARCH} == "amd64" 41289857Sobrienbuild32: 41389857Sobrien @echo 41489857Sobrien @echo "--------------------------------------------------------------" 41589857Sobrien @echo ">>> stage 5.1: building 32 bit shim libraries" 41689857Sobrien @echo "--------------------------------------------------------------" 41789857Sobrien.for _dir in \ 41889857Sobrien lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \ 41989857Sobrien usr/libexec usr/sbin usr/share/misc \ 42089857Sobrien usr/share/snmp/defs usr/share/snmp/mibs 42189857Sobrien mkdir -p ${LIB32TMP}/${_dir} 42289857Sobrien.endfor 42389857Sobrien mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 42489857Sobrien -p ${LIB32TMP}/usr/include >/dev/null 42589857Sobrien mkdir -p ${WORLDTMP} 42689857Sobrien ln -sf ${.CURDIR}/sys ${WORLDTMP} 42789857Sobrien.if ${MK_KERBEROS} != "no" 42889857Sobrien.for _t in obj depend all 42989857Sobrien cd ${.CURDIR}/kerberos5/tools; \ 43089857Sobrien MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t} 43189857Sobrien.endfor 43289857Sobrien.endif 43389857Sobrien.for _t in obj includes 43489857Sobrien cd ${.CURDIR}/include; \ 43589857Sobrien ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 43689857Sobrien cd ${.CURDIR}/lib; \ 43789857Sobrien ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 43889857Sobrien cd ${.CURDIR}/gnu/lib; \ 43989857Sobrien ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 44089857Sobrien.if ${MK_CRYPT} != "no" 44189857Sobrien cd ${.CURDIR}/secure/lib; \ 44289857Sobrien ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 44389857Sobrien.endif 44489857Sobrien.if ${MK_KERBEROS} != "no" 44589857Sobrien cd ${.CURDIR}/kerberos5/lib; \ 44689857Sobrien ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 44789857Sobrien.endif 44889857Sobrien.endfor 44989857Sobrien.for _dir in usr.bin/lex/lib 45089857Sobrien cd ${.CURDIR}/${_dir}; \ 45189857Sobrien ${LIB32MAKE} DESTDIR=${LIB32TMP} obj 45289857Sobrien.endfor 45389857Sobrien.for _dir in lib/libncurses lib/libmagic 45489857Sobrien cd ${.CURDIR}/${_dir}; \ 45589857Sobrien MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= build-tools 45689857Sobrien.endfor 45789857Sobrien cd ${.CURDIR}; \ 45889857Sobrien ${LIB32MAKE} -f Makefile.inc1 DESTDIR=${LIB32TMP} libraries 45989857Sobrien.for _t in obj depend all 46089857Sobrien cd ${.CURDIR}/libexec/rtld-elf; \ 46189857Sobrien PROG=ld-elf32.so.1 ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 46289857Sobrien.endfor 46389857Sobrien 46489857Sobriendistribute32 install32: 46589857Sobrien.if make(distribute32) 46689857Sobrien mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32 # XXX add to mtree 46789857Sobrien.else 46889857Sobrien mkdir -p ${DESTDIR}/usr/lib32 # XXX add to mtree 46989857Sobrien.endif 47089857Sobrien cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 47189857Sobrien cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 47289857Sobrien.if ${MK_CRYPT} != "no" 47389857Sobrien cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 47489857Sobrien.endif 47589857Sobrien cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//} 47689857Sobrien.endif 47789857Sobrien 47889857Sobrien 47989857SobrienWMAKE_TGTS= 48089857Sobrien.if !defined(SUBDIR_OVERRIDE) 48189857SobrienWMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools 48289857Sobrien.endif 48389857SobrienWMAKE_TGTS+= _cleanobj _obj _build-tools 48489857Sobrien.if !defined(SUBDIR_OVERRIDE) 48589857SobrienWMAKE_TGTS+= _cross-tools 48689857Sobrien.endif 48789857SobrienWMAKE_TGTS+= _includes _libraries _depend everything 48889857Sobrien.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 48989857SobrienWMAKE_TGTS+= build32 49089857Sobrien.endif 49189857Sobrien 49289857Sobrienbuildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 49389857Sobrien.ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 49489857Sobrien 49589857Sobrienbuildworld_prologue: 49689857Sobrien @echo "--------------------------------------------------------------" 49789857Sobrien @echo ">>> World build started on `LC_ALL=C date`" 49889857Sobrien @echo "--------------------------------------------------------------" 49989857Sobrien 50089857Sobrienbuildworld_epilogue: 50189857Sobrien @echo 50289857Sobrien @echo "--------------------------------------------------------------" 50389857Sobrien @echo ">>> World build completed on `LC_ALL=C date`" 50489857Sobrien @echo "--------------------------------------------------------------" 50589857Sobrien 50689857Sobrien# 50789857Sobrien# We need to have this as a target because the indirection between Makefile 50889857Sobrien# and Makefile.inc1 causes the correct PATH to be used, rather than a 50989857Sobrien# modification of the current environment's PATH. In addition, we need 51089857Sobrien# to quote multiword values. 51189857Sobrien# 51289857Sobrienbuildenvvars: 51389857Sobrien @echo ${WMAKEENV:Q} 51489857Sobrien 51589857Sobrienbuildenv: 51689857Sobrien @echo Entering world for ${TARGET_ARCH}:${TARGET} 51789857Sobrien @cd ${.CURDIR} && env ${WMAKEENV} sh || true 51889857Sobrien 51989857SobrienTOOLCHAIN_TGTS= ${WMAKE_TGTS:N_depend:Neverything:Nbuild32} 52089857Sobrientoolchain: ${TOOLCHAIN_TGTS} 52189857Sobrienkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries} 52289857Sobrien 52389857Sobrien# 52489857Sobrien# installcheck 52589857Sobrien# 52689857Sobrien# Checks to be sure system is ready for installworld/installkernel. 52789857Sobrien# 52889857Sobrieninstallcheck: 52989857Sobrien 53089857Sobrien# 53189857Sobrien# Require DESTDIR to be set if installing for a different architecture. 53289857Sobrien# 53389857Sobrien.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE} 53489857Sobrien.if !make(distributeworld) 53589857Sobrieninstallcheck: installcheck_DESTDIR 53689857Sobrieninstallcheck_DESTDIR: 53789857Sobrien.if !defined(DESTDIR) || empty(DESTDIR) 53889857Sobrien @echo "ERROR: Please set DESTDIR!"; \ 53989857Sobrien false 54089857Sobrien.endif 54189857Sobrien.endif 54289857Sobrien.endif 54389857Sobrien 54489857Sobrien# 54589857Sobrien# Check for missing UIDs/GIDs. 54689857Sobrien# 54789857SobrienCHECK_UIDS= 54889857SobrienCHECK_GIDS= audit 54989857Sobrien.if ${MK_SENDMAIL} != "no" 55089857SobrienCHECK_UIDS+= smmsp 55189857SobrienCHECK_GIDS+= smmsp 55289857Sobrien.endif 55389857Sobrien.if ${MK_PF} != "no" 55489857SobrienCHECK_UIDS+= proxy 55589857SobrienCHECK_GIDS+= proxy authpf 55689857Sobrien.endif 55789857Sobrieninstallcheck: installcheck_UGID 55889857Sobrieninstallcheck_UGID: 55989857Sobrien.for uid in ${CHECK_UIDS} 56089857Sobrien @if ! `id -u ${uid} >/dev/null 2>&1`; then \ 56189857Sobrien echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \ 56289857Sobrien false; \ 56389857Sobrien fi 56489857Sobrien.endfor 56589857Sobrien.for gid in ${CHECK_GIDS} 56689857Sobrien @if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \ 56789857Sobrien echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \ 56889857Sobrien false; \ 56989857Sobrien fi 57089857Sobrien.endfor 57189857Sobrien 57289857Sobrien# 57389857Sobrien# distributeworld 57489857Sobrien# 57589857Sobrien# Distributes everything compiled by a `buildworld'. 57689857Sobrien# 57789857Sobrien# installworld 57889857Sobrien# 57989857Sobrien# Installs everything compiled by a 'buildworld'. 58089857Sobrien# 58189857Sobriendistributeworld installworld: installcheck 58289857Sobrien mkdir -p ${INSTALLTMP} 58389857Sobrien for prog in [ awk cap_mkdb cat chflags chmod chown \ 58489857Sobrien date echo egrep find grep install-info \ 58589857Sobrien ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \ 58689857Sobrien test true uname wc zic; do \ 58789857Sobrien cp `which $$prog` ${INSTALLTMP}; \ 58889857Sobrien done 58989857Sobrien ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//} 59089857Sobrien rm -rf ${INSTALLTMP} 59189857Sobrien 59289857Sobrien# 59389857Sobrien# reinstall 59489857Sobrien# 59589857Sobrien# If you have a build server, you can NFS mount the source and obj directories 59689857Sobrien# and do a 'make reinstall' on the *client* to install new binaries from the 59789857Sobrien# most recent server build. 59889857Sobrien# 59989857Sobrienreinstall: 60089857Sobrien @echo "--------------------------------------------------------------" 60189857Sobrien @echo ">>> Making hierarchy" 60289857Sobrien @echo "--------------------------------------------------------------" 60389857Sobrien ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy 60489857Sobrien @echo 60589857Sobrien @echo "--------------------------------------------------------------" 60689857Sobrien @echo ">>> Installing everything" 60789857Sobrien @echo "--------------------------------------------------------------" 60889857Sobrien ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 60989857Sobrien.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 61089857Sobrien ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32 61189857Sobrien.endif 61289857Sobrien 61389857Sobrienredistribute: 61489857Sobrien @echo "--------------------------------------------------------------" 61589857Sobrien @echo ">>> Distributing everything" 61689857Sobrien @echo "--------------------------------------------------------------" 61789857Sobrien ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 61889857Sobrien.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no" 61989857Sobrien ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 DISTRIBUTION=lib32 62089857Sobrien.endif 62189857Sobrien 62289857Sobriendistrib-dirs distribution: 62389857Sobrien cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET} 62489857Sobrien 62589857Sobrien# 62689857Sobrien# buildkernel and installkernel 62789857Sobrien# 62889857Sobrien# Which kernels to build and/or install is specified by setting 62989857Sobrien# KERNCONF. If not defined a GENERIC kernel is built/installed. 63089857Sobrien# Only the existing (depending TARGET) config files are used 63189857Sobrien# for building kernels and only the first of these is designated 63289857Sobrien# as the one being installed. 63389857Sobrien# 63489857Sobrien# Note that we have to use TARGET instead of TARGET_ARCH when 63589857Sobrien# we're in kernel-land. Since only TARGET_ARCH is (expected) to 63689857Sobrien# be set to cross-build, we have to make sure TARGET is set 63789857Sobrien# properly. 63889857Sobrien 63989857Sobrien.if !defined(KERNCONF) && defined(KERNEL) 64089857SobrienKERNCONF= ${KERNEL} 64189857SobrienKERNWARN= 64289857Sobrien.else 64389857SobrienKERNCONF?= GENERIC 64489857Sobrien.endif 64589857SobrienINSTKERNNAME?= kernel 64689857Sobrien 64789857SobrienKERNSRCDIR?= ${.CURDIR}/sys 64889857SobrienKRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf 64989857SobrienKRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} 65089857SobrienKERNCONFDIR?= ${KRNLCONFDIR} 65189857Sobrien 65289857SobrienBUILDKERNELS= 65389857SobrienINSTALLKERNEL= 65489857Sobrien.for _kernel in ${KERNCONF} 65589857Sobrien.if exists(${KERNCONFDIR}/${_kernel}) 65689857SobrienBUILDKERNELS+= ${_kernel} 65789857Sobrien.if empty(INSTALLKERNEL) 65889857SobrienINSTALLKERNEL= ${_kernel} 65989857Sobrien.endif 66089857Sobrien.endif 66189857Sobrien.endfor 66289857Sobrien 66389857Sobrien# 66489857Sobrien# buildkernel 66589857Sobrien# 66689857Sobrien# Builds all kernels defined by BUILDKERNELS. 66789857Sobrien# 66889857Sobrienbuildkernel: 66989857Sobrien.if empty(BUILDKERNELS) 67089857Sobrien @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \ 67189857Sobrien false 67289857Sobrien.endif 67389857Sobrien.if defined(KERNWARN) 67489857Sobrien @echo "--------------------------------------------------------------" 67589857Sobrien @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 67689857Sobrien @echo "--------------------------------------------------------------" 67789857Sobrien @sleep 3 67889857Sobrien.endif 67989857Sobrien @echo 68089857Sobrien.for _kernel in ${BUILDKERNELS} 68189857Sobrien @echo "--------------------------------------------------------------" 68289857Sobrien @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 68389857Sobrien @echo "--------------------------------------------------------------" 68489857Sobrien @echo "===> ${_kernel}" 68589857Sobrien mkdir -p ${KRNLOBJDIR} 68689857Sobrien.if !defined(NO_KERNELCONFIG) 68789857Sobrien @echo 68889857Sobrien @echo "--------------------------------------------------------------" 68989857Sobrien @echo ">>> stage 1: configuring the kernel" 69089857Sobrien @echo "--------------------------------------------------------------" 69189857Sobrien cd ${KRNLCONFDIR}; \ 69289857Sobrien PATH=${TMPPATH} \ 69389857Sobrien config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 69489857Sobrien ${KERNCONFDIR}/${_kernel} 69589857Sobrien.endif 69689857Sobrien.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN) 69789857Sobrien @echo 69889857Sobrien @echo "--------------------------------------------------------------" 69989857Sobrien @echo ">>> stage 2.1: cleaning up the object tree" 70089857Sobrien @echo "--------------------------------------------------------------" 70189857Sobrien cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR} 70289857Sobrien.endif 70389857Sobrien @echo 70489857Sobrien @echo "--------------------------------------------------------------" 70589857Sobrien @echo ">>> stage 2.2: rebuilding the object tree" 70689857Sobrien @echo "--------------------------------------------------------------" 70789857Sobrien cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj 70889857Sobrien @echo 70989857Sobrien @echo "--------------------------------------------------------------" 71089857Sobrien @echo ">>> stage 2.3: build tools" 71189857Sobrien @echo "--------------------------------------------------------------" 71289857Sobrien cd ${KRNLOBJDIR}/${_kernel}; \ 71389857Sobrien MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \ 71489857Sobrien ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile 71589857Sobrien# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case. 71689857Sobrien.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules) 71789857Sobrien.for target in obj depend all 71889857Sobrien cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \ 71989857Sobrien MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \ 72089857Sobrien ${MAKE} -DNO_CPU_CFLAGS ${target} 72189857Sobrien.endfor 72289857Sobrien.endif 72389857Sobrien.if !defined(NO_KERNELDEPEND) 72489857Sobrien @echo 72589857Sobrien @echo "--------------------------------------------------------------" 72689857Sobrien @echo ">>> stage 3.1: making dependencies" 72789857Sobrien @echo "--------------------------------------------------------------" 72889857Sobrien cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ 72989857Sobrien.endif 73089857Sobrien @echo 73189857Sobrien @echo "--------------------------------------------------------------" 73289857Sobrien @echo ">>> stage 3.2: building everything" 73389857Sobrien @echo "--------------------------------------------------------------" 73489857Sobrien cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ 73589857Sobrien @echo "--------------------------------------------------------------" 73689857Sobrien @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 73789857Sobrien @echo "--------------------------------------------------------------" 73889857Sobrien.endfor 73989857Sobrien 74089857Sobrien# 74189857Sobrien# installkernel, etc. 74289857Sobrien# 74389857Sobrien# Install the kernel defined by INSTALLKERNEL 74489857Sobrien# 74589857Sobrieninstallkernel installkernel.debug \ 74689857Sobrienreinstallkernel reinstallkernel.debug: installcheck 74789857Sobrien.if empty(INSTALLKERNEL) 74889857Sobrien @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \ 74989857Sobrien false 75089857Sobrien.endif 75189857Sobrien @echo "--------------------------------------------------------------" 75289857Sobrien @echo ">>> Installing kernel" 75389857Sobrien @echo "--------------------------------------------------------------" 75489857Sobrien cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 75589857Sobrien ${CROSSENV} PATH=${TMPPATH} \ 75689857Sobrien ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} 75789857Sobrien 75889857Sobrien# 75989857Sobrien# doxygen 76089857Sobrien# 76189857Sobrien# Build the API documentation with doxygen 76289857Sobrien# 76389857Sobriendoxygen: 76489857Sobrien @if [ ! -x `/usr/bin/which doxygen` ]; then \ 76589857Sobrien echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \ 76689857Sobrien exit 1; \ 76789857Sobrien fi 76889857Sobrien cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all 76989857Sobrien 77089857Sobrien# 77189857Sobrien# update 77289857Sobrien# 77389857Sobrien# Update the source tree, by running cvsup and/or running cvs to update to the 77489857Sobrien# latest copy. 77589857Sobrien# 77689857Sobrienupdate: 77789857Sobrien.if defined(SUP_UPDATE) 77889857Sobrien @echo "--------------------------------------------------------------" 77989857Sobrien @echo ">>> Running ${SUP}" 78089857Sobrien @echo "--------------------------------------------------------------" 78189857Sobrien.if defined(SUPFILE) 78289857Sobrien @${SUP} ${SUPFLAGS} ${SUPFILE} 78389857Sobrien.endif 78489857Sobrien.if defined(SUPFILE1) 78589857Sobrien @${SUP} ${SUPFLAGS} ${SUPFILE1} 78689857Sobrien.endif 78789857Sobrien.if defined(SUPFILE2) 78889857Sobrien @${SUP} ${SUPFLAGS} ${SUPFILE2} 78989857Sobrien.endif 79089857Sobrien.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE) 79189857Sobrien @${SUP} ${SUPFLAGS} ${PORTSSUPFILE} 79289857Sobrien.endif 79389857Sobrien.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE) 79489857Sobrien @${SUP} ${SUPFLAGS} ${DOCSUPFILE} 79589857Sobrien.endif 79689857Sobrien.endif 79789857Sobrien.if defined(CVS_UPDATE) 79889857Sobrien @echo "--------------------------------------------------------------" 79989857Sobrien @echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT} 80089857Sobrien @echo "--------------------------------------------------------------" 80189857Sobrien cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS} 80289857Sobrien.endif 80389857Sobrien 80489857Sobrien# 80589857Sobrien# ------------------------------------------------------------------------ 80689857Sobrien# 80789857Sobrien# From here onwards are utility targets used by the 'make world' and 80889857Sobrien# related targets. If your 'world' breaks, you may like to try to fix 80989857Sobrien# the problem and manually run the following targets to attempt to 81089857Sobrien# complete the build. Beware, this is *not* guaranteed to work, you 81189857Sobrien# need to have a pretty good grip on the current state of the system 81289857Sobrien# to attempt to manually finish it. If in doubt, 'make world' again. 81389857Sobrien# 81489857Sobrien 81589857Sobrien# 81689857Sobrien# legacy: Build compatibility shims for the next three targets 81789857Sobrien# 81889857Sobrienlegacy: 81989857Sobrien.if ${BOOTSTRAPPING} < 503000 82089857Sobrien @echo "ERROR: Source upgrades from versions prior to 5.3 not supported."; \ 82189857Sobrien false 82289857Sobrien.endif 82389857Sobrien.for _tool in tools/build 82489857Sobrien ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \ 82589857Sobrien cd ${.CURDIR}/${_tool}; \ 82689857Sobrien ${MAKE} DIRPRFX=${_tool}/ obj; \ 82789857Sobrien ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \ 82889857Sobrien ${MAKE} DIRPRFX=${_tool}/ depend; \ 82989857Sobrien ${MAKE} DIRPRFX=${_tool}/ all; \ 83089857Sobrien ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 83189857Sobrien.endfor 83289857Sobrien 83389857Sobrien# 83489857Sobrien# bootstrap-tools: Build tools needed for compatibility 83589857Sobrien# 83689857Sobrien.if ${MK_GAMES} != "no" 83789857Sobrien_strfile= games/fortune/strfile 83889857Sobrien.endif 83989857Sobrien 84089857Sobrien.if ${MK_CXX} != "no" 84189857Sobrien_gperf= gnu/usr.bin/gperf 84289857Sobrien.if ${BOOTSTRAPPING} < 700004 84389857Sobrien_groff= gnu/usr.bin/groff 84489857Sobrien.else 84589857Sobrien_groff= gnu/usr.bin/groff/tmac 84689857Sobrien.endif 84789857Sobrien.endif 84889857Sobrien 84989857Sobrien.if ${BOOTSTRAPPING} < 600029 85089857Sobrien_texinfo= gnu/usr.bin/texinfo 85189857Sobrien.endif 85289857Sobrien 85389857Sobrien.if ${BOOTSTRAPPING} < 600015 85489857Sobrien_cap_mkdb= usr.bin/cap_mkdb 85589857Sobrien.endif 85689857Sobrien 85789857Sobrien.if ${BOOTSTRAPPING} < 600018 85889857Sobrien_colldef= usr.bin/colldef 85989857Sobrien.endif 86089857Sobrien 86189857Sobrien.if ${BOOTSTRAPPING} < 600017 86289857Sobrien_gencat= usr.bin/gencat 86389857Sobrien.endif 86489857Sobrien 86589857Sobrien.if ${BOOTSTRAPPING} < 600016 86689857Sobrien_mklocale= usr.bin/mklocale 86789857Sobrien.endif 86889857Sobrien 86989857Sobrien.if ${BOOTSTRAPPING} < 700015 87089857Sobrien_gensnmptree= usr.sbin/bsnmpd/gensnmptree 87189857Sobrien.endif 87289857Sobrien 87389857Sobrien.if ${MK_RESCUE} != "no" && \ 87489857Sobrien ${BOOTSTRAPPING} < 600008 87589857Sobrien_crunchgen= usr.sbin/crunch/crunchgen 87689857Sobrien.endif 87789857Sobrien 87889857Sobrien.if ${BOOTSTRAPPING} < 600020 87989857Sobrien_pwd_mkdb= usr.sbin/pwd_mkdb 88089857Sobrien.endif 88189857Sobrien 88289857Sobrienbootstrap-tools: 88389857Sobrien.for _tool in \ 88489857Sobrien ${_strfile} \ 88589857Sobrien ${_gperf} \ 88689857Sobrien ${_groff} \ 88789857Sobrien ${_texinfo} \ 88889857Sobrien ${_cap_mkdb} \ 88989857Sobrien ${_colldef} \ 89089857Sobrien ${_gencat} \ 89189857Sobrien usr.bin/lorder \ 89289857Sobrien usr.bin/makewhatis \ 89389857Sobrien ${_mklocale} \ 89489857Sobrien usr.bin/rpcgen \ 89589857Sobrien usr.bin/xinstall \ 89689857Sobrien ${_gensnmptree} \ 89789857Sobrien usr.sbin/config \ 89889857Sobrien ${_crunchgen} \ 89989857Sobrien ${_pwd_mkdb} 90089857Sobrien ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 90189857Sobrien cd ${.CURDIR}/${_tool}; \ 90289857Sobrien ${MAKE} DIRPRFX=${_tool}/ obj; \ 90389857Sobrien ${MAKE} DIRPRFX=${_tool}/ depend; \ 90489857Sobrien ${MAKE} DIRPRFX=${_tool}/ all; \ 90589857Sobrien ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 90689857Sobrien.endfor 90789857Sobrien 90889857Sobrien# 90989857Sobrien# build-tools: Build special purpose build tools 91089857Sobrien# 91189857Sobrien.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules) 91289857Sobrien_aicasm= sys/modules/aic7xxx/aicasm 91389857Sobrien.endif 91489857Sobrien 91589857Sobrien.if !defined(NO_SHARE) 91689857Sobrien_share= share/syscons/scrnmaps 91789857Sobrien.endif 91889857Sobrien 91989857Sobrien.if ${MK_KERBEROS} != "no" 92089857Sobrien_kerberos5_tools= kerberos5/tools 92189857Sobrien.endif 92289857Sobrien 92389857Sobrien.if ${MK_RESCUE} != "no" 92489857Sobrien_rescue= rescue/rescue 92589857Sobrien.endif 92689857Sobrien 92789857Sobrienbuild-tools: 92889857Sobrien.for _tool in \ 92989857Sobrien bin/csh \ 93089857Sobrien bin/sh \ 93189857Sobrien ${_rescue} \ 93289857Sobrien lib/libncurses \ 93389857Sobrien ${_share} \ 93489857Sobrien ${_aicasm} \ 93589857Sobrien usr.bin/awk \ 93689857Sobrien lib/libmagic \ 93789857Sobrien usr.sbin/sysinstall 93889857Sobrien ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \ 93989857Sobrien cd ${.CURDIR}/${_tool}; \ 94089857Sobrien ${MAKE} DIRPRFX=${_tool}/ obj; \ 94189857Sobrien ${MAKE} DIRPRFX=${_tool}/ build-tools 94289857Sobrien.endfor 94389857Sobrien.for _tool in \ 94489857Sobrien gnu/usr.bin/cc/cc_tools \ 94589857Sobrien ${_kerberos5_tools} 94689857Sobrien ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \ 94789857Sobrien cd ${.CURDIR}/${_tool}; \ 94889857Sobrien ${MAKE} DIRPRFX=${_tool}/ obj; \ 94989857Sobrien ${MAKE} DIRPRFX=${_tool}/ depend; \ 95089857Sobrien ${MAKE} DIRPRFX=${_tool}/ all 95189857Sobrien.endfor 95289857Sobrien 95389857Sobrien# 95489857Sobrien# cross-tools: Build cross-building tools 95589857Sobrien# 95689857Sobrien.if ${TARGET_ARCH} != ${MACHINE_ARCH} 95789857Sobrien.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386" 95889857Sobrien_btxld= usr.sbin/btxld 95989857Sobrien.endif 96089857Sobrien.if ${MK_RESCUE} != "no" || defined(RELEASEDIR) 96189857Sobrien_crunchide= usr.sbin/crunch/crunchide 96289857Sobrien.endif 96389857Sobrien.if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR) 96489857Sobrien_kgzip= usr.sbin/kgzip 96589857Sobrien.endif 96689857Sobrien.endif 96789857Sobrien 96889857Sobriencross-tools: 96989857Sobrien.for _tool in \ 97089857Sobrien gnu/usr.bin/binutils \ 97189857Sobrien gnu/usr.bin/cc \ 97289857Sobrien usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \ 97389857Sobrien ${_btxld} \ 97489857Sobrien ${_crunchide} \ 97589857Sobrien ${_kgzip} 97689857Sobrien ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 97789857Sobrien cd ${.CURDIR}/${_tool}; \ 97889857Sobrien ${MAKE} DIRPRFX=${_tool}/ obj; \ 97989857Sobrien ${MAKE} DIRPRFX=${_tool}/ depend; \ 98089857Sobrien ${MAKE} DIRPRFX=${_tool}/ all; \ 98189857Sobrien ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 98289857Sobrien.endfor 98389857Sobrien 98489857Sobrien# 98589857Sobrien# hierarchy - ensure that all the needed directories are present 98689857Sobrien# 98789857Sobrienhierarchy: 98889857Sobrien cd ${.CURDIR}/etc; ${MAKE} distrib-dirs 98989857Sobrien 99089857Sobrien# 99189857Sobrien# libraries - build all libraries, and install them under ${DESTDIR}. 99289857Sobrien# 99389857Sobrien# The list of libraries with dependents (${_prebuild_libs}) and their 99489857Sobrien# interdependencies (__L) are built automatically by the 99589857Sobrien# ${.CURDIR}/tools/make_libdeps.sh script. 99689857Sobrien# 99789857Sobrienlibraries: 99889857Sobrien cd ${.CURDIR}; \ 99989857Sobrien ${MAKE} -f Makefile.inc1 _startup_libs; \ 100089857Sobrien ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 100189857Sobrien ${MAKE} -f Makefile.inc1 _generic_libs; 100289857Sobrien 100389857Sobrien# These dependencies are not automatically generated: 100489857Sobrien# 100589857Sobrien# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all 100689857Sobrien# shared libraries for ELF. 100789857Sobrien# 100889857Sobrien_startup_libs= gnu/lib/csu gnu/lib/libgcc 100989857Sobrien.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf) 101089857Sobrien_startup_libs+= lib/csu/${MACHINE_ARCH}-elf 101189857Sobrien.else 101289857Sobrien_startup_libs+= lib/csu/${MACHINE_ARCH} 101389857Sobrien.endif 101489857Sobrien 101589857Sobrien_prebuild_libs= ${_kerberos5_lib_libasn1} ${_kerberos5_lib_libkrb5} \ 101689857Sobrien ${_kerberos5_lib_libroken} \ 101789857Sobrien lib/libbz2 lib/libcom_err lib/libcrypt lib/libexpat \ 101889857Sobrien ${_lib_libgssapi} ${_lib_libipx} \ 101989857Sobrien lib/libkiconv lib/libkvm lib/libmd \ 102089857Sobrien lib/libncurses lib/libopie lib/libpam \ 102189857Sobrien lib/libradius lib/libsbuf lib/libtacplus lib/libutil \ 102289857Sobrien ${_lib_libypclnt} lib/libz lib/msun \ 102389857Sobrien ${_secure_lib_libcrypto} ${_secure_lib_libssh} \ 102489857Sobrien ${_secure_lib_libssl} 102589857Sobrien 102689857Sobrien_generic_libs= gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib 102789857Sobrien 102889857Sobrienlib/libopie__L lib/libtacplus__L: lib/libmd__L 102989857Sobrien 103089857Sobrien.if ${MK_CRYPT} != "no" 103189857Sobrien.if ${MK_OPENSSL} != "no" 103289857Sobrien_secure_lib_libcrypto= secure/lib/libcrypto 103389857Sobrien_secure_lib_libssl= secure/lib/libssl 103489857Sobrienlib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L 103589857Sobrien.if ${MK_OPENSSH} != "no" 103689857Sobrien_secure_lib_libssh= secure/lib/libssh 103789857Sobriensecure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L 103889857Sobrien.if ${MK_KERBEROS} != "no" 103989857Sobriensecure/lib/libssh__L: lib/libgssapi__L kerberos5/lib/libkrb5__L \ 104089857Sobrien kerberos5/lib/libasn1__L lib/libcom_err__L lib/libmd__L \ 104189857Sobrien kerberos5/lib/libroken__L 104289857Sobrien.endif 104389857Sobrien.endif 104489857Sobrien.endif 104589857Sobrien_secure_lib= secure/lib 104689857Sobrien.endif 104789857Sobrien 104889857Sobrien.if ${MK_IPX} != "no" 104989857Sobrien_lib_libipx= lib/libipx 105089857Sobrien.endif 105189857Sobrien 105289857Sobrien.if ${MK_KERBEROS} != "no" 105389857Sobrien_kerberos5_lib= kerberos5/lib 105489857Sobrien_kerberos5_lib_libasn1= kerberos5/lib/libasn1 105589857Sobrien_kerberos5_lib_libkrb5= kerberos5/lib/libkrb5 105689857Sobrien_kerberos5_lib_libroken= kerberos5/lib/libroken 105789857Sobrien_lib_libgssapi= lib/libgssapi 105889857Sobrien.endif 105989857Sobrien 106089857Sobrien.if ${MK_NIS} != "no" 106189857Sobrien_lib_libypclnt= lib/libypclnt 106289857Sobrien.endif 106389857Sobrien 106489857Sobrien.if ${MK_OPENSSL} == "no" 106589857Sobrienlib/libradius__L: lib/libmd__L 106689857Sobrien.endif 106789857Sobrien 106889857Sobrien.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs} 106989857Sobrien${_lib}__L: .PHONY 107089857Sobrien.if exists(${.CURDIR}/${_lib}) 107189857Sobrien ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \ 107289857Sobrien cd ${.CURDIR}/${_lib}; \ 107389857Sobrien ${MAKE} DIRPRFX=${_lib}/ obj; \ 107489857Sobrien ${MAKE} DIRPRFX=${_lib}/ depend; \ 107589857Sobrien ${MAKE} DIRPRFX=${_lib}/ all; \ 107689857Sobrien ${MAKE} DIRPRFX=${_lib}/ install 107789857Sobrien.endif 107889857Sobrien.endfor 107989857Sobrien 108089857Sobrien# libpam is special: we need to build static PAM modules before 108189857Sobrien# static PAM library, and dynamic PAM library before dynamic PAM 108289857Sobrien# modules. 108389857Sobrienlib/libpam__L: .PHONY 108489857Sobrien ${_+_}@${ECHODIR} "===> lib/libpam (obj,depend,all,install)"; \ 108589857Sobrien cd ${.CURDIR}/lib/libpam; \ 108689857Sobrien ${MAKE} DIRPRFX=lib/libpam/ obj; \ 108789857Sobrien ${MAKE} DIRPRFX=lib/libpam/ depend; \ 108889857Sobrien ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \ 108989857Sobrien ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install 109089857Sobrien 109189857Sobrien_startup_libs: ${_startup_libs:S/$/__L/} 109289857Sobrien_prebuild_libs: ${_prebuild_libs:S/$/__L/} 109389857Sobrien_generic_libs: ${_generic_libs:S/$/__L/} 109489857Sobrien 109589857Sobrien.for __target in all clean cleandepend cleandir depend includes obj 109689857Sobrien.for entry in ${SUBDIR} 109789857Sobrien${entry}.${__target}__D: .PHONY 109889857Sobrien ${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 109989857Sobrien ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \ 110089857Sobrien edir=${entry}.${MACHINE_ARCH}; \ 110189857Sobrien cd ${.CURDIR}/$${edir}; \ 110289857Sobrien else \ 110389857Sobrien ${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \ 110489857Sobrien edir=${entry}; \ 110589857Sobrien cd ${.CURDIR}/$${edir}; \ 110689857Sobrien fi; \ 110789857Sobrien ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 110889857Sobrien.endfor 110989857Sobrienpar-${__target}: ${SUBDIR:S/$/.${__target}__D/} 111089857Sobrien.endfor 111189857Sobrien 111289857Sobrien.include <bsd.subdir.mk> 111389857Sobrien 111489857Sobrien.if make(delete-old) || make(delete-old-libs) || make(check-old) 111589857Sobrien 111689857Sobrien# 111789857Sobrien# check for / delete old files section 111889857Sobrien# 111989857Sobrien 112089857Sobrien.include "ObsoleteFiles.inc" 112189857Sobrien 112289857SobrienOLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \ 112389857Sobrienelse you can not start such an application. Consult UPDATING for more \ 112489857Sobrieninformation regarding how to cope with the removal/revision bump of a \ 112589857Sobrienspecific library." 112689857Sobrien 112789857Sobrien.if !defined(BATCH_DELETE_OLD_FILES) 112889857SobrienRM_I=-i 112989857Sobrien.else 113089857SobrienRM_I=-v 113189857Sobrien.endif 113289857Sobrien 113389857Sobriendelete-old-files: 113489857Sobrien @echo ">>> Removing old files (only deletes safe to delete libs)" 113589857Sobrien.for file in ${OLD_FILES} 113689857Sobrien# Ask for every old file if the user really wants to remove it. 113789857Sobrien# It's annoying, but better safe than sorry. 113889857Sobrien @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 113989857Sobrien rm ${RM_I} "${DESTDIR}/${file}" || true; \ 114089857Sobrien if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\ 114189857Sobrien echo "Removing schg flag on ${DESTDIR}/${file}"; \ 114289857Sobrien chflags noschg "${DESTDIR}/${file}"; \ 114389857Sobrien rm ${RM_I} "${DESTDIR}/${file}"; \ 114489857Sobrien fi; \ 114589857Sobrien fi 114689857Sobrien.endfor 114789857Sobrien# Remove catpages without corresponding manpages. 114889857Sobrien @3<&0; \ 114989857Sobrien find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 115089857Sobrien sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 115189857Sobrien while read catpage; do \ 115289857Sobrien read manpage; \ 115389857Sobrien if [ ! -e "$${manpage}" ]; then \ 115489857Sobrien rm ${RM_I} $${catpage} <&3 ; \ 115589857Sobrien fi; \ 115689857Sobrien done 115789857Sobrien @echo ">>> Old files removed" 115889857Sobrien 115989857Sobriencheck-old-files: 116089857Sobrien @echo ">>> Checking for old files" 116189857Sobrien.for file in ${OLD_FILES} 116289857Sobrien @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 116389857Sobrien echo "${DESTDIR}/${file}"; \ 116489857Sobrien fi 116589857Sobrien.endfor 116689857Sobrien# Check for catpages without corresponding manpages. 116789857Sobrien @find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 116889857Sobrien sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 116989857Sobrien while read catpage; do \ 117089857Sobrien read manpage; \ 117189857Sobrien if [ ! -e "$${manpage}" ]; then \ 117289857Sobrien echo $${catpage} ; \ 117389857Sobrien fi; \ 117489857Sobrien done 117589857Sobrien 117689857Sobriendelete-old-libs: 117789857Sobrien @echo ">>> Removing old libraries" 117889857Sobrien @echo "${OLD_LIBS_MESSAGE}" | fmt 117989857Sobrien.for file in ${OLD_LIBS} 118089857Sobrien @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 118189857Sobrien rm ${RM_I} "${DESTDIR}/${file}" || true; \ 118289857Sobrien if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\ 118389857Sobrien echo "Removing schg flag on ${DESTDIR}/${file}"; \ 118489857Sobrien chflags noschg "${DESTDIR}/${file}"; \ 118589857Sobrien rm ${RM_I} "${DESTDIR}/${file}"; \ 118689857Sobrien fi; \ 118789857Sobrien fi 118889857Sobrien.endfor 118989857Sobrien @echo ">>> Old libraries removed" 119089857Sobrien 119189857Sobriencheck-old-libs: 119289857Sobrien @echo ">>> Checking for old libraries" 119389857Sobrien.for file in ${OLD_LIBS} 119489857Sobrien @if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \ 119589857Sobrien echo "${DESTDIR}/${file}"; \ 119689857Sobrien fi 119789857Sobrien.endfor 119889857Sobrien 119989857Sobriendelete-old-dirs: 120089857Sobrien @echo ">>> Removing old directories" 120189857Sobrien.for dir in ${OLD_DIRS} 120289857Sobrien# Don't fail if an old directory isn't empty. 120389857Sobrien @if [ -d "${DESTDIR}/${dir}" ]; then \ 120489857Sobrien rmdir -v "${DESTDIR}/${dir}" || true; \ 120589857Sobrien else \ 120689857Sobrien if [ -L "${DESTDIR}/${dir}" ]; then \ 120789857Sobrien echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \ 120889857Sobrien fi; \ 120989857Sobrien fi 121089857Sobrien.endfor 121189857Sobrien @echo ">>> Old directories removed" 121289857Sobrien 121389857Sobriencheck-old-dirs: 121489857Sobrien @echo ">>> Checking for old directories" 121589857Sobrien.for dir in ${OLD_DIRS} 121689857Sobrien @if [ -d "${DESTDIR}/${dir}" ]; then \ 121789857Sobrien echo "${DESTDIR}/${dir}"; \ 121889857Sobrien else \ 121989857Sobrien if [ -L "${DESTDIR}/${dir}" ]; then \ 122089857Sobrien echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \ 122189857Sobrien fi; \ 122289857Sobrien fi 122389857Sobrien.endfor 122489857Sobrien 122589857Sobriendelete-old: delete-old-files delete-old-dirs 122689857Sobrien @echo "To remove old libraries run '${MAKE} delete-old-libs'." 122789857Sobrien 122889857Sobriencheck-old: check-old-files check-old-libs check-old-dirs 122989857Sobrien @echo "To remove old files and directories run '${MAKE} delete-old'." 123089857Sobrien @echo "To remove old libraries run '${MAKE} delete-old-libs'." 123189857Sobrien 123289857Sobrien.endif 123389857Sobrien 123489857Sobrien# 123589857Sobrien# showconfig - show build configuration. 123689857Sobrien# 123789857Sobrienshowconfig: 123889857Sobrien @${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort 123989857Sobrien