kern.post.mk revision 85914
11558Srgrimes# kern.post.mk
298542Smckusick#
398542Smckusick# Unified Makefile for building kenrels.  This includes all the definitions
498542Smckusick# that need to be included after all the % directives, except %RULES and
598542Smckusick# things that act like they are part of %RULES
698542Smckusick#
798542Smckusick# $FreeBSD: head/sys/conf/kern.post.mk 85914 2001-11-02 21:50:15Z imp $
898542Smckusick#
9110884Smckusick
1098542Smckusick.PHONY:	all modules
111558Srgrimes
121558Srgrimesall: ${KERNEL_KO}
131558Srgrimes
141558Srgrimesdepend: kernel-depend
151558Srgrimesclean:  kernel-clean
161558Srgrimescleandepend:  kernel-cleandepend
171558Srgrimesclobber: kernel-clobber
181558Srgrimestags:  kernel-tags
191558Srgrimesinstall: kernel-install
201558Srgrimesinstall.debug: kernel-install.debug
211558Srgrimesreinstall: kernel-reinstall
221558Srgrimesreinstall.debug: kernel-reinstall.debug
231558Srgrimes
241558Srgrimes.if !defined(DEBUG)
251558SrgrimesFULLKERNEL=	${KERNEL_KO}
261558Srgrimes.else
271558SrgrimesFULLKERNEL=	${KERNEL_KO}.debug
281558Srgrimes${KERNEL_KO}: ${FULLKERNEL}
291558Srgrimes	${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO}
301558Srgrimes.endif
311558Srgrimes
321558Srgrimes${FULLKERNEL}: ${SYSTEM_DEP} vers.o
331558Srgrimes	@rm -f ${.TARGET}
341558Srgrimes	@echo linking ${.TARGET}
351558Srgrimes	${SYSTEM_LD}
361558Srgrimes	${SYSTEM_LD_TAIL}
371558Srgrimes
381558Srgrimes.if !exists(.depend)
391558Srgrimes${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/}
401558Srgrimes.endif
411558Srgrimes
421558Srgrimes.for mfile in ${MFILES}
43114589Sobrien${mfile:T:S/.m$/.h/}: ${mfile}
441558Srgrimes	perl5 $S/kern/makeobjops.pl -h ${mfile}
4523682Speter.endfor
46114589Sobrien
4737664Scharnierkernel-clean:
48114589Sobrien	rm -f *.o *.so *.So *.ko *.s eddep errs \
49114589Sobrien	      ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \
501558Srgrimes	      setdef[01].c setdefs.h tags \
5137664Scharnier	      vers.c vnode_if.c vnode_if.h \
52103949Smike	      ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \
5337664Scharnier	      ${CLEAN}
5492709Siedowse
5537664Scharnierkernel-clobber:
5699796Sbde	find . -type f ! -name version -delete
5737664Scharnier
581558Srgrimeslocore.o: $S/$M/$M/locore.s assym.s
591558Srgrimes	${NORMAL_S}
601558Srgrimes
6137664Scharnier# This is a hack.  BFD "optimizes" away dynamic mode if there are no
621558Srgrimes# dynamic references.  We could probably do a '-Bforcedynamic' mode like
631558Srgrimes# in the a.out ld.  For now, this works.
6443804SdillonHACK_EXTRA_FLAGS?= -shared
651558Srgrimeshack.So: Makefile
661558Srgrimes	touch hack.c
671558Srgrimes	${CC} ${FMT} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So
681558Srgrimes	rm -f hack.c
693550Sphk
703550Sphk# this rule stops ./assym.s in .depend from causing problems
7113637Sjoerg./assym.s: assym.s
7292717Sphk
731558Srgrimesassym.s: $S/kern/genassym.sh genassym.o
741558Srgrimes	NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET}
75102231Strhodes
761558Srgrimesgenassym.o: $S/$M/$M/genassym.c
771558Srgrimes.if defined(EXTRA_GENASSYM)
781558Srgrimes	${EXTRA_GENASSYM}
791558Srgrimes.endif
8092717Sphk	${CC} -c ${CFLAGS} $S/$M/$M/genassym.c
81110671Sjmallett
82110671Sjmallett${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
831558Srgrimes
8498542Smckusickkernel-depend:
8598542Smckusick	rm -f .olddep
8698542Smckusick	if [ -f .depend ]; then mv .depend .olddep; fi
8798542Smckusick	${MAKE} _kernel-depend
8898542Smckusick
8998542Smckusick_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \
9098542Smckusick	    ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
911558Srgrimes	    ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/}
9298542Smckusick	if [ -f .olddep ]; then mv .olddep .depend; fi
9398542Smckusick	rm -f .newdep
9498542Smckusick	env MKDEP_CPP="${CC} -E" CC="${CC}" \
9592717Sphk	    mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES}
9693775Sbde	env MKDEP_CPP="${CC} -E" \
9793775Sbde	    mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES}
9892712Siedowse	rm -f .depend
9993775Sbde	mv .newdep .depend
10093775Sbde
10198542Smckusickkernel-cleandepend:
10293775Sbde	rm -f .depend
10393775Sbde
10498542Smckusicklinks:
105111268Smckusick	egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
1061558Srgrimes	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
10737664Scharnier	echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
10895357Sphk	  sort -u | comm -23 - dontlink | \
1091558Srgrimes	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
11098542Smckusick	sh makelinks; rm -f dontlink
11198542Smckusick
1121558Srgrimeskernel-tags:
1131558Srgrimes	@[ -f .depend ] || { echo "you must make depend first"; exit 1; }
11413769Sjoerg	sh $S/conf/systags.sh
11513769Sjoerg	rm -f tags1
1161558Srgrimes	sed -e 's,      ../,    ,' tags > tags1
117110671Sjmallett
118110671Sjmallettkernel-install kernel-install.debug:
119110671Sjmallett.if exists(${DESTDIR}/boot)
120110671Sjmallett	@if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \
121110671Sjmallett		echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \
122110671Sjmallett		exit 1 ; \
123111268Smckusick	fi
12492722Sphk	@if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \
125111268Smckusick		echo "You must activate /boot/device.hints in loader.conf." ; \
12692722Sphk		exit 1 ; \
127110885Smckusick	fi
12824215Sache.endif
129107294Smckusick	@if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \
13098542Smckusick		echo "You must build a kernel first." ; \
13175124Sbde		exit 1 ; \
13275078Sobrien	fi
133110174Sgordon.if exists(${DESTDIR}${KODIR})
134110174Sgordon	-thiskernel=`sysctl -n kern.bootfile` ; \
1351558Srgrimes	if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \
136102231Strhodes		chflags -R noschg ${DESTDIR}${KODIR} ; \
1371558Srgrimes		rm -rf ${DESTDIR}${KODIR} ; \
138102231Strhodes	else \
1391558Srgrimes		if [ -d ${DESTDIR}${KODIR}.old ] ; then \
14098542Smckusick			chflags -R noschg ${DESTDIR}${KODIR}.old ; \
14199796Sbde			rm -rf ${DESTDIR}${KODIR}.old ; \
14298542Smckusick		fi ; \
14398542Smckusick		mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \
14420061Ssos		if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \
14592532Sbde			sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \
1461558Srgrimes		fi; \
147102231Strhodes	fi
14875377Smckusick.endif
14975377Smckusick	mkdir -p ${DESTDIR}${KODIR}
15075377Smckusick	install -c -m 555 -o root -g wheel \
15175377Smckusick		${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR}
15275377Smckusick
15375377Smckusickkernel-reinstall kernel-reinstall.debug:
15475377Smckusick	@-chflags -R noschg ${DESTDIR}${KODIR}
15575377Smckusick	install -c -m 555 -o root -g wheel \
15675377Smckusick		${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR}
15775377Smckusick
1581558Srgrimes.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules)
1591558Srgrimesall:	modules
1601558Srgrimesdepend: modules-depend
1611558Srgrimesclean:  modules-clean
1621558Srgrimescleandepend:  modules-cleandepend
1631558Srgrimescleandir:  modules-cleandir
1641558Srgrimesclobber:  modules-clobber
1651558Srgrimestags:  modules-tags
1661558Srgrimesinstall: modules-install
1671558Srgrimesinstall.debug: modules-install.debug
1681558Srgrimesreinstall: modules-reinstall
1691558Srgrimesreinstall.debug: modules-reinstall.debug
1701558Srgrimes.endif
1711558Srgrimes
1721558SrgrimesMKMODULESENV=	MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR}
17393775Sbde.if defined(MODULES_OVERRIDE)
1741558SrgrimesMKMODULESENV+=	MODULES_OVERRIDE="${MODULES_OVERRIDE}"
17593737Sphk.endif
1761558Srgrimes.if defined(DEBUG)
177107412SmckusickMKMODULESENV+=	DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}"
178107412Smckusick.endif
179107412Smckusick
180107412Smckusickmodules:
181107412Smckusick	@mkdir -p ${.OBJDIR}/modules
1821558Srgrimes	cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \
18393737Sphk	    env ${MKMODULESENV} ${MAKE} all
1841558Srgrimes
18593737Sphkmodules-depend:
1861558Srgrimes	@mkdir -p ${.OBJDIR}/modules
187107412Smckusick	cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \
188107412Smckusick	    env ${MKMODULESENV} ${MAKE} depend
189107412Smckusick
190107412Smckusickmodules-clean:
191107412Smckusick	cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean
1921558Srgrimes
19393775Sbdemodules-cleandepend:
19492532Sbde	cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend
19593737Sphk
1961558Srgrimesmodules-clobber:	modules-clean
19793737Sphk	rm -rf ${MKMODULESENV}
19893775Sbde
19993775Sbdemodules-cleandir:
20093737Sphk	cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir
20193737Sphk
20293737Sphkmodules-tags:
20398542Smckusick	cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags
20498542Smckusick
20598542Smckusickmodules-install modules-reinstall:
20698542Smckusick	cd $S/modules ; env ${MKMODULESENV} ${MAKE} install
20798542Smckusick
20898542Smckusickmodules-install.debug modules-reinstall.debug:
20998542Smckusick	cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug
21098542Smckusick
21198542Smckusickconfig.o:
21298542Smckusick	${NORMAL_C}
21398542Smckusick
21498542Smckusickvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
21598542Smckusick	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
21698542Smckusick
21798542Smckusick# XXX strictly, everything depends on Makefile because changes to ${PROF}
21898542Smckusick# only appear there, but we don't handle that.
2191558Srgrimesvers.o:
2201558Srgrimes	${NORMAL_C}
2211558Srgrimes
2221558Srgrimeshints.o:	hints.c
22392712Siedowse	${NORMAL_C}
22492712Siedowse
2251558Srgrimesenv.o:	env.c
22692712Siedowse	${NORMAL_C}
2271558Srgrimes
22893775Sbdevnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
2291558Srgrimes	perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
2301558Srgrimes
2311558Srgrimesvnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
23298542Smckusick	perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
23398542Smckusick
23498542Smckusickvnode_if.o:
23598542Smckusick	${NORMAL_C}
236107294Smckusick
23798542Smckusick# Commented out for now pending a better solution.
23898542Smckusick# How do we pick up compiler version specific flags??
23998542Smckusick#.if exists($S/../share/mk)
24098542Smckusick#.include "$S/../share/mk/bsd.kern.mk"
24198542Smckusick#.else
24298542Smckusick.include <bsd.kern.mk>
24398542Smckusick#.endif
24498542Smckusick