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