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