1# $DragonFly: src/sys/conf/kern.post.mk,v 1.15 2008/09/15 20:09:03 thomas Exp $ 2# 3# This Makefile covers the bottom part of the MI build instructions 4# 5 6.PHONY: all modules 7 8all: ${KERNEL}.stripped 9 10_MACHINE_FWD= ${.OBJDIR} 11.include "$S/conf/kern.fwd.mk" 12.include "$S/conf/kern.paths.mk" 13 14depend kernel-depend modules-depend: ${FORWARD_HEADERS_COOKIE} 15 16depend: kernel-depend 17clean: kernel-clean 18cleandepend: kernel-cleandepend 19tags: kernel-tags 20install: kernel-install 21reinstall: kernel-reinstall 22 23${KERNEL}.stripped: ${FULLKERNEL} 24 ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL}.stripped 25 26${FULLKERNEL}: ${SYSTEM_DEP} vers.o 27 @rm -f ${.TARGET} 28 @echo linking ${.TARGET} 29 ${SYSTEM_LD} 30 ${SYSTEM_LD_TAIL} 31 32.if !exists(.depend) 33${SYSTEM_OBJS}: ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 34.endif 35 36.for mfile in ${MFILES} 37${mfile:T:S/.m$/.h/}: ${mfile} 38 awk -f $S/tools/makeobjops.awk -- -h ${mfile} 39.endfor 40 41kernel-clean: 42 rm -f *.o *.so *.So *.ko *.s eddep errs \ 43 ${KERNEL} ${KERNEL}.debug ${KERNEL}.nodebug ${KERNEL}.stripped \ 44 linterrs makelinks setdef[01].c setdefs.h tags \ 45 vers.c vnode_if.c vnode_if.h \ 46 ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 47 ${CLEAN} 48 49#lint: /tmp 50# @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \ 51# $S/platform/$P/$M/Locore.c ${CFILES} ioconf.c | \ 52# grep -v 'struct/union .* never defined' | \ 53# grep -v 'possible pointer alignment problem' 54 55locore.o: $S/platform/$P/$M/locore.s assym.s 56 ${NORMAL_S} 57 58# This is a hack. BFD "optimizes" away dynamic mode if there are no 59# dynamic references. We could probably do a '-Bforcedynamic' mode like 60# in the a.out ld. For now, this works. 61hack.So: Makefile 62 touch hack.c 63 ${CC} -shared -nostdlib hack.c -o hack.So 64 rm -f hack.c 65 66# this rule stops ./assym.s in .depend from causing problems 67./assym.s: assym.s 68 69assym.s: $S/kern/genassym.sh genassym.o 70 sh $S/kern/genassym.sh genassym.o > ${.TARGET} 71 72genassym.o: $S/platform/$P/$M/genassym.c ${FORWARD_HEADERS_COOKIE} 73 ${CC} -c ${CFLAGS:N-fno-common:N-mcmodel=small} \ 74 $S/platform/$P/$M/genassym.c 75 76${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 77 78# The argument list can be very long, use make -V and xargs to 79# pass it to mkdep. 80kernel-depend: assym.s ${BEFORE_DEPEND} \ 81 ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 82 ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} 83 rm -f .newdep 84 ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | xargs \ 85 mkdep -a -f .newdep ${CFLAGS} 86 ${MAKE} -V SFILES -V SYSTEM_SFILES | xargs \ 87 env MKDEP_CPP="${CC} -E" mkdep -a -f .newdep ${ASM_CFLAGS} 88 rm -f .depend 89 mv -f .newdep .depend 90 91kernel-cleandepend: 92 rm -f .depend 93 94links: 95 egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 96 sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 97 ${MAKE} -V CFILES | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 98 sort -u | comm -23 - dontlink | \ 99 sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 100 sh makelinks && rm -f dontlink 101 102kernel-tags: 103 @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 104 sh $S/conf/systags.sh 105 rm -f tags1 106 sed -e 's, ../, ,' tags > tags1 107 108# Note: when moving the existing kernel to .old, it is by default stripped 109# so we do not have two full debug environments sitting in / eating up space. 110# 111kernel-install: kernel-installable 112 @if [ ! -f ${SELECTEDKERNEL} ] ; then \ 113 echo "You must build a kernel first." ; \ 114 exit 1 ; \ 115 fi 116. if exists(${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME}) 117.ifndef NOFSCHG 118 -chflags noschg ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME} 119.endif 120. ifdef NO_KERNEL_OLD_STRIP 121 cp -p ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME} ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME}.old 122. else 123 ${OBJCOPY} --strip-debug ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME} ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME}.old 124. endif 125. endif 126 mkdir -p ${DESTDIR}${DESTKERNDIR} 127.ifdef NOFSCHG 128 ${INSTALL} -m 555 -o root -g wheel \ 129 ${SELECTEDKERNEL} ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME} 130.else 131 ${INSTALL} -m 555 -o root -g wheel -fschg \ 132 ${SELECTEDKERNEL} ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME} 133.endif 134 135kernel-reinstall: kernel-installable 136 mkdir -p ${DESTDIR}${DESTKERNDIR} 137.ifdef NOFSCHG 138 ${INSTALL} -m 555 -o root -g wheel \ 139 ${SELECTEDKERNEL} ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME} 140.else 141 ${INSTALL} -m 555 -o root -g wheel -fschg \ 142 ${SELECTEDKERNEL} ${DESTDIR}${DESTKERNDIR}/${DESTKERNNAME} 143.endif 144 145kernel-installable: 146 @if [ -f ${DESTDIR}/${DESTKERNNAME} ]; then \ 147 echo "You need to make buildworld, installworld, and upgrade"; \ 148 echo "before you can install a new kernel, because the"; \ 149 echo "kernel and modules have moved to /boot"; \ 150 exit 1; \ 151 fi 152 @exit 0 153 154.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) 155all: modules 156depend: modules-depend 157clean: modules-clean 158cleandepend: modules-cleandepend 159cleandir: modules-cleandir 160tags: modules-tags 161install: modules-install 162reinstall: modules-reinstall 163.endif 164 165modules: 166 @mkdir -p ${.OBJDIR} 167 cd $S ; env ${MKMODULESENV} ${MAKE} -f Makefile.modules obj ; \ 168 env ${MKMODULESENV} ${MAKE} -f Makefile.modules all 169 170modules-depend: 171 @mkdir -p ${.OBJDIR} 172 cd $S ; env ${MKMODULESENV} ${MAKE} -f Makefile.modules obj ; \ 173 env ${MKMODULESENV} ${MAKE} -f Makefile.modules depend 174 175modules-clean: 176 cd $S ; env ${MKMODULESENV} ${MAKE} -f Makefile.modules clean 177 178modules-cleandepend: 179 cd $S ; env ${MKMODULESENV} ${MAKE} -f Makefile.modules cleandepend 180 181# XXX huh? 182#modules-clobber: modules-clean 183# rm -rf ${MKMODULESENV} 184 185modules-cleandir: 186 cd $S ; env ${MKMODULESENV} ${MAKE} -f Makefile.modules cleandir 187 188modules-tags: 189 cd $S ; env ${MKMODULESENV} ${MAKE} -f Makefile.modules tags 190 191# Note: when moving the existing modules to .old, they are by default stripped 192# so we do not have two full debug environments sitting in / eating up space. 193# 194modules-install: 195.if !defined(NO_MODULES_OLD) 196. ifdef NO_KERNEL_OLD_STRIP 197 set -- ${DESTDIR}${DESTKERNDIR}/${DESTMODULESNAME}/*; \ 198 if [ -f "$$1" ]; then \ 199 mkdir -p ${DESTDIR}${DESTKERNDIR}/${DESTMODULESNAME}.old; \ 200 for file; do \ 201 cp -p $$file ${DESTDIR}${DESTKERNDIR}/${DESTMODULESNAME}.old; \ 202 done; \ 203 fi 204. else 205 set -- ${DESTDIR}${DESTKERNDIR}/${DESTMODULESNAME}/*; \ 206 if [ -f "$$1" ]; then \ 207 mkdir -p ${DESTDIR}${DESTKERNDIR}/${DESTMODULESNAME}.old; \ 208 for file; do \ 209 ${OBJCOPY} --strip-debug $$file ${DESTDIR}${DESTKERNDIR}/${DESTMODULESNAME}.old/$${file##*/}; \ 210 done; \ 211 fi 212. endif 213.endif 214 mkdir -p ${DESTDIR}${DESTKERNDIR}/${DESTMODULESNAME} # Ensure that the modules directory exists! 215 cd $S ; env ${MKMODULESENV} ${MAKE} -f Makefile.modules install 216 217modules-reinstall: 218 mkdir -p ${DESTDIR}/${DESTKERNDIR}/${DESTMODULESNAME} # Ensure that the modules directory exists! 219 cd $S ; env ${MKMODULESENV} ${MAKE} -f Makefile.modules install 220 221config.o: 222 ${NORMAL_C} 223 224ioconf.o: 225 ${NORMAL_C} 226 227vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 228 sh $S/conf/newvers.sh $S/.. 229 230# XXX strictly, everything depends on Makefile because changes to ${PROF} 231# only appear there, but we don't handle that. 232vers.o: 233 ${NORMAL_C} 234 235#vnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src 236# awk -f $S/tools/vnode_if.awk -- -c $S/kern/vnode_if.src 237# 238#vnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src 239# awk -f $S/tools/vnode_if.awk -- -h $S/kern/vnode_if.src 240# 241#vnode_if.o: 242# ${NORMAL_C} 243 244.include "$S/conf/bsd.kern.mk" 245