kern.post.mk revision 151646
1122715Sbde# $FreeBSD: head/sys/conf/kern.post.mk 151646 2005-10-25 09:05:07Z ru $ 2122715Sbde 3122715Sbde# Part of a unified Makefile for building kernels. This part includes all 4122715Sbde# the definitions that need to be after all the % directives except %RULES 5122715Sbde# and ones that act like they are part of %RULES. 685909Simp# 788893Simp# Most make variables should not be defined in this file. Instead, they 888893Simp# should be defined in the kern.pre.mk so that port makefiles can 988969Simp# override or augment them. 1085909Simp 11115572Sphk# In case the config had a makeoptions DESTDIR... 12115572Sphk.if defined(DESTDIR) 13115572SphkMKMODULESENV+= DESTDIR="${DESTDIR}" 14115572Sphk.endif 15124108SimpMKMODULESENV+= KERNBUILDDIR="${.CURDIR}" 16115572Sphk 17111211Sru.MAIN: all 1885909Simp 19111802Sru.for target in all clean cleandepend cleandir clobber depend install \ 20111802Sru obj reinstall tags 21111211Sru${target}: kernel-${target} 22111211Sru.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 23111211Sru${target}: modules-${target} 24111211Srumodules-${target}: 25111802Sru cd $S/modules; ${MKMODULESENV} ${MAKE} \ 26111802Sru ${target:S/^reinstall$/install/:S/^clobber$/cleandir/} 27111211Sru.endif 28111211Sru.endfor 2985909Simp 30137596Simp# Handle out of tree ports 31147155Simp.if !defined(NO_MODULES) && defined(PORTS_MODULES) 32142424Simp.for _dir in ${.CURDIR}/../../.. 33142424Simp.if !defined(SYSDIR) && exists(${_dir}/kern/) 34142424SimpSYSDIR= ${_dir} 35142424Simp.endif 36142424Simp.endfor 37137596SimpPORTSMODULESENV=SYSDIR=${SYSDIR} 38147011Smux.for __target in all install reinstall clean 39142424Simp${__target}: ports-${__target} 40142413Simpports-${__target}: 41137596Simp.for __i in ${PORTS_MODULES} 42147011Smux cd $${PORTSDIR:-/usr/ports}/${__i}; ${PORTSMODULESENV} ${MAKE} -B ${__target:C/install/deinstall reinstall/:C/reinstall/deinstall reinstall/} 43137596Simp.endfor 44137596Simp.endfor 45137596Simp.endif 46137596Simp 47111211Sru.ORDER: kernel-install modules-install 48111211Sru 49111211Srukernel-all: ${KERNEL_KO} 50111211Sru 51111802Srukernel-cleandir: kernel-clean 52111802Sru 53111802Srukernel-clobber: 54111766Sru find . -maxdepth 1 ! -type d ! -name version -delete 55111211Sru 56111766Srukernel-obj: 57111766Sru 58111211Sru.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 59111211Srumodules: modules-all 60111211Sru 61111211Sru.if !defined(NO_MODULES_OBJ) 62111211Srumodules-all modules-depend: modules-obj 63111211Sru.endif 64111211Sru.endif 65111211Sru 66151636Simp.if !defined(DEBUG) 67151636SimpFULLKERNEL= ${KERNEL_KO} 68151636Simp.else 69151636SimpFULLKERNEL= ${KERNEL_KO}.debug 70151636Simp${KERNEL_KO}: ${FULLKERNEL} 71151636Simp ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 72151646Sruinstall.debug reinstall.debug: gdbinit 73151646Sru cd ${.CURDIR}; ${MAKE} ${.TARGET:R} 74116252Sgrog 75123965Sbde# Install gdbinit files for kernel debugging. 76116252Sgroggdbinit: 77123965Sbde grep -v '# XXX' ${S}/../tools/debugscripts/dot.gdbinit | \ 78123965Sbde sed "s:MODPATH:${.OBJDIR}/modules:" > .gdbinit 79135611Sphk cp ${S}/../tools/debugscripts/gdbinit.kernel ${.CURDIR} 80124776Sru.if exists(${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH}) 81116252Sgrog cp ${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH} \ 82123965Sbde ${.CURDIR}/gdbinit.machine 8385909Simp.endif 84124776Sru.endif 8585909Simp 86151636Simp${FULLKERNEL}: ${SYSTEM_DEP} vers.o 8785909Simp @rm -f ${.TARGET} 8885909Simp @echo linking ${.TARGET} 8985909Simp ${SYSTEM_LD} 90125775Sru.if !defined(DEBUG) 91125775Sru ${OBJCOPY} --strip-debug ${.TARGET} 92125775Sru.endif 9385909Simp ${SYSTEM_LD_TAIL} 9485909Simp 95116691Sru.if !exists(${.OBJDIR}/.depend) 96131129Simp${SYSTEM_OBJS}: assym.s vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 9785909Simp.endif 9885909Simp 99116341SmarkmLNFILES= ${CFILES:T:S/.c$/.ln/} 100116341Smarkm 10185909Simp.for mfile in ${MFILES} 102102082Sbde# XXX the low quality .m.o rules gnerated by config are normally used 103102082Sbde# instead of the .m.c rules here. 104102082Sbde${mfile:T:S/.m$/.c/}: ${mfile} 105102082Sbde ${AWK} -f $S/tools/makeobjops.awk ${mfile} -c 10685909Simp${mfile:T:S/.m$/.h/}: ${mfile} 10795844Sobrien ${AWK} -f $S/tools/makeobjops.awk ${mfile} -h 10885909Simp.endfor 10985909Simp 11085909Simpkernel-clean: 11185909Simp rm -f *.o *.so *.So *.ko *.s eddep errs \ 112151636Simp ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks tags vers.c \ 113145416Sru vnode_if.c vnode_if.h vnode_if_newproto.h vnode_if_typedef.h \ 114123965Sbde ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 115123965Sbde ${CLEAN} 11685909Simp 117116341Smarkmlint: ${LNFILES} 118123965Sbde ${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC} 2>&1 | \ 119123965Sbde tee -a linterrs 12092491Smarkm 12185909Simp# This is a hack. BFD "optimizes" away dynamic mode if there are no 12285909Simp# dynamic references. We could probably do a '-Bforcedynamic' mode like 12385909Simp# in the a.out ld. For now, this works. 12485909SimpHACK_EXTRA_FLAGS?= -shared 12585909Simphack.So: Makefile 12685909Simp touch hack.c 127123966Sbde ${CC} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So 12885909Simp rm -f hack.c 12985909Simp 130123965Sbde# This rule stops ./assym.s in .depend from causing problems. 13185909Simp./assym.s: assym.s 13285909Simp 13385909Simpassym.s: $S/kern/genassym.sh genassym.o 134127306Sobrien NM='${NM}' sh $S/kern/genassym.sh genassym.o > ${.TARGET} 13585909Simp 13685909Simpgenassym.o: $S/$M/$M/genassym.c 137123985Sbde ${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c 13885909Simp 13985909Simp${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 14085909Simp 141145403Srukernel-depend: .depend 142102073Sbde# The argument list can be very long, so use make -V and xargs to 14391104Sjake# pass it to mkdep. 144145403Sru.depend: assym.s vnode_if.h ${BEFORE_DEPEND} ${CFILES} \ 145131210Simp ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 146131210Simp ${MFILES:T:S/.m$/.h/} 14785909Simp rm -f .newdep 148131210Simp ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | \ 149102073Sbde MKDEP_CPP="${CC} -E" CC="${CC}" xargs mkdep -a -f .newdep ${CFLAGS} 150111684Sru ${MAKE} -V SFILES | \ 151102073Sbde MKDEP_CPP="${CC} -E" xargs mkdep -a -f .newdep ${ASM_CFLAGS} 15285909Simp rm -f .depend 15385909Simp mv .newdep .depend 15485909Simp 15585909Simpkernel-cleandepend: 15685909Simp rm -f .depend 15785909Simp 15885909Simplinks: 15985909Simp egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 160123965Sbde sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 16191046Sluigi ${MAKE} -V CFILES | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 162123965Sbde sort -u | comm -23 - dontlink | \ 163123965Sbde sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 16485909Simp sh makelinks; rm -f dontlink 16585909Simp 16685909Simpkernel-tags: 16785909Simp @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 16885909Simp sh $S/conf/systags.sh 16985909Simp rm -f tags1 17085909Simp sed -e 's, ../, ,' tags > tags1 17185909Simp 172127246Smarcel.if ${MACHINE_ARCH} != "ia64" 17385909Simp.if exists(${DESTDIR}/boot) 174127246Smarcelkernel-install-check: 17585909Simp @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 17685909Simp echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 17785909Simp exit 1 ; \ 17885909Simp fi 17985909Simp @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 18085909Simp echo "You must activate /boot/device.hints in loader.conf." ; \ 18185909Simp exit 1 ; \ 18285909Simp fi 183127246Smarcel 184127246Smarcelkernel-install: kernel-install-check 18585909Simp.endif 186127246Smarcel.endif 187127246Smarcel 188127246Smarcelkernel-install: 189151636Simp @if [ ! -f ${FULLKERNEL} ] ; then \ 19085909Simp echo "You must build a kernel first." ; \ 19185909Simp exit 1 ; \ 19285909Simp fi 19385909Simp.if exists(${DESTDIR}${KODIR}) 19485909Simp -thiskernel=`sysctl -n kern.bootfile` ; \ 195145623Sru if [ ! "`dirname "$$thiskernel"`" -ef ${DESTDIR}${KODIR} ] ; then \ 19685909Simp chflags -R noschg ${DESTDIR}${KODIR} ; \ 19785909Simp rm -rf ${DESTDIR}${KODIR} ; \ 19885909Simp else \ 19985909Simp if [ -d ${DESTDIR}${KODIR}.old ] ; then \ 20085909Simp chflags -R noschg ${DESTDIR}${KODIR}.old ; \ 20185909Simp rm -rf ${DESTDIR}${KODIR}.old ; \ 20285909Simp fi ; \ 20385909Simp mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ 204118633Sru sysctl kern.bootfile=${DESTDIR}${KODIR}.old/"`basename "$$thiskernel"`" ; \ 20585909Simp fi 20685909Simp.endif 20785909Simp mkdir -p ${DESTDIR}${KODIR} 208151636Simp.if defined(DEBUG) && !defined(INSTALL_NODEBUG) 209151646Sru ${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR}/${KERNEL_KO} 210151636Simp.else 211109514Sobrien ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 212151636Simp.endif 21385909Simp 21495356Srukernel-reinstall: 21585909Simp @-chflags -R noschg ${DESTDIR}${KODIR} 216151636Simp.if defined(DEBUG) && !defined(INSTALL_NODEBUG) 217151646Sru ${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR}/${KERNEL_KO} 218151636Simp.else 219109514Sobrien ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 220151636Simp.endif 22185909Simp 222144293Sphkconfig.o env.o hints.o vers.o vnode_if.o: 22385909Simp ${NORMAL_C} 22485909Simp 225144293Sphkconfig.ln env.ln hints.ln vers.ln vnode_if.ln: 226116341Smarkm ${NORMAL_LINT} 227116341Smarkm 22885909Simpvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 229135371Sru MAKE=${MAKE} sh $S/conf/newvers.sh ${KERN_IDENT} 23085909Simp 23191512Sobrienvnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src 23291512Sobrien ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -c 23385909Simp 23491512Sobrienvnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src 23591512Sobrien ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h 236138290Sphk ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -p 237138290Sphk ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -q 23885909Simp 239116691Sru# XXX strictly, everything depends on Makefile because changes to ${PROF} 240116691Sru# only appear there, but we don't handle that. 24185909Simp 242111686Sru.include "kern.mk" 243