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