Makefile.pc98 revision 53689
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 53689 1999-11-25 12:52:13Z nyan $
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
3953689SnyanSIZE?=	size
4053689Snyan
4116359SasamiCOPTFLAGS?=-O
4218846SasamiINCLUDES= -nostdinc -I- -I. -I$S
4316359Sasami# This hack is to allow kernel compiles to succeed on machines w/out srcdist
4416359Sasami.if exists($S/../include)
4516359SasamiINCLUDES+= -I$S/../include
4616359Sasami.else
4716359SasamiINCLUDES+= -I/usr/include
4816359Sasami.endif
4953689SnyanCOPTS=	${INCLUDES} ${IDENT} -DKERNEL -include opt_global.h
5053689Snyan# KAME mandatory flags
5153689SnyanCOPTS+=	-D_KERNEL
5216359SasamiCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
5338727Skato
5439567Skato# XXX LOCORE means "don't declare C stuff" not "for locore.s".
5539567SkatoASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
5639567Skato
5739567Skato# Use the default object format for genassym, etc.
5848319SkatoGEN_CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} -UKERNEL
5939204Skato
6038727Skato# Select the correct set of tools. Can't set OBJFORMAT here because it
6139567Skato# doesn't get exported into the environment, and if it were exported
6239567Skato# then it might break building of genassym, etc.
6338727Skato.if ${KERNFORMAT} == "elf"
6453689SnyanFMT=		-elf
6538727Skato.else
6653689SnyanFMT=		-aout
6738727Skato.endif
6853689SnyanCFLAGS+=	${FMT}
6938727Skato
7044721SkatoLOAD_ADDRESS?=	C0100000
7127101SkatoDEFINED_PROF=	${PROF}
7220494Skato.if defined(PROF)
7327101SkatoCFLAGS+=	-malign-functions=4
7420494Skato.if ${PROFLEVEL} >= 2
7520494SkatoIDENT+=	-DGPROF4 -DGUPROF
7620494SkatoPROF+=	-mprofiler-epilogue
7720494Skato.endif
7820494Skato.endif
7916359Sasami
8052203Skato# Put configuration-specific C flags last (except for ${PROF}) so that they
8152203Skato# can override the others.
8252203SkatoCFLAGS+=	${CONF_CFLAGS}
8352203Skato
8416359SasamiNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $<
8537582SkatoNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} $<
8639567SkatoNORMAL_S= ${CC} -c ${ASM_CFLAGS} $<
8737582SkatoPROFILE_C= ${CC} -c ${CFLAGS} $<
8816359Sasami
8942797SkatoGEN_CFILES= ${I386}/i386/genassym.c
9042797Skato# setdef0.c and setdef1.c are intentionally
9139567Skato# omitted from SYSTEM_CFILES.  They include setdefs.h, a header which
9226058Skato# is generated from all of ${OBJS}.  We don't want to have to compile
9326058Skato# everything just to do a make depend.
9426058SkatoSYSTEM_CFILES= ioconf.c param.c vnode_if.c config.c
9524112SkatoSYSTEM_SFILES= ${I386}/i386/locore.s
9653689SnyanSYSTEM_DEP= Makefile ${SYSTEM_OBJS}
9745783Skato
9840954Skato.if ${KERNFORMAT} == aout || ${KERNFORMAT} == aoutkld
9926058SkatoSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o config.o
10053689SnyanSYSTEM_LD= @${LD} ${FMT} -Bforcedynamic -Z -T ${LOAD_ADDRESS} -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
10153689SnyanSYSTEM_LD_TAIL= @${SIZE} ${FMT} ${.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
10753689SnyanSYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/i386/conf/kernel.script \
10839972Skato	-export-dynamic -dynamic-linker /red/herring \
10935514Simp	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
11053689SnyanSYSTEM_LD_TAIL= @${SIZE} ${FMT} ${.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
16324112Skatolocore.o: ${I386}/i386/locore.s assym.s
16416359Sasami	${NORMAL_S}
16516359Sasami
16639972Skato.if ${KERNFORMAT} == elf
16739972Skato# This is a hack.  BFD "optimizes" away dynamic mode if there are no
16839972Skato# dynamic references.  We could probably do a '-Bforcedynamic' mode like
16939972Skato# in the a.out ld.  For now, this works.
17042450Sjdphack.So: Makefile
17139972Skato	touch hack.c
17253689Snyan	${CC} ${FMT} -shared -nostdlib hack.c -o hack.So
17339972Skato	rm -f hack.c
17439972Skato.endif
17539972Skato
17643192Skato.ORDER: setdefs.h setdef0.c setdef1.c
17743192Skato
17842797Skatosetdef0.o: setdef0.c setdefs.h
17925088Skato	${NORMAL_C}
18025088Skato
18142797Skatosetdef1.o: setdef1.c setdefs.h
18225088Skato	${NORMAL_C}
18325088Skato
18442797Skatosetdef0.c setdef1.c setdefs.h: ${OBJS}
18542892Skato	@gensetdefs ${OBJS}
18626058Skato
18716359Sasami# this rule stops ./assym.s in .depend from causing problems
18816359Sasami./assym.s: assym.s
18916359Sasami
19016359Sasamiassym.s: genassym
19116359Sasami	./genassym >assym.s
19216359Sasami
19337582Skatogenassym.o: ${I386}/i386/genassym.c
19416359Sasami	rm -f ./machine ; ln -s ${I386}/include ./machine
19539567Skato	${CC} -c ${GEN_CFLAGS} ${I386}/i386/genassym.c
19616359Sasami
19716359Sasamigenassym: genassym.o
19839204Skato	${CC} ${GEN_CFLAGS} genassym.o -o ${.TARGET}
19916359Sasami
20042797Skato${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
20125256Skato
20216359Sasamidepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND}
20316359Sasami	rm -f .newdep
20439567Skato	mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES}
20539567Skato	mkdep -a -f .newdep ${GEN_CFLAGS} ${GEN_CFILES}
20639567Skato	env MKDEP_CPP="${CC} -E" \
20739567Skato	    mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES}
20816359Sasami	rm -f .depend
20916359Sasami	mv -f .newdep .depend
21016359Sasami
21132938Skatocleandepend:
21232938Skato	rm -f .depend
21332938Skato
21416359Sasamilinks:
21546864Skato	egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
21616359Sasami	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
21746864Skato	echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
21816359Sasami	  sort -u | comm -23 - dontlink | \
21916359Sasami	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
22016359Sasami	sh makelinks && rm -f dontlink
22116359Sasami
22216359Sasamitags:
22348507Skato	@[ -f .depend ] || { echo "you must make depend first"; exit 1; }
22448507Skato	sh $S/conf/systags.sh
22548507Skato	rm -f tags1
22648507Skato	sed -e 's,      ../,    ,' tags > tags1
22716359Sasami
22845783Skatoinstall install.debug:
22945783Skato	@if [ ! -f ${KERNEL}${.TARGET:S/install//} ] ; then \
23053371Snyan		echo "You must build a kernel first." ; \
23116359Sasami		exit 1 ; \
23216359Sasami	fi
23345424Sgrog.if exists(${DESTDIR}/${KERNEL})
23445424Sgrog	-chflags noschg ${DESTDIR}/${KERNEL}
23545424Sgrog	mv ${DESTDIR}/${KERNEL} ${DESTDIR}/${KERNEL}.old
23632938Skato.endif
23731890Skato	PATH=$${PATH}:/sbin:/usr/sbin; \
23845424Sgrog	if [ `sysctl -n kern.bootfile` = ${DESTDIR}/${KERNEL} ] ; then \
23945424Sgrog		sysctl -w kern.bootfile=${DESTDIR}/${KERNEL}.old ; \
24046864Skato		if [ -f /var/db/kvm_${KERNEL}.db ] ; then \
24146864Skato			mv -f /var/db/kvm_${KERNEL}.db /var/db/kvm_${KERNEL}.old.db ; \
24230933Skato		fi \
24316359Sasami	fi
24445783Skato	install -c -m 555 -o root -g wheel -fschg \
24545783Skato		${KERNEL}${.TARGET:S/install//} ${DESTDIR}/${KERNEL}
24616359Sasami
24746750Skatoreinstall reinstall.debug:
24846750Skato	install -c -m 555 -o root -g wheel -fschg \
24946750Skato		${KERNEL}${.TARGET:S/reinstall//} ${DESTDIR}/${KERNEL}
25046750Skato
25137582Skatoconfig.o:
25237582Skato	${NORMAL_C}
25316359Sasami
25437582Skatoioconf.o:
25537582Skato	${NORMAL_C}
25637582Skato
25716359Sasamiparam.c: $S/conf/param.c
25816359Sasami	-rm -f param.c
25916359Sasami	cp $S/conf/param.c .
26016359Sasami
26137582Skatoparam.o:
26237582Skato	${NORMAL_C}
26316359Sasami
26437582Skatovers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
26516359Sasami	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
26616359Sasami
26737582Skato# XXX strictly, everything depends on Makefile because changes to ${PROF}
26837582Skato# only appear there, but we don't handle that.
26937582Skatovers.o:
27037582Skato	${NORMAL_C}
27137152Skato
27237582Skato.ORDER: vnode_if.c vnode_if.h
27337582Skatovnode_if.c vnode_if.h: $S/kern/vnode_if.sh $S/kern/vnode_if.src
27416359Sasami	sh $S/kern/vnode_if.sh $S/kern/vnode_if.src
27516359Sasami
27637582Skatovnode_if.o:
27737582Skato	${NORMAL_C}
27837582Skato
27953371Snyan# Commented out for now pending a better solution.
28053371Snyan# How do we pick up compiler version specific flags??
28153371Snyan#.if exists($S/../share/mk)
28253371Snyan#.include "$S/../share/mk/bsd.kern.mk"
28353371Snyan#.else
28419122Sasami.include <bsd.kern.mk>
28553371Snyan#.endif
28619122Sasami
28716359Sasami%RULES
28816359Sasami
28916359Sasami# DO NOT DELETE THIS LINE -- make depend uses it
290