kern.post.mk revision 116691
1101877Sjmallett# Part of unified Makefile for building kernels. This includes all 292821Simp# the definitions that need to be included after all the % directives, 392821Simp# except %RULES and things that act like they are part of %RULES 485909Simp# 588893Simp# Most make variables should not be defined in this file. Instead, they 688893Simp# should be defined in the kern.pre.mk so that port makefiles can 788969Simp# override or augment them. 888893Simp# 985909Simp# $FreeBSD: head/sys/conf/kern.post.mk 116691 2003-06-22 17:57:56Z ru $ 1085909Simp# 1185909Simp 12115572Sphk# In case the config had a makeoptions DESTDIR... 13115572Sphk.if defined(DESTDIR) 14115572SphkMKMODULESENV+= DESTDIR="${DESTDIR}" 15115572Sphk.endif 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 30111211Sru.ORDER: kernel-install modules-install 31111211Sru 32111211Srukernel-all: ${KERNEL_KO} 33111211Sru 34111802Srukernel-cleandir: kernel-clean 35111802Sru 36111802Srukernel-clobber: 37111766Sru find . -maxdepth 1 ! -type d ! -name version -delete 38111211Sru 39111766Srukernel-obj: 40111766Sru 41111211Sru.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 42111211Srumodules: modules-all 43111211Sru 44111211Sru.if !defined(NO_MODULES_OBJ) 45111211Srumodules-all modules-depend: modules-obj 46111211Sru.endif 47111211Sru.endif 48111211Sru 4985909Simp.if !defined(DEBUG) 5085909SimpFULLKERNEL= ${KERNEL_KO} 5185909Simp.else 5285909SimpFULLKERNEL= ${KERNEL_KO}.debug 5385909Simp${KERNEL_KO}: ${FULLKERNEL} 5485909Simp ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 55116252Sgroginstall.debug reinstall.debug: gdbinit 5695356Sru cd ${.CURDIR}; ${MAKE} -DINSTALL_DEBUG ${.TARGET:R} 57116252Sgrog 58116252Sgroggdbinit: 59116252Sgrog sed < ${S}/../tools/debugscripts/dot.gdbinit > .gdbinit \ 60116252Sgrog "s:MODPATH:modules${S}/modules:" 61116252Sgrog cp ${S}/../tools/debugscripts/gdbinit.kernel \ 62116252Sgrog ${S}/../tools/debugscripts/gdbinit.vinum ${.CURDIR} 63116252Sgrog cp ${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH} \ 64116252Sgrog ${.CURDIR}/gdbinit.machine 6585909Simp.endif 6685909Simp 6785909Simp${FULLKERNEL}: ${SYSTEM_DEP} vers.o 6885909Simp @rm -f ${.TARGET} 6985909Simp @echo linking ${.TARGET} 7085909Simp ${SYSTEM_LD} 7185909Simp ${SYSTEM_LD_TAIL} 7285909Simp 73116691Sru.if !exists(${.OBJDIR}/.depend) 74116691Sru${SYSTEM_OBJS}: assym.s miidevs.h vnode_if.h ${BEFORE_DEPEND:M*.h} \ 75116691Sru ${MFILES:T:S/.m$/.h/} 7685909Simp.endif 7785909Simp 78116341SmarkmLNFILES= ${CFILES:T:S/.c$/.ln/} 79116341Smarkm 8085909Simp.for mfile in ${MFILES} 81102082Sbde# XXX the low quality .m.o rules gnerated by config are normally used 82102082Sbde# instead of the .m.c rules here. 83102082Sbde${mfile:T:S/.m$/.c/}: ${mfile} 84102082Sbde ${AWK} -f $S/tools/makeobjops.awk ${mfile} -c 8585909Simp${mfile:T:S/.m$/.h/}: ${mfile} 8695844Sobrien ${AWK} -f $S/tools/makeobjops.awk ${mfile} -h 8785909Simp.endfor 8885909Simp 8985909Simpkernel-clean: 9085909Simp rm -f *.o *.so *.So *.ko *.s eddep errs \ 91103436Speter ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks tags \ 92111606Sphk vers.c vnode_if.c vnode_if.h majors.c \ 9385909Simp ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 9485909Simp ${CLEAN} 9585909Simp 96116341Smarkmlint: ${LNFILES} 97116341Smarkm ${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC} \ 98116341Smarkm 2>&1 | tee -a linterrs 9992491Smarkm 10085909Simp# This is a hack. BFD "optimizes" away dynamic mode if there are no 10185909Simp# dynamic references. We could probably do a '-Bforcedynamic' mode like 10285909Simp# in the a.out ld. For now, this works. 10385909SimpHACK_EXTRA_FLAGS?= -shared 10485909Simphack.So: Makefile 10585909Simp touch hack.c 10685909Simp ${CC} ${FMT} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So 10785909Simp rm -f hack.c 10885909Simp 10985909Simp# this rule stops ./assym.s in .depend from causing problems 11085909Simp./assym.s: assym.s 11185909Simp 11285909Simpassym.s: $S/kern/genassym.sh genassym.o 113103436Speter NM=${NM} sh $S/kern/genassym.sh genassym.o > ${.TARGET} 11485909Simp 11592821Simp# XXX used to force -elf after CFLAGS to work around breakage of cc -aout 11692821Simp# (genassym.sh makes some assumptions and cc stopped satisfying them). 11785909Simpgenassym.o: $S/$M/$M/genassym.c 11889180Smsmith ${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c 11985909Simp 12085909Simp${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 12185909Simp 12285909Simpkernel-depend: 12386048Simp.if defined(EXTRA_KERNELDEP) 12486048Simp ${EXTRA_KERNELDEP} 12586048Simp.endif 12685909Simp rm -f .olddep 12785909Simp if [ -f .depend ]; then mv .depend .olddep; fi 12885909Simp ${MAKE} _kernel-depend 12985909Simp 130102082Sbde# XXX this belongs elsewhere (inside GEN_CFILES if possible). 131102082SbdeGEN_M_CFILES= ${MFILES:T:S/.m$/.c/} 132102082Sbde 133102073Sbde# The argument list can be very long, so use make -V and xargs to 13491104Sjake# pass it to mkdep. 135115672Sobrien_kernel-depend: assym.s miidevs.h vnode_if.h ${BEFORE_DEPEND} \ 136102082Sbde ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${GEN_M_CFILES} \ 137111684Sru ${SFILES} ${MFILES:T:S/.m$/.h/} 13885909Simp if [ -f .olddep ]; then mv .olddep .depend; fi 13985909Simp rm -f .newdep 140102082Sbde ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES -V GEN_M_CFILES | \ 141102073Sbde MKDEP_CPP="${CC} -E" CC="${CC}" xargs mkdep -a -f .newdep ${CFLAGS} 142111684Sru ${MAKE} -V SFILES | \ 143102073Sbde MKDEP_CPP="${CC} -E" xargs mkdep -a -f .newdep ${ASM_CFLAGS} 14485909Simp rm -f .depend 14585909Simp mv .newdep .depend 14685909Simp 14785909Simpkernel-cleandepend: 14885909Simp rm -f .depend 14985909Simp 15085909Simplinks: 15185909Simp egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 15285909Simp sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 15391046Sluigi ${MAKE} -V CFILES | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 15485909Simp sort -u | comm -23 - dontlink | \ 15585909Simp sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 15685909Simp sh makelinks; rm -f dontlink 15785909Simp 15885909Simpkernel-tags: 15985909Simp @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 16085909Simp sh $S/conf/systags.sh 16185909Simp rm -f tags1 16285909Simp sed -e 's, ../, ,' tags > tags1 16385909Simp 16495356Srukernel-install: 16585909Simp.if exists(${DESTDIR}/boot) 16685909Simp @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 16785909Simp echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 16885909Simp exit 1 ; \ 16985909Simp fi 17085909Simp @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 17185909Simp echo "You must activate /boot/device.hints in loader.conf." ; \ 17285909Simp exit 1 ; \ 17385909Simp fi 17485909Simp.endif 17595356Sru @if [ ! -f ${FULLKERNEL} ] ; then \ 17685909Simp echo "You must build a kernel first." ; \ 17785909Simp exit 1 ; \ 17885909Simp fi 17985909Simp.if exists(${DESTDIR}${KODIR}) 18085909Simp -thiskernel=`sysctl -n kern.bootfile` ; \ 18185909Simp if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ 18285909Simp chflags -R noschg ${DESTDIR}${KODIR} ; \ 18385909Simp rm -rf ${DESTDIR}${KODIR} ; \ 18485909Simp else \ 18585909Simp if [ -d ${DESTDIR}${KODIR}.old ] ; then \ 18685909Simp chflags -R noschg ${DESTDIR}${KODIR}.old ; \ 18785909Simp rm -rf ${DESTDIR}${KODIR}.old ; \ 18885909Simp fi ; \ 18985909Simp mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ 19085909Simp if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ 19196398Sdd sysctl kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ 19285909Simp fi; \ 19385909Simp fi 19485909Simp.endif 19585909Simp mkdir -p ${DESTDIR}${KODIR} 19695356Sru.if defined(DEBUG) && defined(INSTALL_DEBUG) 197109514Sobrien ${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR} 19895356Sru.else 199109514Sobrien ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 20095356Sru.endif 20185909Simp 20295356Srukernel-reinstall: 20385909Simp @-chflags -R noschg ${DESTDIR}${KODIR} 20495356Sru.if defined(DEBUG) && defined(INSTALL_DEBUG) 205109514Sobrien ${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR} 20695356Sru.else 207109514Sobrien ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 20895356Sru.endif 20985909Simp 210116691Sruconfig.o env.o hints.o majors.o vers.o vnode_if.o: 21185909Simp ${NORMAL_C} 21285909Simp 213116691Sruconfig.ln env.ln hints.ln majors.ln vers.ln vnode_if.ln: 214116341Smarkm ${NORMAL_LINT} 215116341Smarkm 216116691Srumajors.c: $S/conf/majors $S/conf/majors.awk 217116691Sru ${AWK} -f $S/conf/majors.awk $S/conf/majors > ${.TARGET} 21892821Simp 21985909Simpvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 22099932Sbde sh $S/conf/newvers.sh ${KERN_IDENT} 22185909Simp 22291512Sobrienvnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src 22391512Sobrien ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -c 22485909Simp 22591512Sobrienvnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src 22691512Sobrien ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h 22785909Simp 228116691Sru# XXX strictly, everything depends on Makefile because changes to ${PROF} 229116691Sru# only appear there, but we don't handle that. 23085909Simp 231111686Sru.include "kern.mk" 232