kern.pre.mk revision 127204
185909Simp# $FreeBSD: head/sys/conf/kern.pre.mk 127204 2004-03-19 16:36:29Z obrien $
285909Simp
3122116Sbde# Part of a unified Makefile for building kernels.  This part contains all
4122116Sbde# of the definitions that need to be before %BEFORE_DEPEND.
5122116Sbde
685909Simp# Can be overridden by makeoptions or /etc/make.conf
785909SimpKERNEL_KO?=	kernel
885909SimpKERNEL?=	kernel
985909SimpKODIR?=		/boot/${KERNEL}
1085909Simp
1185909SimpM=	${MACHINE_ARCH}
1285909Simp
1391512SobrienAWK?=		awk
14116341SmarkmLINT?=		lint
1585909SimpNM?=		nm
1685909SimpOBJCOPY?=	objcopy
1785909SimpSIZE?=		size
1885909Simp
19126890Strhodes.if ${CC} == "icc"
20126890StrhodesCOPTFLAGS?=-O
21126890Strhodes.else
22127204Sobrien. if ${MACHINE_ARCH} == "amd64"
23127204SobrienCOPTFLAGS?=-O2 -frename-registers -pipe
24127204Sobrien. else
2585909SimpCOPTFLAGS?=-O -pipe
26127204Sobrien. endif
27126890Strhodes. if ${COPTFLAGS:M-O[23s]} != ""
28124834SruCOPTFLAGS+= -fno-strict-aliasing
29126890Strhodes. endif
30124834Sru.endif
3185909Simp.if !defined(NO_CPU_COPTFLAGS)
32126890Strhodes. if ${CC} == "icc"
33126890StrhodesCOPTFLAGS+= ${_ICC_CPUCFLAGS:C/(-x[^M^K^W]+)[MKW]+|-x[MKW]+/\1/}
34126890Strhodes. else
3585909SimpCOPTFLAGS+= ${_CPUCFLAGS}
36126890Strhodes. endif
3785909Simp.endif
38126890Strhodes.if ${CC} == "icc"
39126890StrhodesNOSTDINC= -X
40126890Strhodes.else
41126890StrhodesNOSTDINC= -nostdinc
42126890Strhodes.endif
4385909Simp
44126890StrhodesINCLUDES= ${NOSTDINC} -I- ${INCLMAGIC} -I. -I$S
45126890Strhodes
46126938Strhodes# This hack lets us use the Intel ACPICA code without spamming a new
4785909Simp# include path into 100+ source files.
4885909SimpINCLUDES+= -I$S/contrib/dev/acpica
4985909Simp
5085909Simp# ... and the same for ipfilter
5185909SimpINCLUDES+= -I$S/contrib/ipfilter
5285909Simp
53126263Smlaier# ... and the same for pf
54126263SmlaierINCLUDES+= -I$S/contrib/pf
55126263Smlaier
56116817Ssam# ... and the same for Atheros HAL
57116817SsamINCLUDES+= -I$S/contrib/dev/ath -I$S/contrib/dev/ath/freebsd
58116817Ssam
59121613Sharti# ... and the same for the NgATM stuff
60121613ShartiINCLUDES+= -I$S/contrib/ngatm
61121613Sharti
6299932SbdeCOPTS=	${INCLUDES} -D_KERNEL -include opt_global.h
63122116SbdeCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
64126890Strhodes.if ${CC} != "icc"
65124834SruCFLAGS+= -fno-common -finline-limit=${INLINE_LIMIT}
66122116SbdeWERROR?= -Werror
67126890Strhodes.endif
6885909Simp
6985909Simp# XXX LOCORE means "don't declare C stuff" not "for locore.s".
7085909SimpASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
7185909Simp
7299923Sbde.if defined(PROFLEVEL) && ${PROFLEVEL} >= 1
73126938Strhodes.if ${CC} == "icc"
74126938Strhodes.error Profiling doesn't work with ICC yet.
75126938Strhodes.else
7699932SbdeCFLAGS+=	-DGPROF -falign-functions=16
77126938Strhodes.endif
7899932Sbde.if ${PROFLEVEL} >= 2
7999932SbdeCFLAGS+=	-DGPROF4 -DGUPROF
80126890Strhodes. if ${CC} == "icc"
81126890Strhodes# XXX doesn't work yet
82126890Strhodes#PROF=	-prof_gen
83126890Strhodes. else
84123989SbdePROF=	-finstrument-functions
85126890Strhodes. endif
8699932Sbde.else
87126890Strhodes. if ${CC} == "icc"
88126890StrhodesPROF=	-p
89126890Strhodes. else
9099923SbdePROF=	-pg
91126890Strhodes. endif
9299923Sbde.endif
9399932Sbde.endif
9485909SimpDEFINED_PROF=	${PROF}
9591002Speter
9685909Simp# Put configuration-specific C flags last (except for ${PROF}) so that they
9785909Simp# can override the others.
9885909SimpCFLAGS+=	${CONF_CFLAGS}
9985909Simp
100116341Smarkm# Optional linting. This can be overridden in /etc/make.conf.
101116341SmarkmLINTFLAGS=	${LINTOBJKERNFLAGS}
102116341Smarkm
10391002SpeterNORMAL_C= ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.IMPSRC}
10491002SpeterNORMAL_S= ${CC} -c ${ASM_CFLAGS} ${WERROR} ${.IMPSRC}
10591002SpeterPROFILE_C= ${CC} -c ${CFLAGS} ${WERROR} ${.IMPSRC}
106105489SmuxNORMAL_C_NOWERROR= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
10785909Simp
108105462SmuxNORMAL_M= ${AWK} -f $S/tools/makeobjops.awk ${.IMPSRC} -c ; \
109105462Smux	  ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.PREFIX}.c
11085909Simp
111116341SmarkmNORMAL_LINT=	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC}
112116341Smarkm
11385909SimpGEN_CFILES= $S/$M/$M/genassym.c
114111684SruSYSTEM_CFILES= config.c env.c hints.c majors.c vnode_if.c
115127204Sobrien.if ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "x86_64"
116127204SobrienLOCORE=locore.S
117127204Sobrien.else
118127204SobrienLOCORE=locore.s
119127204Sobrien.endif
120127204SobrienSYSTEM_SFILES= $S/$M/$M/${LOCORE}
12185909SimpSYSTEM_DEP= Makefile ${SYSTEM_OBJS}
122111684SruSYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS}
123111684SruSYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o}
124111684SruSYSTEM_OBJS+= hack.So
125123966SbdeSYSTEM_LD= @${LD} -Bdynamic -T $S/conf/ldscript.$M \
12689180Smsmith	-warn-common -export-dynamic -dynamic-linker /red/herring \
12785909Simp	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
12885909SimpSYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
129123966Sbde	${SIZE} ${.TARGET} ; chmod 755 ${.TARGET}
13085909SimpSYSTEM_DEP+= $S/conf/ldscript.$M
13185909Simp
13288893Simp# MKMODULESENV is set here so that port makefiles can augment
13388893Simp# them.
13488893Simp
13588893SimpMKMODULESENV=	MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR}
13690789Sphk.if (${KERN_IDENT} == LINT)
13790789SphkMKMODULESENV+=	ALL_MODULES=LINT
13890789Sphk.endif
13988893Simp.if defined(MODULES_OVERRIDE)
14088893SimpMKMODULESENV+=	MODULES_OVERRIDE="${MODULES_OVERRIDE}"
14188893Simp.endif
14288893Simp.if defined(DEBUG)
143125772SruMKMODULESENV+=	DEBUG_FLAGS="${DEBUG}"
14488893Simp.endif
145