18a3e49fdSJuli Mallett# Part of unified Makefile for building kernels. This includes all 2d82f8748SWarner Losh# the definitions that need to be included after all the % directives, 3d82f8748SWarner Losh# except %RULES and things that act like they are part of %RULES 441c8eb30SWarner Losh# 599fd86afSWarner Losh# Most make variables should not be defined in this file. Instead, they 699fd86afSWarner Losh# should be defined in the kern.pre.mk so that port makefiles can 7714b6aa6SWarner Losh# override or augment them. 899fd86afSWarner Losh# 941c8eb30SWarner Losh# $FreeBSD$ 1041c8eb30SWarner Losh# 1141c8eb30SWarner Losh 1273b893a7SRuslan Ermilov.MAIN: all 1341c8eb30SWarner Losh 1473b893a7SRuslan Ermilov.for target in all clean cleandepend cleandir depend install obj reinstall tags 1573b893a7SRuslan Ermilov${target}: kernel-${target} 1673b893a7SRuslan Ermilov.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 1773b893a7SRuslan Ermilov${target}: modules-${target} 1873b893a7SRuslan Ermilovmodules-${target}: 1973b893a7SRuslan Ermilov cd $S/modules; ${MKMODULESENV} ${MAKE} ${target:reinstall=install} 2073b893a7SRuslan Ermilov.endif 2173b893a7SRuslan Ermilov.endfor 2273b893a7SRuslan Ermilov 2373b893a7SRuslan Ermilov.ORDER: kernel-install modules-install 2473b893a7SRuslan Ermilov 2573b893a7SRuslan Ermilovkernel-all: ${KERNEL_KO} 2673b893a7SRuslan Ermilov 2773b893a7SRuslan Ermilovkernel-cleandir kernel-obj: 2873b893a7SRuslan Ermilov 2973b893a7SRuslan Ermilov.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 3073b893a7SRuslan Ermilovmodules: modules-all 3173b893a7SRuslan Ermilov 3273b893a7SRuslan Ermilov.if !defined(NO_MODULES_OBJ) 3373b893a7SRuslan Ermilovmodules-all modules-depend: modules-obj 3473b893a7SRuslan Ermilov.endif 3573b893a7SRuslan Ermilov.endif 3641c8eb30SWarner Losh 3741c8eb30SWarner Losh.if !defined(DEBUG) 3841c8eb30SWarner LoshFULLKERNEL= ${KERNEL_KO} 3941c8eb30SWarner Losh.else 4041c8eb30SWarner LoshFULLKERNEL= ${KERNEL_KO}.debug 4141c8eb30SWarner Losh${KERNEL_KO}: ${FULLKERNEL} 4241c8eb30SWarner Losh ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 432cbc81ffSRuslan Ermilovinstall.debug reinstall.debug: 442cbc81ffSRuslan Ermilov cd ${.CURDIR}; ${MAKE} -DINSTALL_DEBUG ${.TARGET:R} 4541c8eb30SWarner Losh.endif 4641c8eb30SWarner Losh 4741c8eb30SWarner Losh${FULLKERNEL}: ${SYSTEM_DEP} vers.o 4841c8eb30SWarner Losh @rm -f ${.TARGET} 4941c8eb30SWarner Losh @echo linking ${.TARGET} 5041c8eb30SWarner Losh ${SYSTEM_LD} 5141c8eb30SWarner Losh ${SYSTEM_LD_TAIL} 5241c8eb30SWarner Losh 5341c8eb30SWarner Losh.if !exists(.depend) 5441c8eb30SWarner Losh${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 5541c8eb30SWarner Losh.endif 5641c8eb30SWarner Losh 5741c8eb30SWarner Losh.for mfile in ${MFILES} 5849b2349bSBruce Evans# XXX the low quality .m.o rules gnerated by config are normally used 5949b2349bSBruce Evans# instead of the .m.c rules here. 6049b2349bSBruce Evans${mfile:T:S/.m$/.c/}: ${mfile} 6149b2349bSBruce Evans ${AWK} -f $S/tools/makeobjops.awk ${mfile} -c 6241c8eb30SWarner Losh${mfile:T:S/.m$/.h/}: ${mfile} 639fa411aeSDavid E. O'Brien ${AWK} -f $S/tools/makeobjops.awk ${mfile} -h 6441c8eb30SWarner Losh.endfor 6541c8eb30SWarner Losh 662d3ce713SDavid E. O'Brien.if !exists(.depend) 672d3ce713SDavid E. O'Brienacphy.o amphy.o bmtphy.o brgphy.o dcphy.o e1000phy.o exphy.o if_bge.o if_tx.o \ 682d3ce713SDavid E. O'Brieninphy.o lxtphy.o nsgphy.o nsphy.o pnaphy.o pnphy.o qsphy.o rlphy.o tdkphy.o \ 692d3ce713SDavid E. O'Brientlphy.o xmphy.o: miidevs.h 702d3ce713SDavid E. O'Brien.endif 712d3ce713SDavid E. O'Brien 7241c8eb30SWarner Loshkernel-clean: 7341c8eb30SWarner Losh rm -f *.o *.so *.So *.ko *.s eddep errs \ 7466422f5bSPeter Wemm ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks tags \ 75cb421150SPeter Wemm vers.c vnode_if.c vnode_if.h \ 7641c8eb30SWarner Losh ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 7741c8eb30SWarner Losh ${CLEAN} 7841c8eb30SWarner Losh 79766f7d6eSMark Murraylint: ${CFILES} 8032e8efbfSPoul-Henning Kamp @${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC} 81766f7d6eSMark Murray 8241c8eb30SWarner Losh# This is a hack. BFD "optimizes" away dynamic mode if there are no 8341c8eb30SWarner Losh# dynamic references. We could probably do a '-Bforcedynamic' mode like 8441c8eb30SWarner Losh# in the a.out ld. For now, this works. 8541c8eb30SWarner LoshHACK_EXTRA_FLAGS?= -shared 8641c8eb30SWarner Loshhack.So: Makefile 8741c8eb30SWarner Losh touch hack.c 8841c8eb30SWarner Losh ${CC} ${FMT} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So 8941c8eb30SWarner Losh rm -f hack.c 9041c8eb30SWarner Losh 9141c8eb30SWarner Losh# this rule stops ./assym.s in .depend from causing problems 9241c8eb30SWarner Losh./assym.s: assym.s 9341c8eb30SWarner Losh 9441c8eb30SWarner Loshassym.s: $S/kern/genassym.sh genassym.o 9566422f5bSPeter Wemm NM=${NM} sh $S/kern/genassym.sh genassym.o > ${.TARGET} 9641c8eb30SWarner Losh 97d82f8748SWarner Losh# XXX used to force -elf after CFLAGS to work around breakage of cc -aout 98d82f8748SWarner Losh# (genassym.sh makes some assumptions and cc stopped satisfying them). 9941c8eb30SWarner Loshgenassym.o: $S/$M/$M/genassym.c 1000b3178a4SMike Smith ${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c 10141c8eb30SWarner Losh 10241c8eb30SWarner Losh${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 10341c8eb30SWarner Losh 10441c8eb30SWarner Loshkernel-depend: 1051fddc467SWarner Losh.if defined(EXTRA_KERNELDEP) 1061fddc467SWarner Losh ${EXTRA_KERNELDEP} 1071fddc467SWarner Losh.endif 10841c8eb30SWarner Losh rm -f .olddep 10941c8eb30SWarner Losh if [ -f .depend ]; then mv .depend .olddep; fi 11041c8eb30SWarner Losh ${MAKE} _kernel-depend 11141c8eb30SWarner Losh 11249b2349bSBruce Evans# XXX this belongs elsewhere (inside GEN_CFILES if possible). 11349b2349bSBruce EvansGEN_M_CFILES= ${MFILES:T:S/.m$/.c/} 11449b2349bSBruce Evans 1150f64e446SBruce Evans# The argument list can be very long, so use make -V and xargs to 1164fbd95d6SJake Burkholder# pass it to mkdep. 1172d3ce713SDavid E. O'Brien_kernel-depend: assym.s vnode_if.h miidevs.h ${BEFORE_DEPEND} \ 11849b2349bSBruce Evans ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${GEN_M_CFILES} \ 11949b2349bSBruce Evans ${SFILES} ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} 12041c8eb30SWarner Losh if [ -f .olddep ]; then mv .olddep .depend; fi 12141c8eb30SWarner Losh rm -f .newdep 12249b2349bSBruce Evans ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES -V GEN_M_CFILES | \ 1230f64e446SBruce Evans MKDEP_CPP="${CC} -E" CC="${CC}" xargs mkdep -a -f .newdep ${CFLAGS} 1240f64e446SBruce Evans ${MAKE} -V SFILES -V SYSTEM_SFILES | \ 1250f64e446SBruce Evans MKDEP_CPP="${CC} -E" xargs mkdep -a -f .newdep ${ASM_CFLAGS} 12641c8eb30SWarner Losh rm -f .depend 12741c8eb30SWarner Losh mv .newdep .depend 12841c8eb30SWarner Losh 12941c8eb30SWarner Loshkernel-cleandepend: 13041c8eb30SWarner Losh rm -f .depend 13141c8eb30SWarner Losh 13241c8eb30SWarner Loshlinks: 13341c8eb30SWarner Losh egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 13441c8eb30SWarner Losh sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 135caa38512SLuigi Rizzo ${MAKE} -V CFILES | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 13641c8eb30SWarner Losh sort -u | comm -23 - dontlink | \ 13741c8eb30SWarner Losh sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 13841c8eb30SWarner Losh sh makelinks; rm -f dontlink 13941c8eb30SWarner Losh 14041c8eb30SWarner Loshkernel-tags: 14141c8eb30SWarner Losh @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 14241c8eb30SWarner Losh sh $S/conf/systags.sh 14341c8eb30SWarner Losh rm -f tags1 14441c8eb30SWarner Losh sed -e 's, ../, ,' tags > tags1 14541c8eb30SWarner Losh 1462cbc81ffSRuslan Ermilovkernel-install: 14741c8eb30SWarner Losh.if exists(${DESTDIR}/boot) 14841c8eb30SWarner Losh @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 14941c8eb30SWarner Losh echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 15041c8eb30SWarner Losh exit 1 ; \ 15141c8eb30SWarner Losh fi 15241c8eb30SWarner Losh @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 15341c8eb30SWarner Losh echo "You must activate /boot/device.hints in loader.conf." ; \ 15441c8eb30SWarner Losh exit 1 ; \ 15541c8eb30SWarner Losh fi 15641c8eb30SWarner Losh.endif 1572cbc81ffSRuslan Ermilov @if [ ! -f ${FULLKERNEL} ] ; then \ 15841c8eb30SWarner Losh echo "You must build a kernel first." ; \ 15941c8eb30SWarner Losh exit 1 ; \ 16041c8eb30SWarner Losh fi 16141c8eb30SWarner Losh.if exists(${DESTDIR}${KODIR}) 16241c8eb30SWarner Losh -thiskernel=`sysctl -n kern.bootfile` ; \ 16341c8eb30SWarner Losh if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ 16441c8eb30SWarner Losh chflags -R noschg ${DESTDIR}${KODIR} ; \ 16541c8eb30SWarner Losh rm -rf ${DESTDIR}${KODIR} ; \ 16641c8eb30SWarner Losh else \ 16741c8eb30SWarner Losh if [ -d ${DESTDIR}${KODIR}.old ] ; then \ 16841c8eb30SWarner Losh chflags -R noschg ${DESTDIR}${KODIR}.old ; \ 16941c8eb30SWarner Losh rm -rf ${DESTDIR}${KODIR}.old ; \ 17041c8eb30SWarner Losh fi ; \ 17141c8eb30SWarner Losh mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ 17241c8eb30SWarner Losh if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ 173b90faaf3SDima Dorfman sysctl kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ 17441c8eb30SWarner Losh fi; \ 17541c8eb30SWarner Losh fi 17641c8eb30SWarner Losh.endif 17741c8eb30SWarner Losh mkdir -p ${DESTDIR}${KODIR} 1782cbc81ffSRuslan Ermilov.if defined(DEBUG) && defined(INSTALL_DEBUG) 1792d3ce713SDavid E. O'Brien ${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR} 1802cbc81ffSRuslan Ermilov.else 1812d3ce713SDavid E. O'Brien ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 1822cbc81ffSRuslan Ermilov.endif 18341c8eb30SWarner Losh 1842cbc81ffSRuslan Ermilovkernel-reinstall: 18541c8eb30SWarner Losh @-chflags -R noschg ${DESTDIR}${KODIR} 1862cbc81ffSRuslan Ermilov.if defined(DEBUG) && defined(INSTALL_DEBUG) 1872d3ce713SDavid E. O'Brien ${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR} 1882cbc81ffSRuslan Ermilov.else 1892d3ce713SDavid E. O'Brien ${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR} 1902cbc81ffSRuslan Ermilov.endif 19141c8eb30SWarner Losh 19241c8eb30SWarner Loshconfig.o: 19341c8eb30SWarner Losh ${NORMAL_C} 19441c8eb30SWarner Losh 195d82f8748SWarner Loshenv.o: env.c 196d82f8748SWarner Losh ${NORMAL_C} 197d82f8748SWarner Losh 198d82f8748SWarner Loshhints.o: hints.c 199d82f8748SWarner Losh ${NORMAL_C} 200d82f8748SWarner Losh 20141c8eb30SWarner Loshvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 2023c9d8965SBruce Evans sh $S/conf/newvers.sh ${KERN_IDENT} 20341c8eb30SWarner Losh 20441c8eb30SWarner Losh# XXX strictly, everything depends on Makefile because changes to ${PROF} 20541c8eb30SWarner Losh# only appear there, but we don't handle that. 20641c8eb30SWarner Loshvers.o: 20741c8eb30SWarner Losh ${NORMAL_C} 20841c8eb30SWarner Losh 209b7bbb709SDavid E. O'Brienvnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src 210b7bbb709SDavid E. O'Brien ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -c 21141c8eb30SWarner Losh 212b7bbb709SDavid E. O'Brienvnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src 213b7bbb709SDavid E. O'Brien ${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h 21441c8eb30SWarner Losh 21541c8eb30SWarner Loshvnode_if.o: 21641c8eb30SWarner Losh ${NORMAL_C} 21741c8eb30SWarner Losh 21841c8eb30SWarner Losh.include <bsd.kern.mk> 219