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