Makefile.pc98 revision 79014
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 79014 2001-06-30 06:29:47Z imp $
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.
2271252Speter%VERSREQ=	500006
2330665Skato
2446864Skato# Can be overridden by makeoptions or /etc/make.conf
2565839SobrienKERNEL_KO?=	kernel
2646864SkatoKERNEL?=	kernel
2765501SobrienKODIR?=		/boot/${KERNEL}
2827690Skato#STD8X16FONT?=	iso
2927690Skato
3052651Smarcel.if !defined(S)
3116359Sasami.if exists(./@/.)
3216359SasamiS=	./@
3316359Sasami.else
3479014SimpS=	../../..
3516359Sasami.endif
3652651Smarcel.endif
3755663SkatoM=	${MACHINE_ARCH}
3816359Sasami
3961593SpeterSIZE?=		size
4061593SpeterOBJCOPY?=	objcopy
4153689Snyan
4274146SkrisCOPTFLAGS?=-O -pipe
4374146Skris.if !defined(NO_CPU_COPTFLAGS)
4474146SkrisCOPTFLAGS+= ${_CPUCFLAGS}
4574146Skris.endif
4670083SkatoINCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev
4768360Snyan
4868360Snyan# This hack lets us use the Intel ACPICA code without spamming a new 
4968360Snyan# include path into 100+ source files.
5077430SmsmithINCLUDES+= -I$S/contrib/dev/acpica
5168360Snyan
5277854Sjlemon# ... and the same for ipfilter
5377854SjlemonINCLUDES+= -I$S/contrib/ipfilter
5477854Sjlemon
5578131Speter# This hack is to allow kernel compiles to succeed on machines w/out srcdist
5678131Speter.if exists($S/../include)
5778131SpeterINCLUDES+= -I$S/../include
5878131Speter.else
5978131SpeterINCLUDES+= -I/usr/include
6078131Speter.endif
6178131Speter
6255322SkatoCOPTS=	${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h
6316359SasamiCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
6438727Skato
6539567Skato# XXX LOCORE means "don't declare C stuff" not "for locore.s".
6639567SkatoASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
6739567Skato
6838727Skato# Select the correct set of tools. Can't set OBJFORMAT here because it
6939567Skato# doesn't get exported into the environment, and if it were exported
7055604Sbde# then it might break building of utilities.
7153689SnyanFMT=		-elf
7253689SnyanCFLAGS+=	${FMT}
7338727Skato
7427101SkatoDEFINED_PROF=	${PROF}
7520494Skato.if defined(PROF)
7627101SkatoCFLAGS+=	-malign-functions=4
7720494Skato.if ${PROFLEVEL} >= 2
7820494SkatoIDENT+=	-DGPROF4 -DGUPROF
7920494SkatoPROF+=	-mprofiler-epilogue
8020494Skato.endif
8120494Skato.endif
8216359Sasami
8352203Skato# Put configuration-specific C flags last (except for ${PROF}) so that they
8452203Skato# can override the others.
8552203SkatoCFLAGS+=	${CONF_CFLAGS}
8652203Skato
8755604SbdeNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
8855604SbdeNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
8955604SbdeNORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC}
9055604SbdePROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC}
9116359Sasami
9259168SkatoNORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
9359039Skato	  ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
9459039Skato
9555663SkatoGEN_CFILES= $S/$M/$M/genassym.c
9661640SpeterSYSTEM_CFILES= param.c vnode_if.c hints.c config.c
9755663SkatoSYSTEM_SFILES= $S/$M/$M/locore.s
9853689SnyanSYSTEM_DEP= Makefile ${SYSTEM_OBJS}
9978161SpeterSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} param.o hints.o config.o hack.So
10055677SpeterSYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \
10139972Skato	-export-dynamic -dynamic-linker /red/herring \
10235514Simp	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
10361593SpeterSYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
10461593Speter	${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET}
10555677SpeterSYSTEM_DEP+= $S/conf/ldscript.$M
10616359Sasami
10716359Sasami%BEFORE_DEPEND
10816359Sasami
10916359Sasami%OBJS
11016359Sasami
11169135Speter%FILES.c
11216359Sasami
11369135Speter%FILES.s
11416359Sasami
11569135Speter%FILES.m
11638833Skato
11716359Sasami%CLEAN
11816359Sasami
11960322Snyan.PHONY:	all modules
12060322Snyan
12165501Sobrienall: ${KERNEL_KO}
12246864Skato
12361328Skatodepend: kernel-depend
12461328Skatoclean:  kernel-clean
12561328Skatocleandepend:  kernel-cleandepend
12673133Speterclobber: kernel-clobber
12761328Skatotags:  kernel-tags
12871267Sjhbinstall: kernel-install
12971267Sjhbinstall.debug: kernel-install.debug
13071267Sjhbreinstall: kernel-reinstall
13171267Sjhbreinstall.debug: kernel-reinstall.debug
13261328Skato
13346864Skato.if !defined(DEBUG)
13465501SobrienFULLKERNEL=	${KERNEL_KO}
13546864Skato.else
13665501SobrienFULLKERNEL=	${KERNEL_KO}.debug
13765501Sobrien${KERNEL_KO}: ${FULLKERNEL}
13865501Sobrien	${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO}
13946864Skato.endif
14046864Skato
14155149Skato${FULLKERNEL}: ${SYSTEM_DEP} vers.o
14246864Skato	@rm -f ${.TARGET}
14346864Skato	@echo linking ${.TARGET}
14446864Skato	${SYSTEM_LD}
14546864Skato	${SYSTEM_LD_TAIL}
14646864Skato
14741597Skato.if !exists(.depend)
14859039Skato${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/}
14941597Skato.endif
15041597Skato
15159039Skato.for mfile in ${MFILES}
15259039Skato${mfile:T:S/.m$/.h/}: ${mfile}
15359168Skato	perl5 $S/kern/makeobjops.pl -h ${mfile}
15459039Skato.endfor
15559039Skato
15661328Skatokernel-clean:
15761174Sbde	rm -f *.o *.so *.So *.ko *.s eddep errs \
15865501Sobrien	      ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks param.c \
15955604Sbde	      setdef[01].c setdefs.h tags \
16059039Skato	      vers.c vnode_if.c vnode_if.h \
16159039Skato	      ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \
16259039Skato	      ${CLEAN}
16316359Sasami
16473133Speterkernel-clobber:
16573133Speter	find . -type f ! -name version -delete
16673133Speter
16716359Sasami#lint: /tmp param.c
16837582Skato#	@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \
16961640Speter#	  $S/$M/$M/Locore.c ${CFILES} param.c | \
17016359Sasami#	    grep -v 'struct/union .* never defined' | \
17116359Sasami#	    grep -v 'possible pointer alignment problem'
17216359Sasami
17355663Skatolocore.o: $S/$M/$M/locore.s assym.s
17416359Sasami	${NORMAL_S}
17516359Sasami
17639972Skato# This is a hack.  BFD "optimizes" away dynamic mode if there are no
17739972Skato# dynamic references.  We could probably do a '-Bforcedynamic' mode like
17839972Skato# in the a.out ld.  For now, this works.
17942450Sjdphack.So: Makefile
18039972Skato	touch hack.c
18153689Snyan	${CC} ${FMT} -shared -nostdlib hack.c -o hack.So
18239972Skato	rm -f hack.c
18339972Skato
18416359Sasami# this rule stops ./assym.s in .depend from causing problems
18516359Sasami./assym.s: assym.s
18616359Sasami
18761174Sbdeassym.s: $S/kern/genassym.sh genassym.o
18873018Speter	OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET}
18916359Sasami
19055663Skatogenassym.o: $S/$M/$M/genassym.c
19155663Skato	rm -f ./machine ; ln -s $S/$M/include ./machine
19273018Speter	${CC} -c ${CFLAGS} -elf $S/$M/$M/genassym.c
19316359Sasami
19442797Skato${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
19525256Skato
19672396Sobrienkernel-depend:
19774742Sobrien	rm -f .olddep
19874742Sobrien	if [ -f .depend ]; then mv .depend .olddep; fi
19972396Sobrien	${MAKE} _kernel-depend
20072396Sobrien
20172396Sobrien_kernel-depend: assym.s param.c vnode_if.h ${BEFORE_DEPEND} \
20259039Skato	    ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
20359039Skato	    ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/}
20474742Sobrien	if [ -f .olddep ]; then mv .olddep .depend; fi
20516359Sasami	rm -f .newdep
20655604Sbde	mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES}
20739567Skato	env MKDEP_CPP="${CC} -E" \
20839567Skato	    mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES}
20916359Sasami	rm -f .depend
21074742Sobrien	mv .newdep .depend
21116359Sasami
21261328Skatokernel-cleandepend:
21332938Skato	rm -f .depend
21432938Skato
21516359Sasamilinks:
21646864Skato	egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
21716359Sasami	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
21846864Skato	echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
21916359Sasami	  sort -u | comm -23 - dontlink | \
22016359Sasami	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
22168864Sobrien	sh makelinks; rm -f dontlink
22216359Sasami
22361328Skatokernel-tags:
22448507Skato	@[ -f .depend ] || { echo "you must make depend first"; exit 1; }
22548507Skato	sh $S/conf/systags.sh
22648507Skato	rm -f tags1
22748507Skato	sed -e 's,      ../,    ,' tags > tags1
22816359Sasami
22961328Skatokernel-install kernel-install.debug:
23065561Sobrien.if exists(${DESTDIR}/boot)
23165089Speter	@if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \
23265512Sobrien		echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \
23365089Speter		exit 1 ; \
23465089Speter	fi
23565512Sobrien	@if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \
23665089Speter		echo "You must activate /boot/device.hints in loader.conf." ; \
23765089Speter		exit 1 ; \
23865089Speter	fi
23965561Sobrien.endif
24065501Sobrien	@if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \
24153371Snyan		echo "You must build a kernel first." ; \
24216359Sasami		exit 1 ; \
24316359Sasami	fi
24465554Sobrien.if exists(${DESTDIR}${KODIR})
24565554Sobrien.if exists(${DESTDIR}${KODIR}.old)
24676114Sobrien	@-chflags -R noschg ${DESTDIR}${KODIR}.old
24765554Sobrien	-rm -rf ${DESTDIR}${KODIR}.old
24832938Skato.endif
24965554Sobrien	mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old
25065501Sobrien.endif
25165554Sobrien	mkdir -p ${DESTDIR}${KODIR}
25275984Sobrien	install -c -m 555 -o root -g wheel \
25365554Sobrien		${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR}
25416359Sasami
25561328Skatokernel-reinstall kernel-reinstall.debug:
25676114Sobrien	@-chflags -R noschg ${DESTDIR}${KODIR}
25775984Sobrien	install -c -m 555 -o root -g wheel \
25868360Snyan		${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR}
25961328Skato
26061745Sobrien.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules)
26161328Skatoall:	modules
26261328Skatodepend: modules-depend
26361328Skatoclean:  modules-clean
26461328Skatocleandepend:  modules-cleandepend
26561328Skatocleandir:  modules-cleandir
26673133Speterclobber:  modules-clobber
26761328Skatotags:  modules-tags
26871267Sjhbinstall: modules-install
26971267Sjhbinstall.debug: modules-install.debug
27071267Sjhbreinstall: modules-reinstall
27171267Sjhbreinstall.debug: modules-reinstall.debug
27260322Snyan.endif
27346750Skato
27466600SobrienMKMODULESENV=	MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR}
27575082Simp.if defined(MODULES_OVERRIDE)
27675082SimpMKMODULESENV+=	MODULES_OVERRIDE="${MODULES_OVERRIDE}"
27775082Simp.endif
27869817SnyanMKMODULESENV+=	MACHINE=pc98
27965501Sobrien
28061328Skatomodules:
28170332Sobrien	@mkdir -p ${.OBJDIR}/modules
28270332Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \
28370332Sobrien	    env ${MKMODULESENV} ${MAKE} all
28461328Skato
28561328Skatomodules-depend:
28670332Sobrien	@mkdir -p ${.OBJDIR}/modules
28770332Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \
28870332Sobrien	    env ${MKMODULESENV} ${MAKE} depend
28961328Skato
29061328Skatomodules-clean:
29168864Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean
29261328Skato
29361328Skatomodules-cleandepend:
29468864Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend
29561328Skato
29673133Spetermodules-clobber:	modules-clean
29773133Speter	rm -rf ${MKMODULESENV}
29873133Speter
29961328Skatomodules-cleandir:
30068864Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir
30161328Skato
30261328Skatomodules-tags:
30368864Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags
30461328Skato
30561328Skatomodules-install modules-install.debug:
30668864Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} install
30761328Skato
30861328Skatomodules-reinstall modules-reinstall.debug:
30968864Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} install
31061328Skato
31137582Skatoconfig.o:
31237582Skato	${NORMAL_C}
31316359Sasami
31416359Sasamiparam.c: $S/conf/param.c
31516359Sasami	-rm -f param.c
31616359Sasami	cp $S/conf/param.c .
31716359Sasami
31837582Skatoparam.o:
31937582Skato	${NORMAL_C}
32016359Sasami
32137582Skatovers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
32216359Sasami	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
32316359Sasami
32437582Skato# XXX strictly, everything depends on Makefile because changes to ${PROF}
32537582Skato# only appear there, but we don't handle that.
32637582Skatovers.o:
32737582Skato	${NORMAL_C}
32837152Skato
32961640Speterhints.o:	hints.c
33061640Speter	${NORMAL_C}
33161640Speter
33254878Skatovnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
33354878Skato	perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
33416359Sasami
33554878Skatovnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
33654878Skato	perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
33754549Skato
33837582Skatovnode_if.o:
33937582Skato	${NORMAL_C}
34037582Skato
34153371Snyan# Commented out for now pending a better solution.
34253371Snyan# How do we pick up compiler version specific flags??
34353371Snyan#.if exists($S/../share/mk)
34453371Snyan#.include "$S/../share/mk/bsd.kern.mk"
34553371Snyan#.else
34619122Sasami.include <bsd.kern.mk>
34753371Snyan#.endif
34819122Sasami
34916359Sasami%RULES
35016359Sasami
35116359Sasami# DO NOT DELETE THIS LINE -- make depend uses it
352