Makefile.i386 revision 36283
1139823Simp# Makefile.i386 -- with config changes.
21541Srgrimes# Copyright 1990 W. Jolitz
31541Srgrimes#	from: @(#)Makefile.i386	7.1 5/10/91
41541Srgrimes#	$Id: Makefile.i386,v 1.112 1998/05/20 20:54:04 eivind Exp $
51541Srgrimes#
61541Srgrimes# Makefile for FreeBSD
71541Srgrimes#
81541Srgrimes# This makefile is constructed from a machine description:
91541Srgrimes#	config machineid
101541Srgrimes# Most changes should be made in the machine description
111541Srgrimes#	/sys/i386/conf/``machineid''
121541Srgrimes# after which you should do
131541Srgrimes#	 config machineid
141541Srgrimes# Generic makefile changes should be made in
151541Srgrimes#	/sys/i386/conf/Makefile.i386
161541Srgrimes# after which config should be rerun for all machines.
171541Srgrimes#
181541Srgrimes
191541Srgrimes# Which version of config(8) is required.
201541Srgrimes%VERSREQ=	300003
211541Srgrimes
221541SrgrimesBINFORMAT?=	aout
231541Srgrimes#BINFORMAT?=	aoutkld
241541Srgrimes#BINFORMAT?=	elf
251541Srgrimes
261541SrgrimesSTD8X16FONT?=	iso
271541Srgrimes
281541Srgrimes.if exists(./@/.)
291541SrgrimesS=	./@
301541Srgrimes.else
311541SrgrimesS=	../..
321541Srgrimes.endif
331541SrgrimesI386=	${S}/i386
341541Srgrimes
351541SrgrimesCOPTFLAGS?=-O
361541SrgrimesINCLUDES= -nostdinc -I- -I. -I$S
371541Srgrimes# This hack is to allow kernel compiles to succeed on machines w/out srcdist
38172467Ssilby.if exists($S/../include)
39172467SsilbyINCLUDES+= -I$S/../include
40172467Ssilby.else
4132350SeivindINCLUDES+= -I/usr/include
4232350Seivind.endif
431541SrgrimesCOPTS=	${INCLUDES} ${IDENT} -DKERNEL -include opt_global.h
4412693SphkCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
4544078SdfrLOAD_ADDRESS?=	F0100000
4612693SphkDEFINED_PROF=	${PROF}
471541Srgrimes.if defined(PROF)
4812693SphkCFLAGS+=	-malign-functions=4
491541Srgrimes.if ${PROFLEVEL} >= 2
50183014SjulianIDENT+=	-DGPROF4 -DGUPROF
5118892SbdePROF+=	-mprofiler-epilogue
521541Srgrimes.endif
531541Srgrimes.endif
541541Srgrimes
551541SrgrimesNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $<
5644165SjulianNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $<
578426Swollman# XXX LOCORE means "don't declare C stuff" not "for locore.s".
5858313SlileNORMAL_S= ${CC} -c -x assembler-with-cpp -DLOCORE ${COPTS} $<
5971963SjulianDRIVER_C= ${CC} -c ${CFLAGS} ${PROF} $<
60194739SbzDRIVER_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $<
61196019SrwatsonDRIVER_S= ${CC} -c -x assembler-with-cpp -DLOCORE ${COPTS} $<
621541SrgrimesPROFILE_C= ${CC} -c ${CFLAGS} ${PARAM} $<
631541Srgrimes
641541Srgrimes# ${I386}/i386/setdef0.c and ${I386}/i386/setdef1.c are intentionally
65186119Sqingli# omitted from SYSTEM_CFILES.  They depend on setdefs.h, a header which
661541Srgrimes# is generated from all of ${OBJS}.  We don't want to have to compile
67211193Swill# everything just to do a make depend.
68211193SwillSYSTEM_CFILES= ioconf.c param.c vnode_if.c config.c
69211193SwillSYSTEM_SFILES= ${I386}/i386/locore.s
701541SrgrimesSYSTEM_DEP= Makefile symbols.exclude symbols.sort ${SYSTEM_OBJS}
7184931Sfjoe.if ${CFLAGS:M-g} == ""
7244627SjulianSYMORDER_EXCLUDE=-x symbols.exclude
7344627Sjulian.endif
74163606SrwatsonSYSTEM_LD_HEAD= @echo loading ${.TARGET}; rm -f ${.TARGET}
75163606Srwatson.if ${BINFORMAT} == aout
761541SrgrimesSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o config.o
771541SrgrimesSYSTEM_LD= @${LD} -Bstatic -Z -T ${LOAD_ADDRESS} -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
781541SrgrimesSYSTEM_LD_TAIL= @echo rearranging symbols; \
7944078Sdfr	symorder -m ${SYMORDER_EXCLUDE} symbols.sort ${.TARGET}; \
8012942Swollman	size ${.TARGET} ; chmod 755 ${.TARGET}
81196797Sgnn.endif
821541Srgrimes.if ${BINFORMAT} == aoutkld
8312693SphkSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o config.o
84215701SdimSYSTEM_LD= @${LD} -Bforcedynamic -Z -T ${LOAD_ADDRESS} -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
85195699SrwatsonSYSTEM_LD_TAIL= @echo rearranging symbols; \
86215701Sdim	symorder -m ${SYMORDER_EXCLUDE} symbols.sort ${.TARGET}; \
87207369Sbz	size ${.TARGET} ; chmod 755 ${.TARGET}
88207369Sbz.endif
89215701Sdim.if ${BINFORMAT} == elf
90215701SdimSYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \
91198111Sqingli	setdef1.o
92215207SgnnSYSTEM_LD= @${LD} -Bstatic -Ttext ${LOAD_ADDRESS} -e btext -defsym _DYNAMIC=0 \
931541Srgrimes	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
94215701SdimSYSTEM_LD_TAIL= @size ${.TARGET} ; chmod 755 ${.TARGET}
95215207Sgnn.endif
96195727Srwatson
97198111Sqingli%BEFORE_DEPEND
98195727Srwatson
99195727Srwatson%OBJS
100196797Sgnn
101215207Sgnn%CFILES
10212693Sphk
103195699Srwatson%SFILES
104195699Srwatson
105195699Srwatson%LOAD
106195699Srwatson
107195699Srwatson%CLEAN
108183550Szec
109195699Srwatsonclean:
110195699Srwatson	rm -f *.o *.s eddep errs genassym gensetdefs kernel linterrs \
111183550Szec	      makelinks param.c setdefs.h symbols.exclude symbols.sort tags \
112195699Srwatson	      vers.c vnode_if.c vnode_if.h ${CLEAN}
113195699Srwatson
114183550Szec#lint: /tmp param.c
115215207Sgnn#	@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} ${PARAM} \
116215207Sgnn#	  ${I386}/i386/Locore.c ${CFILES} ioconf.c param.c | \
117215207Sgnn#	    grep -v 'struct/union .* never defined' | \
118196797Sgnn#	    grep -v 'possible pointer alignment problem'
119196797Sgnn
120196797Sgnnsymbols.exclude: Makefile
121215207Sgnn	echo "gcc2_compiled." >symbols.exclude
122215207Sgnn	echo "___gnu_compiled_c" >>symbols.exclude
123215207Sgnn
12412693Sphksymbols.sort: ${I386}/i386/symbols.raw
12592723Salfred	grep -v '^#' ${I386}/i386/symbols.raw \
126186119Sqingli	    | sed 's/^	//' | sort -u > symbols.sort
12792723Salfred
128111888Sjlemonlocore.o: ${I386}/i386/locore.s assym.s
12992723Salfred	${NORMAL_S}
13032350Seivind
13192723Salfredsetdef0.o: ${I386}/i386/setdef0.c setdefs.h
13232350Seivind	${NORMAL_C}
13312693Sphk
134193219Srwatsonsetdef1.o: ${I386}/i386/setdef1.c setdefs.h
135193219Srwatson	${NORMAL_C}
136193219Srwatson
137193219Srwatsonsetdefs.h: gensetdefs ${OBJS}
138193219Srwatson	./gensetdefs ${OBJS} >setdefs.h
139193219Srwatson
140193219Srwatsongensetdefs: gensetdefs.o
141186119Sqingli	${CC} ${CFLAGS} gensetdefs.o -o ${.TARGET}
142186119Sqingli
143186119Sqingligensetdefs.o: ${I386}/i386/gensetdefs.c
1441541Srgrimes	${CC} -c ${CFLAGS} ${I386}/i386/gensetdefs.c
145186119Sqingli
146186119Sqingli# everything potentially depends on the Makefile since everything potentially
1471541Srgrimes# depends on the options.  Some things are more dependent on the Makefile for
148186119Sqingli# historical reasons.
149186119Sqinglimachdep.o: Makefile
1501541Srgrimes
151186119Sqingli# the following is necessary because autoconf.o depends on #if GENERIC
1521541Srgrimesautoconf.o: Makefile
153186119Sqingli
154186119Sqingli# XXX - may no longer be needed
155186119Sqinglilocore.o: Makefile
156186119Sqingli
157186119Sqingli# depends on KDB (cons.o also depends on GENERIC)
158186119Sqinglitrap.o cons.o: Makefile
159186119Sqingli
160186119Sqingli# this rule stops ./assym.s in .depend from causing problems
1611541Srgrimes./assym.s: assym.s
162186119Sqingli
1631541Srgrimesassym.s: genassym
1641541Srgrimes	./genassym >assym.s
165186119Sqingli
1661541Srgrimes# Some of the defines that genassym outputs may well depend on the
1675196Swollman# value of kernel options.
168186119Sqingligenassym.o: ${I386}/i386/genassym.c Makefile opt_global.h opt_vm86.h
1691541Srgrimes	${CC} -c ${CFLAGS} ${PARAM} -UKERNEL ${I386}/i386/genassym.c
170186119Sqingli
171210703Sbzgenassym: genassym.o
172215207Sgnn	${CC} ${CFLAGS} ${PARAM} genassym.o -o ${.TARGET}
1731541Srgrimes
174210703Sbz${OBJS}: opt_global.h
175210703Sbz
176186119Sqingli# XXX this assumes that the options for NORMAL_C* and DRIVER_C* are identical.
177196797Sgnndepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND}
178186119Sqingli	rm -f .newdep
179186119Sqingli	mkdep -a -f .newdep ${COPTS} ${CFILES} ${SYSTEM_CFILES}
180201544Sqingli	mkdep -a -f .newdep ${COPTS} ${PARAM} -UKERNEL ${I386}/i386/genassym.c
181201544Sqingli	MKDEP_CPP="${CC} -E -x assembler-with-cpp" ; export MKDEP_CPP ; \
182201544Sqingli	mkdep -a -f .newdep -DLOCORE ${COPTS} ${SFILES} ${SYSTEM_SFILES}
183201544Sqingli	rm -f .depend
184201544Sqingli	mv -f .newdep .depend
185206481Sbz
186206481Sbzcleandepend:
187215207Sgnn	rm -f .depend
188215207Sgnn
189201544Sqinglilinks:
190214675Sjhb	egrep '#if' ${CFILES:Nswapkernel.c} | sed -f $S/conf/defines | \
191198418Sqingli	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
192201544Sqingli	echo ${CFILES:Nswapkernel.c} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
193201544Sqingli	  sort -u | comm -23 - dontlink | \
194201544Sqingli	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
195201544Sqingli	sh makelinks && rm -f dontlink
196201544Sqingli
197214675Sjhbtags:
198214675Sjhb	@echo "see $S/kern/Makefile for tags"
199201544Sqingli
2001541Srgrimesinstall:
201186119Sqingli	@if [ ! -f kernel ] ; then \
202196797Sgnn		echo "You must first build your kernel before trying to install." ; \
2031541Srgrimes		exit 1 ; \
2041541Srgrimes	fi
2051541Srgrimes.if exists(${DESTDIR}/kernel)
2061541Srgrimes	chflags noschg ${DESTDIR}/kernel
2071541Srgrimes	mv ${DESTDIR}/kernel ${DESTDIR}/kernel.old
2081541Srgrimes.endif
2091541Srgrimes	PATH=$${PATH}:/sbin:/usr/sbin; \
2101541Srgrimes	if [ `sysctl -n kern.bootfile` = ${DESTDIR}/kernel ] ; then \
211186119Sqingli		sysctl -w kern.bootfile=${DESTDIR}/kernel.old ; \
212186119Sqingli		if [ -f /var/db/kvm_kernel.db ] ; then \
213169454Srwatson			mv -f /var/db/kvm_kernel.db /var/db/kvm_kernel.old.db ; \
2141541Srgrimes		fi \
215126936Smdodd	fi
216126936Smdodd	install -c -m 555 -o root -g wheel -fschg kernel ${DESTDIR}/
2171541Srgrimes
2181541Srgrimesioconf.o: ioconf.c $S/sys/param.h $S/sys/buf.h \
219186119Sqingli    ${I386}/isa/isa_device.h ${I386}/isa/isa.h ${I386}/isa/icu.h
220186119Sqingli	${CC} -c ${CFLAGS} ioconf.c
221186119Sqingli
222186119Sqingliparam.c: $S/conf/param.c
223186119Sqingli	-rm -f param.c
224186119Sqingli	cp $S/conf/param.c .
225186119Sqingli
226186119Sqingliparam.o: param.c Makefile
227186119Sqingli	${CC} -c ${CFLAGS} ${PARAM} param.c
228186119Sqingli
229186119Sqinglivers.o: $S/sys/param.h ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
230186119Sqingli	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
231186119Sqingli	${CC} ${CFLAGS} -c vers.c
232186119Sqingli
233186119Sqinglivnode_if.c: $S/kern/vnode_if.sh $S/kern/vnode_if.src
234186119Sqingli	sh $S/kern/vnode_if.sh $S/kern/vnode_if.src
235186119Sqinglivnode_if.h: $S/kern/vnode_if.sh $S/kern/vnode_if.src
236186119Sqingli	sh $S/kern/vnode_if.sh $S/kern/vnode_if.src
237186119Sqingli
238186119Sqingli.include <bsd.kern.mk>
239186119Sqingli
240186119Sqingli%RULES
241186119Sqingli
242111119Simp# DO NOT DELETE THIS LINE -- make depend uses it
2431541Srgrimes