Makefile.i386 revision 73018
1327952Sdim# Makefile.i386 -- with config changes. 2193326Sed# Copyright 1990 W. Jolitz 3193326Sed# from: @(#)Makefile.i386 7.1 5/10/91 4193326Sed# $FreeBSD: head/sys/conf/Makefile.i386 73018 2001-02-25 07:51:19Z peter $ 5193326Sed# 6193326Sed# Makefile for FreeBSD 7193326Sed# 8193326Sed# This makefile is constructed from a machine description: 9193326Sed# config machineid 10193326Sed# Most changes should be made in the machine description 11193326Sed# /sys/i386/conf/``machineid'' 12193326Sed# after which you should do 13193326Sed# config machineid 14193326Sed# Generic makefile changes should be made in 15193326Sed# /sys/i386/conf/Makefile.i386 16193326Sed# after which config should be rerun for all machines. 17327952Sdim# 18218893Sdim 19193326Sed# Which version of config(8) is required. 20327952Sdim%VERSREQ= 500006 21226633Sdim 22327952Sdim# Can be overridden by makeoptions or /etc/make.conf 23327952SdimKERNEL_KO?= kernel 24193326SedKERNEL?= kernel 25327952SdimKODIR?= /boot/${KERNEL} 26327952SdimSTD8X16FONT?= iso 27327952Sdim 28327952Sdim.if !defined(S) 29327952Sdim.if exists(./@/.) 30327952SdimS= ./@ 31327952Sdim.else 32327952SdimS= ../.. 33327952Sdim.endif 34327952Sdim.endif 35327952SdimM= ${MACHINE_ARCH} 36234353Sdim 37327952SdimSIZE?= size 38341825SdimOBJCOPY?= objcopy 39327952Sdim 40327952SdimCOPTFLAGS?=-O 41327952SdimINCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev 42327952Sdim# This hack is to allow kernel compiles to succeed on machines w/out srcdist 43193326Sed.if exists($S/../include) 44193326SedINCLUDES+= -I$S/../include 45198092Srdivacky.else 46327952SdimINCLUDES+= -I/usr/include 47327952Sdim.endif 48327952Sdim 49193326Sed# This hack lets us use the Intel ACPICA code without spamming a new 50193326Sed# include path into 100+ source files. 51193326SedINCLUDES+= -I$S/contrib/dev/acpica/Subsystem/Include 52193326Sed 53193326SedCOPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h 54327952SdimCFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} 55193326Sed 56193326Sed# XXX LOCORE means "don't declare C stuff" not "for locore.s". 57327952SdimASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} 58327952Sdim 59327952Sdim# Select the correct set of tools. Can't set OBJFORMAT here because it 60193326Sed# doesn't get exported into the environment, and if it were exported 61327952Sdim# then it might break building of utilities. 62193326SedFMT= -elf 63193326SedCFLAGS+= ${FMT} 64193326Sed 65193326SedDEFINED_PROF= ${PROF} 66193326Sed.if defined(PROF) 67193326SedCFLAGS+= -malign-functions=4 68193326Sed.if ${PROFLEVEL} >= 2 69193326SedIDENT+= -DGPROF4 -DGUPROF 70341825SdimPROF+= -mprofiler-epilogue 71344779Sdim.endif 72198092Srdivacky.endif 73327952Sdim 74327952Sdim# Put configuration-specific C flags last (except for ${PROF}) so that they 75327952Sdim# can override the others. 76198092SrdivackyCFLAGS+= ${CONF_CFLAGS} 77198092Srdivacky 78193326SedNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 79193326SedNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 80198092SrdivackyNORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} 81234353SdimPROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} 82234353Sdim 83234353SdimNORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ 84234353Sdim ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c 85327952Sdim 86234353SdimGEN_CFILES= $S/$M/$M/genassym.c 87327952Sdim# setdef0.c and setdef1.c are intentionally 88327952Sdim# omitted from SYSTEM_CFILES. They include setdefs.h, a header which 89327952Sdim# is generated from all of ${OBJS}. We don't want to have to compile 90327952Sdim# everything just to do a make depend. 91234353SdimSYSTEM_CFILES= param.c vnode_if.c hints.c config.c 92327952SdimSYSTEM_SFILES= $S/$M/$M/locore.s 93341825SdimSYSTEM_DEP= Makefile ${SYSTEM_OBJS} 94234353SdimSYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} param.o hints.o config.o \ 95234353Sdim setdef1.o hack.So 96249423SdimSYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ 97341825Sdim -export-dynamic -dynamic-linker /red/herring \ 98341825Sdim -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 99341825SdimSYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ 100234353Sdim ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} 101234353SdimSYSTEM_DEP+= $S/conf/ldscript.$M 102341825Sdim 103234353Sdim%BEFORE_DEPEND 104296417Sdim 105296417Sdim%OBJS 106296417Sdim 107327952Sdim%FILES.c 108327952Sdim 109327952Sdim%FILES.s 110327952Sdim 111234353Sdim%FILES.m 112234353Sdim 113239462Sdim%CLEAN 114288943Sdim 115239462Sdim.PHONY: all modules 116314564Sdim 117239462Sdimall: ${KERNEL_KO} 118239462Sdim 119239462Sdimdepend: kernel-depend 120239462Sdimclean: kernel-clean 121327952Sdimcleandepend: kernel-cleandepend 122234353Sdimtags: kernel-tags 123327952Sdiminstall: kernel-install 124327952Sdiminstall.debug: kernel-install.debug 125239462Sdimreinstall: kernel-reinstall 126239462Sdimreinstall.debug: kernel-reinstall.debug 127341825Sdim 128341825Sdim.if !defined(DEBUG) 129327952SdimFULLKERNEL= ${KERNEL_KO} 130341825Sdim.else 131327952SdimFULLKERNEL= ${KERNEL_KO}.debug 132239462Sdim${KERNEL_KO}: ${FULLKERNEL} 133327952Sdim ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 134341825Sdim.endif 135239462Sdim 136239462Sdim${FULLKERNEL}: ${SYSTEM_DEP} vers.o 137341825Sdim @rm -f ${.TARGET} 138239462Sdim @echo linking ${.TARGET} 139341825Sdim ${SYSTEM_LD} 140234353Sdim ${SYSTEM_LD_TAIL} 141341825Sdim 142239462Sdim.if !exists(.depend) 143327952Sdim${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 144341825Sdim.endif 145341825Sdim 146341825Sdim.for mfile in ${MFILES} 147234353Sdim${mfile:T:S/.m$/.h/}: ${mfile} 148239462Sdim perl5 $S/kern/makeobjops.pl -h ${mfile} 149234353Sdim.endfor 150341825Sdim 151234353Sdimkernel-clean: 152239462Sdim rm -f *.o *.so *.So *.ko *.s eddep errs \ 153280031Sdim ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks param.c \ 154327952Sdim setdef[01].c setdefs.h tags \ 155280031Sdim vers.c vnode_if.c vnode_if.h \ 156280031Sdim ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 157280031Sdim ${CLEAN} 158280031Sdim 159327952Sdim#lint: /tmp param.c 160280031Sdim# @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \ 161280031Sdim# $S/$M/$M/Locore.c ${CFILES} param.c | \ 162280031Sdim# grep -v 'struct/union .* never defined' | \ 163327952Sdim# grep -v 'possible pointer alignment problem' 164327952Sdim 165327952Sdimlocore.o: $S/$M/$M/locore.s assym.s 166327952Sdim ${NORMAL_S} 167234353Sdim 168234353Sdim# This is a hack. BFD "optimizes" away dynamic mode if there are no 169234353Sdim# dynamic references. We could probably do a '-Bforcedynamic' mode like 170234353Sdim# in the a.out ld. For now, this works. 171296417Sdimhack.So: Makefile 172296417Sdim touch hack.c 173296417Sdim ${CC} ${FMT} -shared -nostdlib hack.c -o hack.So 174234353Sdim rm -f hack.c 175234353Sdim 176234353Sdim.ORDER: setdefs.h setdef0.c setdef1.c 177296417Sdim 178249423Sdimsetdef0.o: setdef0.c setdefs.h 179234353Sdim ${NORMAL_C} 180234353Sdim 181296417Sdimsetdef1.o: setdef1.c setdefs.h 182234353Sdim ${NORMAL_C} 183327952Sdim 184234353Sdimsetdef0.c setdef1.c setdefs.h: Makefile ${OBJS} 185234353Sdim @perl5 $S/kern/gensetdefs.pl ${OBJS} 186327952Sdim 187327952Sdim# this rule stops ./assym.s in .depend from causing problems 188327952Sdim./assym.s: assym.s 189261991Sdim 190249423Sdimassym.s: $S/kern/genassym.sh genassym.o 191234353Sdim OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} 192234353Sdim 193234353Sdimgenassym.o: $S/$M/$M/genassym.c 194261991Sdim ${CC} -c ${CFLAGS} -elf $S/$M/$M/genassym.c 195261991Sdim 196234353Sdim${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 197341825Sdim 198341825Sdimkernel-depend: 199234353Sdim rm -f .depend 200234353Sdim ${MAKE} _kernel-depend 201341825Sdim 202296417Sdim_kernel-depend: assym.s param.c vnode_if.h ${BEFORE_DEPEND} \ 203234353Sdim ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 204341825Sdim ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} 205296417Sdim rm -f .newdep 206296417Sdim mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} 207234353Sdim env MKDEP_CPP="${CC} -E" \ 208234353Sdim mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} 209234353Sdim rm -f .depend 210234353Sdim mv -f .newdep .depend 211341825Sdim 212327952Sdimkernel-cleandepend: 213234353Sdim rm -f .depend 214234353Sdim 215341825Sdimlinks: 216234353Sdim egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 217234353Sdim sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 218234353Sdim echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 219341825Sdim sort -u | comm -23 - dontlink | \ 220234353Sdim sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 221341825Sdim sh makelinks; rm -f dontlink 222234353Sdim 223341825Sdimkernel-tags: 224234353Sdim @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 225341825Sdim sh $S/conf/systags.sh 226234353Sdim rm -f tags1 227296417Sdim sed -e 's, ../, ,' tags > tags1 228296417Sdim 229296417Sdimkernel-install kernel-install.debug: 230234353Sdim.if exists(${DESTDIR}/boot) 231296417Sdim @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 232327952Sdim echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 233327952Sdim exit 1 ; \ 234327952Sdim fi 235234353Sdim @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 236234353Sdim echo "You must activate /boot/device.hints in loader.conf." ; \ 237341825Sdim exit 1 ; \ 238234353Sdim fi 239234353Sdim.endif 240341825Sdim @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ 241234353Sdim echo "You must build a kernel first." ; \ 242341825Sdim exit 1 ; \ 243341825Sdim fi 244234353Sdim.if exists(${DESTDIR}${KODIR}) 245341825Sdim.if exists(${DESTDIR}${KODIR}.old) 246341825Sdim @-chflags -R noschg ${DESTDIR}${KODIR}.old 247234353Sdim -rm -rf ${DESTDIR}${KODIR}.old 248341825Sdim.endif 249341825Sdim mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old 250234353Sdim.endif 251249423Sdim mkdir -p ${DESTDIR}${KODIR} 252234353Sdim @if [ -f ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ 253341825Sdim chflags noschg ${DESTDIR}${KODIR}/${KERNEL_KO} ; \ 254234353Sdim fi 255234353Sdim install -c -m 555 -o root -g wheel -fschg \ 256234353Sdim ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} 257327952Sdim 258327952Sdimkernel-reinstall kernel-reinstall.debug: 259249423Sdim @if [ -f ${DESTDIR}${KODIR}/${KERNEL_KO} ] ; then \ 260327952Sdim chflags noschg ${DESTDIR}${KODIR}/${KERNEL_KO} ; \ 261276479Sdim fi 262249423Sdim install -c -m 555 -o root -g wheel -fschg \ 263327952Sdim ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} 264327952Sdim 265249423Sdim.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 266327952Sdimall: modules 267341825Sdimdepend: modules-depend 268296417Sdimclean: modules-clean 269296417Sdimcleandepend: modules-cleandepend 270296417Sdimcleandir: modules-cleandir 271296417Sdimtags: modules-tags 272234353Sdiminstall: modules-install 273341825Sdiminstall.debug: modules-install.debug 274296417Sdimreinstall: modules-reinstall 275296417Sdimreinstall.debug: modules-reinstall.debug 276296417Sdim.endif 277341825Sdim 278296417SdimMKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} 279296417Sdim 280234353Sdimmodules: 281341825Sdim @mkdir -p ${.OBJDIR}/modules 282296417Sdim cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ 283296417Sdim env ${MKMODULESENV} ${MAKE} all 284296417Sdim 285296417Sdimmodules-depend: 286296417Sdim @mkdir -p ${.OBJDIR}/modules 287296417Sdim cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ 288296417Sdim env ${MKMODULESENV} ${MAKE} depend 289296417Sdim 290296417Sdimmodules-clean: 291296417Sdim cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean 292296417Sdim 293341825Sdimmodules-cleandepend: 294234353Sdim cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend 295296417Sdim 296341825Sdimmodules-cleandir: 297234353Sdim cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir 298234353Sdim 299234353Sdimmodules-tags: 300234353Sdim cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags 301234353Sdim 302234353Sdimmodules-install modules-install.debug: 303234353Sdim cd $S/modules ; env ${MKMODULESENV} ${MAKE} install 304296417Sdim 305234353Sdimmodules-reinstall modules-reinstall.debug: 306234353Sdim cd $S/modules ; env ${MKMODULESENV} ${MAKE} install 307296417Sdim 308327952Sdimconfig.o: 309327952Sdim ${NORMAL_C} 310296417Sdim 311341825Sdimparam.c: $S/conf/param.c 312234353Sdim -rm -f param.c 313234353Sdim cp $S/conf/param.c . 314234353Sdim 315234353Sdimparam.o: 316234353Sdim ${NORMAL_C} 317234353Sdim 318327952Sdimvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 319327952Sdim sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} 320234353Sdim 321327952Sdim# XXX strictly, everything depends on Makefile because changes to ${PROF} 322327952Sdim# only appear there, but we don't handle that. 323327952Sdimvers.o: 324327952Sdim ${NORMAL_C} 325234353Sdim 326327952Sdimhints.o: hints.c 327327952Sdim ${NORMAL_C} 328327952Sdim 329327952Sdimvnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src 330261991Sdim perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src 331341825Sdim 332234353Sdimvnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src 333234353Sdim perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src 334234353Sdim 335341825Sdimvnode_if.o: 336261991Sdim ${NORMAL_C} 337234353Sdim 338234353Sdim# Commented out for now pending a better solution. 339341825Sdim# How do we pick up compiler version specific flags?? 340341825Sdim#.if exists($S/../share/mk) 341234353Sdim#.include "$S/../share/mk/bsd.kern.mk" 342234353Sdim#.else 343234353Sdim.include <bsd.kern.mk> 344234353Sdim#.endif 345234353Sdim 346296417Sdim%RULES 347249423Sdim 348234353Sdim# DO NOT DELETE THIS LINE -- make depend uses it 349296417Sdim