xref: /f-stack/mk/kern.pre.mk (revision 22ce4aff)
1a9643ea8Slogwang#
2a9643ea8Slogwang# Derived from FreeBSD src/sys/conf/kern.pre.mk
3a9643ea8Slogwang#
4a9643ea8Slogwang
5a9643ea8Slogwanginclude ${TOPDIR}/mk/compiler.mk
6a9643ea8Slogwang
7a9643ea8SlogwangMACHINE_CPUARCH:= $(shell uname -m)
8a9643ea8Slogwang
9a9643ea8Slogwang# Convert Mac OS X name to FreeBSD one.
10a9643ea8Slogwangifeq (${MACHINE_CPUARCH},x86_64)
11a9643ea8SlogwangMACHINE_CPUARCH=	amd64
12a9643ea8Slogwangendif
13a9643ea8Slogwang
14a9643ea8SlogwangAWK?=		awk
15a9643ea8Slogwang
16a9643ea8Slogwangifdef DEBUG
17a9643ea8Slogwang_MINUS_O=	-O0
18a9643ea8SlogwangCTFFLAGS+=	-g3
19a9643ea8Slogwangelse
20a9643ea8Slogwangifeq (${MACHINE_CPUARCH},powerpc)
21a9643ea8Slogwang_MINUS_O=	-O	# gcc miscompiles some code at -O2
22a9643ea8Slogwangelse
23a9643ea8Slogwang_MINUS_O=	-O2
24a9643ea8Slogwangendif
25a9643ea8Slogwangifeq (${MACHINE_CPUARCH},amd64)
26a9643ea8Slogwangifneq (${COMPILER_TYPE},clang)
27a9643ea8SlogwangCOPTFLAGS?=-O2 -fno-strict-aliasing -frename-registers -pipe -Wno-maybe-uninitialized #-finline-functions
28a9643ea8Slogwangelse
29a9643ea8SlogwangCOPTFLAGS?=-O2 -pipe
30a9643ea8Slogwangendif
31a9643ea8Slogwangelse
32a9643ea8SlogwangCOPTFLAGS?=${_MINUS_O} -pipe
33a9643ea8Slogwangendif
34a9643ea8Slogwang
35a9643ea8Slogwangifneq ($(filter -O2 -O3 -Os,${COPTFLAGS}),)
36a9643ea8Slogwangifeq ($(filter -fno-strict-aliasing,${COPTFLAGS}),)
37a9643ea8SlogwangCOPTFLAGS+= -fno-strict-aliasing
38a9643ea8Slogwangendif
39a9643ea8Slogwangendif
40a9643ea8Slogwangendif
41a9643ea8Slogwang
42a9643ea8Slogwangifndef NO_CPU_COPTFLAGS
43a9643ea8SlogwangCOPTFLAGS+= ${_CPUCFLAGS}
44a9643ea8Slogwangendif
45a9643ea8SlogwangC_DIALECT= -std=c99
46a9643ea8SlogwangNOSTDINC= -nostdinc
47a9643ea8Slogwang
48*22ce4affSfengbojiangINCLUDES= -undef -imacros ${IMACROS_FILE} ${NOSTDINC} ${INCLMAGIC} -I. -I$S -I. -I$C
49a9643ea8Slogwang
50a9643ea8SlogwangCFLAGS=	${COPTFLAGS} ${C_DIALECT} ${DEBUG} ${CWARNFLAGS}
51a9643ea8SlogwangKERNEL_CFLAGS= -D__FreeBSD__ -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-builtin
52a9643ea8Slogwangifneq (${COMPILER_TYPE},clang)
53a9643ea8SlogwangCFLAGS+= -fno-common -finline-limit=${INLINE_LIMIT}
54a9643ea8Slogwangifneq (${MACHINE_CPUARCH},mips)
55a9643ea8SlogwangCFLAGS+= --param inline-unit-growth=100
56a9643ea8SlogwangCFLAGS+= --param large-function-growth=1000
57a9643ea8Slogwangelse
58a9643ea8Slogwang# XXX Actually a gross hack just for Octeon because of the Simple Executive.
59a9643ea8SlogwangCFLAGS+= --param inline-unit-growth=10000
60a9643ea8SlogwangCFLAGS+= --param large-function-growth=100000
61a9643ea8SlogwangCFLAGS+= --param max-inline-insns-single=10000
62a9643ea8Slogwangendif
63a9643ea8Slogwangendif
64a9643ea8SlogwangWERROR?= -Werror -Wno-unused-variable
65a9643ea8Slogwang
66a9643ea8Slogwang# XXX LOCORE means "don't declare C stuff" not "for locore.s".
67a9643ea8SlogwangASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} ${KERNEL_CFLAGS}
68a9643ea8Slogwang
69a9643ea8Slogwangifeq (${COMPILER_TYPE},clang)
70a9643ea8SlogwangCLANG_NO_IAS= -no-integrated-as
71a9643ea8Slogwangendif
72a9643ea8Slogwang
73a9643ea8SlogwangDEFINED_PROF=	${PROF}
74a9643ea8Slogwang
75a9643ea8Slogwang# Put configuration-specific C flags last (except for ${PROF}) so that they
76a9643ea8Slogwang# can override the others.
77a9643ea8SlogwangCFLAGS+=	${CONF_CFLAGS}
78a9643ea8Slogwang
79a9643ea8Slogwang# Optional linting. This can be overridden in /etc/make.conf.
80a9643ea8SlogwangLINTFLAGS=	${LINTOBJKERNFLAGS}
81a9643ea8Slogwang
82c36e692aSlogwangNORMAL_C= ${CC} -c ${CFLAGS} ${KERNEL_CFLAGS} ${INCLUDES} ${WERROR} ${PROF} $< -o $@
83a9643ea8SlogwangNORMAL_S= ${CC} -c ${ASM_CFLAGS} ${INCLUDES} ${WERROR} $<
84a9643ea8SlogwangPROFILE_C= ${CC} -c ${CFLAGS} ${KERNEL_CFLAGS} ${INCLUDES} ${WERROR} $<
85a9643ea8SlogwangNORMAL_C_NOWERROR= ${CC} -c ${CFLAGS} ${KERNEL_CFLAGS} ${INCLUDES} ${PROF} $<
86a9643ea8Slogwang
87a9643ea8SlogwangNORMAL_M= ${AWK} -f $S/tools/makeobjops.awk $< -c ; \
88a9643ea8Slogwang	  ${CC} -c ${CFLAGS} ${KERNEL_CFLAGS} ${WERROR} ${PROF} $*.c
89a9643ea8Slogwang
90a9643ea8SlogwangGEN_CFILES= $S/$M/$M/genassym.c ${MFILES:T:S/.m$/.c/}
91a9643ea8SlogwangSYSTEM_CFILES= config.c env.c hints.c vnode_if.c
92a9643ea8SlogwangSYSTEM_DEP= Makefile ${SYSTEM_OBJS}
93a9643ea8SlogwangSYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS}
94a9643ea8SlogwangSYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o}
95a9643ea8SlogwangSYSTEM_OBJS+= hack.So
96a9643ea8SlogwangSYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} ${LDFLAGS} --no-warn-mismatch \
97a9643ea8Slogwang	-warn-common -export-dynamic -dynamic-linker /red/herring \
98a9643ea8Slogwang	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
99a9643ea8SlogwangSYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
100a9643ea8Slogwang	${SIZE} ${.TARGET} ; chmod 755 ${.TARGET}
101a9643ea8SlogwangSYSTEM_DEP+= ${LDSCRIPT}
102a9643ea8Slogwang
103a9643ea8Slogwang
104a9643ea8SlogwangIMACROS_FILE=filtered_predefined_macros.h
105a9643ea8Slogwang
106a9643ea8SlogwangIMACROS_FILTER+= __STDC__ __STDC_HOSTED__ __STDC_VERSION__
107a9643ea8SlogwangIMACROS_FILTER+= __APPLE__ __MACH__
108a9643ea8SlogwangIMACROS_FILTER+= __CYGWIN__ __CYGWIN32__
109a9643ea8SlogwangIMACROS_FILTER+= __FreeBSD__
110a9643ea8SlogwangIMACROS_FILTER+= __linux __linux__ __gnu__linux__ linux
111a9643ea8SlogwangIMACROS_FILTER+= _WIN32 _WIN64
112a9643ea8Slogwang
113a9643ea8SlogwangSPACE= $(eval) $(eval)
114a9643ea8SlogwangIMACROS_FILTER_EXPR:= $(subst ${SPACE},|,$(strip ${IMACROS_FILTER}))
115a9643ea8Slogwang
116