kern.pre.mk revision 218792
1223637Sbz# $FreeBSD: head/sys/conf/kern.pre.mk 218792 2011-02-18 08:00:26Z np $ 2126258Smlaier 3126258Smlaier# Part of a unified Makefile for building kernels. This part contains all 4126258Smlaier# of the definitions that need to be before %BEFORE_DEPEND. 5126258Smlaier 6126258Smlaier.include <bsd.own.mk> 7126258Smlaier 8126258Smlaier# backwards compat option for older systems. 9126258SmlaierMACHINE_CPUARCH?=${MACHINE_ARCH:C/mipse[lb]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} 10126258Smlaier 11126258Smlaier# Can be overridden by makeoptions or /etc/make.conf 12126258SmlaierKERNEL_KO?= kernel 13126258SmlaierKERNEL?= kernel 14126258SmlaierKODIR?= /boot/${KERNEL} 15126258SmlaierLDSCRIPT_NAME?= ldscript.$M 16126258SmlaierLDSCRIPT?= $S/conf/${LDSCRIPT_NAME} 17126258Smlaier 18126258SmlaierM= ${MACHINE_CPUARCH} 19126258Smlaier 20126258SmlaierAWK?= awk 21126258SmlaierLINT?= lint 22126258SmlaierNM?= nm 23126258SmlaierOBJCOPY?= objcopy 24126258SmlaierSIZE?= size 25126258Smlaier 26126258Smlaier.if ${CC:T:Micc} == "icc" 27126258SmlaierCOPTFLAGS?= -O 28126258Smlaier.else 29126258Smlaier. if defined(DEBUG) 30126258Smlaier_MINUS_O= -O 31126258SmlaierCTFFLAGS+= -g 32126258Smlaier. else 33126258Smlaier_MINUS_O= -O2 34126258Smlaier. endif 35126258Smlaier. if ${MACHINE_CPUARCH} == "amd64" 36145836SmlaierCOPTFLAGS?=-O2 -frename-registers -pipe 37126258Smlaier. else 38126258SmlaierCOPTFLAGS?=${_MINUS_O} -pipe 39126258Smlaier. endif 40171168Smlaier. if !empty(COPTFLAGS:M-O[23s]) && empty(COPTFLAGS:M-fno-strict-aliasing) 41171168SmlaierCOPTFLAGS+= -fno-strict-aliasing 42171168Smlaier. endif 43171168Smlaier.endif 44171168Smlaier.if !defined(NO_CPU_COPTFLAGS) 45171168Smlaier. if ${CC:T:Micc} == "icc" 46126258SmlaierCOPTFLAGS+= ${_ICC_CPUCFLAGS:C/(-x[^M^K^W]+)[MKW]+|-x[MKW]+/\1/} 47126258Smlaier. else 48145836SmlaierCOPTFLAGS+= ${_CPUCFLAGS} 49127145Smlaier. endif 50130933Sbrooks.endif 51171168Smlaier.if ${CC:T:Micc} == "icc" 52126261SmlaierC_DIALECT= 53126261SmlaierNOSTDINC= -X 54126258Smlaier.else 55126261SmlaierC_DIALECT= -std=c99 56126261SmlaierNOSTDINC= -nostdinc 57127145Smlaier.endif 58126261Smlaier 59126261SmlaierINCLUDES= ${NOSTDINC} ${INCLMAGIC} -I. -I$S 60126261Smlaier 61126258Smlaier# This hack lets us use the OpenBSD altq code without spamming a new 62126258Smlaier# include path into contrib'ed source files. 63126258SmlaierINCLUDES+= -I$S/contrib/altq 64171168Smlaier 65135920Smlaier.if make(depend) || make(kernel-depend) 66135920Smlaier 67135920Smlaier# ... and the same for ipfilter 68126258SmlaierINCLUDES+= -I$S/contrib/ipfilter 69126258Smlaier 70126258Smlaier# ... and the same for pf 71126258SmlaierINCLUDES+= -I$S/contrib/pf 72171168Smlaier 73171168Smlaier# ... and the same for ath 74171168SmlaierINCLUDES+= -I$S/dev/ath -I$S/dev/ath/ath_hal 75171168Smlaier 76171168Smlaier# ... and the same for the NgATM stuff 77171168SmlaierINCLUDES+= -I$S/contrib/ngatm 78171168Smlaier 79126258Smlaier# .. and the same for twa 80145836SmlaierINCLUDES+= -I$S/dev/twa 81223637Sbz 82126258Smlaier# ... and XFS 83126258SmlaierINCLUDES+= -I$S/gnu/fs/xfs/FreeBSD -I$S/gnu/fs/xfs/FreeBSD/support -I$S/gnu/fs/xfs 84126258Smlaier 85126258Smlaier# ... and the same for cxgb and cxgbe 86126258SmlaierINCLUDES+= -I$S/dev/cxgb -I$S/dev/cxgbe 87126258Smlaier 88126258Smlaier.endif 89126258Smlaier 90171168SmlaierCFLAGS= ${COPTFLAGS} ${C_DIALECT} ${DEBUG} ${CWARNFLAGS} 91223637SbzCFLAGS+= ${INCLUDES} -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h 92171168Smlaier.if ${CC:T:Micc} != "icc" 93126258Smlaier.if ${CC:T:Mclang} != "clang" 94126258SmlaierCFLAGS+= -fno-common -finline-limit=${INLINE_LIMIT} 95126258Smlaier.if ${MACHINE_CPUARCH} != "mips" 96126258SmlaierCFLAGS+= --param inline-unit-growth=100 97126258SmlaierCFLAGS+= --param large-function-growth=1000 98126258Smlaier.else 99126258Smlaier# XXX Actually a gross hack just for Octeon because of the Simple Executive. 100126258SmlaierCFLAGS+= --param inline-unit-growth=10000 101126258SmlaierCFLAGS+= --param large-function-growth=100000 102126258SmlaierCFLAGS+= --param max-inline-insns-single=10000 103130613Smlaier.endif 104171168Smlaier.endif 105171168SmlaierWERROR?= -Werror 106145836Smlaier.endif 107145836Smlaier 108145836Smlaier# XXX LOCORE means "don't declare C stuff" not "for locore.s". 109145836SmlaierASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} 110145836Smlaier 111145836Smlaier.if defined(PROFLEVEL) && ${PROFLEVEL} >= 1 112145836Smlaier.if ${CC:T:Micc} == "icc" || ${CC:T:Mclang} == "clang" 113145836Smlaier.error "Profiling doesn't work with icc or clang yet" 114145836Smlaier.endif 115145836SmlaierCFLAGS+= -DGPROF -falign-functions=16 116145836Smlaier.if ${PROFLEVEL} >= 2 117145836SmlaierCFLAGS+= -DGPROF4 -DGUPROF 118145836SmlaierPROF= -pg -mprofiler-epilogue 119145836Smlaier.else 120145836SmlaierPROF= -pg 121145836Smlaier.endif 122145836Smlaier.endif 123145836SmlaierDEFINED_PROF= ${PROF} 124145836Smlaier 125145836Smlaier# Put configuration-specific C flags last (except for ${PROF}) so that they 126145836Smlaier# can override the others. 127126258SmlaierCFLAGS+= ${CONF_CFLAGS} 128171168Smlaier 129171168Smlaier# Optional linting. This can be overridden in /etc/make.conf. 130126258SmlaierLINTFLAGS= ${LINTOBJKERNFLAGS} 131126258Smlaier 132126258SmlaierNORMAL_C= ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.IMPSRC} 133126258SmlaierNORMAL_S= ${CC} -c ${ASM_CFLAGS} ${WERROR} ${.IMPSRC} 134223637SbzPROFILE_C= ${CC} -c ${CFLAGS} ${WERROR} ${.IMPSRC} 135223637SbzNORMAL_C_NOWERROR= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 136126258Smlaier 137130613SmlaierNORMAL_M= ${AWK} -f $S/tools/makeobjops.awk ${.IMPSRC} -c ; \ 138126258Smlaier ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.PREFIX}.c 139126258Smlaier 140126258SmlaierNORMAL_CTFCONVERT= [ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \ 141171168Smlaier ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} 142171168Smlaier 143171168SmlaierNORMAL_LINT= ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} 144171168Smlaier 145126258SmlaierGEN_CFILES= $S/$M/$M/genassym.c ${MFILES:T:S/.m$/.c/} 146126258SmlaierSYSTEM_CFILES= config.c env.c hints.c vnode_if.c 147126258SmlaierSYSTEM_DEP= Makefile ${SYSTEM_OBJS} 148126258SmlaierSYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS} 149126258SmlaierSYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o} 150126258SmlaierSYSTEM_OBJS+= hack.So 151126258SmlaierSYSTEM_CTFMERGE= [ -z "${CTFMERGE}" -o -n "${NO_CTF}" ] || ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SYSTEM_OBJS} vers.o 152126258SmlaierSYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} \ 153126258Smlaier -warn-common -export-dynamic -dynamic-linker /red/herring \ 154126258Smlaier -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 155126258SmlaierSYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ 156126258Smlaier ${SIZE} ${.TARGET} ; chmod 755 ${.TARGET} 157126258SmlaierSYSTEM_DEP+= ${LDSCRIPT} 158126258Smlaier 159126258Smlaier# MKMODULESENV is set here so that port makefiles can augment 160126258Smlaier# them. 161126258Smlaier 162130613SmlaierMKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} 163130613SmlaierMKMODULESENV+= MACHINE_CPUARCH=${MACHINE_CPUARCH} 164130613Smlaier.if (${KERN_IDENT} == LINT) 165130613SmlaierMKMODULESENV+= ALL_MODULES=LINT 166130613Smlaier.endif 167130613Smlaier.if defined(MODULES_OVERRIDE) 168126258SmlaierMKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" 169126258Smlaier.endif 170126258Smlaier.if defined(WITHOUT_MODULES) 171126258SmlaierMKMODULESENV+= WITHOUT_MODULES="${WITHOUT_MODULES}" 172126258Smlaier.endif 173126258Smlaier.if defined(DEBUG) 174126258SmlaierMKMODULESENV+= DEBUG_FLAGS="${DEBUG}" 175126258Smlaier.endif 176145836Smlaier