xref: /freebsd/sys/conf/kern.pre.mk (revision aa0a1e58)
1# $FreeBSD$
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: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 the same for cxgb and cxgbe
86INCLUDES+= -I$S/dev/cxgb -I$S/dev/cxgbe
87
88.endif
89
90CFLAGS=	${COPTFLAGS} ${C_DIALECT} ${DEBUG} ${CWARNFLAGS}
91CFLAGS+= ${INCLUDES} -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h
92.if ${CC:T:Micc} != "icc"
93.if ${CC:T:Mclang} != "clang"
94CFLAGS+= -fno-common -finline-limit=${INLINE_LIMIT}
95.if ${MACHINE_CPUARCH} != "mips"
96CFLAGS+= --param inline-unit-growth=100
97CFLAGS+= --param large-function-growth=1000
98.else
99# XXX Actually a gross hack just for Octeon because of the Simple Executive.
100CFLAGS+= --param inline-unit-growth=10000
101CFLAGS+= --param large-function-growth=100000
102CFLAGS+= --param max-inline-insns-single=10000
103.endif
104.endif
105WERROR?= -Werror
106.endif
107
108# XXX LOCORE means "don't declare C stuff" not "for locore.s".
109ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
110
111.if defined(PROFLEVEL) && ${PROFLEVEL} >= 1
112.if ${CC:T:Micc} == "icc"
113.error "Profiling doesn't work with icc"
114.endif
115CFLAGS+=	-DGPROF -falign-functions=16
116.if ${PROFLEVEL} >= 2
117CFLAGS+=	-DGPROF4 -DGUPROF
118PROF=	-pg -mprofiler-epilogue
119.else
120PROF=	-pg
121.endif
122.endif
123DEFINED_PROF=	${PROF}
124
125# Put configuration-specific C flags last (except for ${PROF}) so that they
126# can override the others.
127CFLAGS+=	${CONF_CFLAGS}
128
129# Optional linting. This can be overridden in /etc/make.conf.
130LINTFLAGS=	${LINTOBJKERNFLAGS}
131
132NORMAL_C= ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.IMPSRC}
133NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${WERROR} ${.IMPSRC}
134PROFILE_C= ${CC} -c ${CFLAGS} ${WERROR} ${.IMPSRC}
135NORMAL_C_NOWERROR= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
136
137NORMAL_M= ${AWK} -f $S/tools/makeobjops.awk ${.IMPSRC} -c ; \
138	  ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.PREFIX}.c
139
140NORMAL_CTFCONVERT= [ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \
141		   ${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
142
143NORMAL_LINT=	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC}
144
145# Infiniband C flags.  Correct include paths and omit errors that linux
146# does not honor.
147OFEDINCLUDES=	-I$S/ofed/include/
148OFEDNOERR=	-Wno-cast-qual -Wno-pointer-arith -fms-extensions
149OFEDCFLAGS=	${CFLAGS:N-I*} ${OFEDINCLUDES} ${CFLAGS:M-I*} ${OFEDNOERR}
150OFED_C_NOIMP=	${CC} -c -o ${.TARGET} ${OFEDCFLAGS} ${WERROR} ${PROF}
151OFED_C=		${OFED_C_NOIMP} ${.IMPSRC}
152
153GEN_CFILES= $S/$M/$M/genassym.c ${MFILES:T:S/.m$/.c/}
154SYSTEM_CFILES= config.c env.c hints.c vnode_if.c
155SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
156SYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS}
157SYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o}
158SYSTEM_OBJS+= hack.So
159SYSTEM_CTFMERGE= [ -z "${CTFMERGE}" -o -n "${NO_CTF}" ] || ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SYSTEM_OBJS} vers.o
160SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} \
161	-warn-common -export-dynamic -dynamic-linker /red/herring \
162	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
163SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
164	${SIZE} ${.TARGET} ; chmod 755 ${.TARGET}
165SYSTEM_DEP+= ${LDSCRIPT}
166
167# MKMODULESENV is set here so that port makefiles can augment
168# them.
169
170MKMODULESENV=	MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR}
171MKMODULESENV+=	MACHINE_CPUARCH=${MACHINE_CPUARCH}
172.if (${KERN_IDENT} == LINT)
173MKMODULESENV+=	ALL_MODULES=LINT
174.endif
175.if defined(MODULES_OVERRIDE)
176MKMODULESENV+=	MODULES_OVERRIDE="${MODULES_OVERRIDE}"
177.endif
178.if defined(WITHOUT_MODULES)
179MKMODULESENV+=	WITHOUT_MODULES="${WITHOUT_MODULES}"
180.endif
181.if defined(DEBUG)
182MKMODULESENV+=	DEBUG_FLAGS="${DEBUG}"
183.endif
184