Makefile.pc98 revision 52651
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
650477Speter# $FreeBSD: head/sys/conf/Makefile.pc98 52651 1999-10-30 09:28:27Z marcel $
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
2952651Smarcel.if !defined(S)
3016359Sasami.if exists(./@/.)
3116359SasamiS=	./@
3216359Sasami.else
3316359SasamiS=	../..
3416359Sasami.endif
3552651Smarcel.endif
3616359SasamiPC98=	${S}/pc98
3716359SasamiI386=	${S}/i386
3816359Sasami
3916359SasamiCOPTFLAGS?=-O
4018846SasamiINCLUDES= -nostdinc -I- -I. -I$S
4116359Sasami# This hack is to allow kernel compiles to succeed on machines w/out srcdist
4216359Sasami.if exists($S/../include)
4316359SasamiINCLUDES+= -I$S/../include
4416359Sasami.else
4516359SasamiINCLUDES+= -I/usr/include
4616359Sasami.endif
4745856SkatoCOPTS=	${INCLUDES} ${IDENT} -DKERNEL -include opt_global.h 
4816359SasamiCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
4938727Skato
5039567Skato# XXX LOCORE means "don't declare C stuff" not "for locore.s".
5139567SkatoASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
5239567Skato
5339567Skato# Use the default object format for genassym, etc.
5448319SkatoGEN_CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} -UKERNEL
5539204Skato
5638727Skato# Select the correct set of tools. Can't set OBJFORMAT here because it
5739567Skato# doesn't get exported into the environment, and if it were exported
5839567Skato# then it might break building of genassym, etc.
5938727Skato.if ${KERNFORMAT} == "elf"
6038727SkatoCFLAGS+=	-elf
6138727Skato.else
6238727SkatoCFLAGS+=	-aout
6338727Skato.endif
6438727Skato
6544721SkatoLOAD_ADDRESS?=	C0100000
6627101SkatoDEFINED_PROF=	${PROF}
6720494Skato.if defined(PROF)
6827101SkatoCFLAGS+=	-malign-functions=4
6920494Skato.if ${PROFLEVEL} >= 2
7020494SkatoIDENT+=	-DGPROF4 -DGUPROF
7120494SkatoPROF+=	-mprofiler-epilogue
7220494Skato.endif
7320494Skato.endif
7416359Sasami
7552203Skato# Put configuration-specific C flags last (except for ${PROF}) so that they
7652203Skato# can override the others.
7752203SkatoCFLAGS+=	${CONF_CFLAGS}
7852203Skato
7916359SasamiNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $<
8037582SkatoNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} $<
8139567SkatoNORMAL_S= ${CC} -c ${ASM_CFLAGS} $<
8237582SkatoPROFILE_C= ${CC} -c ${CFLAGS} $<
8316359Sasami
8442797SkatoGEN_CFILES= ${I386}/i386/genassym.c
8542797Skato# setdef0.c and setdef1.c are intentionally
8639567Skato# omitted from SYSTEM_CFILES.  They include setdefs.h, a header which
8726058Skato# is generated from all of ${OBJS}.  We don't want to have to compile
8826058Skato# everything just to do a make depend.
8926058SkatoSYSTEM_CFILES= ioconf.c param.c vnode_if.c config.c
9024112SkatoSYSTEM_SFILES= ${I386}/i386/locore.s
9116359SasamiSYSTEM_DEP= Makefile symbols.exclude symbols.sort ${SYSTEM_OBJS}
9216359Sasami.if ${CFLAGS:M-g} == ""
9316359SasamiSYMORDER_EXCLUDE=-x symbols.exclude
9416359Sasami.endif
9545783Skato
9640954Skato.if ${KERNFORMAT} == aout || ${KERNFORMAT} == aoutkld
9726058SkatoSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o config.o
9838727SkatoSYSTEM_LD= @${LD} -aout -Bforcedynamic -Z -T ${LOAD_ADDRESS} -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
9925571SkatoSYSTEM_LD_TAIL= @echo rearranging symbols; \
10035514Simp	symorder -m ${SYMORDER_EXCLUDE} symbols.sort ${.TARGET}; \
10138727Skato	size -aout ${.TARGET} ; chmod 755 ${.TARGET}
10225571Skato.endif
10345783Skato
10438727Skato.if ${KERNFORMAT} == elf
10542057SkatoSYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \
10642450Sjdp	setdef1.o hack.So
10739972SkatoSYSTEM_LD= @${LD} -elf -Bdynamic -T $S/i386/conf/kernel.script \
10839972Skato	-export-dynamic -dynamic-linker /red/herring \
10935514Simp	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
11038727SkatoSYSTEM_LD_TAIL= @size -elf ${.TARGET} ; chmod 755 ${.TARGET}
11139972SkatoSYSTEM_DEP+= $S/i386/conf/kernel.script
11225088Skato.endif
11316359Sasami
11416359Sasami%BEFORE_DEPEND
11516359Sasami
11616359Sasami%OBJS
11716359Sasami
11816359Sasami%CFILES
11916359Sasami
12016359Sasami%SFILES
12116359Sasami
12238833Skato%MFILES
12338833Skato
12416359Sasami%CLEAN
12516359Sasami
12646864Skatoall:	${KERNEL}
12746864Skato
12846864Skato.if !defined(DEBUG)
12946864SkatoFULLKERNEL=	${KERNEL}
13046864Skato.else
13146864SkatoFULLKERNEL=	${KERNEL}.debug
13246864Skato${KERNEL}:	${FULLKERNEL}
13346864Skato.if ${KERNFORMAT} == "elf"
13446864Skato	objcopy --strip-debug ${FULLKERNEL} ${KERNEL}
13546864Skato.else
13646864Skato	cp ${FULLKERNEL} ${KERNEL}
13746864Skato	strip -d ${KERNEL}
13846864Skato.endif
13946864Skato.endif
14046864Skato
14148319Skato${FULLKERNEL}:	${BEFORE_DEPEND} ${SYSTEM_DEP} vers.o
14246864Skato	@rm -f ${.TARGET}
14346864Skato	@echo linking ${.TARGET}
14446864Skato	${SYSTEM_LD}
14546864Skato	${SYSTEM_LD_TAIL}
14646864Skato
14741597Skato.if !exists(.depend)
14844424Skato${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h}
14941597Skato.endif
15041597Skato
15116359Sasamiclean:
15242450Sjdp	rm -f *.o *.so *.So *.ko *.s eddep errs genassym gensetdefs \
15345424Sgrog	      ${KERNEL} ${FULLKERNEL} linterrs makelinks param.c \
15445424Sgrog	      setdef[01].c setdefs.h symbols.exclude symbols.sort tags \
15537582Skato	      vers.c vnode_if.c vnode_if.h ${CLEAN}
15616359Sasami
15716359Sasami#lint: /tmp param.c
15837582Skato#	@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \
15924112Skato#	  ${I386}/i386/Locore.c ${CFILES} ioconf.c param.c | \
16016359Sasami#	    grep -v 'struct/union .* never defined' | \
16116359Sasami#	    grep -v 'possible pointer alignment problem'
16216359Sasami
16337582Skatosymbols.exclude:
16416359Sasami	echo "gcc2_compiled." >symbols.exclude
16516359Sasami	echo "___gnu_compiled_c" >>symbols.exclude
16616359Sasami
16716359Sasamisymbols.sort: ${I386}/i386/symbols.raw
16816359Sasami	grep -v '^#' ${I386}/i386/symbols.raw \
16916359Sasami	    | sed 's/^	//' | sort -u > symbols.sort
17016359Sasami
17124112Skatolocore.o: ${I386}/i386/locore.s assym.s
17216359Sasami	${NORMAL_S}
17316359Sasami
17439972Skato.if ${KERNFORMAT} == elf
17539972Skato# This is a hack.  BFD "optimizes" away dynamic mode if there are no
17639972Skato# dynamic references.  We could probably do a '-Bforcedynamic' mode like
17739972Skato# in the a.out ld.  For now, this works.
17842450Sjdphack.So: Makefile
17939972Skato	touch hack.c
18042450Sjdp	${CC} -elf -shared -nostdlib hack.c -o hack.So
18139972Skato	rm -f hack.c
18239972Skato.endif
18339972Skato
18443192Skato.ORDER: setdefs.h setdef0.c setdef1.c
18543192Skato
18642797Skatosetdef0.o: setdef0.c setdefs.h
18725088Skato	${NORMAL_C}
18825088Skato
18942797Skatosetdef1.o: setdef1.c setdefs.h
19025088Skato	${NORMAL_C}
19125088Skato
19242797Skatosetdef0.c setdef1.c setdefs.h: ${OBJS}
19342892Skato	@gensetdefs ${OBJS}
19426058Skato
19516359Sasami# this rule stops ./assym.s in .depend from causing problems
19616359Sasami./assym.s: assym.s
19716359Sasami
19816359Sasamiassym.s: genassym
19916359Sasami	./genassym >assym.s
20016359Sasami
20137582Skatogenassym.o: ${I386}/i386/genassym.c
20216359Sasami	rm -f ./machine ; ln -s ${I386}/include ./machine
20339567Skato	${CC} -c ${GEN_CFLAGS} ${I386}/i386/genassym.c
20416359Sasami
20516359Sasamigenassym: genassym.o
20639204Skato	${CC} ${GEN_CFLAGS} genassym.o -o ${.TARGET}
20716359Sasami
20842797Skato${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
20925256Skato
21016359Sasamidepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND}
21116359Sasami	rm -f .newdep
21239567Skato	mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES}
21339567Skato	mkdep -a -f .newdep ${GEN_CFLAGS} ${GEN_CFILES}
21439567Skato	env MKDEP_CPP="${CC} -E" \
21539567Skato	    mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES}
21616359Sasami	rm -f .depend
21716359Sasami	mv -f .newdep .depend
21816359Sasami
21932938Skatocleandepend:
22032938Skato	rm -f .depend
22132938Skato
22216359Sasamilinks:
22346864Skato	egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
22416359Sasami	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
22546864Skato	echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
22616359Sasami	  sort -u | comm -23 - dontlink | \
22716359Sasami	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
22816359Sasami	sh makelinks && rm -f dontlink
22916359Sasami
23016359Sasamitags:
23148507Skato	@[ -f .depend ] || { echo "you must make depend first"; exit 1; }
23248507Skato	sh $S/conf/systags.sh
23348507Skato	rm -f tags1
23448507Skato	sed -e 's,      ../,    ,' tags > tags1
23516359Sasami
23645783Skatoinstall install.debug:
23745783Skato	@if [ ! -f ${KERNEL}${.TARGET:S/install//} ] ; then \
23845783Skato		echo "You must first build a kernel first." ; \
23916359Sasami		exit 1 ; \
24016359Sasami	fi
24145424Sgrog.if exists(${DESTDIR}/${KERNEL})
24245424Sgrog	-chflags noschg ${DESTDIR}/${KERNEL}
24345424Sgrog	mv ${DESTDIR}/${KERNEL} ${DESTDIR}/${KERNEL}.old
24432938Skato.endif
24531890Skato	PATH=$${PATH}:/sbin:/usr/sbin; \
24645424Sgrog	if [ `sysctl -n kern.bootfile` = ${DESTDIR}/${KERNEL} ] ; then \
24745424Sgrog		sysctl -w kern.bootfile=${DESTDIR}/${KERNEL}.old ; \
24846864Skato		if [ -f /var/db/kvm_${KERNEL}.db ] ; then \
24946864Skato			mv -f /var/db/kvm_${KERNEL}.db /var/db/kvm_${KERNEL}.old.db ; \
25030933Skato		fi \
25116359Sasami	fi
25245783Skato	install -c -m 555 -o root -g wheel -fschg \
25345783Skato		${KERNEL}${.TARGET:S/install//} ${DESTDIR}/${KERNEL}
25416359Sasami
25546750Skatoreinstall reinstall.debug:
25646750Skato	install -c -m 555 -o root -g wheel -fschg \
25746750Skato		${KERNEL}${.TARGET:S/reinstall//} ${DESTDIR}/${KERNEL}
25846750Skato
25937582Skatoconfig.o:
26037582Skato	${NORMAL_C}
26116359Sasami
26237582Skatoioconf.o:
26337582Skato	${NORMAL_C}
26437582Skato
26516359Sasamiparam.c: $S/conf/param.c
26616359Sasami	-rm -f param.c
26716359Sasami	cp $S/conf/param.c .
26816359Sasami
26937582Skatoparam.o:
27037582Skato	${NORMAL_C}
27116359Sasami
27237582Skatovers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
27316359Sasami	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
27416359Sasami
27537582Skato# XXX strictly, everything depends on Makefile because changes to ${PROF}
27637582Skato# only appear there, but we don't handle that.
27737582Skatovers.o:
27837582Skato	${NORMAL_C}
27937152Skato
28037582Skato.ORDER: vnode_if.c vnode_if.h
28137582Skatovnode_if.c vnode_if.h: $S/kern/vnode_if.sh $S/kern/vnode_if.src
28216359Sasami	sh $S/kern/vnode_if.sh $S/kern/vnode_if.src
28316359Sasami
28437582Skatovnode_if.o:
28537582Skato	${NORMAL_C}
28637582Skato
28738607Skato.if exists($S/../share/mk)
28838607Skato.include "$S/../share/mk/bsd.kern.mk"
28938607Skato.else
29019122Sasami.include <bsd.kern.mk>
29138607Skato.endif
29219122Sasami
29316359Sasami%RULES
29416359Sasami
29516359Sasami# DO NOT DELETE THIS LINE -- make depend uses it
296