Makefile.i386 revision 48300
1193323Sed# Makefile.i386 -- with config changes. 2193323Sed# Copyright 1990 W. Jolitz 3353358Sdim# from: @(#)Makefile.i386 7.1 5/10/91 4353358Sdim# $Id: Makefile.i386,v 1.154 1999/06/28 07:10:55 phk Exp $ 5353358Sdim# 6193323Sed# Makefile for FreeBSD 7193323Sed# 8193323Sed# This makefile is constructed from a machine description: 9193323Sed# config machineid 10193323Sed# Most changes should be made in the machine description 11193323Sed# /sys/i386/conf/``machineid'' 12193323Sed# after which you should do 13276479Sdim# config machineid 14198090Srdivacky# Generic makefile changes should be made in 15288943Sdim# /sys/i386/conf/Makefile.i386 16205218Srdivacky# after which config should be rerun for all machines. 17249423Sdim# 18309124Sdim 19288943Sdim# Which version of config(8) is required. 20327952Sdim%VERSREQ= 400016 21198090Srdivacky 22327952Sdim# Can be overridden by makeoptions or /etc/make.conf 23234353SdimKERNEL?= kernel 24224145SdimKERNFORMAT?= elf 25341825SdimSTD8X16FONT?= iso 26203954Srdivacky 27224145Sdim.if exists(./@/.) 28193323SedS= ./@ 29249423Sdim.else 30198090SrdivackyS= ../.. 31226633Sdim.endif 32341825SdimI386= ${S}/i386 33321369Sdim 34249423SdimCOPTFLAGS?=-O 35193323SedINCLUDES= -nostdinc -I- -I. -I$S 36193323Sed# This hack is to allow kernel compiles to succeed on machines w/out srcdist 37341825Sdim.if exists($S/../include) 38341825SdimINCLUDES+= -I$S/../include 39341825Sdim.else 40341825SdimINCLUDES+= -I/usr/include 41261991Sdim.endif 42344779SdimCOPTS= ${INCLUDES} ${IDENT} -DKERNEL -include opt_global.h 43344779SdimCFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} 44288943Sdim 45288943Sdim# XXX LOCORE means "don't declare C stuff" not "for locore.s". 46288943SdimASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} 47288943Sdim 48344779Sdim# Use the default object format for genassym, etc. 49344779SdimGEN_CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} 50288943Sdim 51360784Sdim# Select the correct set of tools. Can't set OBJFORMAT here because it 52360784Sdim# doesn't get exported into the environment, and if it were exported 53261991Sdim# then it might break building of genassym, etc. 54261991Sdim.if ${KERNFORMAT} == "elf" 55261991SdimCFLAGS+= -elf 56261991Sdim.else 57276479SdimCFLAGS+= -aout 58261991Sdim.endif 59261991Sdim 60276479SdimLOAD_ADDRESS?= C0100000 61276479SdimDEFINED_PROF= ${PROF} 62276479Sdim.if defined(PROF) 63276479SdimCFLAGS+= -malign-functions=4 64309124Sdim.if ${PROFLEVEL} >= 2 65309124SdimIDENT+= -DGPROF4 -DGUPROF 66321369SdimPROF+= -mprofiler-epilogue 67276479Sdim.endif 68309124Sdim.endif 69309124Sdim 70309124SdimNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $< 71309124SdimNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} $< 72309124SdimNORMAL_S= ${CC} -c ${ASM_CFLAGS} $< 73344779SdimDRIVER_C= ${CC} -c ${CFLAGS} ${PROF} $< 74261991SdimDRIVER_C_C= ${CC} -c ${CFLAGS} ${PROF} $< 75261991SdimDRIVER_S= ${CC} -c -x ${ASM_CFLAGS} $< 76288943SdimPROFILE_C= ${CC} -c ${CFLAGS} $< 77288943Sdim 78288943SdimGEN_CFILES= ${I386}/i386/genassym.c 79321369Sdim# setdef0.c and setdef1.c are intentionally 80234353Sdim# omitted from SYSTEM_CFILES. They include setdefs.h, a header which 81234353Sdim# is generated from all of ${OBJS}. We don't want to have to compile 82288943Sdim# everything just to do a make depend. 83309124SdimSYSTEM_CFILES= ioconf.c param.c vnode_if.c config.c 84309124SdimSYSTEM_SFILES= ${I386}/i386/locore.s 85309124SdimSYSTEM_DEP= Makefile symbols.exclude symbols.sort ${SYSTEM_OBJS} 86341825Sdim.if ${CFLAGS:M-g} == "" 87341825SdimSYMORDER_EXCLUDE=-x symbols.exclude 88341825Sdim.endif 89198090Srdivacky 90198090Srdivacky.if ${KERNFORMAT} == aout || ${KERNFORMAT} == aoutkld 91327952SdimSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o config.o 92327952SdimSYSTEM_LD= @${LD} -aout -Bforcedynamic -Z -T ${LOAD_ADDRESS} -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 93327952SdimSYSTEM_LD_TAIL= @echo rearranging symbols; \ 94249423Sdim symorder -m ${SYMORDER_EXCLUDE} symbols.sort ${.TARGET}; \ 95249423Sdim size -aout ${.TARGET} ; chmod 755 ${.TARGET} 96234353Sdim.endif 97344779Sdim 98344779Sdim.if ${KERNFORMAT} == elf 99360784SdimSYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \ 100360784Sdim setdef1.o hack.So 101276479SdimSYSTEM_LD= @${LD} -elf -Bdynamic -T $S/i386/conf/kernel.script \ 102276479Sdim -export-dynamic -dynamic-linker /red/herring \ 103344779Sdim -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 104234353SdimSYSTEM_LD_TAIL= @size -elf ${.TARGET} ; chmod 755 ${.TARGET} 105234353SdimSYSTEM_DEP+= $S/i386/conf/kernel.script 106234353Sdim.endif 107360784Sdim 108234353Sdim%BEFORE_DEPEND 109321369Sdim 110276479Sdim%OBJS 111234353Sdim 112234353Sdim%CFILES 113344779Sdim 114234353Sdim%SFILES 115234353Sdim 116321369Sdim%MFILES 117341825Sdim 118341825Sdim%CLEAN 119341825Sdim 120341825Sdimall: ${KERNEL} 121276479Sdim 122321369Sdim.if !defined(DEBUG) 123221345SdimFULLKERNEL= ${KERNEL} 124288943Sdim.else 125205218SrdivackyFULLKERNEL= ${KERNEL}.debug 126288943Sdim${KERNEL}: ${FULLKERNEL} 127288943Sdim.if ${KERNFORMAT} == "elf" 128288943Sdim objcopy --strip-debug ${FULLKERNEL} ${KERNEL} 129276479Sdim.else 130203954Srdivacky cp ${FULLKERNEL} ${KERNEL} 131193323Sed strip -d ${KERNEL} 132203954Srdivacky.endif 133288943Sdim.endif 134288943Sdim 135208599Srdivacky${FULLKERNEL}: ${BEFORE_DEPEND} ${SYSTEM_DEP} vers.o 136208599Srdivacky @rm -f ${.TARGET} 137341825Sdim @echo linking ${.TARGET} 138276479Sdim ${SYSTEM_LD} 139341825Sdim ${SYSTEM_LD_TAIL} 140208599Srdivacky 141341825Sdim.if !exists(.depend) 142341825Sdim${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} 143360784Sdim.endif 144276479Sdim 145321369Sdimclean: 146341825Sdim rm -f *.o *.so *.So *.ko *.s eddep errs genassym gensetdefs \ 147341825Sdim ${KERNEL} ${FULLKERNEL} linterrs makelinks param.c \ 148218893Sdim setdef[01].c setdefs.h symbols.exclude symbols.sort tags \ 149193323Sed vers.c vnode_if.c vnode_if.h ${CLEAN} 150193323Sed 151203954Srdivacky#lint: /tmp param.c 152203954Srdivacky# @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \ 153203954Srdivacky# ${I386}/i386/Locore.c ${CFILES} ioconf.c param.c | \ 154321369Sdim# grep -v 'struct/union .* never defined' | \ 155288943Sdim# grep -v 'possible pointer alignment problem' 156327952Sdim 157276479Sdimsymbols.exclude: 158203954Srdivacky echo "gcc2_compiled." >symbols.exclude 159208599Srdivacky echo "___gnu_compiled_c" >>symbols.exclude 160288943Sdim 161321369Sdimsymbols.sort: ${I386}/i386/symbols.raw 162288943Sdim grep -v '^#' ${I386}/i386/symbols.raw \ 163288943Sdim | sed 's/^ //' | sort -u > symbols.sort 164288943Sdim 165341825Sdimlocore.o: ${I386}/i386/locore.s assym.s 166341825Sdim ${NORMAL_S} 167341825Sdim 168327952Sdim.if ${KERNFORMAT} == elf 169296417Sdim# This is a hack. BFD "optimizes" away dynamic mode if there are no 170288943Sdim# dynamic references. We could probably do a '-Bforcedynamic' mode like 171203954Srdivacky# in the a.out ld. For now, this works. 172203954Srdivackyhack.So: Makefile 173203954Srdivacky touch hack.c 174203954Srdivacky ${CC} -elf -shared -nostdlib hack.c -o hack.So 175203954Srdivacky rm -f hack.c 176321369Sdim.endif 177203954Srdivacky 178203954Srdivacky.ORDER: setdefs.h setdef0.c setdef1.c 179208599Srdivacky 180205218Srdivackysetdef0.o: setdef0.c setdefs.h 181288943Sdim ${NORMAL_C} 182288943Sdim 183276479Sdimsetdef1.o: setdef1.c setdefs.h 184198090Srdivacky ${NORMAL_C} 185212904Sdim 186203954Srdivackysetdef0.c setdef1.c setdefs.h: ${OBJS} 187321369Sdim @gensetdefs ${OBJS} 188321369Sdim 189321369Sdim# this rule stops ./assym.s in .depend from causing problems 190360784Sdim./assym.s: assym.s 191360784Sdim 192360784Sdimassym.s: genassym 193360784Sdim ./genassym >assym.s 194321369Sdim 195360784Sdimgenassym.o: ${I386}/i386/genassym.c 196360784Sdim ${CC} -c ${GEN_CFLAGS} ${I386}/i386/genassym.c 197344779Sdim 198360784Sdimgenassym: genassym.o 199344779Sdim ${CC} ${GEN_CFLAGS} genassym.o -o ${.TARGET} 200321369Sdim 201321369Sdim${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 202344779Sdim 203353358Sdim# XXX this assumes that the options for NORMAL_C* and DRIVER_C* are identical. 204353358Sdimdepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND} 205353358Sdim rm -f .newdep 206353358Sdim mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} 207353358Sdim mkdep -a -f .newdep ${GEN_CFLAGS} ${GEN_CFILES} 208360784Sdim env MKDEP_CPP="${CC} -E" \ 209353358Sdim mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} 210353358Sdim rm -f .depend 211353358Sdim mv -f .newdep .depend 212344779Sdim 213360784Sdimcleandepend: 214360784Sdim rm -f .depend 215327952Sdim 216321369Sdimlinks: 217314564Sdim egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 218203954Srdivacky sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 219193323Sed echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 220193323Sed sort -u | comm -23 - dontlink | \ 221212904Sdim sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 222212904Sdim sh makelinks && rm -f dontlink 223212904Sdim 224212904Sdimtags: 225212904Sdim @echo "see $S/kern/Makefile for tags" 226288943Sdim 227288943Sdiminstall install.debug: 228212904Sdim @if [ ! -f ${KERNEL}${.TARGET:S/install//} ] ; then \ 229212904Sdim echo "You must first build a kernel first." ; \ 230360784Sdim exit 1 ; \ 231344779Sdim fi 232360784Sdim.if exists(${DESTDIR}/${KERNEL}) 233344779Sdim -chflags noschg ${DESTDIR}/${KERNEL} 234212904Sdim mv ${DESTDIR}/${KERNEL} ${DESTDIR}/${KERNEL}.old 235344779Sdim.endif 236344779Sdim PATH=$${PATH}:/sbin:/usr/sbin; \ 237221345Sdim if [ `sysctl -n kern.bootfile` = ${DESTDIR}/${KERNEL} ] ; then \ 238360784Sdim sysctl -w kern.bootfile=${DESTDIR}/${KERNEL}.old ; \ 239276479Sdim if [ -f /var/db/kvm_${KERNEL}.db ] ; then \ 240221345Sdim mv -f /var/db/kvm_${KERNEL}.db /var/db/kvm_${KERNEL}.old.db ; \ 241221345Sdim fi \ 242221345Sdim fi 243221345Sdim install -c -m 555 -o root -g wheel -fschg \ 244327952Sdim ${KERNEL}${.TARGET:S/install//} ${DESTDIR}/${KERNEL} 245288943Sdim 246288943Sdimreinstall reinstall.debug: 247288943Sdim install -c -m 555 -o root -g wheel -fschg \ 248288943Sdim ${KERNEL}${.TARGET:S/reinstall//} ${DESTDIR}/${KERNEL} 249327952Sdim 250276479Sdimconfig.o: 251221345Sdim ${NORMAL_C} 252221345Sdim 253288943Sdimioconf.o: 254288943Sdim ${NORMAL_C} 255341825Sdim 256327952Sdimparam.c: $S/conf/param.c 257296417Sdim -rm -f param.c 258288943Sdim cp $S/conf/param.c . 259221345Sdim 260221345Sdimparam.o: 261288943Sdim ${NORMAL_C} 262288943Sdim 263276479Sdimvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 264221345Sdim sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} 265221345Sdim 266221345Sdim# XXX strictly, everything depends on Makefile because changes to ${PROF} 267314564Sdim# only appear there, but we don't handle that. 268221345Sdimvers.o: 269212904Sdim ${NORMAL_C} 270212904Sdim 271.ORDER: vnode_if.c vnode_if.h 272vnode_if.c vnode_if.h: $S/kern/vnode_if.sh $S/kern/vnode_if.src 273 sh $S/kern/vnode_if.sh $S/kern/vnode_if.src 274 275vnode_if.o: 276 ${NORMAL_C} 277 278.if exists($S/../share/mk) 279.include "$S/../share/mk/bsd.kern.mk" 280.else 281.include <bsd.kern.mk> 282.endif 283 284%RULES 285 286# DO NOT DELETE THIS LINE -- make depend uses it 287