kern.post.mk revision 161283
1139823Simp# $FreeBSD: head/sys/conf/kern.post.mk 161283 2006-08-14 13:28:53Z des $ 2189592Sbms 31541Srgrimes# Part of a unified Makefile for building kernels. This part includes all 41541Srgrimes# the definitions that need to be after all the % directives except %RULES 51541Srgrimes# and ones that act like they are part of %RULES. 61541Srgrimes# 71541Srgrimes# Most make variables should not be defined in this file. Instead, they 81541Srgrimes# should be defined in the kern.pre.mk so that port makefiles can 91541Srgrimes# override or augment them. 101541Srgrimes 111541Srgrimes# In case the config had a makeoptions DESTDIR... 121541Srgrimes.if defined(DESTDIR) 131541SrgrimesMKMODULESENV+= DESTDIR="${DESTDIR}" 141541Srgrimes.endif 151541SrgrimesMKMODULESENV+= KERNBUILDDIR="${.CURDIR}" 161541Srgrimes 171541Srgrimes.MAIN: all 181541Srgrimes 191541Srgrimes.for target in all clean cleandepend cleandir clobber depend install \ 201541Srgrimes obj reinstall tags 211541Srgrimes${target}: kernel-${target} 221541Srgrimes.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 231541Srgrimes${target}: modules-${target} 241541Srgrimesmodules-${target}: 251541Srgrimes cd $S/modules; ${MKMODULESENV} ${MAKE} \ 261541Srgrimes ${target:S/^reinstall$/install/:S/^clobber$/cleandir/} 271541Srgrimes.endif 281541Srgrimes.endfor 291541Srgrimes 301541Srgrimes# Handle out of tree ports 311541Srgrimes.if !defined(NO_MODULES) && defined(PORTS_MODULES) 321541SrgrimesSYSDIR?= ${S:C;^[^/];${.CURDIR}/&;} 331541SrgrimesPORTSMODULESENV=SYSDIR=${SYSDIR} 341541Srgrimes.for __target in all install reinstall clean 351541Srgrimes${__target}: ports-${__target} 361541Srgrimesports-${__target}: 372531Swollman.for __i in ${PORTS_MODULES} 382531Swollman cd $${PORTSDIR:-/usr/ports}/${__i}; ${PORTSMODULESENV} ${MAKE} -B ${__target:C/install/deinstall reinstall/:C/reinstall/deinstall reinstall/} 39189592Sbms.endfor 402531Swollman.endfor 412531Swollman.endif 422531Swollman 439209Swollman.ORDER: kernel-install modules-install 4414622Sfenner 45189592Sbmskernel-all: ${KERNEL_KO} 462531Swollman 4714622Sfennerkernel-cleandir: kernel-clean kernel-cleandepend 482531Swollman 491541Srgrimeskernel-clobber: 50172467Ssilby find . -maxdepth 1 ! -type d ! -name version -delete 51172467Ssilby 52172467Ssilbykernel-obj: 531541Srgrimes 541549Srgrimes.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 55189592Sbmsmodules: modules-all 5629024Sbde 571541Srgrimes.if !defined(NO_MODULES_OBJ) 581541Srgrimesmodules-all modules-depend: modules-obj 591541Srgrimes.endif 6012296Sphk.endif 616472Swollman 62181803Sbz.if !defined(DEBUG) 63189592SbmsFULLKERNEL= ${KERNEL_KO} 64189592Sbms.else 651541SrgrimesFULLKERNEL= ${KERNEL_KO}.debug 661541Srgrimes${KERNEL_KO}: ${FULLKERNEL} ${KERNEL_KO}.symbols 67189592Sbms ${OBJCOPY} --strip-debug --add-gnu-debuglink=${KERNEL_KO}.symbols\ 68185571Sbz ${FULLKERNEL} ${.TARGET} 691541Srgrimes${KERNEL_KO}.symbols: ${FULLKERNEL} 701541Srgrimes ${OBJCOPY} --only-keep-debug ${FULLKERNEL} ${.TARGET} 711541Srgrimesinstall.debug reinstall.debug: gdbinit 721541Srgrimes cd ${.CURDIR}; ${MAKE} ${.TARGET:R} 731541Srgrimes 741541Srgrimes# Install gdbinit files for kernel debugging. 75152592Sandregdbinit: 761541Srgrimes grep -v '# XXX' ${S}/../tools/debugscripts/dot.gdbinit | \ 771541Srgrimes sed "s:MODPATH:${.OBJDIR}/modules:" > .gdbinit 781541Srgrimes cp ${S}/../tools/debugscripts/gdbinit.kernel ${.CURDIR} 7960105Sjlemon.if exists(${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH}) 8060105Sjlemon cp ${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH} \ 81163606Srwatson ${.CURDIR}/gdbinit.machine 82163606Srwatson.endif 83189592Sbms.endif 84191657Sbms 85189592Sbms${FULLKERNEL}: ${SYSTEM_DEP} vers.o 8630309Sphk @rm -f ${.TARGET} 87189592Sbms @echo linking ${.TARGET} 88189592Sbms ${SYSTEM_LD} 89189592Sbms.if !defined(DEBUG) 90189592Sbms ${OBJCOPY} --strip-debug ${.TARGET} 91189592Sbms.endif 92189592Sbms ${SYSTEM_LD_TAIL} 93189592Sbms.if defined(MFS_IMAGE) 94189592Sbms @dd if="${MFS_IMAGE}" ibs=8192 of="${KERNEL_KO}" \ 95189592Sbms obs=`strings -at d "${KERNEL_KO}" | \ 96193231Sbms grep "MFS Filesystem goes here" | awk '{print $$1}'` \ 97193231Sbms oseek=1 conv=notrunc 2>/dev/null && \ 98189592Sbms strings ${KERNEL_KO} | \ 99189592Sbms grep 'MFS Filesystem had better STOP here' > /dev/null || \ 100189592Sbms (rm ${KERNEL_KO} && echo 'MFS image too large' && false) 101189592Sbms.endif 102189592Sbms 103189592Sbms.if !exists(${.OBJDIR}/.depend) 104189592Sbms${SYSTEM_OBJS}: assym.s vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 105189592Sbms.endif 106189592Sbms 107189592SbmsLNFILES= ${CFILES:T:S/.c$/.ln/} 108189592Sbms 109189592Sbms.for mfile in ${MFILES} 110189592Sbms# XXX the low quality .m.o rules gnerated by config are normally used 111189592Sbms# instead of the .m.c rules here. 112189592Sbms${mfile:T:S/.m$/.c/}: ${mfile} 113189592Sbms ${AWK} -f $S/tools/makeobjops.awk ${mfile} -c 114185088Szec${mfile:T:S/.m$/.h/}: ${mfile} 115189592Sbms ${AWK} -f $S/tools/makeobjops.awk ${mfile} -h 116189592Sbms.endfor 117189592Sbms 118189592Sbmskernel-clean: 119189592Sbms rm -f *.o *.so *.So *.ko *.s eddep errs \ 120189592Sbms ${FULLKERNEL} ${KERNEL_KO} ${KERNEL_KO}.symbols \ 121189592Sbms linterrs makelinks tags vers.c \ 122189592Sbms vnode_if.c vnode_if.h vnode_if_newproto.h vnode_if_typedef.h \ 123189592Sbms ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 124189592Sbms ${CLEAN} ${_ILINKS} 125189592Sbms 126189592Sbmslint: ${LNFILES} 127189592Sbms ${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC} 2>&1 | \ 128189592Sbms tee -a linterrs 129189592Sbms 130189592Sbms# This is a hack. BFD "optimizes" away dynamic mode if there are no 131189592Sbms# dynamic references. We could probably do a '-Bforcedynamic' mode like 132189592Sbms# in the a.out ld. For now, this works. 133189592SbmsHACK_EXTRA_FLAGS?= -shared 134189592Sbmshack.So: Makefile 135189592Sbms :> hack.c 136189592Sbms ${CC} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So 137189592Sbms rm -f hack.c 138189592Sbms 1392531Swollman# This rule stops ./assym.s in .depend from causing problems. 140189592Sbms./assym.s: assym.s 141189592Sbms 14212296Sphkassym.s: $S/kern/genassym.sh genassym.o 143193219Srwatson NM='${NM}' sh $S/kern/genassym.sh genassym.o > ${.TARGET} 144193219Srwatson 145193219Srwatsongenassym.o: $S/$M/$M/genassym.c 146193219Srwatson ${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c 147193219Srwatson 148193219Srwatson${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 149193219Srwatson 150130333Srwatsonkernel-depend: .depend 151189592Sbms# The argument list can be very long, so use make -V and xargs to 152189592Sbms# pass it to mkdep. 153189592SbmsSRCS= assym.s vnode_if.h ${BEFORE_DEPEND} ${CFILES} \ 154189592Sbms ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 155189592Sbms ${MFILES:T:S/.m$/.h/} 156189592Sbms.depend: ${SRCS} 157189592Sbms rm -f .newdep 158189592Sbms ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | \ 159189592Sbms MKDEP_CPP="${CC} -E" CC="${CC}" xargs mkdep -a -f .newdep ${CFLAGS} 160189592Sbms ${MAKE} -V SFILES | \ 161189592Sbms MKDEP_CPP="${CC} -E" xargs mkdep -a -f .newdep ${ASM_CFLAGS} 162191264Sbms rm -f .depend 163191264Sbms mv .newdep .depend 164189592Sbms 165189592Sbms_ILINKS= machine 166189592Sbms.if ${MACHINE} != ${MACHINE_ARCH} 167189592Sbms_ILINKS+= ${MACHINE_ARCH} 168189592Sbms.endif 169189592Sbms 170189592Sbms# Ensure that the link exists without depending on it when it exists. 171189592Sbms.for _link in ${_ILINKS} 172189592Sbms.if !exists(${.OBJDIR}/${_link}) 173189592Sbms${SRCS}: ${_link} 174189592Sbms.endif 175189592Sbms.endfor 176189592Sbms 177189592Sbms${_ILINKS}: 178189592Sbms @case ${.TARGET} in \ 179189592Sbms machine) \ 180189592Sbms path=${S}/${MACHINE}/include ;; \ 181189592Sbms ${MACHINE_ARCH}) \ 182189592Sbms path=${S}/${MACHINE_ARCH}/include ;; \ 183189592Sbms esac ; \ 184189931Sbms ${ECHO} ${.TARGET} "->" $$path ; \ 185189931Sbms ln -s $$path ${.TARGET} 186189931Sbms 187189931Sbmskernel-cleandepend: 188189931Sbms rm -f .depend 189130333Srwatson 190189592Sbmslinks: 191189592Sbms egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 192189592Sbms sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 193189592Sbms ${MAKE} -V CFILES | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 194189592Sbms sort -u | comm -23 - dontlink | \ 195189592Sbms sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 196189592Sbms sh makelinks; rm -f dontlink 197189592Sbms 198189592Sbmskernel-tags: 199189592Sbms @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 200189592Sbms sh $S/conf/systags.sh 201189592Sbms 202189592Sbmskernel-install: 203189592Sbms @if [ ! -f ${KERNEL_KO} ] ; then \ 204189592Sbms echo "You must build a kernel first." ; \ 205189592Sbms exit 1 ; \ 206189592Sbms fi 207189592Sbms.if exists(${DESTDIR}${KODIR}) 208189592Sbms -thiskernel=`sysctl -n kern.bootfile` ; \ 209189592Sbms if [ ! "`dirname "$$thiskernel"`" -ef ${DESTDIR}${KODIR} ] ; then \ 210189592Sbms chflags -R noschg ${DESTDIR}${KODIR} ; \ 211189592Sbms rm -rf ${DESTDIR}${KODIR} ; \ 212189592Sbms else \ 213189592Sbms if [ -d ${DESTDIR}${KODIR}.old ] ; then \ 214195699Srwatson chflags -R noschg ${DESTDIR}${KODIR}.old ; \ 215195699Srwatson rm -rf ${DESTDIR}${KODIR}.old ; \ 216195699Srwatson fi ; \ 217195699Srwatson mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ 218195699Srwatson sysctl kern.bootfile=${DESTDIR}${KODIR}.old/"`basename "$$thiskernel"`" ; \ 219195699Srwatson fi 220195699Srwatson.endif 221130333Srwatson mkdir -p ${DESTDIR}${KODIR} 222195727Srwatson ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 223195727Srwatson.if defined(DEBUG) && !defined(INSTALL_NODEBUG) 224195727Srwatson ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO}.symbols ${DESTDIR}${KODIR} 225189592Sbms.endif 226195699Srwatson 227195699Srwatsonkernel-reinstall: 228195699Srwatson @-chflags -R noschg ${DESTDIR}${KODIR} 229189592Sbms ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 230195727Srwatson.if defined(DEBUG) && !defined(INSTALL_NODEBUG) 231195727Srwatson ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO}.symbols ${DESTDIR}${KODIR} 232195727Srwatson.endif 233195699Srwatson 234195699Srwatsonconfig.o env.o hints.o vers.o vnode_if.o: 235195699Srwatson ${NORMAL_C} 236195699Srwatson 237195699Srwatsonconfig.ln env.ln hints.ln vers.ln vnode_if.ln: 238195699Srwatson ${NORMAL_LINT} 239195699Srwatson 240195699Srwatsonvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 241195699Srwatson MAKE=${MAKE} sh $S/conf/newvers.sh ${KERN_IDENT} 242195727Srwatson 243195727Srwatsonvnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src 244195727Srwatson ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -c 245195727Srwatson 246195727Srwatsonvnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src 247195727Srwatson ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h 248195727Srwatson ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -p 249195699Srwatson ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -q 250130333Srwatson 251189592Sbms# XXX strictly, everything depends on Makefile because changes to ${PROF} 252130333Srwatson# only appear there, but we don't handle that. 253195699Srwatson 254195699Srwatson.include "kern.mk" 255195699Srwatson