kern.pre.mk revision 210151
1# $FreeBSD: head/sys/conf/kern.pre.mk 210151 2010-07-15 23:32:53Z imp $
2
3# Part of a unified Makefile for building kernels.  This part contains all
4# of the definitions that need to be before %BEFORE_DEPEND.
5
6.include <bsd.own.mk>
7
8# backwards compat option for older systems.
9MACHINE_CPUARCH?=${MACHINE_ARCH:C/mipse[lb]/mips/:C/armeb/arm/:C/powerpc64/powerpc/}
10
11# Can be overridden by makeoptions or /etc/make.conf
12KERNEL_KO?=	kernel
13KERNEL?=	kernel
14KODIR?=		/boot/${KERNEL}
15LDSCRIPT_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} == "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_ARCH} == "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} == "icc"
46COPTFLAGS+= ${_ICC_CPUCFLAGS:C/(-x[^M^K^W]+)[MKW]+|-x[MKW]+/\1/}
47. else
48COPTFLAGS+= ${_CPUCFLAGS}
49. endif
50.endif
51.if ${CC} == "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} != "icc"
96CFLAGS+= -fno-common -finline-limit=${INLINE_LIMIT}
97CFLAGS+= --param inline-unit-growth=100
98CFLAGS+= --param large-function-growth=1000
99WERROR?= -Werror
100.endif
101
102# XXX LOCORE means "don't declare C stuff" not "for locore.s".
103ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
104
105.if defined(PROFLEVEL) && ${PROFLEVEL} >= 1
106.if ${CC} == "icc"
107.error "Profiling doesn't work with icc yet"
108.endif
109CFLAGS+=	-DGPROF -falign-functions=16
110.if ${PROFLEVEL} >= 2
111CFLAGS+=	-DGPROF4 -DGUPROF
112PROF=	-pg -mprofiler-epilogue
113.else
114PROF=	-pg
115.endif
116.endif
117DEFINED_PROF=	${PROF}
118
119# Put configuration-specific C flags last (except for ${PROF}) so that they
120# can override the others.
121CFLAGS+=	${CONF_CFLAGS}
122
123# Optional linting. This can be overridden in /etc/make.conf.
124LINTFLAGS=	${LINTOBJKERNFLAGS}
125
126NORMAL_C= ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.IMPSRC}
127NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${WERROR} ${.IMPSRC}
128PROFILE_C= ${CC} -c ${CFLAGS} ${WERROR} ${.IMPSRC}
129NORMAL_C_NOWERROR= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
130
131NORMAL_M= ${AWK} -f $S/tools/makeobjops.awk ${.IMPSRC} -c ; \
132	  ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.PREFIX}.c
133
134NORMAL_CTFCONVERT= [ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \
135		   ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
136
137NORMAL_LINT=	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC}
138
139GEN_CFILES= $S/$M/$M/genassym.c ${MFILES:T:S/.m$/.c/}
140SYSTEM_CFILES= config.c env.c hints.c vnode_if.c
141SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
142SYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS}
143SYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o}
144SYSTEM_OBJS+= hack.So
145SYSTEM_CTFMERGE= [ -z "${CTFMERGE}" -o -n "${NO_CTF}" ] || ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SYSTEM_OBJS} vers.o
146SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} \
147	-warn-common -export-dynamic -dynamic-linker /red/herring \
148	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
149SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
150	${SIZE} ${.TARGET} ; chmod 755 ${.TARGET}
151SYSTEM_DEP+= ${LDSCRIPT}
152
153# MKMODULESENV is set here so that port makefiles can augment
154# them.
155
156MKMODULESENV=	MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR}
157MKMODULESENV+=	MACHINE_CPUARCH=${MACHINE_CPUARCH}
158.if (${KERN_IDENT} == LINT)
159MKMODULESENV+=	ALL_MODULES=LINT
160.endif
161.if defined(MODULES_OVERRIDE)
162MKMODULESENV+=	MODULES_OVERRIDE="${MODULES_OVERRIDE}"
163.endif
164.if defined(DEBUG)
165MKMODULESENV+=	DEBUG_FLAGS="${DEBUG}"
166.endif
167