xref: /freebsd/sys/conf/kern.post.mk (revision 73b893a7204be9ed1de3856c85ca814e9dd5bc2f)
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