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