#
# make file for Au assembler "as"
#
# files and what they contain:
#
# assem.h       - general constants, token structure, random globals
# sym.h         - symbol table structure, routines
# error.h       - macro for setjmp
# numlab.h      - numeric label structure
# opcodes.h     - opcode names and values ....Kludge
# scanner.h     - header for scan1.c
# asmain.c      - main, initialization, cleanup at end
# const.c       - handling of dc and ds statements
# expres.c      - kludgy handling of expressions
# lit.c         - literal pool management
# error.c       - error handling
# pass1.c       - pass 1, mostly pseudo op interpretation
# pass2.c       - pass 2, machine ops, using and drops
# opcodes.c     - opcodes, included in sym.c    ... Kludge
# scan1.c       - pass 1 scanner, very time critical
# sym.c         - symbol table management
# defsym.c      - predefined symbols, e.g. r0, ..., sp, .text
#

.c.o: 
	cc -W -c -O $*.c

CFLAGS = -W -O
SAVE =
I = /usr/include
OBJ = asmain.o const.o expres.o lit.o pass1.o pass2.o\
	scan1.o sym.o list.o error.o numlab.o
LDFLAGS = -n -o as

as: $(OBJ)
	cc $(OBJ) $(LDFLAGS)
/bin/as:        as
	/etc/instcmd -m 1775 as /bin/as
	rm $(OBJ)

asmain.o:	asmain.c	$I/stdio.h sym.h $I/a.out.h \
				assem.h $I/signal.h $I/sys/times.h \
				numlab.h $I/assert.h 
const.o:	const.c		$I/stdio.h sym.h $I/a.out.h \
				assem.h scanner.h 
defsym.o:	defsym.c	
error.o:	error.c		$I/stdio.h error.h $I/setjmp.h \
				sym.h $I/a.out.h assem.h \
				scanner.h 
expres.o:	expres.c	$I/stdio.h sym.h $I/a.out.h \
				assem.h numlab.h scanner.h 
list.o:		list.c		$I/stdio.h sym.h $I/a.out.h \
				assem.h scanner.h 
	cc -W -c -TR2 list.c
lit.o:		lit.c		$I/stdio.h sym.h $I/a.out.h \
				assem.h 
numlab.o:	numlab.c	$I/stdio.h numlab.h 
opcodes.o:      opcodes.c
pass1.o:       pass1.c         $I/stdio.h sym.h $I/a.out.h \
				opcodes.h assem.h numlab.h \
				error.h $I/setjmp.h scanner.h 
pass2.o:       pass2.c         $I/stdio.h sym.h $I/a.out.h \
				opcodes.h assem.h numlab.h \
				error.h $I/setjmp.h scanner.h 
	cc -W -c -TR2 pass2.c
scan1.o:	scan1.c		$I/stdio.h sym.h $I/a.out.h \
				scanner.h 
sym.o:          sym.c           $I/stdio.h sym.h $I/a.out.h \
				opcodes.h assem.h defsym.c \
				opcodes.c 
	cc -W -c -DR2 sym.c

assem.h: assem.h+
sym.h: sym.h+
error.h: error.h+
numlab.h: numlab.h+
opcodes.h: opcodes.h+
scanner.h: scanner.h+
asmain.c: asmain.c+
const.c: const.c+
expres.c: expres.c+
lit.c: lit.c+
opcodes.c: opcodes.c+
pass1.c: pass1.c+
pass2.c: pass2.c+
scan1.c: scan1.c+
sym.c:  sym.c+
list.c: list.c+
defsym.c: defsym.c+
error.c: error.c+
numlab.c: numlab.c+

print:
	@pr Makefile assem.h asmain.c pass1.c scanner.h scan1.c pass2.c\
		const.c expres.c lit.c\
	        sym.h sym.c defsym.c opcodes.h opcodes.c\
		error.c numlab.h numlab.c list.c

remove:
	rm -f assem.h asmain.c pass1.c scan1.c pass2.c\
		scanner.h const.c expres.c lit.c\
		sym.h sym.c defsym.c opcodes.h opcodes.c\
		error.c numlab.h numlab.c list.c

lint:
	lint asmain.c pass1.c scan1.c pass2.c const.c expres.c lit.c\
		sym.c error.c numlab.c list.c



test:
	chdir tst; make

save: assem.h+ sym.h+ scanner.h+ opcodes.h+ numlab.h+ error.h+\
  asmain.c+ const.c+ defsym.c+ error.c+ expres.c+ list.c+ lit.c+\
  numlab.c+ opcodes.c+ pass1.c+ pass2.c+ scan1.c+ sym.c+

.c.c+:
	save $(SAVE) $*.c
	@touch $*.c; touch $*.o
.h.h+:
	save $(SAVE) $*.h
	@touch $*.h

assem.h+: assem.h
sym.h+: sym.h
scanner.h+: scanner.h
opcodes.h+: opcodes.h
numlab.h+: numlab.h
error.h+: error.h
asmain.c+: asmain.c
const.c+: const.c
defsym.c+: defsym.c
error.c+: error.c
expres.c+: expres.c
list.c+: list.c
lit.c+: lit.c
numlab.c+: numlab.c
opcodes.c+: opcodes.c
pass1.c+: pass1.c
pass2.c+: pass2.c
scan1.c+: scan1.c
sym.c+: sym.c

