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