Makefile.sun2 revision 1.7
11.7Sjmc# $NetBSD: Makefile.sun2,v 1.7 2001/10/26 06:45:40 jmc Exp $
21.1Sfredette
31.1Sfredette# Makefile for NetBSD
41.1Sfredette#
51.1Sfredette# This makefile is constructed from a machine description:
61.1Sfredette#	config machineid
71.1Sfredette# Most changes should be made in the machine description
81.1Sfredette#	/sys/arch/sun2/conf/``machineid''
91.1Sfredette# after which you should do
101.1Sfredette#	config machineid
111.1Sfredette# Machine generic makefile changes should be made in
121.1Sfredette#	/sys/arch/sun2/conf/Makefile.sun2
131.1Sfredette# after which config should be rerun for all machines of that type.
141.1Sfredette#
151.1Sfredette# N.B.: NO DEPENDENCIES ON FOLLOWING FLAGS ARE VISIBLE TO MAKEFILE
161.1Sfredette#	IF YOU CHANGE THE DEFINITION OF ANY OF THESE RECOMPILE EVERYTHING
171.1Sfredette#
181.1Sfredette# -DTRACE	compile in kernel tracing hooks
191.1Sfredette# -DQUOTA	compile in file system quotas
201.1Sfredette
211.6SthorpejMACHINE_ARCH=m68000
221.7SjmcUSETOOLS?=	no
231.7Sjmc
241.7Sjmc.include <bsd.own.mk>
251.6Sthorpej
261.1Sfredette# DEBUG is set to -g if debugging.
271.1Sfredette# PROF is set to -pg if profiling.
281.1Sfredette
291.1SfredetteAR?=	ar
301.1SfredetteAS?=	as
311.1SfredetteCC?=	cc
321.1SfredetteCPP?=	cpp
331.1SfredetteLD?=	ld
341.1SfredetteLORDER?=lorder
351.1SfredetteMKDEP?=	mkdep
361.1SfredetteNM?=	nm
371.1SfredetteRANLIB?=ranlib
381.1SfredetteSIZE?=	size
391.1SfredetteSTRIP?=	strip
401.1SfredetteTSORT?=	tsort -q
411.1Sfredette
421.1SfredetteCOPTS?=	-O2 -fno-defer-pop
431.1Sfredette
441.1Sfredette# source tree is located via $S relative to the compilation directory
451.1Sfredette.ifndef S
461.1SfredetteS!=	cd ../../../..; pwd
471.1Sfredette.endif
481.1SfredetteSUN2=	$S/arch/sun2
491.1Sfredette
501.4SfredetteTEXTADDR=00006000
511.1Sfredette
521.1Sfredette# Override CPP defaults entirely, so cross-compilation works.
531.1Sfredette# Keep -nostdinc before all -I flags, similar for -undef ...
541.1SfredetteHAVE_EGCS!=	${CC} --version | egrep "^(2\.[89]|egcs)" ; echo 
551.1SfredetteINCLUDES=	-nostdinc -I. -I$S/arch -I$S
561.5SfredetteXDEFS=		-undef -D__NetBSD__ -Dm68k -Dmc68000 -D__ELF__ -D__SVR4_ABI__
571.3SmrgDEFINES=	-D_KERNEL -D_KERNEL_OPT -Dsun2
581.1SfredetteCPPFLAGS=	${INCLUDES} ${XDEFS} ${DEFINES} ${IDENT} ${PARAM}
591.1Sfredette# Make it easy to override this on the command line...
601.1SfredetteCWARNFLAGS?= 	-Werror -Wall -Wstrict-prototypes -Wmissing-prototypes \
611.1Sfredette		-Wpointer-arith
621.1Sfredette# XXX Delete -Wuninitialized for now, since the compiler doesn't
631.1Sfredette# XXX always get it right.  --thorpej 
641.1SfredetteCWARNFLAGS+=	-Wno-uninitialized
651.1Sfredette.if (${HAVE_EGCS} != "")
661.1SfredetteCWARNFLAGS+=	-Wno-main
671.1Sfredette.endif
681.1SfredetteCFLAGS= 	${DEBUG} ${COPTS} -msoft-float ${CWARNFLAGS}
691.1SfredetteAPPFLAGS=	-x assembler-with-cpp -P -traditional ${CPPFLAGS} -D_LOCORE
701.1SfredetteAFLAGS=
711.1SfredetteLINKFLAGS=	-N -Ttext ${TEXTADDR} -e start
721.1SfredetteSTRIPFLAGS=	-g
731.1Sfredette
741.1Sfredette%INCLUDES
751.1Sfredette
761.1Sfredette### find out what to use for libkern
771.1SfredetteKERN_AS=	obj
781.4Sfredette# XXX lib/libkern/arch/m68k/Makefile.inc needs to know that
791.4Sfredette# XXX our MACHINE_ARCH is m68000, and not m68k.  --fredette
801.2SfredetteKERNMISCMAKEFLAGS=	MACHINE_ARCH=${MACHINE_ARCH}
811.1Sfredette.include "$S/lib/libkern/Makefile.inc"
821.1Sfredette.ifndef PROF
831.1SfredetteLIBKERN=	${KERNLIB}
841.1Sfredette.else
851.1SfredetteLIBKERN=	${KERNLIB_PROF}
861.1Sfredette.endif
871.1Sfredette
881.1Sfredette### find out what to use for libcompat
891.1Sfredette.include "$S/compat/common/Makefile.inc"
901.1Sfredette.ifndef PROF
911.1SfredetteLIBCOMPAT=	${COMPATLIB}
921.1Sfredette.else
931.1SfredetteLIBCOMPAT=	${COMPATLIB_PROF}
941.1Sfredette.endif
951.1Sfredette
961.1Sfredette# compile rules: rules are named NORMAL_${SUFFIX} where SUFFIX is
971.1Sfredette# the file suffix, capitalized (e.g. C for a .c file).
981.1Sfredette
991.1SfredetteNORMAL_C=	${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $<
1001.1SfredetteNOPROF_C=	${CC} ${CFLAGS} ${CPPFLAGS} -c $<
1011.1Sfredette
1021.1Sfredette# Do NOT assume the compiler does "-x funny_format" (gcc-specific)
1031.1Sfredette# This needs an intermediate file.  The original file is always
1041.1Sfredette# safe in some far away directory, so just use the base name.
1051.1SfredetteNORMAL_S=	${CPP} ${APPFLAGS} $< > $*.s ;\
1061.1Sfredette		${AS} ${AFLAGS} -o $@ $*.s ; rm $*.s
1071.1Sfredette
1081.1Sfredette# These comments help identify sections in the generated Makefile.
1091.1Sfredette# OBJS, CFILES, SFILES follow:
1101.1Sfredette
1111.1Sfredette%OBJS
1121.1Sfredette
1131.1Sfredette%CFILES
1141.1Sfredette
1151.1Sfredette%SFILES
1161.1Sfredette
1171.1Sfredette# OBJS, CFILES, SFILES done.
1181.1Sfredette
1191.1Sfredette# load lines for config "xxx" will be emitted as:
1201.1Sfredette# xxx: ${SYSTEM_DEP} swapxxx.o
1211.1Sfredette#	${SYSTEM_LD_HEAD}
1221.1Sfredette#	${SYSTEM_LD} swapxxx.o
1231.1Sfredette#	${SYSTEM_LD_TAIL}
1241.1SfredetteSYSTEM_OBJ=	locore.o \
1251.1Sfredette		param.o ioconf.o ${OBJS} ${LIBCOMPAT} ${LIBKERN}
1261.1SfredetteSYSTEM_DEP=	Makefile ${SYSTEM_OBJ}
1271.1SfredetteSYSTEM_LD_HEAD=	@rm -f $@
1281.1SfredetteSYSTEM_LD=	@echo ${LD} ${LINKFLAGS} -o $@ '$${SYSTEM_OBJ}' vers.o; \
1291.1Sfredette		${LD} ${LINKFLAGS} -o $@ ${SYSTEM_OBJ} vers.o
1301.1SfredetteSYSTEM_LD_TAIL=	@${SIZE} $@; chmod 755 $@
1311.1Sfredette
1321.1SfredetteDEBUG?=
1331.1Sfredette.if ${DEBUG} == "-g"
1341.1SfredetteLINKFLAGS+=	-X
1351.1SfredetteSYSTEM_LD_TAIL+=; \
1361.1Sfredette		echo mv -f $@ $@.gdb; mv -f $@ $@.gdb; \
1371.1Sfredette		echo ${STRIP} ${STRIPFLAGS} -o $@ $@.gdb; \
1381.1Sfredette		${STRIP} ${STRIPFLAGS} -o $@ $@.gdb
1391.1Sfredette.else
1401.1SfredetteLINKFLAGS+=	-S
1411.1Sfredette.endif
1421.1Sfredette
1431.1Sfredette# LOAD+
1441.1Sfredette
1451.1Sfredette%LOAD
1461.1Sfredette
1471.1Sfredette# LOAD-
1481.1Sfredette
1491.1Sfredette# Use awk to cross-build assym.h from the genassym.s file.
1501.1Sfredetteassym.h: genassym.o $S/kern/genassym.awk
1511.1Sfredette	awk -f $S/kern/genassym.awk < genassym.s > assym.h.tmp
1521.1Sfredette	mv -f assym.h.tmp $@
1531.1Sfredette
1541.1Sfredette# The above rule lists genassym.o as a prerequisite so that the
1551.1Sfredette# generated .depend rule is effective, even though we actually
1561.1Sfredette# use genassym.s instead.   This always creates both.
1571.1Sfredettegenassym.o: ${SUN2}/sun2/genassym.c
1581.1Sfredette	${CC} ${CPPFLAGS} -S $<
1591.1Sfredette	${CC} -c $*.s
1601.1Sfredette
1611.1Sfredetteparam.c: $S/conf/param.c
1621.1Sfredette	rm -f param.c
1631.1Sfredette	cp $S/conf/param.c .
1641.1Sfredette
1651.1Sfredetteparam.o: param.c Makefile
1661.1Sfredette	${NORMAL_C}
1671.1Sfredette
1681.1Sfredetteioconf.o: ioconf.c
1691.1Sfredette	${NORMAL_C}
1701.1Sfredette
1711.1Sfredettenewvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
1721.1Sfredette	sh $S/conf/newvers.sh
1731.1Sfredette	${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
1741.1Sfredette
1751.1Sfredette__CLEANKERNEL: .USE
1761.1Sfredette	@echo "${.TARGET}ing the kernel objects"
1771.1Sfredette	rm -f eddep *netbsd netbsd.gdb tags *.[io] [a-z]*.s \
1781.1Sfredette	    [Ee]rrs linterrs makelinks assym.h.tmp assym.h
1791.1Sfredette
1801.1Sfredette__CLEANDEPEND: .USE
1811.1Sfredette	rm -f .depend
1821.1Sfredette
1831.1Sfredetteclean: __CLEANKERNEL
1841.1Sfredette
1851.1Sfredettecleandir distclean: __CLEANKERNEL __CLEANDEPEND
1861.1Sfredette
1871.1Sfredettelint:
1881.1Sfredette	@lint -hbxncez -Dvolatile= ${CPPFLAGS} -UKGDB \
1891.1Sfredette	    ${CFILES} ioconf.c param.c | \
1901.1Sfredette	    grep -v 'static function .* unused'
1911.1Sfredette
1921.1Sfredettetags:
1931.1Sfredette	@echo "see $S/kern/Makefile for tags"
1941.1Sfredette
1951.1Sfredettelinks:
1961.1Sfredette	egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
1971.1Sfredette	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
1981.1Sfredette	echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
1991.1Sfredette	  sort -u | comm -23 - dontlink | \
2001.1Sfredette	  sed 's,../.*/\(.*.o\),rm -f \1; ln -s ../GENERIC/\1 \1,' > makelinks
2011.1Sfredette	sh makelinks && rm -f dontlink
2021.1Sfredette
2031.1SfredetteSRCS=	${SUN2}/sun2/locore.s \
2041.1Sfredette	param.c ioconf.c ${CFILES} ${SFILES}
2051.1Sfredette
2061.1Sfredettedepend: .depend
2071.1Sfredette.depend: ${SRCS} assym.h param.c
2081.1Sfredette	${MKDEP} ${CPPFLAGS} param.c ioconf.c ${CFILES}
2091.1Sfredette	${MKDEP} -a ${CPPFLAGS} ${SUN2}/sun2/genassym.c
2101.1Sfredette
2111.1Sfredettedependall: depend all
2121.1Sfredette
2131.1Sfredette
2141.1Sfredette# XXX - see below
2151.1Sfredette#	${MKDEP} -a ${APPFLAGS} ${SUN2}/sun2/locore.s
2161.1Sfredette#	${MKDEP} -a ${APPFLAGS} ${SFILES}
2171.1Sfredette#
2181.1Sfredette# For cross-compilation, the "gcc -M" mkdep script is convenient,
2191.1Sfredette# but that does not correctly make rules from *.s files.  The
2201.1Sfredette# easiest work-around is to just list those dependencies here.
2211.1Sfredettelocore.o:   assym.h m68k/asm.h m68k/trap.h
2221.1Sfredettecopy.o:     assym.h m68k/asm.h $S/sys/errno.h
2231.1Sfredettebcopy.o:    assym.h m68k/asm.h
2241.1Sfredettecopypage.o: assym.h m68k/asm.h
2251.1Sfredette
2261.1Sfredette# depend on root or device configuration
2271.1Sfredetteconf.o: Makefile
2281.1Sfredette 
2291.1Sfredette# depend on network or filesystem configuration 
2301.1Sfredetteuipc_proto.o vfs_conf.o: Makefile 
2311.1Sfredette
2321.1Sfredette# depend on maxusers
2331.1Sfredettemachdep.o: Makefile
2341.1Sfredette
2351.1Sfredette# depend on CPU configuration 
2361.1Sfredettedb_machdep.o dvma.o machdep.o pmap.o sun2_startup.o vm_machdep.o: Makefile
2371.1Sfredette
2381.1Sfredette# depends on KGDBDEV, KGDBRATE
2391.1Sfredettekgdb_stub.o: Makefile
2401.1Sfredette
2411.1Sfredette# depends on DDB, etc.
2421.1Sfredettestub.o: Makefile
2431.1Sfredette
2441.1Sfredettelocore.o: ${SUN2}/sun2/locore.s
2451.1Sfredette	${NORMAL_S}
2461.1Sfredette
2471.1Sfredette# Generated rules follow:
2481.1Sfredette
2491.1Sfredette# The install target can be redefined by putting a
2501.1Sfredette# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
2511.1SfredetteMACHINE_NAME!=  uname -n
2521.1Sfredetteinstall: install-kernel-${MACHINE_NAME}
2531.1Sfredette.if !target(install-kernel-${MACHINE_NAME}})
2541.1Sfredetteinstall-kernel-${MACHINE_NAME}:
2551.1Sfredette	rm -f /onetbsd
2561.1Sfredette	ln /netbsd /onetbsd
2571.1Sfredette	cp netbsd /nnetbsd
2581.1Sfredette	mv /nnetbsd /netbsd
2591.1Sfredette.endif
2601.1Sfredette
2611.1Sfredette%RULES
262