kern.pre.mk revision 215988
1284345Ssjg# $FreeBSD: head/sys/conf/kern.pre.mk 215988 2010-11-28 08:09:20Z jmallett $
2284345Ssjg
3284345Ssjg# Part of a unified Makefile for building kernels.  This part contains all
4284345Ssjg# of the definitions that need to be before %BEFORE_DEPEND.
5284345Ssjg
6284345Ssjg.include <bsd.own.mk>
7284345Ssjg
8284345Ssjg# backwards compat option for older systems.
9284345SsjgMACHINE_CPUARCH?=${MACHINE_ARCH:C/mipse[lb]/mips/:C/armeb/arm/:C/powerpc64/powerpc/}
10284345Ssjg
11284345Ssjg# Can be overridden by makeoptions or /etc/make.conf
12284345SsjgKERNEL_KO?=	kernel
13284345SsjgKERNEL?=	kernel
14284345SsjgKODIR?=		/boot/${KERNEL}
15284345SsjgLDSCRIPT_NAME?=	ldscript.$M
16LDSCRIPT?=	$S/conf/${LDSCRIPT_NAME}
17
18M=	${MACHINE_CPUARCH}
19
20AWK?=		awk
21LINT?=		lint
22NM?=		nm
23OBJCOPY?=	objcopy
24SIZE?=		size
25
26.if ${CC:T:Micc} == "icc"
27COPTFLAGS?=	-O
28.else
29. if defined(DEBUG)
30_MINUS_O=	-O
31CTFFLAGS+=	-g
32. else
33_MINUS_O=	-O2
34. endif
35. if ${MACHINE_CPUARCH} == "amd64"
36COPTFLAGS?=-O2 -frename-registers -pipe
37. else
38COPTFLAGS?=${_MINUS_O} -pipe
39. endif
40. if !empty(COPTFLAGS:M-O[23s]) && empty(COPTFLAGS:M-fno-strict-aliasing)
41COPTFLAGS+= -fno-strict-aliasing
42. endif
43.endif
44.if !defined(NO_CPU_COPTFLAGS)
45. if ${CC:T:Micc} == "icc"
46COPTFLAGS+= ${_ICC_CPUCFLAGS:C/(-x[^M^K^W]+)[MKW]+|-x[MKW]+/\1/}
47. else
48COPTFLAGS+= ${_CPUCFLAGS}
49. endif
50.endif
51.if ${CC:T:Micc} == "icc"
52C_DIALECT=
53NOSTDINC= -X
54.else
55C_DIALECT= -std=c99
56NOSTDINC= -nostdinc
57.endif
58
59INCLUDES= ${NOSTDINC} ${INCLMAGIC} -I. -I$S
60
61# This hack lets us use the OpenBSD altq code without spamming a new
62# include path into contrib'ed source files.
63INCLUDES+= -I$S/contrib/altq
64
65.if make(depend) || make(kernel-depend)
66
67# ... and the same for ipfilter
68INCLUDES+= -I$S/contrib/ipfilter
69
70# ... and the same for pf
71INCLUDES+= -I$S/contrib/pf
72
73# ... and the same for ath
74INCLUDES+= -I$S/dev/ath -I$S/dev/ath/ath_hal
75
76# ... and the same for the NgATM stuff
77INCLUDES+= -I$S/contrib/ngatm
78
79# .. and the same for twa
80INCLUDES+= -I$S/dev/twa
81
82# ...  and XFS
83INCLUDES+= -I$S/gnu/fs/xfs/FreeBSD -I$S/gnu/fs/xfs/FreeBSD/support -I$S/gnu/fs/xfs
84
85# ...  and OpenSolaris
86INCLUDES+= -I$S/contrib/opensolaris/compat
87
88# ... and the same for cxgb
89INCLUDES+= -I$S/dev/cxgb
90
91.endif
92
93CFLAGS=	${COPTFLAGS} ${C_DIALECT} ${DEBUG} ${CWARNFLAGS}
94CFLAGS+= ${INCLUDES} -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h
95.if ${CC:T:Micc} != "icc"
96.if ${CC:T:Mclang} != "clang"
97CFLAGS+= -fno-common -finline-limit=${INLINE_LIMIT}
98.if ${MACHINE_CPUARCH} != "mips"
99CFLAGS+= --param inline-unit-growth=100
100CFLAGS+= --param large-function-growth=1000
101.else
102# XXX Actually a gross hack just for Octeon because of the Simple Executive.
103CFLAGS+= --param inline-unit-growth=10000
104CFLAGS+= --param large-function-growth=100000
105CFLAGS+= --param max-inline-insns-single=10000
106.endif
107.endif
108WERROR?= -Werror
109.endif
110
111# XXX LOCORE means "don't declare C stuff" not "for locore.s".
112ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
113
114.if defined(PROFLEVEL) && ${PROFLEVEL} >= 1
115.if ${CC:T:Micc} == "icc" || ${CC:T:Mclang} == "clang"
116.error "Profiling doesn't work with icc or clang yet"
117.endif
118CFLAGS+=	-DGPROF -falign-functions=16
119.if ${PROFLEVEL} >= 2
120CFLAGS+=	-DGPROF4 -DGUPROF
121PROF=	-pg -mprofiler-epilogue
122.else
123PROF=	-pg
124.endif
125.endif
126DEFINED_PROF=	${PROF}
127
128# Put configuration-specific C flags last (except for ${PROF}) so that they
129# can override the others.
130CFLAGS+=	${CONF_CFLAGS}
131
132# Optional linting. This can be overridden in /etc/make.conf.
133LINTFLAGS=	${LINTOBJKERNFLAGS}
134
135NORMAL_C= ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.IMPSRC}
136NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${WERROR} ${.IMPSRC}
137PROFILE_C= ${CC} -c ${CFLAGS} ${WERROR} ${.IMPSRC}
138NORMAL_C_NOWERROR= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
139
140NORMAL_M= ${AWK} -f $S/tools/makeobjops.awk ${.IMPSRC} -c ; \
141	  ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.PREFIX}.c
142
143NORMAL_CTFCONVERT= [ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \
144		   ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
145
146NORMAL_LINT=	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC}
147
148GEN_CFILES= $S/$M/$M/genassym.c ${MFILES:T:S/.m$/.c/}
149SYSTEM_CFILES= config.c env.c hints.c vnode_if.c
150SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
151SYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS}
152SYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o}
153SYSTEM_OBJS+= hack.So
154SYSTEM_CTFMERGE= [ -z "${CTFMERGE}" -o -n "${NO_CTF}" ] || ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SYSTEM_OBJS} vers.o
155SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} \
156	-warn-common -export-dynamic -dynamic-linker /red/herring \
157	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
158SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
159	${SIZE} ${.TARGET} ; chmod 755 ${.TARGET}
160SYSTEM_DEP+= ${LDSCRIPT}
161
162# MKMODULESENV is set here so that port makefiles can augment
163# them.
164
165MKMODULESENV=	MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR}
166MKMODULESENV+=	MACHINE_CPUARCH=${MACHINE_CPUARCH}
167.if (${KERN_IDENT} == LINT)
168MKMODULESENV+=	ALL_MODULES=LINT
169.endif
170.if defined(MODULES_OVERRIDE)
171MKMODULESENV+=	MODULES_OVERRIDE="${MODULES_OVERRIDE}"
172.endif
173.if defined(DEBUG)
174MKMODULESENV+=	DEBUG_FLAGS="${DEBUG}"
175.endif
176