kern.post.mk revision 147011
172445Sassar# $FreeBSD: head/sys/conf/kern.post.mk 147011 2005-06-05 18:34:16Z mux $ 272445Sassar 372445Sassar# Part of a unified Makefile for building kernels. This part includes all 472445Sassar# the definitions that need to be after all the % directives except %RULES 572445Sassar# and ones that act like they are part of %RULES. 672445Sassar# 772445Sassar# Most make variables should not be defined in this file. Instead, they 872445Sassar# should be defined in the kern.pre.mk so that port makefiles can 972445Sassar# override or augment them. 1072445Sassar 1172445Sassar# In case the config had a makeoptions DESTDIR... 1272445Sassar.if defined(DESTDIR) 1372445SassarMKMODULESENV+= DESTDIR="${DESTDIR}" 1472445Sassar.endif 1572445SassarMKMODULESENV+= KERNBUILDDIR="${.CURDIR}" 1672445Sassar 1772445Sassar.MAIN: all 1872445Sassar 1972445Sassar.for target in all clean cleandepend cleandir clobber depend install \ 2072445Sassar obj reinstall tags 2172445Sassar${target}: kernel-${target} 2272445Sassar.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 2372445Sassar${target}: modules-${target} 2472445Sassarmodules-${target}: 2572445Sassar cd $S/modules; ${MKMODULESENV} ${MAKE} \ 2672445Sassar ${target:S/^reinstall$/install/:S/^clobber$/cleandir/} 2772445Sassar.endif 2872445Sassar.endfor 2972445Sassar 3072445Sassar# Handle out of tree ports 3172445Sassar.if defined(PORTS_MODULES) 3272445Sassar.for _dir in ${.CURDIR}/../../.. 3372445Sassar.if !defined(SYSDIR) && exists(${_dir}/kern/) 3472445SassarSYSDIR= ${_dir} 3572445Sassar.endif 3672445Sassar.endfor 3772445SassarPORTSMODULESENV=SYSDIR=${SYSDIR} 3872445Sassar.for __target in all install reinstall clean 3972445Sassar${__target}: ports-${__target} 4072445Sassarports-${__target}: 4172445Sassar.for __i in ${PORTS_MODULES} 4272445Sassar cd $${PORTSDIR:-/usr/ports}/${__i}; ${PORTSMODULESENV} ${MAKE} -B ${__target:C/install/deinstall reinstall/:C/reinstall/deinstall reinstall/} 4372445Sassar.endfor 4472445Sassar.endfor 4572445Sassar.endif 4672445Sassar 4772445Sassar.ORDER: kernel-install modules-install 4872445Sassar 4972445Sassarkernel-all: ${KERNEL_KO} 5072445Sassar 5172445Sassarkernel-cleandir: kernel-clean 5272445Sassar 5372445Sassarkernel-clobber: 5472445Sassar find . -maxdepth 1 ! -type d ! -name version -delete 5572445Sassar 5672445Sassarkernel-obj: 5772445Sassar 5872445Sassar.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 5972445Sassarmodules: modules-all 6072445Sassar 6172445Sassar.if !defined(NO_MODULES_OBJ) 6272445Sassarmodules-all modules-depend: modules-obj 6372445Sassar.endif 6472445Sassar.endif 6572445Sassar 6672445Sassar.if !defined(DEBUG) 6772445SassarFULLKERNEL= ${KERNEL_KO} 6872445Sassar.else 6972445SassarFULLKERNEL= ${KERNEL_KO}.debug 7072445Sassar${KERNEL_KO}: ${FULLKERNEL} 7172445Sassar ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 7272445Sassarinstall.debug reinstall.debug: gdbinit 7372445Sassar cd ${.CURDIR}; ${MAKE} -DINSTALL_DEBUG ${.TARGET:R} 7472445Sassar 7572445Sassar# Install gdbinit files for kernel debugging. 7672445Sassargdbinit: 7772445Sassar grep -v '# XXX' ${S}/../tools/debugscripts/dot.gdbinit | \ 7872445Sassar sed "s:MODPATH:${.OBJDIR}/modules:" > .gdbinit 7972445Sassar cp ${S}/../tools/debugscripts/gdbinit.kernel ${.CURDIR} 8072445Sassar.if exists(${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH}) 8172445Sassar cp ${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH} \ 8272445Sassar ${.CURDIR}/gdbinit.machine 8372445Sassar.endif 8472445Sassar.endif 8572445Sassar 8672445Sassar${FULLKERNEL}: ${SYSTEM_DEP} vers.o 8772445Sassar @rm -f ${.TARGET} 8872445Sassar @echo linking ${.TARGET} 8972445Sassar ${SYSTEM_LD} 9072445Sassar.if !defined(DEBUG) 9172445Sassar ${OBJCOPY} --strip-debug ${.TARGET} 9272445Sassar.endif 9372445Sassar ${SYSTEM_LD_TAIL} 9472445Sassar 9572445Sassar.if !exists(${.OBJDIR}/.depend) 9672445Sassar${SYSTEM_OBJS}: assym.s vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 9772445Sassar.endif 9872445Sassar 9972445SassarLNFILES= ${CFILES:T:S/.c$/.ln/} 10072445Sassar 10172445Sassar.for mfile in ${MFILES} 10272445Sassar# XXX the low quality .m.o rules gnerated by config are normally used 10372445Sassar# instead of the .m.c rules here. 10472445Sassar${mfile:T:S/.m$/.c/}: ${mfile} 10572445Sassar ${AWK} -f $S/tools/makeobjops.awk ${mfile} -c 10672445Sassar${mfile:T:S/.m$/.h/}: ${mfile} 10772445Sassar ${AWK} -f $S/tools/makeobjops.awk ${mfile} -h 10872445Sassar.endfor 10972445Sassar 11072445Sassarkernel-clean: 11172445Sassar rm -f *.o *.so *.So *.ko *.s eddep errs \ 11272445Sassar ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks tags vers.c \ 11372445Sassar vnode_if.c vnode_if.h vnode_if_newproto.h vnode_if_typedef.h \ 11472445Sassar ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 11572445Sassar ${CLEAN} 11672445Sassar 11772445Sassarlint: ${LNFILES} 11872445Sassar ${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC} 2>&1 | \ 11972445Sassar tee -a linterrs 12072445Sassar 12172445Sassar# This is a hack. BFD "optimizes" away dynamic mode if there are no 12272445Sassar# dynamic references. We could probably do a '-Bforcedynamic' mode like 12372445Sassar# in the a.out ld. For now, this works. 12472445SassarHACK_EXTRA_FLAGS?= -shared 12572445Sassarhack.So: Makefile 12672445Sassar touch hack.c 12772445Sassar ${CC} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So 12872445Sassar rm -f hack.c 12972445Sassar 13072445Sassar# This rule stops ./assym.s in .depend from causing problems. 13172445Sassar./assym.s: assym.s 13272445Sassar 13372445Sassarassym.s: $S/kern/genassym.sh genassym.o 13472445Sassar NM='${NM}' sh $S/kern/genassym.sh genassym.o > ${.TARGET} 13572445Sassar 13672445Sassargenassym.o: $S/$M/$M/genassym.c 13772445Sassar ${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c 13872445Sassar 13972445Sassar${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 14072445Sassar 14172445Sassarkernel-depend: .depend 14272445Sassar# The argument list can be very long, so use make -V and xargs to 14372445Sassar# pass it to mkdep. 14472445Sassar.depend: assym.s vnode_if.h ${BEFORE_DEPEND} ${CFILES} \ 14572445Sassar ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 14672445Sassar ${MFILES:T:S/.m$/.h/} 14772445Sassar rm -f .newdep 14872445Sassar ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | \ 14972445Sassar MKDEP_CPP="${CC} -E" CC="${CC}" xargs mkdep -a -f .newdep ${CFLAGS} 15072445Sassar ${MAKE} -V SFILES | \ 15172445Sassar MKDEP_CPP="${CC} -E" xargs mkdep -a -f .newdep ${ASM_CFLAGS} 15272445Sassar rm -f .depend 15372445Sassar mv .newdep .depend 15472445Sassar 15572445Sassarkernel-cleandepend: 15672445Sassar rm -f .depend 15772445Sassar 15872445Sassarlinks: 15972445Sassar egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 16072445Sassar sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 16172445Sassar ${MAKE} -V CFILES | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 16272445Sassar sort -u | comm -23 - dontlink | \ 16372445Sassar sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 16472445Sassar sh makelinks; rm -f dontlink 16572445Sassar 16672445Sassarkernel-tags: 16772445Sassar @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 16872445Sassar sh $S/conf/systags.sh 16972445Sassar rm -f tags1 17072445Sassar sed -e 's, ../, ,' tags > tags1 17172445Sassar 17272445Sassar.if ${MACHINE_ARCH} != "ia64" 17372445Sassar.if exists(${DESTDIR}/boot) 17472445Sassarkernel-install-check: 17572445Sassar @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 17672445Sassar echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 17772445Sassar exit 1 ; \ 17872445Sassar fi 17972445Sassar @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 18072445Sassar echo "You must activate /boot/device.hints in loader.conf." ; \ 18172445Sassar exit 1 ; \ 18272445Sassar fi 18372445Sassar 18472445Sassarkernel-install: kernel-install-check 18572445Sassar.endif 18672445Sassar.endif 18772445Sassar 18872445Sassarkernel-install: 18972445Sassar @if [ ! -f ${FULLKERNEL} ] ; then \ 19072445Sassar echo "You must build a kernel first." ; \ 19172445Sassar exit 1 ; \ 19272445Sassar fi 19372445Sassar.if exists(${DESTDIR}${KODIR}) 19472445Sassar -thiskernel=`sysctl -n kern.bootfile` ; \ 19572445Sassar if [ ! "`dirname "$$thiskernel"`" -ef ${DESTDIR}${KODIR} ] ; then \ 19672445Sassar chflags -R noschg ${DESTDIR}${KODIR} ; \ 19772445Sassar rm -rf ${DESTDIR}${KODIR} ; \ 19872445Sassar else \ 19972445Sassar if [ -d ${DESTDIR}${KODIR}.old ] ; then \ 20072445Sassar chflags -R noschg ${DESTDIR}${KODIR}.old ; \ 20172445Sassar rm -rf ${DESTDIR}${KODIR}.old ; \ 20272445Sassar fi ; \ 20372445Sassar mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ 20472445Sassar sysctl kern.bootfile=${DESTDIR}${KODIR}.old/"`basename "$$thiskernel"`" ; \ 20572445Sassar fi 20672445Sassar.endif 20772445Sassar mkdir -p ${DESTDIR}${KODIR} 20872445Sassar.if defined(DEBUG) && defined(INSTALL_DEBUG) 20972445Sassar ${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR} 21072445Sassar.else 21172445Sassar ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 21272445Sassar.endif 21372445Sassar 21472445Sassarkernel-reinstall: 21572445Sassar @-chflags -R noschg ${DESTDIR}${KODIR} 21672445Sassar.if defined(DEBUG) && defined(INSTALL_DEBUG) 21772445Sassar ${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR} 21872445Sassar.else 21972445Sassar ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 22072445Sassar.endif 22172445Sassar 22272445Sassarconfig.o env.o hints.o vers.o vnode_if.o: 22372445Sassar ${NORMAL_C} 22472445Sassar 22572445Sassarconfig.ln env.ln hints.ln vers.ln vnode_if.ln: 22672445Sassar ${NORMAL_LINT} 22772445Sassar 22872445Sassarvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 22972445Sassar MAKE=${MAKE} sh $S/conf/newvers.sh ${KERN_IDENT} 23072445Sassar 23172445Sassarvnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src 23272445Sassar ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -c 23372445Sassar 23472445Sassarvnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src 23572445Sassar ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h 23672445Sassar ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -p 23772445Sassar ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -q 23872445Sassar 23972445Sassar# XXX strictly, everything depends on Makefile because changes to ${PROF} 24072445Sassar# only appear there, but we don't handle that. 24172445Sassar 24272445Sassar.include "kern.mk" 24372445Sassar