1# $DragonFly: src/sys/conf/kern.pre.mk,v 1.8 2008/11/17 11:55:19 swildner Exp $ 2# 3# This Makefile covers the top part of the MI kernel build instructions 4# 5 6# Can be overridden by makeoptions or /etc/make.conf 7KERNEL?= kernel 8 9# build this target if none is specified on the command line 10.MAIN: all 11 12# Set the platform and machine architectures 13# 14P= ${MACHINE_PLATFORM} 15M= ${MACHINE_ARCH} 16 17SIZE?= size 18OBJCOPY?= objcopy 19 20COPTFLAGS?=-O -pipe 21.if !defined(NO_CPU_COPTFLAGS) 22COPTFLAGS+= ${_CPUCFLAGS} 23.endif 24# don't use -I- so we can use proper source-relative locality for local 25# includes. 26# 27# -I. - this is to access the opt_*.h and use_*.h header files generated 28# in the kernel build directory. 29# 30# -Iinclude 31# - this is used to access forwarding header files for 32# <machine/*.h> that exist in the cpu architecture but do not 33# exist in the platform (machine/) architecture. This allows 34# the platform to trivially override the cpu header files. 35# 36INCLUDES= -nostdinc -I. -Iinclude -I$S 37# This hack is to allow kernel compiles to succeed on machines w/out srcdist 38.if exists($S/../include) 39INCLUDES+= -I$S/../include 40.else 41INCLUDES+= -I/usr/include 42.endif 43 44# This hack lets us use the Intel ACPICA code without spamming a new 45# include path into 100+ source files. 46.include "$S/conf/acpi.mk" 47INCLUDES+= -I${.OBJDIR} -I"$S/${OSACPI_MI_DIR}" -I"$S/${ACPICA_DIR}/include" 48 49# This hack lets us use the ipfilter code without spamming a new 50# include path into 100+ source files. 51INCLUDES+= -I$S/contrib/ipfilter 52 53# ... and the same for Atheros HAL 54INCLUDES+= -I$S/dev/netif/ath/hal -I$S/dev/netif/ath/hal/ath_hal 55 56COPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h 57CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} 58 59# XXX LOCORE means "don't declare C stuff" not "for locore.s". 60ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} 61 62DEFINED_PROF= ${PROF} 63.if defined(PROF) 64CFLAGS+= -falign-functions=16 65.if ${PROFLEVEL} >= 2 66IDENT+= -DGPROF4 -DGUPROF 67PROF+= -mprofiler-epilogue 68.endif 69.endif 70 71# Put configuration-specific C flags last (except for ${PROF}) so that they 72# can override the others. 73CFLAGS+= ${CONF_CFLAGS} 74 75NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 76NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 77NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} 78PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} 79 80NORMAL_M= awk -f $S/tools/makeobjops.awk -- -c $<; \ 81 ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c 82 83GEN_CFILES= $S/platform/$P/$M/genassym.c 84SYSTEM_CFILES= ioconf.c config.c 85SYSTEM_SFILES= $S/platform/$P/$M/locore.s 86SYSTEM_DEP= Makefile ${SYSTEM_OBJS} 87SYSTEM_OBJS= locore.o ${OBJS} ioconf.o config.o hack.So 88SYSTEM_LD= @${LD} -Bdynamic -T $S/platform/$P/conf/ldscript.$M \ 89 -export-dynamic -dynamic-linker /red/herring \ 90 -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 91SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ 92 ${SIZE} ${.TARGET} ; chmod 755 ${.TARGET} 93SYSTEM_DEP+= $S/platform/$P/conf/ldscript.$M 94 95# Normalize output files to make it absolutely crystal clear to 96# anyone examining the build directory. 97# 98.if defined(DEBUG) 99FULLKERNEL= ${KERNEL}.debug 100.if defined(INSTALLSTRIPPED) 101SELECTEDKERNEL= ${KERNEL}.stripped 102.else 103SELECTEDKERNEL= ${KERNEL}.debug 104.endif 105.else 106FULLKERNEL= ${KERNEL}.nodebug 107SELECTEDKERNEL= ${KERNEL}.stripped 108.endif 109 110 111MKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR} BUILDING_WITH_KERNEL=${.OBJDIR} 112.if defined(MODULES_OVERRIDE) 113MKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" 114.endif 115.if defined(DEBUG) 116MKMODULESENV+= DEBUG="${DEBUG}" DEBUG_FLAGS="${DEBUG}" 117.endif 118.if defined(INSTALLSTRIPPED) || defined(INSTALLSTRIPPEDMODULES) 119MKMODULESENV+= INSTALLSTRIPPEDMODULES=1 120.endif 121MKMODULESENV+= MACHINE_ARCH=${MACHINE_ARCH} MACHINE=${MACHINE} MACHINE_PLATFORM=${MACHINE_PLATFORM} 122 123