Makefile.pc98 revision 41597
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
641597Skato#	$Id: Makefile.pc98,v 1.45 1998/11/16 08:09:16 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.
2241198Skato%VERSREQ=	300009
2330665Skato
2438727SkatoKERNFORMAT?=	aout
2525088Skato
2627690Skato#STD8X16FONT?=	iso
2727690Skato
2816359Sasami.if exists(./@/.)
2916359SasamiS=	./@
3016359Sasami.else
3116359SasamiS=	../..
3216359Sasami.endif
3316359SasamiPC98=	${S}/pc98
3416359SasamiI386=	${S}/i386
3516359Sasami
3616359SasamiCOPTFLAGS?=-O
3718846SasamiINCLUDES= -nostdinc -I- -I. -I$S
3816359Sasami# This hack is to allow kernel compiles to succeed on machines w/out srcdist
3916359Sasami.if exists($S/../include)
4016359SasamiINCLUDES+= -I$S/../include
4116359Sasami.else
4216359SasamiINCLUDES+= -I/usr/include
4316359Sasami.endif
4425256SkatoCOPTS=	${INCLUDES} ${IDENT} -DKERNEL -include opt_global.h
4516359SasamiCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
4638727Skato
4739567Skato# XXX LOCORE means "don't declare C stuff" not "for locore.s".
4839567SkatoASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
4939567Skato
5039567Skato# Use the default object format for genassym, etc.
5139204SkatoGEN_CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
5239204Skato
5338727Skato# Select the correct set of tools. Can't set OBJFORMAT here because it
5439567Skato# doesn't get exported into the environment, and if it were exported
5539567Skato# then it might break building of genassym, etc.
5638727Skato.if ${KERNFORMAT} == "elf"
5738727SkatoCFLAGS+=	-elf
5838727Skato.else
5938727SkatoCFLAGS+=	-aout
6038727Skato.endif
6138727Skato
6216359SasamiLOAD_ADDRESS?=	F0100000
6327101SkatoDEFINED_PROF=	${PROF}
6420494Skato.if defined(PROF)
6527101SkatoCFLAGS+=	-malign-functions=4
6620494Skato.if ${PROFLEVEL} >= 2
6720494SkatoIDENT+=	-DGPROF4 -DGUPROF
6820494SkatoPROF+=	-mprofiler-epilogue
6920494Skato.endif
7020494Skato.endif
7116359Sasami
7216359SasamiNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $<
7337582SkatoNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} $<
7439567SkatoNORMAL_S= ${CC} -c ${ASM_CFLAGS} $<
7516359SasamiDRIVER_C= ${CC} -c ${CFLAGS} ${PROF} $<
7637582SkatoDRIVER_C_C= ${CC} -c ${CFLAGS} ${PROF} $<
7739567SkatoDRIVER_S= ${CC} -c -x ${ASM_CFLAGS} $<
7837582SkatoPROFILE_C= ${CC} -c ${CFLAGS} $<
7916359Sasami
8039567SkatoGEN_CFILES= ${I386}/i386/genassym.c ${I386}/i386/gensetdefs.c
8126058Skato# ${I386}/i386/setdef0.c and ${I386}/i386/setdef1.c are intentionally
8239567Skato# omitted from SYSTEM_CFILES.  They include setdefs.h, a header which
8326058Skato# is generated from all of ${OBJS}.  We don't want to have to compile
8426058Skato# everything just to do a make depend.
8526058SkatoSYSTEM_CFILES= ioconf.c param.c vnode_if.c config.c
8624112SkatoSYSTEM_SFILES= ${I386}/i386/locore.s
8716359SasamiSYSTEM_DEP= Makefile symbols.exclude symbols.sort ${SYSTEM_OBJS}
8816359Sasami.if ${CFLAGS:M-g} == ""
8916359SasamiSYMORDER_EXCLUDE=-x symbols.exclude
9016359Sasami.endif
9135514SimpSYSTEM_LD_HEAD= @echo loading ${.TARGET}; rm -f ${.TARGET}
9240954Skato.if ${KERNFORMAT} == aout || ${KERNFORMAT} == aoutkld
9326058SkatoSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o config.o
9438727SkatoSYSTEM_LD= @${LD} -aout -Bforcedynamic -Z -T ${LOAD_ADDRESS} -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
9525571SkatoSYSTEM_LD_TAIL= @echo rearranging symbols; \
9635514Simp	symorder -m ${SYMORDER_EXCLUDE} symbols.sort ${.TARGET}; \
9738727Skato	size -aout ${.TARGET} ; chmod 755 ${.TARGET}
9825571Skato.endif
9938727Skato.if ${KERNFORMAT} == elf
10026058SkatoSYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \
10139972Skato	setdef1.o hack.so
10239972SkatoSYSTEM_LD= @${LD} -elf -Bdynamic -T $S/i386/conf/kernel.script \
10339972Skato	-export-dynamic -dynamic-linker /red/herring \
10435514Simp	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
10538727SkatoSYSTEM_LD_TAIL= @size -elf ${.TARGET} ; chmod 755 ${.TARGET}
10639972SkatoSYSTEM_DEP+= $S/i386/conf/kernel.script
10725088Skato.endif
10816359Sasami
10916359Sasami%BEFORE_DEPEND
11016359Sasami
11116359Sasami%OBJS
11216359Sasami
11316359Sasami%CFILES
11416359Sasami
11516359Sasami%SFILES
11616359Sasami
11738833Skato%MFILES
11838833Skato
11916359Sasami%LOAD
12016359Sasami
12116359Sasami%CLEAN
12216359Sasami
12341597Skato.if !exists(.depend)
12441597Skato${SYSTEM_OBJS}: ${BEFORE_DEPEND:M*.h}
12541597Skato.endif
12641597Skato
12716359Sasamiclean:
12840221Skato	rm -f *.o *.so *.ko *.s eddep errs genassym gensetdefs kernel linterrs \
12926058Skato	      makelinks param.c setdefs.h symbols.exclude symbols.sort tags \
13037582Skato	      vers.c vnode_if.c vnode_if.h ${CLEAN}
13116359Sasami
13216359Sasami#lint: /tmp param.c
13337582Skato#	@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \
13424112Skato#	  ${I386}/i386/Locore.c ${CFILES} ioconf.c param.c | \
13516359Sasami#	    grep -v 'struct/union .* never defined' | \
13616359Sasami#	    grep -v 'possible pointer alignment problem'
13716359Sasami
13837582Skatosymbols.exclude:
13916359Sasami	echo "gcc2_compiled." >symbols.exclude
14016359Sasami	echo "___gnu_compiled_c" >>symbols.exclude
14116359Sasami
14216359Sasamisymbols.sort: ${I386}/i386/symbols.raw
14316359Sasami	grep -v '^#' ${I386}/i386/symbols.raw \
14416359Sasami	    | sed 's/^	//' | sort -u > symbols.sort
14516359Sasami
14624112Skatolocore.o: ${I386}/i386/locore.s assym.s
14716359Sasami	${NORMAL_S}
14816359Sasami
14939972Skato.if ${KERNFORMAT} == elf
15039972Skato# This is a hack.  BFD "optimizes" away dynamic mode if there are no
15139972Skato# dynamic references.  We could probably do a '-Bforcedynamic' mode like
15239972Skato# in the a.out ld.  For now, this works.
15339972Skatohack.so: Makefile
15439972Skato	touch hack.c
15539972Skato	${CC} -elf -shared -nostdlib hack.c -o hack.so
15639972Skato	rm -f hack.c
15739972Skato.endif
15839972Skato
15926058Skatosetdef0.o: ${I386}/i386/setdef0.c setdefs.h
16025088Skato	${NORMAL_C}
16125088Skato
16226058Skatosetdef1.o: ${I386}/i386/setdef1.c setdefs.h
16325088Skato	${NORMAL_C}
16425088Skato
16526058Skatosetdefs.h: gensetdefs ${OBJS}
16626058Skato	./gensetdefs ${OBJS} >setdefs.h
16726058Skato
16826058Skatogensetdefs: gensetdefs.o
16939567Skato	${CC} ${GEN_CFLAGS} gensetdefs.o -o ${.TARGET}
17026058Skato
17126058Skatogensetdefs.o: ${I386}/i386/gensetdefs.c
17239567Skato	${CC} -c ${GEN_CFLAGS} ${I386}/i386/gensetdefs.c
17326058Skato
17416359Sasami# this rule stops ./assym.s in .depend from causing problems
17516359Sasami./assym.s: assym.s
17616359Sasami
17716359Sasamiassym.s: genassym
17816359Sasami	./genassym >assym.s
17916359Sasami
18037582Skatogenassym.o: ${I386}/i386/genassym.c
18116359Sasami	rm -f ./machine ; ln -s ${I386}/include ./machine
18239567Skato	${CC} -c ${GEN_CFLAGS} ${I386}/i386/genassym.c
18316359Sasami
18416359Sasamigenassym: genassym.o
18539204Skato	${CC} ${GEN_CFLAGS} genassym.o -o ${.TARGET}
18616359Sasami
18739567Skato${SYSTEM_OBJS} genassym.o gensetdefs.o vers.o: opt_global.h
18825256Skato
18916359Sasami# XXX this assumes that the options for NORMAL_C* and DRIVER_C* are identical.
19016359Sasamidepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND}
19116359Sasami	rm -f .newdep
19239567Skato	mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES}
19339567Skato	mkdep -a -f .newdep ${GEN_CFLAGS} ${GEN_CFILES}
19439567Skato	env MKDEP_CPP="${CC} -E" \
19539567Skato	    mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES}
19616359Sasami	rm -f .depend
19716359Sasami	mv -f .newdep .depend
19816359Sasami
19932938Skatocleandepend:
20032938Skato	rm -f .depend
20132938Skato
20216359Sasamilinks:
20316359Sasami	egrep '#if' ${CFILES:Nswapkernel.c} | sed -f $S/conf/defines | \
20416359Sasami	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
20516359Sasami	echo ${CFILES:Nswapkernel.c} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
20616359Sasami	  sort -u | comm -23 - dontlink | \
20716359Sasami	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
20816359Sasami	sh makelinks && rm -f dontlink
20916359Sasami
21016359Sasamitags:
21116359Sasami	@echo "see $S/kern/Makefile for tags"
21216359Sasami
21316359Sasamiinstall:
21416359Sasami	@if [ ! -f kernel ] ; then \
21516359Sasami		echo "You must first build your kernel before trying to install." ; \
21616359Sasami		exit 1 ; \
21716359Sasami	fi
21832938Skato.if exists(${DESTDIR}/kernel)
21932938Skato	chflags noschg ${DESTDIR}/kernel
22032938Skato	mv ${DESTDIR}/kernel ${DESTDIR}/kernel.old
22132938Skato.endif
22231890Skato	PATH=$${PATH}:/sbin:/usr/sbin; \
22332938Skato	if [ `sysctl -n kern.bootfile` = ${DESTDIR}/kernel ] ; then \
22432938Skato		sysctl -w kern.bootfile=${DESTDIR}/kernel.old ; \
22530933Skato		if [ -f /var/db/kvm_kernel.db ] ; then \
22630933Skato			mv -f /var/db/kvm_kernel.db /var/db/kvm_kernel.old.db ; \
22730933Skato		fi \
22816359Sasami	fi
22935261Skato	install -c -m 555 -o root -g wheel -fschg kernel ${DESTDIR}/
23016359Sasami
23137582Skatoconfig.o:
23237582Skato	${NORMAL_C}
23316359Sasami
23437582Skatoioconf.o:
23537582Skato	${NORMAL_C}
23637582Skato
23716359Sasamiparam.c: $S/conf/param.c
23816359Sasami	-rm -f param.c
23916359Sasami	cp $S/conf/param.c .
24016359Sasami
24137582Skatoparam.o:
24237582Skato	${NORMAL_C}
24316359Sasami
24437582Skatovers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
24516359Sasami	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
24616359Sasami
24737582Skato# XXX strictly, everything depends on Makefile because changes to ${PROF}
24837582Skato# only appear there, but we don't handle that.
24937582Skatovers.o:
25037582Skato	${NORMAL_C}
25137152Skato
25237582Skato.ORDER: vnode_if.c vnode_if.h
25337582Skatovnode_if.c vnode_if.h: $S/kern/vnode_if.sh $S/kern/vnode_if.src
25416359Sasami	sh $S/kern/vnode_if.sh $S/kern/vnode_if.src
25516359Sasami
25637582Skatovnode_if.o:
25737582Skato	${NORMAL_C}
25837582Skato
25938607Skato.if exists($S/../share/mk)
26038607Skato.include "$S/../share/mk/bsd.kern.mk"
26138607Skato.else
26219122Sasami.include <bsd.kern.mk>
26338607Skato.endif
26419122Sasami
26516359Sasami%RULES
26616359Sasami
26716359Sasami# DO NOT DELETE THIS LINE -- make depend uses it
268