kern.post.mk revision 85914
11558Srgrimes# kern.post.mk 298542Smckusick# 398542Smckusick# Unified Makefile for building kenrels. This includes all the definitions 498542Smckusick# that need to be included after all the % directives, except %RULES and 598542Smckusick# things that act like they are part of %RULES 698542Smckusick# 798542Smckusick# $FreeBSD: head/sys/conf/kern.post.mk 85914 2001-11-02 21:50:15Z imp $ 898542Smckusick# 9110884Smckusick 1098542Smckusick.PHONY: all modules 111558Srgrimes 121558Srgrimesall: ${KERNEL_KO} 131558Srgrimes 141558Srgrimesdepend: kernel-depend 151558Srgrimesclean: kernel-clean 161558Srgrimescleandepend: kernel-cleandepend 171558Srgrimesclobber: kernel-clobber 181558Srgrimestags: kernel-tags 191558Srgrimesinstall: kernel-install 201558Srgrimesinstall.debug: kernel-install.debug 211558Srgrimesreinstall: kernel-reinstall 221558Srgrimesreinstall.debug: kernel-reinstall.debug 231558Srgrimes 241558Srgrimes.if !defined(DEBUG) 251558SrgrimesFULLKERNEL= ${KERNEL_KO} 261558Srgrimes.else 271558SrgrimesFULLKERNEL= ${KERNEL_KO}.debug 281558Srgrimes${KERNEL_KO}: ${FULLKERNEL} 291558Srgrimes ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 301558Srgrimes.endif 311558Srgrimes 321558Srgrimes${FULLKERNEL}: ${SYSTEM_DEP} vers.o 331558Srgrimes @rm -f ${.TARGET} 341558Srgrimes @echo linking ${.TARGET} 351558Srgrimes ${SYSTEM_LD} 361558Srgrimes ${SYSTEM_LD_TAIL} 371558Srgrimes 381558Srgrimes.if !exists(.depend) 391558Srgrimes${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 401558Srgrimes.endif 411558Srgrimes 421558Srgrimes.for mfile in ${MFILES} 43114589Sobrien${mfile:T:S/.m$/.h/}: ${mfile} 441558Srgrimes perl5 $S/kern/makeobjops.pl -h ${mfile} 4523682Speter.endfor 46114589Sobrien 4737664Scharnierkernel-clean: 48114589Sobrien rm -f *.o *.so *.So *.ko *.s eddep errs \ 49114589Sobrien ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ 501558Srgrimes setdef[01].c setdefs.h tags \ 5137664Scharnier vers.c vnode_if.c vnode_if.h \ 52103949Smike ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 5337664Scharnier ${CLEAN} 5492709Siedowse 5537664Scharnierkernel-clobber: 5699796Sbde find . -type f ! -name version -delete 5737664Scharnier 581558Srgrimeslocore.o: $S/$M/$M/locore.s assym.s 591558Srgrimes ${NORMAL_S} 601558Srgrimes 6137664Scharnier# This is a hack. BFD "optimizes" away dynamic mode if there are no 621558Srgrimes# dynamic references. We could probably do a '-Bforcedynamic' mode like 631558Srgrimes# in the a.out ld. For now, this works. 6443804SdillonHACK_EXTRA_FLAGS?= -shared 651558Srgrimeshack.So: Makefile 661558Srgrimes touch hack.c 671558Srgrimes ${CC} ${FMT} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So 681558Srgrimes rm -f hack.c 693550Sphk 703550Sphk# this rule stops ./assym.s in .depend from causing problems 7113637Sjoerg./assym.s: assym.s 7292717Sphk 731558Srgrimesassym.s: $S/kern/genassym.sh genassym.o 741558Srgrimes NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} 75102231Strhodes 761558Srgrimesgenassym.o: $S/$M/$M/genassym.c 771558Srgrimes.if defined(EXTRA_GENASSYM) 781558Srgrimes ${EXTRA_GENASSYM} 791558Srgrimes.endif 8092717Sphk ${CC} -c ${CFLAGS} $S/$M/$M/genassym.c 81110671Sjmallett 82110671Sjmallett${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 831558Srgrimes 8498542Smckusickkernel-depend: 8598542Smckusick rm -f .olddep 8698542Smckusick if [ -f .depend ]; then mv .depend .olddep; fi 8798542Smckusick ${MAKE} _kernel-depend 8898542Smckusick 8998542Smckusick_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ 9098542Smckusick ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 911558Srgrimes ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} 9298542Smckusick if [ -f .olddep ]; then mv .olddep .depend; fi 9398542Smckusick rm -f .newdep 9498542Smckusick env MKDEP_CPP="${CC} -E" CC="${CC}" \ 9592717Sphk mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} 9693775Sbde env MKDEP_CPP="${CC} -E" \ 9793775Sbde mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} 9892712Siedowse rm -f .depend 9993775Sbde mv .newdep .depend 10093775Sbde 10198542Smckusickkernel-cleandepend: 10293775Sbde rm -f .depend 10393775Sbde 10498542Smckusicklinks: 105111268Smckusick egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 1061558Srgrimes sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 10737664Scharnier echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 10895357Sphk sort -u | comm -23 - dontlink | \ 1091558Srgrimes sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 11098542Smckusick sh makelinks; rm -f dontlink 11198542Smckusick 1121558Srgrimeskernel-tags: 1131558Srgrimes @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 11413769Sjoerg sh $S/conf/systags.sh 11513769Sjoerg rm -f tags1 1161558Srgrimes sed -e 's, ../, ,' tags > tags1 117110671Sjmallett 118110671Sjmallettkernel-install kernel-install.debug: 119110671Sjmallett.if exists(${DESTDIR}/boot) 120110671Sjmallett @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 121110671Sjmallett echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 122110671Sjmallett exit 1 ; \ 123111268Smckusick fi 12492722Sphk @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 125111268Smckusick echo "You must activate /boot/device.hints in loader.conf." ; \ 12692722Sphk exit 1 ; \ 127110885Smckusick fi 12824215Sache.endif 129107294Smckusick @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ 13098542Smckusick echo "You must build a kernel first." ; \ 13175124Sbde exit 1 ; \ 13275078Sobrien fi 133110174Sgordon.if exists(${DESTDIR}${KODIR}) 134110174Sgordon -thiskernel=`sysctl -n kern.bootfile` ; \ 1351558Srgrimes if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ 136102231Strhodes chflags -R noschg ${DESTDIR}${KODIR} ; \ 1371558Srgrimes rm -rf ${DESTDIR}${KODIR} ; \ 138102231Strhodes else \ 1391558Srgrimes if [ -d ${DESTDIR}${KODIR}.old ] ; then \ 14098542Smckusick chflags -R noschg ${DESTDIR}${KODIR}.old ; \ 14199796Sbde rm -rf ${DESTDIR}${KODIR}.old ; \ 14298542Smckusick fi ; \ 14398542Smckusick mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ 14420061Ssos if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ 14592532Sbde sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ 1461558Srgrimes fi; \ 147102231Strhodes fi 14875377Smckusick.endif 14975377Smckusick mkdir -p ${DESTDIR}${KODIR} 15075377Smckusick install -c -m 555 -o root -g wheel \ 15175377Smckusick ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} 15275377Smckusick 15375377Smckusickkernel-reinstall kernel-reinstall.debug: 15475377Smckusick @-chflags -R noschg ${DESTDIR}${KODIR} 15575377Smckusick install -c -m 555 -o root -g wheel \ 15675377Smckusick ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} 15775377Smckusick 1581558Srgrimes.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 1591558Srgrimesall: modules 1601558Srgrimesdepend: modules-depend 1611558Srgrimesclean: modules-clean 1621558Srgrimescleandepend: modules-cleandepend 1631558Srgrimescleandir: modules-cleandir 1641558Srgrimesclobber: modules-clobber 1651558Srgrimestags: modules-tags 1661558Srgrimesinstall: modules-install 1671558Srgrimesinstall.debug: modules-install.debug 1681558Srgrimesreinstall: modules-reinstall 1691558Srgrimesreinstall.debug: modules-reinstall.debug 1701558Srgrimes.endif 1711558Srgrimes 1721558SrgrimesMKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} 17393775Sbde.if defined(MODULES_OVERRIDE) 1741558SrgrimesMKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" 17593737Sphk.endif 1761558Srgrimes.if defined(DEBUG) 177107412SmckusickMKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" 178107412Smckusick.endif 179107412Smckusick 180107412Smckusickmodules: 181107412Smckusick @mkdir -p ${.OBJDIR}/modules 1821558Srgrimes cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ 18393737Sphk env ${MKMODULESENV} ${MAKE} all 1841558Srgrimes 18593737Sphkmodules-depend: 1861558Srgrimes @mkdir -p ${.OBJDIR}/modules 187107412Smckusick cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ 188107412Smckusick env ${MKMODULESENV} ${MAKE} depend 189107412Smckusick 190107412Smckusickmodules-clean: 191107412Smckusick cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean 1921558Srgrimes 19393775Sbdemodules-cleandepend: 19492532Sbde cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend 19593737Sphk 1961558Srgrimesmodules-clobber: modules-clean 19793737Sphk rm -rf ${MKMODULESENV} 19893775Sbde 19993775Sbdemodules-cleandir: 20093737Sphk cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir 20193737Sphk 20293737Sphkmodules-tags: 20398542Smckusick cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags 20498542Smckusick 20598542Smckusickmodules-install modules-reinstall: 20698542Smckusick cd $S/modules ; env ${MKMODULESENV} ${MAKE} install 20798542Smckusick 20898542Smckusickmodules-install.debug modules-reinstall.debug: 20998542Smckusick cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug 21098542Smckusick 21198542Smckusickconfig.o: 21298542Smckusick ${NORMAL_C} 21398542Smckusick 21498542Smckusickvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 21598542Smckusick sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} 21698542Smckusick 21798542Smckusick# XXX strictly, everything depends on Makefile because changes to ${PROF} 21898542Smckusick# only appear there, but we don't handle that. 2191558Srgrimesvers.o: 2201558Srgrimes ${NORMAL_C} 2211558Srgrimes 2221558Srgrimeshints.o: hints.c 22392712Siedowse ${NORMAL_C} 22492712Siedowse 2251558Srgrimesenv.o: env.c 22692712Siedowse ${NORMAL_C} 2271558Srgrimes 22893775Sbdevnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src 2291558Srgrimes perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src 2301558Srgrimes 2311558Srgrimesvnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src 23298542Smckusick perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src 23398542Smckusick 23498542Smckusickvnode_if.o: 23598542Smckusick ${NORMAL_C} 236107294Smckusick 23798542Smckusick# Commented out for now pending a better solution. 23898542Smckusick# How do we pick up compiler version specific flags?? 23998542Smckusick#.if exists($S/../share/mk) 24098542Smckusick#.include "$S/../share/mk/bsd.kern.mk" 24198542Smckusick#.else 24298542Smckusick.include <bsd.kern.mk> 24398542Smckusick#.endif 24498542Smckusick