kern.post.mk revision 85909
1# kern.post.mk 2# 3# Unified Makefile for building kenrels. This includes all the definitions 4# that need to be included after all the % directives, except %RULES and 5# things that act like they are part of %RULES 6# 7# $FreeBSD: head/sys/conf/kern.post.mk 85909 2001-11-02 21:34:20Z imp $ 8# 9 10.PHONY: all modules 11 12all: ${KERNEL_KO} 13 14depend: kernel-depend 15clean: kernel-clean 16cleandepend: kernel-cleandepend 17clobber: kernel-clobber 18tags: kernel-tags 19install: kernel-install 20install.debug: kernel-install.debug 21reinstall: kernel-reinstall 22reinstall.debug: kernel-reinstall.debug 23 24.if !defined(DEBUG) 25FULLKERNEL= ${KERNEL_KO} 26.else 27FULLKERNEL= ${KERNEL_KO}.debug 28${KERNEL_KO}: ${FULLKERNEL} 29 ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 30.endif 31 32${FULLKERNEL}: ${SYSTEM_DEP} vers.o 33 @rm -f ${.TARGET} 34 @echo linking ${.TARGET} 35 ${SYSTEM_LD} 36 ${SYSTEM_LD_TAIL} 37 38.if !exists(.depend) 39${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 40.endif 41 42.for mfile in ${MFILES} 43${mfile:T:S/.m$/.h/}: ${mfile} 44 perl5 $S/kern/makeobjops.pl -h ${mfile} 45.endfor 46 47kernel-clean: 48 rm -f *.o *.so *.So *.ko *.s eddep errs \ 49 ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ 50 setdef[01].c setdefs.h tags \ 51 vers.c vnode_if.c vnode_if.h \ 52 ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 53 ${CLEAN} 54 55kernel-clobber: 56 find . -type f ! -name version -delete 57 58locore.o: $S/$M/$M/locore.s assym.s 59 ${NORMAL_S} 60 61# This is a hack. BFD "optimizes" away dynamic mode if there are no 62# dynamic references. We could probably do a '-Bforcedynamic' mode like 63# in the a.out ld. For now, this works. 64HACK_EXTRA_FLAGS?= -shared 65hack.So: Makefile 66 touch hack.c 67 ${CC} ${FMT} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So 68 rm -f hack.c 69 70# this rule stops ./assym.s in .depend from causing problems 71./assym.s: assym.s 72 73assym.s: $S/kern/genassym.sh genassym.o 74 NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} 75 76genassym.o: $S/$M/$M/genassym.c 77 ${CC} -c ${CFLAGS} $S/$M/$M/genassym.c 78 79${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 80 81kernel-depend: 82 rm -f .olddep 83 if [ -f .depend ]; then mv .depend .olddep; fi 84 ${MAKE} _kernel-depend 85 86_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ 87 ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 88 ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} 89 if [ -f .olddep ]; then mv .olddep .depend; fi 90 rm -f .newdep 91 env MKDEP_CPP="${CC} -E" CC="${CC}" \ 92 mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} 93 env MKDEP_CPP="${CC} -E" \ 94 mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} 95 rm -f .depend 96 mv .newdep .depend 97 98kernel-cleandepend: 99 rm -f .depend 100 101links: 102 egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 103 sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 104 echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 105 sort -u | comm -23 - dontlink | \ 106 sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 107 sh makelinks; rm -f dontlink 108 109kernel-tags: 110 @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 111 sh $S/conf/systags.sh 112 rm -f tags1 113 sed -e 's, ../, ,' tags > tags1 114 115kernel-install kernel-install.debug: 116.if exists(${DESTDIR}/boot) 117 @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 118 echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 119 exit 1 ; \ 120 fi 121 @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 122 echo "You must activate /boot/device.hints in loader.conf." ; \ 123 exit 1 ; \ 124 fi 125.endif 126 @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ 127 echo "You must build a kernel first." ; \ 128 exit 1 ; \ 129 fi 130.if exists(${DESTDIR}${KODIR}) 131 -thiskernel=`sysctl -n kern.bootfile` ; \ 132 if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ 133 chflags -R noschg ${DESTDIR}${KODIR} ; \ 134 rm -rf ${DESTDIR}${KODIR} ; \ 135 else \ 136 if [ -d ${DESTDIR}${KODIR}.old ] ; then \ 137 chflags -R noschg ${DESTDIR}${KODIR}.old ; \ 138 rm -rf ${DESTDIR}${KODIR}.old ; \ 139 fi ; \ 140 mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ 141 if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ 142 sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ 143 fi; \ 144 fi 145.endif 146 mkdir -p ${DESTDIR}${KODIR} 147 install -c -m 555 -o root -g wheel \ 148 ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} 149 150kernel-reinstall kernel-reinstall.debug: 151 @-chflags -R noschg ${DESTDIR}${KODIR} 152 install -c -m 555 -o root -g wheel \ 153 ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} 154 155.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 156all: modules 157depend: modules-depend 158clean: modules-clean 159cleandepend: modules-cleandepend 160cleandir: modules-cleandir 161clobber: modules-clobber 162tags: modules-tags 163install: modules-install 164install.debug: modules-install.debug 165reinstall: modules-reinstall 166reinstall.debug: modules-reinstall.debug 167.endif 168 169MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} 170.if defined(MODULES_OVERRIDE) 171MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" 172.endif 173.if defined(DEBUG) 174MKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" 175.endif 176 177modules: 178 @mkdir -p ${.OBJDIR}/modules 179 cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ 180 env ${MKMODULESENV} ${MAKE} all 181 182modules-depend: 183 @mkdir -p ${.OBJDIR}/modules 184 cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ 185 env ${MKMODULESENV} ${MAKE} depend 186 187modules-clean: 188 cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean 189 190modules-cleandepend: 191 cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend 192 193modules-clobber: modules-clean 194 rm -rf ${MKMODULESENV} 195 196modules-cleandir: 197 cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir 198 199modules-tags: 200 cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags 201 202modules-install modules-reinstall: 203 cd $S/modules ; env ${MKMODULESENV} ${MAKE} install 204 205modules-install.debug modules-reinstall.debug: 206 cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug 207 208config.o: 209 ${NORMAL_C} 210 211vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 212 sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} 213 214# XXX strictly, everything depends on Makefile because changes to ${PROF} 215# only appear there, but we don't handle that. 216vers.o: 217 ${NORMAL_C} 218 219hints.o: hints.c 220 ${NORMAL_C} 221 222env.o: env.c 223 ${NORMAL_C} 224 225vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src 226 perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src 227 228vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src 229 perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src 230 231vnode_if.o: 232 ${NORMAL_C} 233 234# Commented out for now pending a better solution. 235# How do we pick up compiler version specific flags?? 236#.if exists($S/../share/mk) 237#.include "$S/../share/mk/bsd.kern.mk" 238#.else 239.include <bsd.kern.mk> 240#.endif 241