
FC = lf95
FOPTS = -g --chk --info
LDOPTS = -g

OBJS = autocoder.o bcd_to_ascii_m.o error_m.o input_m.o io_units.o \
       lexer.o literals_m.o machine.o op_codes_m.o operand_m.o \
       parser.o pass_1_m.o pass_2_m.o pass_3_m.o symtab_m.o \
       traces_m.o zone_m.o

SRCS = autocoder.f90 bcd_to_ascii_m.f90 error_m.f90 input_m.f90 io_units.f90 \
       lexer.f90 literals_m.f90 machine.f90 op_codes_m.f90 operand_m.f90 \
       parser.f90 pass_1_m.f90 pass_2_m.f90 pass_3_m.f90 symtab_m.f90 \
       traces_m.f90 zone_m.f90

.SUFFIXES:
.SUFFIXES: .f90 .o

.f90.o:
	$(FC) -c $(FOPTS) $< 2>&1 | hl

all: autocoder

autocoder.o: autocoder.f90 error_m.o input_m.o io_units.o literals_m.o \
        machine.o pass_1_m.o pass_2_m.o pass_3_m.o symtab_m.o traces_m.o
error_m.o: error_m.f90 input_m.o io_units.o
input_m.o: input_m.f90
lexer.o: lexer.f90 error_m.o traces_m.o
literals_m.o: literals_m.f90 error_m.o io_units.o lexer.o operand_m.o \
        symtab_m.o traces_m.o
macro_pass_m.o: macro_pass_m.f90 input_m.o io_units.o machine.o op_codes_m.o
operand_m.o: operand_m.f90
op_codes_m.o: op_codes_m.f90 bcd_to_ascii_m.o
parser.o: parser.f90 error_m.o lexer.o literals_m.o operand_m.o symtab_m.o \
        traces_m.o
pass_1_m.o: pass_1_m.f90 bcd_to_ascii_m.o error_m.o input_m.o io_units.o \
        lexer.o literals_m.o machine.o op_codes_m.o operand_m.o parser.o \
        symtab_m.o
pass_2_m.o: pass_2_m.f90 error_m.o io_units.o literals_m.o operand_m.o \
        symtab_m.o
pass_3_m.o: pass_3_m.f90 bcd_to_ascii_m.o error_m.o io_units.o literals_m.o \
        op_codes_m.o operand_m.o symtab_m.o zone_m.o
symtab_m.o: symtab_m.f90
zone_m.o: zone_m.f90 bcd_to_ascii_m.o

autocoder: $(OBJS)
	$(FC) $(LDOPTS) -o autocoder $(OBJS)

clean:
	rm -f *.o *.mod autocoder autocoder.tar

tar:
	tar czf Fortran.tar Makefile $(SRCS)

zip:
	zip -l Fortran.zip Makefile $(SRCS)
