kern.post.mk revision 101877
1195801Smav# Part of unified Makefile for building kernels. This includes all 2195801Smav# the definitions that need to be included after all the % directives, 3195801Smav# except %RULES and things that act like they are part of %RULES 4195801Smav# 5195801Smav# Most make variables should not be defined in this file. Instead, they 6195801Smav# should be defined in the kern.pre.mk so that port makefiles can 7195801Smav# override or augment them. 8195801Smav# 9195801Smav# $FreeBSD: head/sys/conf/kern.post.mk 101877 2002-08-14 17:55:11Z jmallett $ 10195801Smav# 11195801Smav 12195801Smav# XXX why are only some phony targets marked phony? 13195801Smav.PHONY: all modules 14195801Smav 15195801Smavclean: kernel-clean 16195801Smavcleandepend: kernel-cleandepend 17195801Smavcleandir: 18195801Smavclobber: kernel-clobber 19195801Smavdepend: kernel-depend 20195801Smavinstall: kernel-install 21195801Smavreinstall: kernel-reinstall 22195801Smavtags: kernel-tags 23195801Smav 24195801Smav.if !defined(DEBUG) 25195801SmavFULLKERNEL= ${KERNEL_KO} 26195801Smav.else 27195801SmavFULLKERNEL= ${KERNEL_KO}.debug 28195801Smav${KERNEL_KO}: ${FULLKERNEL} 29195801Smav ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 30195801Smavinstall.debug reinstall.debug: 31195801Smav cd ${.CURDIR}; ${MAKE} -DINSTALL_DEBUG ${.TARGET:R} 32195801Smav.endif 33195801Smav 34195801Smav${FULLKERNEL}: ${SYSTEM_DEP} vers.o 35195801Smav @rm -f ${.TARGET} 36195801Smav @echo linking ${.TARGET} 37195801Smav ${SYSTEM_LD} 38195801Smav ${SYSTEM_LD_TAIL} 39195801Smav 40195801Smav.if !exists(.depend) 41195801Smav${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 42195801Smav.endif 43195801Smav 44195801Smav.for mfile in ${MFILES} 45195801Smav${mfile:T:S/.m$/.h/}: ${mfile} 46195801Smav ${AWK} -f $S/tools/makeobjops.awk ${mfile} -h 47217877Smav.endfor 48195801Smav 49195801Smavkernel-clean: 50195801Smav rm -f *.o *.so *.So *.ko *.s eddep errs \ 51195801Smav ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ 52195801Smav setdef[01].c setdefs.h tags \ 53195801Smav vers.c vnode_if.c vnode_if.h \ 54195801Smav ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 55195801Smav ${CLEAN} 56195801Smav 57195801Smavkernel-clobber: 58195801Smav find . -type f ! -name version -delete 59195801Smav 60195801Smavlint: ${CFILES} 61195801Smav ${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC} 62195801Smav 63208393Smav# This is a hack. BFD "optimizes" away dynamic mode if there are no 64208393Smav# dynamic references. We could probably do a '-Bforcedynamic' mode like 65195801Smav# in the a.out ld. For now, this works. 66195801SmavHACK_EXTRA_FLAGS?= -shared 67195801Smavhack.So: Makefile 68195801Smav touch hack.c 69217877Smav ${CC} ${FMT} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So 70195801Smav rm -f hack.c 71195801Smav 72195801Smav# this rule stops ./assym.s in .depend from causing problems 73195801Smav./assym.s: assym.s 74195801Smav 75199821Smavassym.s: $S/kern/genassym.sh genassym.o 76195801Smav NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} 77195801Smav 78195801Smav# XXX used to force -elf after CFLAGS to work around breakage of cc -aout 79195801Smav# (genassym.sh makes some assumptions and cc stopped satisfying them). 80195801Smavgenassym.o: $S/$M/$M/genassym.c 81195801Smav ${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c 82195801Smav 83195801Smav${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 84195801Smav 85195801Smavkernel-depend: 86195801Smav.if defined(EXTRA_KERNELDEP) 87220566Smav ${EXTRA_KERNELDEP} 88195801Smav.endif 89220566Smav rm -f .olddep 90195801Smav if [ -f .depend ]; then mv .depend .olddep; fi 91195801Smav ${MAKE} _kernel-depend 92195801Smav 93195801Smav# The argument list can be very long, use make -V and xargs to 94227293Sed# pass it to mkdep. 95195801Smav_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ 96199132Smav ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 97199132Smav ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} 98199132Smav if [ -f .olddep ]; then mv .olddep .depend; fi 99199132Smav rm -f .newdep 100200217Smav ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | xargs \ 101200217Smav env MKDEP_CPP="${CC} -E" CC="${CC}" mkdep -a -f .newdep ${CFLAGS} 102205358Smav ${MAKE} -V SFILES -V SYSTEM_SFILES | xargs \ 103199132Smav env MKDEP_CPP="${CC} -E" mkdep -a -f .newdep ${ASM_CFLAGS} 104200217Smav rm -f .depend 105200217Smav mv .newdep .depend 106205358Smav 107205358Smavkernel-cleandepend: 108205358Smav rm -f .depend 109205358Smav 110205358Smavlinks: 111200217Smav egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 112199132Smav sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 113199132Smav ${MAKE} -V CFILES | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 114220566Smav sort -u | comm -23 - dontlink | \ 115220566Smav sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 116220566Smav sh makelinks; rm -f dontlink 117220566Smav 118220566Smavkernel-tags: 119220566Smav @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 120195801Smav sh $S/conf/systags.sh 121195801Smav rm -f tags1 122195801Smav sed -e 's, ../, ,' tags > tags1 123199132Smav 124199132Smavkernel-install: 125195801Smav.if exists(${DESTDIR}/boot) 126195801Smav @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 127199132Smav echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 128199132Smav exit 1 ; \ 129200217Smav fi 130199132Smav @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 131199132Smav echo "You must activate /boot/device.hints in loader.conf." ; \ 132199132Smav exit 1 ; \ 133199132Smav fi 134195801Smav.endif 135199132Smav @if [ ! -f ${FULLKERNEL} ] ; then \ 136195801Smav echo "You must build a kernel first." ; \ 137195801Smav exit 1 ; \ 138195801Smav fi 139195801Smav.if exists(${DESTDIR}${KODIR}) 140195801Smav -thiskernel=`sysctl -n kern.bootfile` ; \ 141195801Smav if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ 142195801Smav chflags -R noschg ${DESTDIR}${KODIR} ; \ 143195801Smav rm -rf ${DESTDIR}${KODIR} ; \ 144199132Smav else \ 145195801Smav if [ -d ${DESTDIR}${KODIR}.old ] ; then \ 146200217Smav chflags -R noschg ${DESTDIR}${KODIR}.old ; \ 147199132Smav rm -rf ${DESTDIR}${KODIR}.old ; \ 148199132Smav fi ; \ 149199132Smav mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ 150199132Smav if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ 151200217Smav sysctl kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ 152195801Smav fi; \ 153195801Smav fi 154195801Smav.endif 155195801Smav mkdir -p ${DESTDIR}${KODIR} 156195801Smav.if defined(DEBUG) && defined(INSTALL_DEBUG) 157200223Smav ${INSTALL} -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR} 158195801Smav.else 159195801Smav ${INSTALL} -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 160195801Smav.endif 161195801Smav 162195801Smavkernel-reinstall: 163195801Smav @-chflags -R noschg ${DESTDIR}${KODIR} 164208414Smav.if defined(DEBUG) && defined(INSTALL_DEBUG) 165208414Smav ${INSTALL} -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR} 166195801Smav.else 167195801Smav ${INSTALL} -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 168195801Smav.endif 169195801Smav 170195801Smav.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 171195801Smavall: modules 172195801Smavclean: modules-clean 173195801Smavcleandepend: modules-cleandepend 174195801Smavcleandir: modules-cleandir 175195801Smavclobber: modules-clobber 176195801Smavdepend: modules-depend 177195801Smavinstall: modules-install 178195801Smav.ORDER: kernel-install modules-install 179195801Smavreinstall: modules-reinstall 180206652Smavtags: modules-tags 181195801Smav.endif 182195801Smav 183195801Smavmodules: 184199132Smav @mkdir -p ${.OBJDIR}/modules 185195801Smav cd $S/modules ; ${MKMODULESENV} ${MAKE} obj ; \ 186195801Smav ${MKMODULESENV} ${MAKE} all 187195801Smav 188195801Smavmodules-clean: 189195801Smav cd $S/modules ; ${MKMODULESENV} ${MAKE} clean 190195801Smav 191195801Smavmodules-cleandepend: 192195801Smav cd $S/modules ; ${MKMODULESENV} ${MAKE} cleandepend 193195801Smav 194195801Smavmodules-cleandir: 195195801Smav cd $S/modules ; ${MKMODULESENV} ${MAKE} cleandir 196195801Smav 197195801Smavmodules-clobber: modules-clean 198195801Smav rm -rf ${MKMODULESENV} 199195801Smav 200195801Smavmodules-depend: 201195801Smav @mkdir -p ${.OBJDIR}/modules 202195801Smav cd $S/modules ; ${MKMODULESENV} ${MAKE} obj ; \ 203195801Smav ${MKMODULESENV} ${MAKE} depend 204195801Smav 205195801Smavmodules-tags: 206195801Smav cd $S/modules ; ${MKMODULESENV} ${MAKE} tags 207195801Smav 208195801Smavmodules-install modules-reinstall: 209195801Smav cd $S/modules ; ${MKMODULESENV} ${MAKE} install 210227849Shselasky 211227701Shselaskyconfig.o: 212195801Smav ${NORMAL_C} 213195801Smav 214195801Smavenv.o: env.c 215195801Smav ${NORMAL_C} 216195801Smav 217195801Smavhints.o: hints.c 218195801Smav ${NORMAL_C} 219195801Smav 220195801Smavvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 221195801Smav sh $S/conf/newvers.sh ${KERN_IDENT} 222195801Smav 223195801Smav# XXX strictly, everything depends on Makefile because changes to ${PROF} 224195801Smav# only appear there, but we don't handle that. 225195801Smavvers.o: 226195801Smav ${NORMAL_C} 227195801Smav 228195801Smavvnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src 229195801Smav ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -c 230195801Smav 231195801Smavvnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src 232195801Smav ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h 233195801Smav 234200223Smavvnode_if.o: 235200223Smav ${NORMAL_C} 236195801Smav 237195801Smav.include <bsd.kern.mk> 238195801Smav