
#
# %M%: version %I% of %H%
#
# makefile for AIS VIOS
# 10/20/84	dss	created
#

PFX	= n

CF	= -O
CFLAGS	= ${CINC} ${CF}
LDFLAGS = -N

CC	= ${PFX}cc
CPP	= /lib/${PFX}cpp
AS	= ${PFX}as
LD	= ${PFX}ld
AR	= ${PFX}ar
NM	= ${PFX}nm
STRIP	= ${PFX}strip
XSTR	= /usr/ucb/xstr

INCRT	= ..
SINC	= -I$(INCRT)
CINC	= -DCSOURCE -I$(INCRT)
CXDEF	= -DBPT=\"bpt\;\"
LDFLAGS = -N
LDLIB	=
#LDLIB	= -lnc

VLINK	= RAMmonsize.h
VADDR	= RAMviosaddr.m

ABSLINK	= $(INCRT)/RAMmonsize.m
LIBMON	= $(INCRT)/prom2b.run


3200HEADERS = \
	$(INCRT)/INC5/3200addr.2a.h $(INCRT)/INC5/3200conf.2a.h \
	$(INCRT)/INC5/3200info.2a.h $(INCRT)/INC5/3200uart.2a.h \
	$(INCRT)/INC5/3200vctr.2a.h $(INCRT)/INC5/32032.h \
	$(INCRT)/INC5/3200icu.h $(INCRT)/INC5/3200mmu.h

HEADERS = \
	$(INCRT)/INC5/ais.h $(INCRT)/INC5/ascii.h \
	$(INCRT)/INC5/vctype.h $(INCRT)/INC5/vmdispatch.h \
	$(INCRT)/vinc/abusflags.h $(INCRT)/vinc/devfuncs.h \
	$(INCRT)/vinc/devices.h $(INCRT)/vinc/handlers.h \
	$(INCRT)/vinc/iopacket.h $(INCRT)/vinc/osiopkt.h \
	$(INCRT)/vinc/piocmds.h $(INCRT)/vinc/piostatus.h \
	$(INCRT)/vinc/pktfuncs.h $(INCRT)/vinc/poolfuncs.h \
	$(INCRT)/vinc/viocmds.h $(INCRT)/vinc/viosconf.h \
	$(INCRT)/vinc/viosdefs.h $(INCRT)/vinc/viosflags.h \
	$(INCRT)/vinc/vioslink.h $(INCRT)/vinc/viostatus.h \
	$(INCRT)/vinc/viostypes.h $(INCRT)/vinc/vios3200.h \
	$(VLINK) \
	$(INCRT)/vinc/hostflags.h $(INCRT)/vinc/hostprot.h \
	$(INCRT)/vinc/hostsubrs.h

CFILES	= \
	auxhandlr.c blkaddr.c bufaddr.c clock.c ctrlsubs.c devhandlr.c \
	hostmem.c hypersubs.c infhandlr.c inihandlr.c osentries.c pcthandlr.c \
	pktsubs.c pool.c qsubs.c rdwrtsubs.c recseq.c \
	vcthandlr.c vioinit.c viomain.c vrdhandlr.c vwthandlr.c \
	vios.c \
	aisdispat.c aistty.c tty3200.c err3200.c \
	hstdispat.c hstdriver.c

SFILES	= \
	catch3200.S host3210.S memcheck.S trap3200.S viossvc.S


.PRECIOUS: vios.a

.SUFFIXES: .o .c .s .S .L

all:	vios.a

vios.a: \
	vios.a(catch3200.o) \
	vios.a(host3210.o) \
	vios.a(memcheck.o) \
	vios.a(trap3200.o) \
	vios.a(viossvc.o) \
	vios.a(auxhandlr.o) \
	vios.a(blkaddr.o) \
	vios.a(bufaddr.o) \
	vios.a(clock.o) \
	vios.a(ctrlsubs.o) \
	vios.a(devhandlr.o) \
	vios.a(hostmem.o) \
	vios.a(hypersubs.o) \
	vios.a(infhandlr.o) \
	vios.a(inihandlr.o) \
	vios.a(osentries.o) \
	vios.a(pcthandlr.o) \
	vios.a(pktsubs.o) \
	vios.a(pool.o) \
	vios.a(qsubs.o) \
	vios.a(rdwrtsubs.o) \
	vios.a(recseq.o) \
	vios.a(vcthandlr.o) \
	vios.a(vioinit.o) \
	vios.a(viomain.o) \
	vios.a(vrdhandlr.o) \
	vios.a(vwthandlr.o) \
	vios.a(vios.o) \
	vios.a(aisdispat.o) \
	vios.a(aistty.o) \
	vios.a(tty3200.o) \
	vios.a(err3200.o) \
	vios.a(hstdispat.o) \
	vios.a(hstdriver.o)
	

viossize.o:  $(HEADERS) $(3200HEADERS) viossize.c
	$(CPP) ${CINC} viossize.c > Xviossize.c
	$(CC) -S ${CF} Xviossize.c 
	sed -f abs.sed Xviossize.s | $(CPP) -P > XXviossize.s
	$(AS) -o viossize.o XXviossize.s
	-rm -f Xviossize.c Xviossize.s XXviossize.s

strings.o: strings
	${XSTR}
	${CC} ${CFLAGS} -S xs.c
	ed - <rofix.ed xs.s
	${AS} -o xs.o xs.s
	mv xs.o strings.o
	-rm -f xs.c xs.s

$(VADDR): $(HEADERS) $(3200HEADERS) viosaddr.c
	$(CPP) ${CINC} viosaddr.c > Xviosaddr.c
	$(CC) -S ${CF} Xviosaddr.c
	sed -f abs.sed Xviosaddr.s > $(VADDR)
	-rm -f Xviosaddr.c Xviosaddr.s

$(VLINK): $(ABSLINK)
	sed -e "/.globl/d" -e "s/	.set/#define/g" -e "s/,//g" $(ABSLINK) \
		> $(VLINK)

vios.a(catch3200.o): ${3200HEADERS} ${HEADERS} $(VADDR) catch3200.S 

vios.a(host3210.o): ${3200HEADERS} ${HEADERS} $(VADDR) host3210.S 

vios.a(memcheck.o): ${3200HEADERS} ${HEADERS} $(VADDR) memcheck.S 

vios.a(trap3200.o): ${3200HEADERS} ${HEADERS} $(VADDR) trap3200.S 

vios.a(viossvc.o): ${3200HEADERS} ${HEADERS} $(VADDR) viossvc.S 


.c.a:
	${CPP} ${CINC} $*.c | ${XSTR} -c -
	${CC} -c ${CF} ${CXDEF} x.c
	mv x.o $*.o
	$(AR) rvl vios.a $*.o 
	-rm -f $*.o x.c

.c.L:
	${CPP} ${CINC} $*.c | ${XSTR} -c -
	${CC} -S ${CF} ${CXDEF} x.c
	mv x.s $*.L
	-rm -f x.c

.S.a:
	${CPP} -P $(SINC) $*.S > X$*.s
	$(AS) -o $*.o X$*.s
	$(AR) rvl vios.a $*.o
	-rm -f X$*.s $*.o



lint:
	lint -hbacn ${CFILES}


# We need to worry about assembly sources below also.  We assume there are no
# files involved that begin with `..' except for `..' itself.
#	The rule works by sequentially producing the dependencies for each
#	source file.  It builds each such list by using the C preprocessor to
#	collect all files required by the current source file.  Grep then
#	collects line directive lines, and awk and sed strip out unwanted
#	fields and punctuation.  The final awk formats the dependencies into
#	a compact form.  (The final grep throws away the entry for the source
#	file itself -- this dependency is recorded elsewhere.)
depend:
	rm -f makedep eddep
	for i in ${CFILES};					do	\
		${CC} -E ${CFLAGS} $$i				|	\
		grep '^#'					|	\
		awk '{ print $$3 }'				|	\
		sed -e 's|/[^/]*/\.\.||g' -e 's|"||g'		|	\
		sort -u						|	\
		grep -v "$$i"					|	\
		awk "BEGIN { of = \"vios.a(`basename $$i .c`\" \".o): \
		     ./viosconf.h \"; rec = of }\
		     { if (length(rec \$$0) > 78) { print rec; rec = of \$$0 }\
		      else rec = rec \" \" \$$0 }			\
		     END { print rec }" >> makedep		;	\
	done
	echo '$$r makedep' >>eddep
	echo '/^# DO NOT DELETE THIS LINE/+1,$$d' >>eddep
	echo '$$r makedep' >>eddep
	echo 'w' >>eddep
	cp Makefile Makefile.bak
	ed - Makefile < eddep
	rm makedep eddep

tags:
	/usr/ucb/ctags ${CFILES}

# DO NOT DELETE THIS LINE -- make depends on it
