kern.post.mk revision 151646
1122715Sbde# $FreeBSD: head/sys/conf/kern.post.mk 151646 2005-10-25 09:05:07Z ru $
2122715Sbde
3122715Sbde# Part of a unified Makefile for building kernels.  This part includes all
4122715Sbde# the definitions that need to be after all the % directives except %RULES
5122715Sbde# and ones that act like they are part of %RULES.
685909Simp#
788893Simp# Most make variables should not be defined in this file.  Instead, they
888893Simp# should be defined in the kern.pre.mk so that port makefiles can
988969Simp# override or augment them.
1085909Simp
11115572Sphk# In case the config had a makeoptions DESTDIR...
12115572Sphk.if defined(DESTDIR)
13115572SphkMKMODULESENV+=	DESTDIR="${DESTDIR}"
14115572Sphk.endif
15124108SimpMKMODULESENV+=	KERNBUILDDIR="${.CURDIR}"
16115572Sphk
17111211Sru.MAIN: all
1885909Simp
19111802Sru.for target in all clean cleandepend cleandir clobber depend install \
20111802Sru    obj reinstall tags
21111211Sru${target}: kernel-${target}
22111211Sru.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules)
23111211Sru${target}: modules-${target}
24111211Srumodules-${target}:
25111802Sru	cd $S/modules; ${MKMODULESENV} ${MAKE} \
26111802Sru	    ${target:S/^reinstall$/install/:S/^clobber$/cleandir/}
27111211Sru.endif
28111211Sru.endfor
2985909Simp
30137596Simp# Handle out of tree ports 
31147155Simp.if !defined(NO_MODULES) && defined(PORTS_MODULES)
32142424Simp.for _dir in ${.CURDIR}/../../..
33142424Simp.if !defined(SYSDIR) && exists(${_dir}/kern/)
34142424SimpSYSDIR=	${_dir}
35142424Simp.endif
36142424Simp.endfor
37137596SimpPORTSMODULESENV=SYSDIR=${SYSDIR}
38147011Smux.for __target in all install reinstall clean
39142424Simp${__target}: ports-${__target}
40142413Simpports-${__target}:
41137596Simp.for __i in ${PORTS_MODULES}
42147011Smux	cd $${PORTSDIR:-/usr/ports}/${__i}; ${PORTSMODULESENV} ${MAKE} -B ${__target:C/install/deinstall reinstall/:C/reinstall/deinstall reinstall/}
43137596Simp.endfor
44137596Simp.endfor
45137596Simp.endif
46137596Simp
47111211Sru.ORDER: kernel-install modules-install
48111211Sru
49111211Srukernel-all: ${KERNEL_KO}
50111211Sru
51111802Srukernel-cleandir: kernel-clean
52111802Sru
53111802Srukernel-clobber:
54111766Sru	find . -maxdepth 1 ! -type d ! -name version -delete
55111211Sru
56111766Srukernel-obj:
57111766Sru
58111211Sru.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules)
59111211Srumodules: modules-all
60111211Sru
61111211Sru.if !defined(NO_MODULES_OBJ)
62111211Srumodules-all modules-depend: modules-obj
63111211Sru.endif
64111211Sru.endif
65111211Sru
66151636Simp.if !defined(DEBUG)
67151636SimpFULLKERNEL=	${KERNEL_KO}
68151636Simp.else
69151636SimpFULLKERNEL=	${KERNEL_KO}.debug
70151636Simp${KERNEL_KO}: ${FULLKERNEL}
71151636Simp	${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO}
72151646Sruinstall.debug reinstall.debug: gdbinit
73151646Sru	cd ${.CURDIR}; ${MAKE} ${.TARGET:R}
74116252Sgrog
75123965Sbde# Install gdbinit files for kernel debugging.
76116252Sgroggdbinit:
77123965Sbde	grep -v '# XXX' ${S}/../tools/debugscripts/dot.gdbinit | \
78123965Sbde	    sed "s:MODPATH:${.OBJDIR}/modules:" > .gdbinit
79135611Sphk	cp ${S}/../tools/debugscripts/gdbinit.kernel ${.CURDIR}
80124776Sru.if exists(${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH})
81116252Sgrog	cp ${S}/../tools/debugscripts/gdbinit.${MACHINE_ARCH} \
82123965Sbde	    ${.CURDIR}/gdbinit.machine
8385909Simp.endif
84124776Sru.endif
8585909Simp
86151636Simp${FULLKERNEL}: ${SYSTEM_DEP} vers.o
8785909Simp	@rm -f ${.TARGET}
8885909Simp	@echo linking ${.TARGET}
8985909Simp	${SYSTEM_LD}
90125775Sru.if !defined(DEBUG)
91125775Sru	${OBJCOPY} --strip-debug ${.TARGET}
92125775Sru.endif
9385909Simp	${SYSTEM_LD_TAIL}
9485909Simp
95116691Sru.if !exists(${.OBJDIR}/.depend)
96131129Simp${SYSTEM_OBJS}: assym.s vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/}
9785909Simp.endif
9885909Simp
99116341SmarkmLNFILES=	${CFILES:T:S/.c$/.ln/}
100116341Smarkm
10185909Simp.for mfile in ${MFILES}
102102082Sbde# XXX the low quality .m.o rules gnerated by config are normally used
103102082Sbde# instead of the .m.c rules here.
104102082Sbde${mfile:T:S/.m$/.c/}: ${mfile}
105102082Sbde	${AWK} -f $S/tools/makeobjops.awk ${mfile} -c
10685909Simp${mfile:T:S/.m$/.h/}: ${mfile}
10795844Sobrien	${AWK} -f $S/tools/makeobjops.awk ${mfile} -h
10885909Simp.endfor
10985909Simp
11085909Simpkernel-clean:
11185909Simp	rm -f *.o *.so *.So *.ko *.s eddep errs \
112151636Simp	    ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks tags vers.c \
113145416Sru	    vnode_if.c vnode_if.h vnode_if_newproto.h vnode_if_typedef.h \
114123965Sbde	    ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \
115123965Sbde	    ${CLEAN}
11685909Simp
117116341Smarkmlint: ${LNFILES}
118123965Sbde	${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC} 2>&1 | \
119123965Sbde	    tee -a linterrs
12092491Smarkm
12185909Simp# This is a hack.  BFD "optimizes" away dynamic mode if there are no
12285909Simp# dynamic references.  We could probably do a '-Bforcedynamic' mode like
12385909Simp# in the a.out ld.  For now, this works.
12485909SimpHACK_EXTRA_FLAGS?= -shared
12585909Simphack.So: Makefile
12685909Simp	touch hack.c
127123966Sbde	${CC} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So
12885909Simp	rm -f hack.c
12985909Simp
130123965Sbde# This rule stops ./assym.s in .depend from causing problems.
13185909Simp./assym.s: assym.s
13285909Simp
13385909Simpassym.s: $S/kern/genassym.sh genassym.o
134127306Sobrien	NM='${NM}' sh $S/kern/genassym.sh genassym.o > ${.TARGET}
13585909Simp
13685909Simpgenassym.o: $S/$M/$M/genassym.c
137123985Sbde	${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c
13885909Simp
13985909Simp${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
14085909Simp
141145403Srukernel-depend: .depend
142102073Sbde# The argument list can be very long, so use make -V and xargs to
14391104Sjake# pass it to mkdep.
144145403Sru.depend: assym.s vnode_if.h ${BEFORE_DEPEND} ${CFILES} \
145131210Simp	    ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
146131210Simp	    ${MFILES:T:S/.m$/.h/}
14785909Simp	rm -f .newdep
148131210Simp	${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | \
149102073Sbde	    MKDEP_CPP="${CC} -E" CC="${CC}" xargs mkdep -a -f .newdep ${CFLAGS}
150111684Sru	${MAKE} -V SFILES | \
151102073Sbde	    MKDEP_CPP="${CC} -E" xargs mkdep -a -f .newdep ${ASM_CFLAGS}
15285909Simp	rm -f .depend
15385909Simp	mv .newdep .depend
15485909Simp
15585909Simpkernel-cleandepend:
15685909Simp	rm -f .depend
15785909Simp
15885909Simplinks:
15985909Simp	egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
160123965Sbde	    sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
16191046Sluigi	${MAKE} -V CFILES | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
162123965Sbde	    sort -u | comm -23 - dontlink | \
163123965Sbde	    sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
16485909Simp	sh makelinks; rm -f dontlink
16585909Simp
16685909Simpkernel-tags:
16785909Simp	@[ -f .depend ] || { echo "you must make depend first"; exit 1; }
16885909Simp	sh $S/conf/systags.sh
16985909Simp	rm -f tags1
17085909Simp	sed -e 's,      ../,    ,' tags > tags1
17185909Simp
172127246Smarcel.if ${MACHINE_ARCH} != "ia64"
17385909Simp.if exists(${DESTDIR}/boot)
174127246Smarcelkernel-install-check:
17585909Simp	@if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \
17685909Simp		echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \
17785909Simp		exit 1 ; \
17885909Simp	fi
17985909Simp	@if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \
18085909Simp		echo "You must activate /boot/device.hints in loader.conf." ; \
18185909Simp		exit 1 ; \
18285909Simp	fi
183127246Smarcel
184127246Smarcelkernel-install: kernel-install-check
18585909Simp.endif
186127246Smarcel.endif
187127246Smarcel
188127246Smarcelkernel-install:
189151636Simp	@if [ ! -f ${FULLKERNEL} ] ; then \
19085909Simp		echo "You must build a kernel first." ; \
19185909Simp		exit 1 ; \
19285909Simp	fi
19385909Simp.if exists(${DESTDIR}${KODIR})
19485909Simp	-thiskernel=`sysctl -n kern.bootfile` ; \
195145623Sru	if [ ! "`dirname "$$thiskernel"`" -ef ${DESTDIR}${KODIR} ] ; then \
19685909Simp		chflags -R noschg ${DESTDIR}${KODIR} ; \
19785909Simp		rm -rf ${DESTDIR}${KODIR} ; \
19885909Simp	else \
19985909Simp		if [ -d ${DESTDIR}${KODIR}.old ] ; then \
20085909Simp			chflags -R noschg ${DESTDIR}${KODIR}.old ; \
20185909Simp			rm -rf ${DESTDIR}${KODIR}.old ; \
20285909Simp		fi ; \
20385909Simp		mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \
204118633Sru		sysctl kern.bootfile=${DESTDIR}${KODIR}.old/"`basename "$$thiskernel"`" ; \
20585909Simp	fi
20685909Simp.endif
20785909Simp	mkdir -p ${DESTDIR}${KODIR}
208151636Simp.if defined(DEBUG) && !defined(INSTALL_NODEBUG)
209151646Sru	${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR}/${KERNEL_KO}
210151636Simp.else
211109514Sobrien	${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR}
212151636Simp.endif
21385909Simp
21495356Srukernel-reinstall:
21585909Simp	@-chflags -R noschg ${DESTDIR}${KODIR}
216151636Simp.if defined(DEBUG) && !defined(INSTALL_NODEBUG)
217151646Sru	${INSTALL} -p -m 555 -o root -g wheel ${FULLKERNEL} ${DESTDIR}${KODIR}/${KERNEL_KO}
218151636Simp.else
219109514Sobrien	${INSTALL} -p -m 555 -o root -g wheel ${KERNEL_KO} ${DESTDIR}${KODIR}
220151636Simp.endif
22185909Simp
222144293Sphkconfig.o env.o hints.o vers.o vnode_if.o:
22385909Simp	${NORMAL_C}
22485909Simp
225144293Sphkconfig.ln env.ln hints.ln vers.ln vnode_if.ln:
226116341Smarkm	${NORMAL_LINT}
227116341Smarkm
22885909Simpvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
229135371Sru	MAKE=${MAKE} sh $S/conf/newvers.sh ${KERN_IDENT}
23085909Simp
23191512Sobrienvnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src
23291512Sobrien	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -c
23385909Simp
23491512Sobrienvnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src
23591512Sobrien	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h
236138290Sphk	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -p
237138290Sphk	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -q
23885909Simp
239116691Sru# XXX strictly, everything depends on Makefile because changes to ${PROF}
240116691Sru# only appear there, but we don't handle that.
24185909Simp
242111686Sru.include "kern.mk"
243