Makefile.sparc64 revision 85198
198944Sobrien# Makefile.sparc64 -- with config changes.
298944Sobrien# Copyright 1990 W. Jolitz
3130803Smarcel#	from: @(#)Makefile.i386	7.1 5/10/91
498944Sobrien# $FreeBSD: head/sys/conf/Makefile.sparc64 85198 2001-10-19 22:19:06Z mp $
598944Sobrien#
698944Sobrien# Makefile for FreeBSD
798944Sobrien#
898944Sobrien# This makefile is constructed from a machine description:
998944Sobrien#	config machineid
1098944Sobrien# Most changes should be made in the machine description
1198944Sobrien#	/sys/sparc64/conf/``machineid''
1298944Sobrien# after which you should do
1398944Sobrien#	 config machineid
1498944Sobrien# Generic makefile changes should be made in
1598944Sobrien#	/sys/sparc64/conf/Makefile.sparc64
1698944Sobrien# after which config should be rerun for all machines.
1798944Sobrien#
1898944Sobrien
1998944SobrienMACHINE_ARCH=	sparc64
2098944Sobrien
2198944SobrienAR=		sparc64-ar
2298944SobrienCC=		sparc64-unknown-elf-gcc -D__sparc64__
2398944SobrienLD=		sparc64-ld
2498944SobrienNM=		sparc64-nm
2598944SobrienOBJCOPY=	sparc64-objcopy
2698944SobrienOBJDUMP=	sparc64-objdump
2798944SobrienRANLIB=		sparc64-ranlib
2898944SobrienSIZE=		sparc64-size
2998944Sobrien
3098944SobrienCWARNFLAGS=	-Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes \
3198944Sobrien		-Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual \
3298944Sobrien		-ansi
3398944Sobrien
3498944Sobrien# Which version of config(8) is required.
3598944Sobrien%VERSREQ=	500008
3698944Sobrien
3798944Sobrien# Can be overridden by makeoptions or /etc/make.conf
3898944SobrienKERNEL_KO?=	kernel
3998944SobrienKERNEL?=	kernel
4098944SobrienKODIR?=		/boot/${KERNEL}
4198944SobrienSTD8X16FONT?=	iso
42130803Smarcel
43130803Smarcel.if !defined(S)
4498944Sobrien.if exists(./@/.)
4598944SobrienS=	./@
4698944Sobrien.else
4798944SobrienS=	../../..
4898944Sobrien.endif
4998944Sobrien.endif
5098944SobrienM=	${MACHINE_ARCH}
5198944Sobrien
5298944SobrienNM?=		nm
5398944SobrienOBJCOPY?=	objcopy
5498944SobrienSIZE?=		size
5598944Sobrien
5698944SobrienCOPTFLAGS?=-O -pipe
5798944Sobrien.if !defined(NO_CPU_COPTFLAGS)
5898944SobrienCOPTFLAGS+= ${_CPUCFLAGS}
5998944Sobrien.endif
6098944SobrienINCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev
6198944Sobrien# This hack is to allow kernel compiles to succeed on machines w/out srcdist
6298944Sobrien.if exists($S/../include)
6398944SobrienINCLUDES+= -I$S/../include
6498944Sobrien.else
6598944SobrienINCLUDES+= -I/usr/include
6698944Sobrien.endif
6798944Sobrien
6898944SobrienCOPTS=	${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h
6998944SobrienCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} -mcmodel=medlow
7098944Sobrien
71130803Smarcel# XXX LOCORE means "don't declare C stuff" not "for locore.s".
72130803SmarcelASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
73130803Smarcel
74130803Smarcel# Select the correct set of tools. Can't set OBJFORMAT here because it
75130803Smarcel# doesn't get exported into the environment, and if it were exported
7698944Sobrien# then it might break building of utilities.
77130803SmarcelFMT=
78130803SmarcelCFLAGS+=	${FMT}
7998944Sobrien
80130803SmarcelDEFINED_PROF=	${PROF}
8198944Sobrien.if defined(PROF)
8298944SobrienCFLAGS+=	-malign-functions=4
8398944Sobrien.if ${PROFLEVEL} >= 2
8498944SobrienIDENT+=	-DGPROF4 -DGUPROF
8598944SobrienPROF+=	-mprofiler-epilogue
8698944Sobrien.endif
8798944Sobrien.endif
8898944Sobrien
8998944Sobrien# Put configuration-specific C flags last (except for ${PROF}) so that they
9098944Sobrien# can override the others.
9198944SobrienCFLAGS+=	${CONF_CFLAGS}
9298944Sobrien
9398944SobrienNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
9498944SobrienNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
9598944SobrienNORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC}
9698944SobrienPROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC}
9798944Sobrien
9898944SobrienNORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
9998944Sobrien	  ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
10098944Sobrien
10198944SobrienGEN_CFILES= $S/$M/$M/genassym.c
10298944SobrienSYSTEM_CFILES= vnode_if.c hints.c env.c config.c
10398944SobrienSYSTEM_SFILES= $S/$M/$M/locore.s $S/$M/$M/exception.s
10498944SobrienSYSTEM_DEP= Makefile ${SYSTEM_OBJS}
10598944SobrienSYSTEM_OBJS= locore.o exception.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So
10698944SobrienSYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \
10798944Sobrien	-export-dynamic -dynamic-linker /red/herring \
10898944Sobrien	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
10998944SobrienSYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
11098944Sobrien	${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET}
11198944SobrienSYSTEM_DEP+= $S/conf/ldscript.$M
11298944Sobrien
113130803Smarcel%BEFORE_DEPEND
114130803Smarcel
115130803Smarcel%OBJS
11698944Sobrien
11798944Sobrien%FILES.c
11898944Sobrien
11998944Sobrien%FILES.s
12098944Sobrien
12198944Sobrien%FILES.m
12298944Sobrien
12398944Sobrien%CLEAN
124130803Smarcel
125130803Smarcel.PHONY:	all modules
126130803Smarcel
12798944Sobrienall: ${KERNEL_KO}
12898944Sobrien
12998944Sobriendepend: kernel-depend
13098944Sobrienclean:  kernel-clean
13198944Sobriencleandepend:  kernel-cleandepend
13298944Sobrienclobber: kernel-clobber
13398944Sobrientags:  kernel-tags
13498944Sobrieninstall: kernel-install
13598944Sobrieninstall.debug: kernel-install.debug
13698944Sobrienreinstall: kernel-reinstall
13798944Sobrienreinstall.debug: kernel-reinstall.debug
13898944Sobrien
13998944Sobrien.if !defined(DEBUG)
14098944SobrienFULLKERNEL=	${KERNEL_KO}
14198944Sobrien.else
14298944SobrienFULLKERNEL=	${KERNEL_KO}.debug
14398944Sobrien${KERNEL_KO}: ${FULLKERNEL}
14498944Sobrien	${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO}
14598944Sobrien.endif
146130803Smarcel
147130803Smarcel${FULLKERNEL}: ${SYSTEM_DEP} vers.o
148130803Smarcel	@rm -f ${.TARGET}
14998944Sobrien	@echo linking ${.TARGET}
15098944Sobrien	${SYSTEM_LD}
15198944Sobrien	${SYSTEM_LD_TAIL}
15298944Sobrien
15398944Sobrien.if !exists(.depend)
15498944Sobrien${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/}
15598944Sobrien.endif
15698944Sobrien
15798944Sobrien.for mfile in ${MFILES}
15898944Sobrien${mfile:T:S/.m$/.h/}: ${mfile}
15998944Sobrien	perl5 $S/kern/makeobjops.pl -h ${mfile}
16098944Sobrien.endfor
16198944Sobrien
16298944Sobrienkernel-clean:
16398944Sobrien	rm -f *.o *.so *.So *.ko *.s eddep errs \
16498944Sobrien	      ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \
16598944Sobrien	      setdef[01].c setdefs.h tags \
16698944Sobrien	      vers.c vnode_if.c vnode_if.h \
16798944Sobrien	      ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \
16898944Sobrien	      ${CLEAN}
16998944Sobrien
17098944Sobrienkernel-clobber:
17198944Sobrien	find . -type f ! -name version -delete
17298944Sobrien
17398944Sobrien#lint: /tmp
17498944Sobrien#	@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \
17598944Sobrien#	  $S/$M/$M/Locore.c ${CFILES} | \
17698944Sobrien#	    grep -v 'struct/union .* never defined' | \
17798944Sobrien#	    grep -v 'possible pointer alignment problem'
17898944Sobrien
17998944Sobrienlocore.o: $S/$M/$M/locore.s assym.s
18098944Sobrien	${NORMAL_S}
18198944Sobrien
18298944Sobrienexception.o: $S/$M/$M/exception.s assym.s
183130803Smarcel	${NORMAL_S}
184130803Smarcel
18598944Sobrien# This is a hack.  BFD "optimizes" away dynamic mode if there are no
18698944Sobrien# dynamic references.  We could probably do a '-Bforcedynamic' mode like
187130803Smarcel# in the a.out ld.  For now, this works.
18898944Sobrienhack.So: Makefile
18998944Sobrien	touch hack.c
19098944Sobrien	${CC} ${FMT} -Wl,-shared -nostdlib hack.c -o hack.So
19198944Sobrien	rm -f hack.c
19298944Sobrien
19398944Sobrien# this rule stops ./assym.s in .depend from causing problems
19498944Sobrien./assym.s: assym.s
19598944Sobrien
19698944Sobrienassym.s: $S/kern/genassym.sh genassym.o
19798944Sobrien	NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET}
19898944Sobrien
19998944Sobriengenassym.o: $S/$M/$M/genassym.c
20098944Sobrien	${CC} -c ${CFLAGS} -elf $S/$M/$M/genassym.c
20198944Sobrien
20298944Sobrien${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
20398944Sobrien
20498944Sobrienkernel-depend:
20598944Sobrien	rm -f .olddep
20698944Sobrien	if [ -f .depend ]; then mv .depend .olddep; fi
20798944Sobrien	${MAKE} _kernel-depend
20898944Sobrien
20998944Sobrien_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \
21098944Sobrien	    ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
21198944Sobrien	    ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/}
21298944Sobrien	if [ -f .olddep ]; then mv .olddep .depend; fi
21398944Sobrien	rm -f .newdep
21498944Sobrien	env MKDEP_CPP="${CC} -E" \
21598944Sobrien	    mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES}
21698944Sobrien	env MKDEP_CPP="${CC} -E" \
21798944Sobrien	    mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES}
21898944Sobrien	rm -f .depend
21998944Sobrien	mv .newdep .depend
22098944Sobrien
22198944Sobrienkernel-cleandepend:
22298944Sobrien	rm -f .depend
22398944Sobrien
22498944Sobrienlinks:
22598944Sobrien	egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
22698944Sobrien	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
22798944Sobrien	echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
22898944Sobrien	  sort -u | comm -23 - dontlink | \
22998944Sobrien	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
23098944Sobrien	sh makelinks; rm -f dontlink
23198944Sobrien
23298944Sobrienkernel-tags:
23398944Sobrien	@[ -f .depend ] || { echo "you must make depend first"; exit 1; }
23498944Sobrien	sh $S/conf/systags.sh
23598944Sobrien	rm -f tags1
23698944Sobrien	sed -e 's,      ../,    ,' tags > tags1
23798944Sobrien
23898944Sobrienkernel-install kernel-install.debug:
23998944Sobrien.if exists(${DESTDIR}/boot)
24098944Sobrien	@if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \
24198944Sobrien		echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \
24298944Sobrien		exit 1 ; \
24398944Sobrien	fi
24498944Sobrien	@if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \
24598944Sobrien		echo "You must activate /boot/device.hints in loader.conf." ; \
24698944Sobrien		exit 1 ; \
24798944Sobrien	fi
24898944Sobrien.endif
24998944Sobrien	@if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \
25098944Sobrien		echo "You must build a kernel first." ; \
25198944Sobrien		exit 1 ; \
25298944Sobrien	fi
25398944Sobrien.if exists(${DESTDIR}${KODIR})
25498944Sobrien.if exists(${DESTDIR}${KODIR}.old)
25598944Sobrien	@-chflags -R noschg ${DESTDIR}${KODIR}.old
25698944Sobrien	-rm -rf ${DESTDIR}${KODIR}.old
25798944Sobrien.endif
25898944Sobrien	mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old
25998944Sobrien	[ "`sysctl -n kern.bootfile`" != "${DESTDIR}${KODIR}/kernel" ] || \
26098944Sobrien		sysctl kern.bootfile=${DESTDIR}${KODIR}.old/kernel
26198944Sobrien.endif
26298944Sobrien	mkdir -p ${DESTDIR}${KODIR}
26398944Sobrien	install -c -m 555 -o root -g wheel \
26498944Sobrien		${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR}
26598944Sobrien
26698944Sobrienkernel-reinstall kernel-reinstall.debug:
26798944Sobrien	@-chflags -R noschg ${DESTDIR}${KODIR}
26898944Sobrien	install -c -m 555 -o root -g wheel \
26998944Sobrien		${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR}
27098944Sobrien
27198944Sobrien.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules)
27298944Sobrienall:	modules
27398944Sobriendepend: modules-depend
27498944Sobrienclean:  modules-clean
27598944Sobriencleandepend:  modules-cleandepend
27698944Sobriencleandir:  modules-cleandir
27798944Sobrienclobber:  modules-clobber
27898944Sobrientags:  modules-tags
27998944Sobrieninstall: modules-install
28098944Sobrieninstall.debug: modules-install.debug
28198944Sobrienreinstall: modules-reinstall
28298944Sobrienreinstall.debug: modules-reinstall.debug
28398944Sobrien.endif
28498944Sobrien
28598944SobrienMKMODULESENV=	MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR}
28698944Sobrien.if defined(MODULES_OVERRIDE)
28798944SobrienMKMODULESENV+=	MODULES_OVERRIDE="${MODULES_OVERRIDE}"
28898944Sobrien.endif
28998944Sobrien
29098944Sobrienmodules:
29198944Sobrien	@mkdir -p ${.OBJDIR}/modules
29298944Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \
29398944Sobrien	    env ${MKMODULESENV} ${MAKE} all
29498944Sobrien
29598944Sobrienmodules-depend:
29698944Sobrien	@mkdir -p ${.OBJDIR}/modules
29798944Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \
29898944Sobrien	    env ${MKMODULESENV} ${MAKE} depend
29998944Sobrien
30098944Sobrienmodules-clean:
30198944Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean
30298944Sobrien
30398944Sobrienmodules-cleandepend:
30498944Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend
30598944Sobrien
30698944Sobrienmodules-clobber:	modules-clean
30798944Sobrien	rm -rf ${MKMODULESENV}
30898944Sobrien
30998944Sobrienmodules-cleandir:
31098944Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir
31198944Sobrien
31298944Sobrienmodules-tags:
31398944Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags
31498944Sobrien
31598944Sobrienmodules-install modules-install.debug:
31698944Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} install
31798944Sobrien
31898944Sobrienmodules-reinstall modules-reinstall.debug:
31998944Sobrien	cd $S/modules ; env ${MKMODULESENV} ${MAKE} install
32098944Sobrien
32198944Sobrienconfig.o:
32298944Sobrien	${NORMAL_C}
32398944Sobrien
32498944Sobrienvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
32598944Sobrien	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
32698944Sobrien
32798944Sobrien# XXX strictly, everything depends on Makefile because changes to ${PROF}
32898944Sobrien# only appear there, but we don't handle that.
32998944Sobrienvers.o:
33098944Sobrien	${NORMAL_C}
33198944Sobrien
33298944Sobrienhints.o:	hints.c
33398944Sobrien	${NORMAL_C}
33498944Sobrien
33598944Sobrienenv.o:	env.c
33698944Sobrien	${NORMAL_C}
33798944Sobrien
33898944Sobrienvnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
33998944Sobrien	perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
34098944Sobrien
34198944Sobrienvnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
34298944Sobrien	perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
34398944Sobrien
34498944Sobrienvnode_if.o:
34598944Sobrien	${NORMAL_C}
34698944Sobrien
34798944Sobrien# Commented out for now pending a better solution.
34898944Sobrien# How do we pick up compiler version specific flags??
34998944Sobrien#.if exists($S/../share/mk)
35098944Sobrien#.include "$S/../share/mk/bsd.kern.mk"
35198944Sobrien#.else
35298944Sobrien.include <bsd.kern.mk>
35398944Sobrien#.endif
35498944Sobrien
35598944Sobrien%RULES
35698944Sobrien