Makefile.pc98 revision 48319
116359Sasami# Makefile for FreeBSD(98) after:
216359Sasami#
316359Sasami# Makefile.i386 -- with config changes.
416359Sasami# Copyright 1990 W. Jolitz
516359Sasami#	from: @(#)Makefile.i386	7.1 5/10/91
648319Skato#	$Id: Makefile.pc98,v 1.64 1999/05/10 09:00:29 kato Exp $
716359Sasami#
816359Sasami# Makefile for FreeBSD
916359Sasami#
1016359Sasami# This makefile is constructed from a machine description:
1116359Sasami#	config machineid
1216359Sasami# Most changes should be made in the machine description
1316359Sasami#	/sys/i386/conf/``machineid''
1416359Sasami# after which you should do
1516359Sasami#	 config machineid
1616359Sasami# Generic makefile changes should be made in
1716359Sasami#	/sys/i386/conf/Makefile.i386
1816359Sasami# after which config should be rerun for all machines.
1916359Sasami#
2016359Sasami
2130665Skato# Which version of config(8) is required.
2246864Skato%VERSREQ=	400016
2330665Skato
2446864Skato# Can be overridden by makeoptions or /etc/make.conf
2546864SkatoKERNEL?=	kernel
2642397SkatoKERNFORMAT?=	elf
2727690Skato#STD8X16FONT?=	iso
2827690Skato
2916359Sasami.if exists(./@/.)
3016359SasamiS=	./@
3116359Sasami.else
3216359SasamiS=	../..
3316359Sasami.endif
3416359SasamiPC98=	${S}/pc98
3516359SasamiI386=	${S}/i386
3616359Sasami
3716359SasamiCOPTFLAGS?=-O
3818846SasamiINCLUDES= -nostdinc -I- -I. -I$S
3916359Sasami# This hack is to allow kernel compiles to succeed on machines w/out srcdist
4016359Sasami.if exists($S/../include)
4116359SasamiINCLUDES+= -I$S/../include
4216359Sasami.else
4316359SasamiINCLUDES+= -I/usr/include
4416359Sasami.endif
4545856SkatoCOPTS=	${INCLUDES} ${IDENT} -DKERNEL -include opt_global.h 
4616359SasamiCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
4738727Skato
4839567Skato# XXX LOCORE means "don't declare C stuff" not "for locore.s".
4939567SkatoASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
5039567Skato
5139567Skato# Use the default object format for genassym, etc.
5248319SkatoGEN_CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} -UKERNEL
5339204Skato
5438727Skato# Select the correct set of tools. Can't set OBJFORMAT here because it
5539567Skato# doesn't get exported into the environment, and if it were exported
5639567Skato# then it might break building of genassym, etc.
5738727Skato.if ${KERNFORMAT} == "elf"
5838727SkatoCFLAGS+=	-elf
5938727Skato.else
6038727SkatoCFLAGS+=	-aout
6138727Skato.endif
6238727Skato
6344721SkatoLOAD_ADDRESS?=	C0100000
6427101SkatoDEFINED_PROF=	${PROF}
6520494Skato.if defined(PROF)
6627101SkatoCFLAGS+=	-malign-functions=4
6720494Skato.if ${PROFLEVEL} >= 2
6820494SkatoIDENT+=	-DGPROF4 -DGUPROF
6920494SkatoPROF+=	-mprofiler-epilogue
7020494Skato.endif
7120494Skato.endif
7216359Sasami
7316359SasamiNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $<
7437582SkatoNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} $<
7539567SkatoNORMAL_S= ${CC} -c ${ASM_CFLAGS} $<
7616359SasamiDRIVER_C= ${CC} -c ${CFLAGS} ${PROF} $<
7737582SkatoDRIVER_C_C= ${CC} -c ${CFLAGS} ${PROF} $<
7839567SkatoDRIVER_S= ${CC} -c -x ${ASM_CFLAGS} $<
7937582SkatoPROFILE_C= ${CC} -c ${CFLAGS} $<
8016359Sasami
8142797SkatoGEN_CFILES= ${I386}/i386/genassym.c
8242797Skato# setdef0.c and setdef1.c are intentionally
8339567Skato# omitted from SYSTEM_CFILES.  They include setdefs.h, a header which
8426058Skato# is generated from all of ${OBJS}.  We don't want to have to compile
8526058Skato# everything just to do a make depend.
8626058SkatoSYSTEM_CFILES= ioconf.c param.c vnode_if.c config.c
8724112SkatoSYSTEM_SFILES= ${I386}/i386/locore.s
8816359SasamiSYSTEM_DEP= Makefile symbols.exclude symbols.sort ${SYSTEM_OBJS}
8916359Sasami.if ${CFLAGS:M-g} == ""
9016359SasamiSYMORDER_EXCLUDE=-x symbols.exclude
9116359Sasami.endif
9245783Skato
9340954Skato.if ${KERNFORMAT} == aout || ${KERNFORMAT} == aoutkld
9426058SkatoSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o config.o
9538727SkatoSYSTEM_LD= @${LD} -aout -Bforcedynamic -Z -T ${LOAD_ADDRESS} -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
9625571SkatoSYSTEM_LD_TAIL= @echo rearranging symbols; \
9735514Simp	symorder -m ${SYMORDER_EXCLUDE} symbols.sort ${.TARGET}; \
9838727Skato	size -aout ${.TARGET} ; chmod 755 ${.TARGET}
9925571Skato.endif
10045783Skato
10138727Skato.if ${KERNFORMAT} == elf
10242057SkatoSYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \
10342450Sjdp	setdef1.o hack.So
10439972SkatoSYSTEM_LD= @${LD} -elf -Bdynamic -T $S/i386/conf/kernel.script \
10539972Skato	-export-dynamic -dynamic-linker /red/herring \
10635514Simp	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
10738727SkatoSYSTEM_LD_TAIL= @size -elf ${.TARGET} ; chmod 755 ${.TARGET}
10839972SkatoSYSTEM_DEP+= $S/i386/conf/kernel.script
10925088Skato.endif
11016359Sasami
11116359Sasami%BEFORE_DEPEND
11216359Sasami
11316359Sasami%OBJS
11416359Sasami
11516359Sasami%CFILES
11616359Sasami
11716359Sasami%SFILES
11816359Sasami
11938833Skato%MFILES
12038833Skato
12116359Sasami%CLEAN
12216359Sasami
12346864Skatoall:	${KERNEL}
12446864Skato
12546864Skato.if !defined(DEBUG)
12646864SkatoFULLKERNEL=	${KERNEL}
12746864Skato.else
12846864SkatoFULLKERNEL=	${KERNEL}.debug
12946864Skato${KERNEL}:	${FULLKERNEL}
13046864Skato.if ${KERNFORMAT} == "elf"
13146864Skato	objcopy --strip-debug ${FULLKERNEL} ${KERNEL}
13246864Skato.else
13346864Skato	cp ${FULLKERNEL} ${KERNEL}
13446864Skato	strip -d ${KERNEL}
13546864Skato.endif
13646864Skato.endif
13746864Skato
13848319Skato${FULLKERNEL}:	${BEFORE_DEPEND} ${SYSTEM_DEP} vers.o
13946864Skato	@rm -f ${.TARGET}
14046864Skato	@echo linking ${.TARGET}
14146864Skato	${SYSTEM_LD}
14246864Skato	${SYSTEM_LD_TAIL}
14346864Skato
14441597Skato.if !exists(.depend)
14544424Skato${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h}
14641597Skato.endif
14741597Skato
14816359Sasamiclean:
14942450Sjdp	rm -f *.o *.so *.So *.ko *.s eddep errs genassym gensetdefs \
15045424Sgrog	      ${KERNEL} ${FULLKERNEL} linterrs makelinks param.c \
15145424Sgrog	      setdef[01].c setdefs.h symbols.exclude symbols.sort tags \
15237582Skato	      vers.c vnode_if.c vnode_if.h ${CLEAN}
15316359Sasami
15416359Sasami#lint: /tmp param.c
15537582Skato#	@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \
15624112Skato#	  ${I386}/i386/Locore.c ${CFILES} ioconf.c param.c | \
15716359Sasami#	    grep -v 'struct/union .* never defined' | \
15816359Sasami#	    grep -v 'possible pointer alignment problem'
15916359Sasami
16037582Skatosymbols.exclude:
16116359Sasami	echo "gcc2_compiled." >symbols.exclude
16216359Sasami	echo "___gnu_compiled_c" >>symbols.exclude
16316359Sasami
16416359Sasamisymbols.sort: ${I386}/i386/symbols.raw
16516359Sasami	grep -v '^#' ${I386}/i386/symbols.raw \
16616359Sasami	    | sed 's/^	//' | sort -u > symbols.sort
16716359Sasami
16824112Skatolocore.o: ${I386}/i386/locore.s assym.s
16916359Sasami	${NORMAL_S}
17016359Sasami
17139972Skato.if ${KERNFORMAT} == elf
17239972Skato# This is a hack.  BFD "optimizes" away dynamic mode if there are no
17339972Skato# dynamic references.  We could probably do a '-Bforcedynamic' mode like
17439972Skato# in the a.out ld.  For now, this works.
17542450Sjdphack.So: Makefile
17639972Skato	touch hack.c
17742450Sjdp	${CC} -elf -shared -nostdlib hack.c -o hack.So
17839972Skato	rm -f hack.c
17939972Skato.endif
18039972Skato
18143192Skato.ORDER: setdefs.h setdef0.c setdef1.c
18243192Skato
18342797Skatosetdef0.o: setdef0.c setdefs.h
18425088Skato	${NORMAL_C}
18525088Skato
18642797Skatosetdef1.o: setdef1.c setdefs.h
18725088Skato	${NORMAL_C}
18825088Skato
18942797Skatosetdef0.c setdef1.c setdefs.h: ${OBJS}
19042892Skato	@gensetdefs ${OBJS}
19126058Skato
19216359Sasami# this rule stops ./assym.s in .depend from causing problems
19316359Sasami./assym.s: assym.s
19416359Sasami
19516359Sasamiassym.s: genassym
19616359Sasami	./genassym >assym.s
19716359Sasami
19837582Skatogenassym.o: ${I386}/i386/genassym.c
19916359Sasami	rm -f ./machine ; ln -s ${I386}/include ./machine
20039567Skato	${CC} -c ${GEN_CFLAGS} ${I386}/i386/genassym.c
20116359Sasami
20216359Sasamigenassym: genassym.o
20339204Skato	${CC} ${GEN_CFLAGS} genassym.o -o ${.TARGET}
20416359Sasami
20542797Skato${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
20625256Skato
20716359Sasami# XXX this assumes that the options for NORMAL_C* and DRIVER_C* are identical.
20816359Sasamidepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND}
20916359Sasami	rm -f .newdep
21039567Skato	mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES}
21139567Skato	mkdep -a -f .newdep ${GEN_CFLAGS} ${GEN_CFILES}
21239567Skato	env MKDEP_CPP="${CC} -E" \
21339567Skato	    mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES}
21416359Sasami	rm -f .depend
21516359Sasami	mv -f .newdep .depend
21616359Sasami
21732938Skatocleandepend:
21832938Skato	rm -f .depend
21932938Skato
22016359Sasamilinks:
22146864Skato	egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
22216359Sasami	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
22346864Skato	echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
22416359Sasami	  sort -u | comm -23 - dontlink | \
22516359Sasami	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
22616359Sasami	sh makelinks && rm -f dontlink
22716359Sasami
22816359Sasamitags:
22916359Sasami	@echo "see $S/kern/Makefile for tags"
23016359Sasami
23145783Skatoinstall install.debug:
23245783Skato	@if [ ! -f ${KERNEL}${.TARGET:S/install//} ] ; then \
23345783Skato		echo "You must first build a kernel first." ; \
23416359Sasami		exit 1 ; \
23516359Sasami	fi
23645424Sgrog.if exists(${DESTDIR}/${KERNEL})
23745424Sgrog	-chflags noschg ${DESTDIR}/${KERNEL}
23845424Sgrog	mv ${DESTDIR}/${KERNEL} ${DESTDIR}/${KERNEL}.old
23932938Skato.endif
24031890Skato	PATH=$${PATH}:/sbin:/usr/sbin; \
24145424Sgrog	if [ `sysctl -n kern.bootfile` = ${DESTDIR}/${KERNEL} ] ; then \
24245424Sgrog		sysctl -w kern.bootfile=${DESTDIR}/${KERNEL}.old ; \
24346864Skato		if [ -f /var/db/kvm_${KERNEL}.db ] ; then \
24446864Skato			mv -f /var/db/kvm_${KERNEL}.db /var/db/kvm_${KERNEL}.old.db ; \
24530933Skato		fi \
24616359Sasami	fi
24745783Skato	install -c -m 555 -o root -g wheel -fschg \
24845783Skato		${KERNEL}${.TARGET:S/install//} ${DESTDIR}/${KERNEL}
24916359Sasami
25046750Skatoreinstall reinstall.debug:
25146750Skato	install -c -m 555 -o root -g wheel -fschg \
25246750Skato		${KERNEL}${.TARGET:S/reinstall//} ${DESTDIR}/${KERNEL}
25346750Skato
25437582Skatoconfig.o:
25537582Skato	${NORMAL_C}
25616359Sasami
25737582Skatoioconf.o:
25837582Skato	${NORMAL_C}
25937582Skato
26016359Sasamiparam.c: $S/conf/param.c
26116359Sasami	-rm -f param.c
26216359Sasami	cp $S/conf/param.c .
26316359Sasami
26437582Skatoparam.o:
26537582Skato	${NORMAL_C}
26616359Sasami
26737582Skatovers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
26816359Sasami	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
26916359Sasami
27037582Skato# XXX strictly, everything depends on Makefile because changes to ${PROF}
27137582Skato# only appear there, but we don't handle that.
27237582Skatovers.o:
27337582Skato	${NORMAL_C}
27437152Skato
27537582Skato.ORDER: vnode_if.c vnode_if.h
27637582Skatovnode_if.c vnode_if.h: $S/kern/vnode_if.sh $S/kern/vnode_if.src
27716359Sasami	sh $S/kern/vnode_if.sh $S/kern/vnode_if.src
27816359Sasami
27937582Skatovnode_if.o:
28037582Skato	${NORMAL_C}
28137582Skato
28238607Skato.if exists($S/../share/mk)
28338607Skato.include "$S/../share/mk/bsd.kern.mk"
28438607Skato.else
28519122Sasami.include <bsd.kern.mk>
28638607Skato.endif
28719122Sasami
28816359Sasami%RULES
28916359Sasami
29016359Sasami# DO NOT DELETE THIS LINE -- make depend uses it
291