From 41c8eb30396a11bc4f125a4b0d4ff9bd3382f04a Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Fri, 2 Nov 2001 21:34:20 +0000 Subject: Factor the common parts of the Makefile.foo files. This introduces two new files: kern.pre.mk, which contains most of the definitions, and kern.post.mk, which contains most of the rules. I've tested this on i386 and pc98. I have had feedback on the sparc64 port, but no reports from anybody on alpha, ia64 or powerpc. I appologize in advance if I've broken you. Reviewed by: jake, jhb, arch@ --- sys/conf/Makefile.alpha | 297 +------------------------------------------- sys/conf/Makefile.i386 | 305 +-------------------------------------------- sys/conf/Makefile.ia64 | 298 +------------------------------------------- sys/conf/Makefile.pc98 | 309 +--------------------------------------------- sys/conf/Makefile.powerpc | 305 +-------------------------------------------- sys/conf/Makefile.sparc64 | 296 +------------------------------------------- sys/conf/kern.post.mk | 240 +++++++++++++++++++++++++++++++++++ sys/conf/kern.pre.mk | 84 +++++++++++++ 8 files changed, 343 insertions(+), 1791 deletions(-) create mode 100644 sys/conf/kern.post.mk create mode 100644 sys/conf/kern.pre.mk diff --git a/sys/conf/Makefile.alpha b/sys/conf/Makefile.alpha index 4f59a6e71ff1..67c0f68751be 100644 --- a/sys/conf/Makefile.alpha +++ b/sys/conf/Makefile.alpha @@ -19,12 +19,6 @@ # Which version of config(8) is required. %VERSREQ= 500008 -# Can be overridden by makeoptions or /etc/make.conf -KERNEL_KO?= kernel -KERNEL?= kernel -KODIR?= /boot/${KERNEL} -STD8X16FONT?= iso - .if !defined(S) .if exists(./@/.) S= ./@ @@ -32,74 +26,12 @@ S= ./@ S= ../../.. .endif .endif -M= ${MACHINE_ARCH} - -NM?= nm -OBJCOPY?= objcopy -SIZE?= size - -COPTFLAGS?=-O -pipe -.if !defined(NO_CPU_COPTFLAGS) -COPTFLAGS+= ${_CPUCFLAGS} -.endif -INCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev - -# This hack lets us use the ipfilter code without spamming a new -# include path into 100+ source files. -INCLUDES+= -I$S/contrib/ipfilter - -# This hack is to allow kernel compiles to succeed on machines w/out srcdist -.if exists($S/../include) -INCLUDES+= -I$S/../include -.else -INCLUDES+= -I/usr/include -.endif - -COPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h -CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} - -# XXX LOCORE means "don't declare C stuff" not "for locore.s". -ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} - -# Select the correct set of tools. Can't set OBJFORMAT here because it -# doesn't get exported into the environment, and if it were exported -# then it might break building of utilities. -FMT= -elf -CFLAGS+= ${FMT} - -DEFINED_PROF= ${PROF} -.if defined(PROF) -CFLAGS+= -malign-functions=4 -.if ${PROFLEVEL} >= 2 -IDENT+= -DGPROF4 -DGUPROF -PROF+= -mprofiler-epilogue -.endif -.endif - -# Put configuration-specific C flags last (except for ${PROF}) so that they -# can override the others. -CFLAGS+= ${CONF_CFLAGS} - -NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} -PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} - -NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ - ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c +.include "$S/conf/kern.pre.mk" -GEN_CFILES= $S/$M/$M/genassym.c -SYSTEM_CFILES= vnode_if.c hints.c env.c config.c -SYSTEM_SFILES= $S/$M/$M/locore.s -SYSTEM_DEP= Makefile ${SYSTEM_OBJS} -SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ -e locorestart \ -export-dynamic -dynamic-linker /red/herring \ -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o -SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ - ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} -SYSTEM_DEP+= $S/conf/ldscript.$M %BEFORE_DEPEND @@ -113,73 +45,6 @@ SYSTEM_DEP+= $S/conf/ldscript.$M %CLEAN -.PHONY: all modules -all: ${KERNEL_KO} - -depend: kernel-depend -clean: kernel-clean -cleandepend: kernel-cleandepend -clobber: kernel-clobber -tags: kernel-tags -install: kernel-install -install.debug: kernel-install.debug -reinstall: kernel-reinstall -reinstall.debug: kernel-reinstall.debug - -.if !defined(DEBUG) -FULLKERNEL= ${KERNEL_KO} -.else -FULLKERNEL= ${KERNEL_KO}.debug -${KERNEL_KO}: ${FULLKERNEL} - ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} -.endif - -${FULLKERNEL}: ${SYSTEM_DEP} vers.o - @rm -f ${.TARGET} - @echo linking ${.TARGET} - ${SYSTEM_LD} - ${SYSTEM_LD_TAIL} - -.if !exists(.depend) -${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} -.endif - -.for mfile in ${MFILES} -${mfile:T:S/.m$/.h/}: ${mfile} - perl5 $S/kern/makeobjops.pl -h ${mfile} -.endfor - -kernel-clean: - rm -f *.o *.so *.So *.ko *.s eddep errs \ - ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ - setdef[01].c setdefs.h tags \ - vers.c vnode_if.c vnode_if.h \ - ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ - ${CLEAN} - -kernel-clobber: - find . -type f ! -name version -delete - -locore.o: $S/$M/$M/locore.s assym.s - ${NORMAL_S} - -# This is a hack. BFD "optimizes" away dynamic mode if there are no -# dynamic references. We could probably do a '-Bforcedynamic' mode like -# in the a.out ld. For now, this works. -hack.So: Makefile - touch hack.c - ${CC} ${FMT} -shared -nostdlib hack.c -o hack.So - rm -f hack.c - -# this rule stops ./assym.s in .depend from causing problems -./assym.s: assym.s - -assym.s: $S/kern/genassym.sh genassym.o - NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} - -genassym.o: $S/$M/$M/genassym.c - ${CC} -c ${CFLAGS} -elf $S/$M/$M/genassym.c - SYSTEM_OBJS+= __divqu.o __divq.o __divlu.o __divl.o SYSTEM_OBJS+= __remqu.o __remq.o __remlu.o __reml.o CLEAN+= __divqu.S __divq.S __divlu.S __divl.S @@ -225,164 +90,6 @@ __reml.S: $S/$M/$M/divrem.m4 @(echo "define(NAME,\`__reml')define(OP,\`rem')define(S,\`true')"; \ echo "define(WORDSIZE,32)"; cat ${.ALLSRC}) | m4 > ${.TARGET} -${SYSTEM_OBJS} genassym.o vers.o: opt_global.h - -kernel-depend: - rm -f .olddep - if [ -f .depend ]; then mv .depend .olddep; fi - ${MAKE} _kernel-depend - -_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ - ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ - ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} - if [ -f .olddep ]; then mv .olddep .depend; fi - rm -f .newdep - mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} - env MKDEP_CPP="${CC} -E" \ - mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} - rm -f .depend - mv .newdep .depend - -kernel-cleandepend: - rm -f .depend - -links: - egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ - sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink - echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ - sort -u | comm -23 - dontlink | \ - sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks - sh makelinks; rm -f dontlink - -kernel-tags: - @[ -f .depend ] || { echo "you must make depend first"; exit 1; } - sh $S/conf/systags.sh - rm -f tags1 - sed -e 's, ../, ,' tags > tags1 - -kernel-install kernel-install.debug: -.if exists(${DESTDIR}/boot) - @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ - echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ - exit 1 ; \ - fi - @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ - echo "You must activate /boot/device.hints in loader.conf." ; \ - exit 1 ; \ - fi -.endif - @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ - echo "You must build a kernel first." ; \ - exit 1 ; \ - fi -.if exists(${DESTDIR}${KODIR}) - -thiskernel=`sysctl -n kern.bootfile` ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR} ; \ - rm -rf ${DESTDIR}${KODIR} ; \ - else \ - if [ -d ${DESTDIR}${KODIR}.old ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR}.old ; \ - rm -rf ${DESTDIR}${KODIR}.old ; \ - fi ; \ - mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ - sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ - fi; \ - fi -.endif - mkdir -p ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} - -kernel-reinstall kernel-reinstall.debug: - @-chflags -R noschg ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} - -.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) -all: modules -depend: modules-depend -clean: modules-clean -cleandepend: modules-cleandepend -cleandir: modules-cleandir -clobber: modules-clobber -tags: modules-tags -install: modules-install -install.debug: modules-install.debug -reinstall: modules-reinstall -reinstall.debug: modules-reinstall.debug -.endif - -MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} -.if defined(MODULES_OVERRIDE) -MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" -.endif -.if defined(DEBUG) -MKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" -.endif - -modules: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} all - -modules-depend: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} depend - -modules-clean: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean - -modules-cleandepend: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend - -modules-clobber: modules-clean - rm -rf ${MKMODULESENV} - -modules-cleandir: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir - -modules-tags: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags - -modules-install modules-reinstall: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install - -modules-install.debug modules-reinstall.debug: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug - -config.o: - ${NORMAL_C} - -vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} - sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} - -# XXX strictly, everything depends on Makefile because changes to ${PROF} -# only appear there, but we don't handle that. -vers.o: - ${NORMAL_C} - -hints.o: hints.c - ${NORMAL_C} - -env.o: env.c - ${NORMAL_C} - -vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src - -vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src - -vnode_if.o: - ${NORMAL_C} - -.if exists($S/../share/mk) -.include "$S/../share/mk/bsd.kern.mk" -.else -.include -.endif +.include "$S/conf/kern.post.mk" %RULES diff --git a/sys/conf/Makefile.i386 b/sys/conf/Makefile.i386 index 0d72924e179a..c3149022b167 100644 --- a/sys/conf/Makefile.i386 +++ b/sys/conf/Makefile.i386 @@ -19,10 +19,6 @@ # Which version of config(8) is required. %VERSREQ= 500008 -# Can be overridden by makeoptions or /etc/make.conf -KERNEL_KO?= kernel -KERNEL?= kernel -KODIR?= /boot/${KERNEL} STD8X16FONT?= iso .if !defined(S) @@ -32,76 +28,7 @@ S= ./@ S= ../../.. .endif .endif -M= ${MACHINE_ARCH} - -NM?= nm -OBJCOPY?= objcopy -SIZE?= size - -COPTFLAGS?=-O -pipe -.if !defined(NO_CPU_COPTFLAGS) -COPTFLAGS+= ${_CPUCFLAGS} -.endif -INCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev - -# This hack lets us use the Intel ACPICA code without spamming a new -# include path into 100+ source files. -INCLUDES+= -I$S/contrib/dev/acpica - -# ... and the same for ipfilter -INCLUDES+= -I$S/contrib/ipfilter - -# This hack is to allow kernel compiles to succeed on machines w/out srcdist -.if exists($S/../include) -INCLUDES+= -I$S/../include -.else -INCLUDES+= -I/usr/include -.endif - -COPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h -CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} - -# XXX LOCORE means "don't declare C stuff" not "for locore.s". -ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} - -# Select the correct set of tools. Can't set OBJFORMAT here because it -# doesn't get exported into the environment, and if it were exported -# then it might break building of utilities. -FMT= -elf -CFLAGS+= ${FMT} - -DEFINED_PROF= ${PROF} -.if defined(PROF) -CFLAGS+= -malign-functions=4 -.if ${PROFLEVEL} >= 2 -IDENT+= -DGPROF4 -DGUPROF -PROF+= -mprofiler-epilogue -.endif -.endif - -# Put configuration-specific C flags last (except for ${PROF}) so that they -# can override the others. -CFLAGS+= ${CONF_CFLAGS} - -NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} -PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} - -NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ - ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c - -GEN_CFILES= $S/$M/$M/genassym.c -SYSTEM_CFILES= vnode_if.c hints.c env.c config.c -SYSTEM_SFILES= $S/$M/$M/locore.s -SYSTEM_DEP= Makefile ${SYSTEM_OBJS} -SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So -SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ - -export-dynamic -dynamic-linker /red/herring \ - -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o -SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ - ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} -SYSTEM_DEP+= $S/conf/ldscript.$M +.include "$S/conf/kern.pre.mk" %BEFORE_DEPEND @@ -115,234 +42,6 @@ SYSTEM_DEP+= $S/conf/ldscript.$M %CLEAN -.PHONY: all modules - -all: ${KERNEL_KO} - -depend: kernel-depend -clean: kernel-clean -cleandepend: kernel-cleandepend -clobber: kernel-clobber -tags: kernel-tags -install: kernel-install -install.debug: kernel-install.debug -reinstall: kernel-reinstall -reinstall.debug: kernel-reinstall.debug - -.if !defined(DEBUG) -FULLKERNEL= ${KERNEL_KO} -.else -FULLKERNEL= ${KERNEL_KO}.debug -${KERNEL_KO}: ${FULLKERNEL} - ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} -.endif - -${FULLKERNEL}: ${SYSTEM_DEP} vers.o - @rm -f ${.TARGET} - @echo linking ${.TARGET} - ${SYSTEM_LD} - ${SYSTEM_LD_TAIL} - -.if !exists(.depend) -${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} -.endif - -.for mfile in ${MFILES} -${mfile:T:S/.m$/.h/}: ${mfile} - perl5 $S/kern/makeobjops.pl -h ${mfile} -.endfor - -kernel-clean: - rm -f *.o *.so *.So *.ko *.s eddep errs \ - ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ - setdef[01].c setdefs.h tags \ - vers.c vnode_if.c vnode_if.h \ - ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ - ${CLEAN} - -kernel-clobber: - find . -type f ! -name version -delete - -locore.o: $S/$M/$M/locore.s assym.s - ${NORMAL_S} - -# This is a hack. BFD "optimizes" away dynamic mode if there are no -# dynamic references. We could probably do a '-Bforcedynamic' mode like -# in the a.out ld. For now, this works. -hack.So: Makefile - touch hack.c - ${CC} ${FMT} -shared -nostdlib hack.c -o hack.So - rm -f hack.c - -# this rule stops ./assym.s in .depend from causing problems -./assym.s: assym.s - -assym.s: $S/kern/genassym.sh genassym.o - NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} - -genassym.o: $S/$M/$M/genassym.c - ${CC} -c ${CFLAGS} -elf $S/$M/$M/genassym.c - -${SYSTEM_OBJS} genassym.o vers.o: opt_global.h - -kernel-depend: - rm -f .olddep - if [ -f .depend ]; then mv .depend .olddep; fi - ${MAKE} _kernel-depend - -_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ - ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ - ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} - if [ -f .olddep ]; then mv .olddep .depend; fi - rm -f .newdep - mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} - env MKDEP_CPP="${CC} -E" \ - mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} - rm -f .depend - mv .newdep .depend - -kernel-cleandepend: - rm -f .depend - -links: - egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ - sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink - echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ - sort -u | comm -23 - dontlink | \ - sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks - sh makelinks; rm -f dontlink - -kernel-tags: - @[ -f .depend ] || { echo "you must make depend first"; exit 1; } - sh $S/conf/systags.sh - rm -f tags1 - sed -e 's, ../, ,' tags > tags1 - -kernel-install kernel-install.debug: -.if exists(${DESTDIR}/boot) - @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ - echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ - exit 1 ; \ - fi - @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ - echo "You must activate /boot/device.hints in loader.conf." ; \ - exit 1 ; \ - fi -.endif - @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ - echo "You must build a kernel first." ; \ - exit 1 ; \ - fi -.if exists(${DESTDIR}${KODIR}) - -thiskernel=`sysctl -n kern.bootfile` ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR} ; \ - rm -rf ${DESTDIR}${KODIR} ; \ - else \ - if [ -d ${DESTDIR}${KODIR}.old ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR}.old ; \ - rm -rf ${DESTDIR}${KODIR}.old ; \ - fi ; \ - mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ - sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ - fi; \ - fi -.endif - mkdir -p ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} - -kernel-reinstall kernel-reinstall.debug: - @-chflags -R noschg ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} - -.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) -all: modules -depend: modules-depend -clean: modules-clean -cleandepend: modules-cleandepend -cleandir: modules-cleandir -clobber: modules-clobber -tags: modules-tags -install: modules-install -install.debug: modules-install.debug -reinstall: modules-reinstall -reinstall.debug: modules-reinstall.debug -.endif - -MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} -.if defined(MODULES_OVERRIDE) -MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" -.endif -.if defined(DEBUG) -MKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" -.endif - -modules: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} all - -modules-depend: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} depend - -modules-clean: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean - -modules-cleandepend: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend - -modules-clobber: modules-clean - rm -rf ${MKMODULESENV} - -modules-cleandir: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir - -modules-tags: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags - -modules-install modules-reinstall: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install - -modules-install.debug modules-reinstall.debug: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug - -config.o: - ${NORMAL_C} - -vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} - sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} - -# XXX strictly, everything depends on Makefile because changes to ${PROF} -# only appear there, but we don't handle that. -vers.o: - ${NORMAL_C} - -hints.o: hints.c - ${NORMAL_C} - -env.o: env.c - ${NORMAL_C} - -vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src - -vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src - -vnode_if.o: - ${NORMAL_C} - -# Commented out for now pending a better solution. -# How do we pick up compiler version specific flags?? -#.if exists($S/../share/mk) -#.include "$S/../share/mk/bsd.kern.mk" -#.else -.include -#.endif +.include "$S/conf/kern.post.mk" %RULES diff --git a/sys/conf/Makefile.ia64 b/sys/conf/Makefile.ia64 index 6601f955cbb6..35b50e5df437 100644 --- a/sys/conf/Makefile.ia64 +++ b/sys/conf/Makefile.ia64 @@ -27,14 +27,11 @@ SIZE= ia64-unknown-linux-size OBJCOPY= ia64-unknown-linux-objcopy OBJDUMP= ia64-unknown-linux-objdump MACHINE_ARCH= ia64 +FMT= # Needs to be blank for linux cross tools. # Which version of config(8) is required. %VERSREQ= 500008 -# Can be overridden by makeoptions or /etc/make.conf -KERNEL_KO?= kernel -KERNEL?= kernel -KODIR?= /boot/${KERNEL} STD8X16FONT?= iso .if !defined(S) @@ -44,78 +41,10 @@ S= ./@ S= ../../.. .endif .endif -M= ${MACHINE_ARCH} +.include "$S/conf/kern.pre.mk" -NM?= nm -OBJCOPY?= objcopy -SIZE?= size - -COPTFLAGS?=-O -pipe -.if !defined(NO_CPU_COPTFLAGS) -COPTFLAGS+= ${_CPUCFLAGS} -.endif -INCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev - -# This hack lets us use the Intel ACPICA code without spamming a new -# include path into 100+ source files. -INCLUDES+= -I$S/contrib/dev/acpica - -# ... and the same for ipfilter -INCLUDES+= -I$S/contrib/ipfilter - -# This hack is to allow kernel compiles to succeed on machines w/out srcdist -.if exists($S/../include) -INCLUDES+= -I$S/../include -.else -INCLUDES+= -I/usr/include -.endif - -COPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h -CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} - -# XXX LOCORE means "don't declare C stuff" not "for locore.s". ASM_CFLAGS= -x assembler-with-cpp -Wa,-x -DLOCORE ${CFLAGS} -# Select the correct set of tools. Can't set OBJFORMAT here because it -# doesn't get exported into the environment, and if it were exported -# then it might break building of utilities. -#FMT= -elf -CFLAGS+= ${FMT} - -DEFINED_PROF= ${PROF} -.if defined(PROF) -CFLAGS+= -malign-functions=4 -.if ${PROFLEVEL} >= 2 -IDENT+= -DGPROF4 -DGUPROF -PROF+= -mprofiler-epilogue -.endif -.endif - -# Put configuration-specific C flags last (except for ${PROF}) so that they -# can override the others. -CFLAGS+= ${CONF_CFLAGS} - -NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} -PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} - -NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ - ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c - -GEN_CFILES= $S/$M/$M/genassym.c -SYSTEM_CFILES= vnode_if.c hints.c env.c config.c -SYSTEM_SFILES= $S/$M/$M/locore.s -SYSTEM_DEP= Makefile ${SYSTEM_OBJS} -SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o \ - hack.So -SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ - -export-dynamic -dynamic-linker /red/herring \ - -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o -SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ - ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} -SYSTEM_DEP+= $S/conf/ldscript.$M - %BEFORE_DEPEND %OBJS @@ -128,227 +57,6 @@ SYSTEM_DEP+= $S/conf/ldscript.$M %CLEAN -.PHONY: all modules -all: ${KERNEL_KO} - -depend: kernel-depend -clean: kernel-clean -cleandepend: kernel-cleandepend -clobber: kernel-clobber -tags: kernel-tags -install: kernel-install -install.debug: kernel-install.debug -reinstall: kernel-reinstall -reinstall.debug: kernel-reinstall.debug - -.if !defined(DEBUG) -FULLKERNEL= ${KERNEL_KO} -.else -FULLKERNEL= ${KERNEL_KO}.debug -${KERNEL_KO}: ${FULLKERNEL} - ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} -.endif - -${FULLKERNEL}: ${SYSTEM_DEP} vers.o - @rm -f ${.TARGET} - @echo linking ${.TARGET} - ${SYSTEM_LD} - ${SYSTEM_LD_TAIL} - -.if !exists(.depend) -${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} -.endif - -.for mfile in ${MFILES} -${mfile:T:S/.m$/.h/}: ${mfile} - perl5 $S/kern/makeobjops.pl -h ${mfile} -.endfor - -kernel-clean: - rm -f *.o *.so *.So *.ko *.s eddep errs \ - ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ - setdef[01].c setdefs.h tags \ - vers.c vnode_if.c vnode_if.h \ - ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ - ${CLEAN} - -kernel-clobber: - find . -type f ! -name version -delete - -locore.o: $S/$M/$M/locore.s assym.s - ${NORMAL_S} - -# This is a hack. BFD "optimizes" away dynamic mode if there are no -# dynamic references. We could probably do a '-Bforcedynamic' mode like -# in the a.out ld. For now, this works. -hack.So: Makefile - touch hack.c - ${CC} ${FMT} -shared -nostdlib hack.c -o hack.So - rm -f hack.c - -# this rule stops ./assym.s in .depend from causing problems -./assym.s: assym.s - -assym.s: $S/kern/genassym.sh genassym.o - NM=${NM} sh $S/kern/genassym.sh genassym.o > ${.TARGET} - -genassym.o: $S/$M/$M/genassym.c - ${CC} -c ${CFLAGS} $S/$M/$M/genassym.c - -${SYSTEM_OBJS} genassym.o vers.o: opt_global.h - -kernel-depend: - rm -f .olddep - if [ -f .depend ]; then mv .depend .olddep; fi - ${MAKE} _kernel-depend - -_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ - ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ - ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} - if [ -f .olddep ]; then mv .olddep .depend; fi - rm -f .newdep - CC="${CC}" mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} - env MKDEP_CPP="${CC} -E" \ - mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} - rm -f .depend - mv .newdep .depend - -kernel-cleandepend: - rm -f .depend - -links: - egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ - sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink - echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ - sort -u | comm -23 - dontlink | \ - sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks - sh makelinks; rm -f dontlink - -kernel-tags: - @[ -f .depend ] || { echo "you must make depend first"; exit 1; } - sh $S/conf/systags.sh - rm -f tags1 - sed -e 's, ../, ,' tags > tags1 - -kernel-install kernel-install.debug: -.if exists(${DESTDIR}/boot) - @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ - echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ - exit 1 ; \ - fi - @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ - echo "You must activate /boot/device.hints in loader.conf." ; \ - exit 1 ; \ - fi -.endif - @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ - echo "You must build a kernel first." ; \ - exit 1 ; \ - fi -.if exists(${DESTDIR}${KODIR}) - -thiskernel=`sysctl -n kern.bootfile` ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR} ; \ - rm -rf ${DESTDIR}${KODIR} ; \ - else \ - if [ -d ${DESTDIR}${KODIR}.old ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR}.old ; \ - rm -rf ${DESTDIR}${KODIR}.old ; \ - fi ; \ - mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ - sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ - fi; \ - fi -.endif - mkdir -p ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} - -kernel-reinstall kernel-reinstall.debug: - @-chflags -R noschg ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} - -.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) -all: modules -depend: modules-depend -clean: modules-clean -cleandepend: modules-cleandepend -cleandir: modules-cleandir -clobber: modules-clobber -tags: modules-tags -install: modules-install -install.debug: modules-install.debug -reinstall: modules-reinstall -reinstall.debug: modules-reinstall.debug -.endif - -MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} -.if defined(MODULES_OVERRIDE) -MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" -.endif -.if defined(DEBUG) -MKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" -.endif - -modules: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} all - -modules-depend: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} depend - -modules-clean: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean - -modules-cleandepend: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend - -modules-clobber: modules-clean - rm -rf ${MKMODULESENV} - -modules-cleandir: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir - -modules-tags: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags - -modules-install modules-reinstall: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install - -modules-install.debug modules-reinstall.debug: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug - -config.o: - ${NORMAL_C} - -vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} - sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} - -# XXX strictly, everything depends on Makefile because changes to ${PROF} -# only appear there, but we don't handle that. -vers.o: - ${NORMAL_C} - -hints.o: hints.c - ${NORMAL_C} - -env.o: env.c - ${NORMAL_C} - -vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src - -vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src - -vnode_if.o: - ${NORMAL_C} - -.include +.include "$S/conf/kern.post.mk" %RULES diff --git a/sys/conf/Makefile.pc98 b/sys/conf/Makefile.pc98 index 6237801ab0d5..d85d8e43f727 100644 --- a/sys/conf/Makefile.pc98 +++ b/sys/conf/Makefile.pc98 @@ -21,12 +21,6 @@ # Which version of config(8) is required. %VERSREQ= 500008 -# Can be overridden by makeoptions or /etc/make.conf -KERNEL_KO?= kernel -KERNEL?= kernel -KODIR?= /boot/${KERNEL} -#STD8X16FONT?= iso - .if !defined(S) .if exists(./@/.) S= ./@ @@ -34,76 +28,9 @@ S= ./@ S= ../../.. .endif .endif -M= ${MACHINE_ARCH} - -NM?= nm -OBJCOPY?= objcopy -SIZE?= size - -COPTFLAGS?=-O -pipe -.if !defined(NO_CPU_COPTFLAGS) -COPTFLAGS+= ${_CPUCFLAGS} -.endif -INCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev - -# This hack lets us use the Intel ACPICA code without spamming a new -# include path into 100+ source files. -INCLUDES+= -I$S/contrib/dev/acpica - -# ... and the same for ipfilter -INCLUDES+= -I$S/contrib/ipfilter - -# This hack is to allow kernel compiles to succeed on machines w/out srcdist -.if exists($S/../include) -INCLUDES+= -I$S/../include -.else -INCLUDES+= -I/usr/include -.endif - -COPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h -CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} - -# XXX LOCORE means "don't declare C stuff" not "for locore.s". -ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} - -# Select the correct set of tools. Can't set OBJFORMAT here because it -# doesn't get exported into the environment, and if it were exported -# then it might break building of utilities. -FMT= -elf -CFLAGS+= ${FMT} - -DEFINED_PROF= ${PROF} -.if defined(PROF) -CFLAGS+= -malign-functions=4 -.if ${PROFLEVEL} >= 2 -IDENT+= -DGPROF4 -DGUPROF -PROF+= -mprofiler-epilogue -.endif -.endif - -# Put configuration-specific C flags last (except for ${PROF}) so that they -# can override the others. -CFLAGS+= ${CONF_CFLAGS} - -NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} -PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} - -NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ - ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c +.include "$S/conf/kern.pre.mk" -GEN_CFILES= $S/$M/$M/genassym.c -SYSTEM_CFILES= vnode_if.c hints.c env.c config.c -SYSTEM_SFILES= $S/$M/$M/locore.s -SYSTEM_DEP= Makefile ${SYSTEM_OBJS} -SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So -SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ - -export-dynamic -dynamic-linker /red/herring \ - -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o -SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ - ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} -SYSTEM_DEP+= $S/conf/ldscript.$M +MKMODULESENV+= MACHINE=pc98 %BEFORE_DEPEND @@ -117,236 +44,6 @@ SYSTEM_DEP+= $S/conf/ldscript.$M %CLEAN -.PHONY: all modules - -all: ${KERNEL_KO} - -depend: kernel-depend -clean: kernel-clean -cleandepend: kernel-cleandepend -clobber: kernel-clobber -tags: kernel-tags -install: kernel-install -install.debug: kernel-install.debug -reinstall: kernel-reinstall -reinstall.debug: kernel-reinstall.debug - -.if !defined(DEBUG) -FULLKERNEL= ${KERNEL_KO} -.else -FULLKERNEL= ${KERNEL_KO}.debug -${KERNEL_KO}: ${FULLKERNEL} - ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} -.endif - -${FULLKERNEL}: ${SYSTEM_DEP} vers.o - @rm -f ${.TARGET} - @echo linking ${.TARGET} - ${SYSTEM_LD} - ${SYSTEM_LD_TAIL} - -.if !exists(.depend) -${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} -.endif - -.for mfile in ${MFILES} -${mfile:T:S/.m$/.h/}: ${mfile} - perl5 $S/kern/makeobjops.pl -h ${mfile} -.endfor - -kernel-clean: - rm -f *.o *.so *.So *.ko *.s eddep errs \ - ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ - setdef[01].c setdefs.h tags \ - vers.c vnode_if.c vnode_if.h \ - ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ - ${CLEAN} - -kernel-clobber: - find . -type f ! -name version -delete - -locore.o: $S/$M/$M/locore.s assym.s - ${NORMAL_S} - -# This is a hack. BFD "optimizes" away dynamic mode if there are no -# dynamic references. We could probably do a '-Bforcedynamic' mode like -# in the a.out ld. For now, this works. -hack.So: Makefile - touch hack.c - ${CC} ${FMT} -shared -nostdlib hack.c -o hack.So - rm -f hack.c - -# this rule stops ./assym.s in .depend from causing problems -./assym.s: assym.s - -assym.s: $S/kern/genassym.sh genassym.o - NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} - -genassym.o: $S/$M/$M/genassym.c - ${CC} -c ${CFLAGS} -elf $S/$M/$M/genassym.c - -${SYSTEM_OBJS} genassym.o vers.o: opt_global.h - -kernel-depend: - rm -f ./machine ; ln -s $S/$M/include ./machine - rm -f .olddep - if [ -f .depend ]; then mv .depend .olddep; fi - ${MAKE} _kernel-depend - -_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ - ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ - ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} - if [ -f .olddep ]; then mv .olddep .depend; fi - rm -f .newdep - mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} - env MKDEP_CPP="${CC} -E" \ - mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} - rm -f .depend - mv .newdep .depend - -kernel-cleandepend: - rm -f .depend - -links: - egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ - sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink - echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ - sort -u | comm -23 - dontlink | \ - sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks - sh makelinks; rm -f dontlink - -kernel-tags: - @[ -f .depend ] || { echo "you must make depend first"; exit 1; } - sh $S/conf/systags.sh - rm -f tags1 - sed -e 's, ../, ,' tags > tags1 - -kernel-install kernel-install.debug: -.if exists(${DESTDIR}/boot) - @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ - echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ - exit 1 ; \ - fi - @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ - echo "You must activate /boot/device.hints in loader.conf." ; \ - exit 1 ; \ - fi -.endif - @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ - echo "You must build a kernel first." ; \ - exit 1 ; \ - fi -.if exists(${DESTDIR}${KODIR}) - -thiskernel=`sysctl -n kern.bootfile` ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR} ; \ - rm -rf ${DESTDIR}${KODIR} ; \ - else \ - if [ -d ${DESTDIR}${KODIR}.old ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR}.old ; \ - rm -rf ${DESTDIR}${KODIR}.old ; \ - fi ; \ - mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ - sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ - fi; \ - fi -.endif - mkdir -p ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} - -kernel-reinstall kernel-reinstall.debug: - @-chflags -R noschg ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} - -.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) -all: modules -depend: modules-depend -clean: modules-clean -cleandepend: modules-cleandepend -cleandir: modules-cleandir -clobber: modules-clobber -tags: modules-tags -install: modules-install -install.debug: modules-install.debug -reinstall: modules-reinstall -reinstall.debug: modules-reinstall.debug -.endif - -MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} -.if defined(MODULES_OVERRIDE) -MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" -.endif -.if defined(DEBUG) -MKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" -.endif -MKMODULESENV+= MACHINE=pc98 - -modules: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} all - -modules-depend: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} depend - -modules-clean: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean - -modules-cleandepend: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend - -modules-clobber: modules-clean - rm -rf ${MKMODULESENV} - -modules-cleandir: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir - -modules-tags: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags - -modules-install modules-reinstall: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install - -modules-install.debug modules-reinstall.debug: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug - -config.o: - ${NORMAL_C} - -vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} - sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} - -# XXX strictly, everything depends on Makefile because changes to ${PROF} -# only appear there, but we don't handle that. -vers.o: - ${NORMAL_C} - -hints.o: hints.c - ${NORMAL_C} - -env.o: env.c - ${NORMAL_C} - -vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src - -vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src - -vnode_if.o: - ${NORMAL_C} - -# Commented out for now pending a better solution. -# How do we pick up compiler version specific flags?? -#.if exists($S/../share/mk) -#.include "$S/../share/mk/bsd.kern.mk" -#.else -.include -#.endif +.include "$S/conf/kern.post.mk" %RULES diff --git a/sys/conf/Makefile.powerpc b/sys/conf/Makefile.powerpc index 3bd46c6621e3..3cc7e963b352 100644 --- a/sys/conf/Makefile.powerpc +++ b/sys/conf/Makefile.powerpc @@ -21,11 +21,8 @@ # Temporary stuff while we're still embryonic NO_MODULES?= yes +FMT= -# Can be overridden by makeoptions or /etc/make.conf -KERNEL_KO?= kernel -KERNEL?= kernel -KODIR?= /boot/${KERNEL} STD8X16FONT?= iso .if !defined(S) @@ -35,82 +32,14 @@ S= ./@ S= ../../.. .endif .endif -M= ${MACHINE_ARCH} - -NM?= nm -OBJCOPY?= objcopy -SIZE?= size - -COPTFLAGS?=-O -pipe -.if !defined(NO_CPU_COPTFLAGS) -COPTFLAGS+= ${_CPUCFLAGS} -.endif -INCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev - -# This hack lets us use the Intel ACPICA code without spamming a new -# include path into 100+ source files. -INCLUDES+= -I$S/contrib/dev/acpica - -# ... and the same for ipfilter -INCLUDES+= -I$S/contrib/ipfilter - -# This hack is to allow kernel compiles to succeed on machines w/out srcdist -.if exists($S/../include) -INCLUDES+= -I$S/../include -.else -INCLUDES+= -I/usr/include -.endif +.include "$S/conf/kern.pre.mk" -COPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h _OS!=uname .if ${_OS} != "FreeBSD" CWARNFLAGS=-Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes \ -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual COPTS+= -D__ELF__ -D__FreeBSD__ -msoft-float .endif -CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} - -# XXX LOCORE means "don't declare C stuff" not "for locore.s". -ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} - -# Select the correct set of tools. Can't set OBJFORMAT here because it -# doesn't get exported into the environment, and if it were exported -# then it might break building of utilities. -FMT= -CFLAGS+= ${FMT} - -DEFINED_PROF= ${PROF} -.if defined(PROF) -CFLAGS+= -malign-functions=4 -.if ${PROFLEVEL} >= 2 -IDENT+= -DGPROF4 -DGUPROF -PROF+= -mprofiler-epilogue -.endif -.endif - -# Put configuration-specific C flags last (except for ${PROF}) so that they -# can override the others. -CFLAGS+= ${CONF_CFLAGS} - -NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} -PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} - -NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ - ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c - -GEN_CFILES= $S/$M/$M/genassym.c -SYSTEM_CFILES= vnode_if.c hints.c env.c config.c -SYSTEM_SFILES= $S/$M/$M/locore.s -SYSTEM_DEP= Makefile ${SYSTEM_OBJS} -SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So -SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ - -export-dynamic -dynamic-linker /red/herring \ - -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o -SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ - ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} -SYSTEM_DEP+= $S/conf/ldscript.$M %BEFORE_DEPEND @@ -124,234 +53,6 @@ SYSTEM_DEP+= $S/conf/ldscript.$M %CLEAN -.PHONY: all modules - -all: ${KERNEL_KO} - -depend: kernel-depend -clean: kernel-clean -cleandepend: kernel-cleandepend -clobber: kernel-clobber -tags: kernel-tags -install: kernel-install -install.debug: kernel-install.debug -reinstall: kernel-reinstall -reinstall.debug: kernel-reinstall.debug - -.if !defined(DEBUG) -FULLKERNEL= ${KERNEL_KO} -.else -FULLKERNEL= ${KERNEL_KO}.debug -${KERNEL_KO}: ${FULLKERNEL} - ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} -.endif - -${FULLKERNEL}: ${SYSTEM_DEP} vers.o - @rm -f ${.TARGET} - @echo linking ${.TARGET} - ${SYSTEM_LD} - ${SYSTEM_LD_TAIL} - -.if !exists(.depend) -${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} -.endif - -.for mfile in ${MFILES} -${mfile:T:S/.m$/.h/}: ${mfile} - perl5 $S/kern/makeobjops.pl -h ${mfile} -.endfor - -kernel-clean: - rm -f *.o *.so *.So *.ko *.s eddep errs \ - ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ - setdef[01].c setdefs.h tags \ - vers.c vnode_if.c vnode_if.h \ - ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ - ${CLEAN} - -kernel-clobber: - find . -type f ! -name version -delete - -locore.o: $S/$M/$M/locore.s assym.s - ${NORMAL_S} - -# This is a hack. BFD "optimizes" away dynamic mode if there are no -# dynamic references. We could probably do a '-Bforcedynamic' mode like -# in the a.out ld. For now, this works. -hack.So: Makefile - touch hack.c - ${CC} ${FMT} -shared -nostdlib hack.c -o hack.So - rm -f hack.c - -# this rule stops ./assym.s in .depend from causing problems -./assym.s: assym.s - -assym.s: $S/kern/genassym.sh genassym.o - NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} - -genassym.o: $S/$M/$M/genassym.c - ${CC} -c ${CFLAGS} $S/$M/$M/genassym.c - -${SYSTEM_OBJS} genassym.o vers.o: opt_global.h - -kernel-depend: - rm -f .olddep - if [ -f .depend ]; then mv .depend .olddep; fi - ${MAKE} _kernel-depend - -_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ - ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ - ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} - if [ -f .olddep ]; then mv .olddep .depend; fi - rm -f .newdep - mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} - env MKDEP_CPP="${CC} -E" \ - mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} - rm -f .depend - mv .newdep .depend - -kernel-cleandepend: - rm -f .depend - -links: - egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ - sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink - echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ - sort -u | comm -23 - dontlink | \ - sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks - sh makelinks; rm -f dontlink - -kernel-tags: - @[ -f .depend ] || { echo "you must make depend first"; exit 1; } - sh $S/conf/systags.sh - rm -f tags1 - sed -e 's, ../, ,' tags > tags1 - -kernel-install kernel-install.debug: -.if exists(${DESTDIR}/boot) - @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ - echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ - exit 1 ; \ - fi - @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ - echo "You must activate /boot/device.hints in loader.conf." ; \ - exit 1 ; \ - fi -.endif - @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ - echo "You must build a kernel first." ; \ - exit 1 ; \ - fi -.if exists(${DESTDIR}${KODIR}) - -thiskernel=`sysctl -n kern.bootfile` ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR} ; \ - rm -rf ${DESTDIR}${KODIR} ; \ - else \ - if [ -d ${DESTDIR}${KODIR}.old ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR}.old ; \ - rm -rf ${DESTDIR}${KODIR}.old ; \ - fi ; \ - mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ - sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ - fi; \ - fi -.endif - mkdir -p ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} - -kernel-reinstall kernel-reinstall.debug: - @-chflags -R noschg ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} - -.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) -all: modules -depend: modules-depend -clean: modules-clean -cleandepend: modules-cleandepend -cleandir: modules-cleandir -clobber: modules-clobber -tags: modules-tags -install: modules-install -install.debug: modules-install.debug -reinstall: modules-reinstall -reinstall.debug: modules-reinstall.debug -.endif - -MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} -.if defined(MODULES_OVERRIDE) -MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" -.endif -.if defined(DEBUG) -MKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" -.endif - -modules: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} all - -modules-depend: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} depend - -modules-clean: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean - -modules-cleandepend: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend - -modules-clobber: modules-clean - rm -rf ${MKMODULESENV} - -modules-cleandir: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir - -modules-tags: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags - -modules-install modules-reinstall: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install - -modules-install.debug modules-reinstall.debug: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug - -config.o: - ${NORMAL_C} - -vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} - sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} - -# XXX strictly, everything depends on Makefile because changes to ${PROF} -# only appear there, but we don't handle that. -vers.o: - ${NORMAL_C} - -hints.o: hints.c - ${NORMAL_C} - -env.o: env.c - ${NORMAL_C} - -vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src - -vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src - -vnode_if.o: - ${NORMAL_C} - -# Commented out for now pending a better solution. -# How do we pick up compiler version specific flags?? -#.if exists($S/../share/mk) -#.include "$S/../share/mk/bsd.kern.mk" -#.else -.include -#.endif +.include "$S/conf/kern.post.mk" %RULES diff --git a/sys/conf/Makefile.sparc64 b/sys/conf/Makefile.sparc64 index 3c9a1e6b2767..4435af65128c 100644 --- a/sys/conf/Makefile.sparc64 +++ b/sys/conf/Makefile.sparc64 @@ -31,15 +31,15 @@ CWARNFLAGS= -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes \ -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual \ -ansi +FMT= + # Which version of config(8) is required. %VERSREQ= 500008 -# Can be overridden by makeoptions or /etc/make.conf -KERNEL_KO?= kernel -KERNEL?= kernel -KODIR?= /boot/${KERNEL} STD8X16FONT?= iso +HACK_EXTRA_FLAGS=-Wl,-shared + .if !defined(S) .if exists(./@/.) S= ./@ @@ -47,68 +47,10 @@ S= ./@ S= ../../.. .endif .endif -M= ${MACHINE_ARCH} - -NM?= nm -OBJCOPY?= objcopy -SIZE?= size - -COPTFLAGS?=-O -pipe -.if !defined(NO_CPU_COPTFLAGS) -COPTFLAGS+= ${_CPUCFLAGS} -.endif -INCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev -# This hack is to allow kernel compiles to succeed on machines w/out srcdist -.if exists($S/../include) -INCLUDES+= -I$S/../include -.else -INCLUDES+= -I/usr/include -.endif - -COPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h -CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} -mcmodel=medlow - -# XXX LOCORE means "don't declare C stuff" not "for locore.s". -ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} - -# Select the correct set of tools. Can't set OBJFORMAT here because it -# doesn't get exported into the environment, and if it were exported -# then it might break building of utilities. -FMT= -CFLAGS+= ${FMT} - -DEFINED_PROF= ${PROF} -.if defined(PROF) -CFLAGS+= -malign-functions=4 -.if ${PROFLEVEL} >= 2 -IDENT+= -DGPROF4 -DGUPROF -PROF+= -mprofiler-epilogue -.endif -.endif - -# Put configuration-specific C flags last (except for ${PROF}) so that they -# can override the others. -CFLAGS+= ${CONF_CFLAGS} - -NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} -NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} -PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} +.include "$S/conf/kern.pre.mk" -NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ - ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c - -GEN_CFILES= $S/$M/$M/genassym.c -SYSTEM_CFILES= vnode_if.c hints.c env.c config.c SYSTEM_SFILES= $S/$M/$M/locore.s $S/$M/$M/exception.s -SYSTEM_DEP= Makefile ${SYSTEM_OBJS} SYSTEM_OBJS= locore.o exception.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So -SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ - -export-dynamic -dynamic-linker /red/herring \ - -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o -SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ - ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} -SYSTEM_DEP+= $S/conf/ldscript.$M %BEFORE_DEPEND @@ -122,53 +64,7 @@ SYSTEM_DEP+= $S/conf/ldscript.$M %CLEAN -.PHONY: all modules - -all: ${KERNEL_KO} - -depend: kernel-depend -clean: kernel-clean -cleandepend: kernel-cleandepend -clobber: kernel-clobber -tags: kernel-tags -install: kernel-install -install.debug: kernel-install.debug -reinstall: kernel-reinstall -reinstall.debug: kernel-reinstall.debug - -.if !defined(DEBUG) -FULLKERNEL= ${KERNEL_KO} -.else -FULLKERNEL= ${KERNEL_KO}.debug -${KERNEL_KO}: ${FULLKERNEL} - ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} -.endif - -${FULLKERNEL}: ${SYSTEM_DEP} vers.o - @rm -f ${.TARGET} - @echo linking ${.TARGET} - ${SYSTEM_LD} - ${SYSTEM_LD_TAIL} - -.if !exists(.depend) -${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} -.endif - -.for mfile in ${MFILES} -${mfile:T:S/.m$/.h/}: ${mfile} - perl5 $S/kern/makeobjops.pl -h ${mfile} -.endfor - -kernel-clean: - rm -f *.o *.so *.So *.ko *.s eddep errs \ - ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ - setdef[01].c setdefs.h tags \ - vers.c vnode_if.c vnode_if.h \ - ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ - ${CLEAN} - -kernel-clobber: - find . -type f ! -name version -delete +.include "$S/conf/kern.post.mk" #lint: /tmp # @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \ @@ -176,187 +72,7 @@ kernel-clobber: # grep -v 'struct/union .* never defined' | \ # grep -v 'possible pointer alignment problem' -locore.o: $S/$M/$M/locore.s assym.s - ${NORMAL_S} - exception.o: $S/$M/$M/exception.s assym.s ${NORMAL_S} -# This is a hack. BFD "optimizes" away dynamic mode if there are no -# dynamic references. We could probably do a '-Bforcedynamic' mode like -# in the a.out ld. For now, this works. -hack.So: Makefile - touch hack.c - ${CC} ${FMT} -Wl,-shared -nostdlib hack.c -o hack.So - rm -f hack.c - -# this rule stops ./assym.s in .depend from causing problems -./assym.s: assym.s - -assym.s: $S/kern/genassym.sh genassym.o - NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} - -genassym.o: $S/$M/$M/genassym.c - ${CC} -c ${CFLAGS} -elf $S/$M/$M/genassym.c - -${SYSTEM_OBJS} genassym.o vers.o: opt_global.h - -kernel-depend: - rm -f .olddep - if [ -f .depend ]; then mv .depend .olddep; fi - ${MAKE} _kernel-depend - -_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ - ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ - ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} - if [ -f .olddep ]; then mv .olddep .depend; fi - rm -f .newdep - env MKDEP_CPP="${CC} -E" \ - mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} - env MKDEP_CPP="${CC} -E" \ - mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} - rm -f .depend - mv .newdep .depend - -kernel-cleandepend: - rm -f .depend - -links: - egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ - sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink - echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ - sort -u | comm -23 - dontlink | \ - sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks - sh makelinks; rm -f dontlink - -kernel-tags: - @[ -f .depend ] || { echo "you must make depend first"; exit 1; } - sh $S/conf/systags.sh - rm -f tags1 - sed -e 's, ../, ,' tags > tags1 - -kernel-install kernel-install.debug: -.if exists(${DESTDIR}/boot) - @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ - echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ - exit 1 ; \ - fi - @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ - echo "You must activate /boot/device.hints in loader.conf." ; \ - exit 1 ; \ - fi -.endif - @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ - echo "You must build a kernel first." ; \ - exit 1 ; \ - fi -.if exists(${DESTDIR}${KODIR}) - -thiskernel=`sysctl -n kern.bootfile` ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR} ; \ - rm -rf ${DESTDIR}${KODIR} ; \ - else \ - if [ -d ${DESTDIR}${KODIR}.old ] ; then \ - chflags -R noschg ${DESTDIR}${KODIR}.old ; \ - rm -rf ${DESTDIR}${KODIR}.old ; \ - fi ; \ - mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ - if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ - sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ - fi; \ - fi -.endif - mkdir -p ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} - -kernel-reinstall kernel-reinstall.debug: - @-chflags -R noschg ${DESTDIR}${KODIR} - install -c -m 555 -o root -g wheel \ - ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} - -.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) -all: modules -depend: modules-depend -clean: modules-clean -cleandepend: modules-cleandepend -cleandir: modules-cleandir -clobber: modules-clobber -tags: modules-tags -install: modules-install -install.debug: modules-install.debug -reinstall: modules-reinstall -reinstall.debug: modules-reinstall.debug -.endif - -MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} -.if defined(MODULES_OVERRIDE) -MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" -.endif - -modules: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} all - -modules-depend: - @mkdir -p ${.OBJDIR}/modules - cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ - env ${MKMODULESENV} ${MAKE} depend - -modules-clean: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean - -modules-cleandepend: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend - -modules-clobber: modules-clean - rm -rf ${MKMODULESENV} - -modules-cleandir: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir - -modules-tags: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags - -modules-install modules-reinstall: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install - -modules-install.debug modules-reinstall.debug: - cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug - -config.o: - ${NORMAL_C} - -vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} - sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} - -# XXX strictly, everything depends on Makefile because changes to ${PROF} -# only appear there, but we don't handle that. -vers.o: - ${NORMAL_C} - -hints.o: hints.c - ${NORMAL_C} - -env.o: env.c - ${NORMAL_C} - -vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src - -vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src - perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src - -vnode_if.o: - ${NORMAL_C} - -# Commented out for now pending a better solution. -# How do we pick up compiler version specific flags?? -#.if exists($S/../share/mk) -#.include "$S/../share/mk/bsd.kern.mk" -#.else -.include -#.endif - %RULES diff --git a/sys/conf/kern.post.mk b/sys/conf/kern.post.mk new file mode 100644 index 000000000000..4431696b659b --- /dev/null +++ b/sys/conf/kern.post.mk @@ -0,0 +1,240 @@ +# kern.post.mk +# +# Unified Makefile for building kenrels. This includes all the definitions +# that need to be included after all the % directives, except %RULES and +# things that act like they are part of %RULES +# +# $FreeBSD$ +# + +.PHONY: all modules + +all: ${KERNEL_KO} + +depend: kernel-depend +clean: kernel-clean +cleandepend: kernel-cleandepend +clobber: kernel-clobber +tags: kernel-tags +install: kernel-install +install.debug: kernel-install.debug +reinstall: kernel-reinstall +reinstall.debug: kernel-reinstall.debug + +.if !defined(DEBUG) +FULLKERNEL= ${KERNEL_KO} +.else +FULLKERNEL= ${KERNEL_KO}.debug +${KERNEL_KO}: ${FULLKERNEL} + ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} +.endif + +${FULLKERNEL}: ${SYSTEM_DEP} vers.o + @rm -f ${.TARGET} + @echo linking ${.TARGET} + ${SYSTEM_LD} + ${SYSTEM_LD_TAIL} + +.if !exists(.depend) +${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} +.endif + +.for mfile in ${MFILES} +${mfile:T:S/.m$/.h/}: ${mfile} + perl5 $S/kern/makeobjops.pl -h ${mfile} +.endfor + +kernel-clean: + rm -f *.o *.so *.So *.ko *.s eddep errs \ + ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ + setdef[01].c setdefs.h tags \ + vers.c vnode_if.c vnode_if.h \ + ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ + ${CLEAN} + +kernel-clobber: + find . -type f ! -name version -delete + +locore.o: $S/$M/$M/locore.s assym.s + ${NORMAL_S} + +# This is a hack. BFD "optimizes" away dynamic mode if there are no +# dynamic references. We could probably do a '-Bforcedynamic' mode like +# in the a.out ld. For now, this works. +HACK_EXTRA_FLAGS?= -shared +hack.So: Makefile + touch hack.c + ${CC} ${FMT} ${HACK_EXTRA_FLAGS} -nostdlib hack.c -o hack.So + rm -f hack.c + +# this rule stops ./assym.s in .depend from causing problems +./assym.s: assym.s + +assym.s: $S/kern/genassym.sh genassym.o + NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} + +genassym.o: $S/$M/$M/genassym.c + ${CC} -c ${CFLAGS} $S/$M/$M/genassym.c + +${SYSTEM_OBJS} genassym.o vers.o: opt_global.h + +kernel-depend: + rm -f .olddep + if [ -f .depend ]; then mv .depend .olddep; fi + ${MAKE} _kernel-depend + +_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ + ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ + ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} + if [ -f .olddep ]; then mv .olddep .depend; fi + rm -f .newdep + env MKDEP_CPP="${CC} -E" CC="${CC}" \ + mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} + env MKDEP_CPP="${CC} -E" \ + mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} + rm -f .depend + mv .newdep .depend + +kernel-cleandepend: + rm -f .depend + +links: + egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ + sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink + echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ + sort -u | comm -23 - dontlink | \ + sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks + sh makelinks; rm -f dontlink + +kernel-tags: + @[ -f .depend ] || { echo "you must make depend first"; exit 1; } + sh $S/conf/systags.sh + rm -f tags1 + sed -e 's, ../, ,' tags > tags1 + +kernel-install kernel-install.debug: +.if exists(${DESTDIR}/boot) + @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ + echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ + exit 1 ; \ + fi + @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ + echo "You must activate /boot/device.hints in loader.conf." ; \ + exit 1 ; \ + fi +.endif + @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ + echo "You must build a kernel first." ; \ + exit 1 ; \ + fi +.if exists(${DESTDIR}${KODIR}) + -thiskernel=`sysctl -n kern.bootfile` ; \ + if [ "$$thiskernel" = ${DESTDIR}${KODIR}.old/${KERNEL_KO} ] ; then \ + chflags -R noschg ${DESTDIR}${KODIR} ; \ + rm -rf ${DESTDIR}${KODIR} ; \ + else \ + if [ -d ${DESTDIR}${KODIR}.old ] ; then \ + chflags -R noschg ${DESTDIR}${KODIR}.old ; \ + rm -rf ${DESTDIR}${KODIR}.old ; \ + fi ; \ + mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old ; \ + if [ "$$thiskernel" = ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ + sysctl -w kern.bootfile=${DESTDIR}${KODIR}.old/${KERNEL_KO} ; \ + fi; \ + fi +.endif + mkdir -p ${DESTDIR}${KODIR} + install -c -m 555 -o root -g wheel \ + ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} + +kernel-reinstall kernel-reinstall.debug: + @-chflags -R noschg ${DESTDIR}${KODIR} + install -c -m 555 -o root -g wheel \ + ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} + +.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) +all: modules +depend: modules-depend +clean: modules-clean +cleandepend: modules-cleandepend +cleandir: modules-cleandir +clobber: modules-clobber +tags: modules-tags +install: modules-install +install.debug: modules-install.debug +reinstall: modules-reinstall +reinstall.debug: modules-reinstall.debug +.endif + +MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} +.if defined(MODULES_OVERRIDE) +MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" +.endif +.if defined(DEBUG) +MKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" +.endif + +modules: + @mkdir -p ${.OBJDIR}/modules + cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ + env ${MKMODULESENV} ${MAKE} all + +modules-depend: + @mkdir -p ${.OBJDIR}/modules + cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ + env ${MKMODULESENV} ${MAKE} depend + +modules-clean: + cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean + +modules-cleandepend: + cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend + +modules-clobber: modules-clean + rm -rf ${MKMODULESENV} + +modules-cleandir: + cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir + +modules-tags: + cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags + +modules-install modules-reinstall: + cd $S/modules ; env ${MKMODULESENV} ${MAKE} install + +modules-install.debug modules-reinstall.debug: + cd $S/modules ; env ${MKMODULESENV} ${MAKE} install.debug + +config.o: + ${NORMAL_C} + +vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} + sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} + +# XXX strictly, everything depends on Makefile because changes to ${PROF} +# only appear there, but we don't handle that. +vers.o: + ${NORMAL_C} + +hints.o: hints.c + ${NORMAL_C} + +env.o: env.c + ${NORMAL_C} + +vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src + perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src + +vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src + perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src + +vnode_if.o: + ${NORMAL_C} + +# Commented out for now pending a better solution. +# How do we pick up compiler version specific flags?? +#.if exists($S/../share/mk) +#.include "$S/../share/mk/bsd.kern.mk" +#.else +.include +#.endif diff --git a/sys/conf/kern.pre.mk b/sys/conf/kern.pre.mk new file mode 100644 index 000000000000..06a2cb7b9f58 --- /dev/null +++ b/sys/conf/kern.pre.mk @@ -0,0 +1,84 @@ +# kern.pre.mk +# +# Unified Makefile for building kenrels. This includes all the definitions +# that need to be included before %BEFORE_DEPEND +# +# $FreeBSD$ +# + +# Can be overridden by makeoptions or /etc/make.conf +KERNEL_KO?= kernel +KERNEL?= kernel +KODIR?= /boot/${KERNEL} + +M= ${MACHINE_ARCH} + +NM?= nm +OBJCOPY?= objcopy +SIZE?= size + +COPTFLAGS?=-O -pipe +.if !defined(NO_CPU_COPTFLAGS) +COPTFLAGS+= ${_CPUCFLAGS} +.endif +INCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev + +# This hack lets us use the Intel ACPICA code without spamming a new +# include path into 100+ source files. +INCLUDES+= -I$S/contrib/dev/acpica + +# ... and the same for ipfilter +INCLUDES+= -I$S/contrib/ipfilter + +# This hack is to allow kernel compiles to succeed on machines w/out srcdist +.if exists($S/../include) +INCLUDES+= -I$S/../include +.else +INCLUDES+= -I/usr/include +.endif + +COPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h +CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} + +# XXX LOCORE means "don't declare C stuff" not "for locore.s". +ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} + +# Select the correct set of tools. Can't set OBJFORMAT here because it +# doesn't get exported into the environment, and if it were exported +# then it might break building of utilities. +FMT?= -elf +CFLAGS+= ${FMT} + +DEFINED_PROF= ${PROF} +.if defined(PROF) +CFLAGS+= -malign-functions=4 +.if ${PROFLEVEL} >= 2 +IDENT+= -DGPROF4 -DGUPROF +PROF+= -mprofiler-epilogue +.endif +.endif + +# Put configuration-specific C flags last (except for ${PROF}) so that they +# can override the others. +CFLAGS+= ${CONF_CFLAGS} + +NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} +NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} +NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} +PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} + +NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ + ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c + +GEN_CFILES= $S/$M/$M/genassym.c +SYSTEM_CFILES= vnode_if.c hints.c env.c config.c +SYSTEM_SFILES= $S/$M/$M/locore.s +SYSTEM_DEP= Makefile ${SYSTEM_OBJS} +SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So +SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ + -export-dynamic -dynamic-linker /red/herring \ + -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o +SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ + ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} +SYSTEM_DEP+= $S/conf/ldscript.$M + -- cgit v1.2.3