#---- suffix rules ----
.SUFFIXES:
.SUFFIXES: .sfl .mc .asm .bin

.sfl.mc:
	echo "sflread $< -exp; sflsave $* $@" | $(SECONDS)

.asm.bin:
	$(DASM) $(DASMFLAGS) -a $(@:.bin=.adr) $< > $@ || rm -f $@

#---- macro definitions ----
SHELL = /bin/sh
MAKE = make
MFLAGS =

SECONDS = seconds
DASM = ./dasm
DASMFLAGS =
TARGETS =
GARBAGE = *~ *.*~ core

DLXSFLS = dlx.sfl alu32.sfl mult32.sfl idec.sfl regfile.sfl malign.sfl pcsv.sfl rfsv.sfl
DLXCSFLS = $(DLXSFLS) dlxc.sfl cache.sfl
SFLS =\
$(DLXCSFLS)\
memory.sfl map.sfl system0.sfl system1.sfl\
creg00.sfl bridge.sfl PCI.sfl PCIb.sfl PCIbus.sfl system2.sfl

ASMS = fact.asm
BINS = $(ASMS:.asm=.bin)
ADRS = $(ASMS:.asm=.adr)

MCS = $(SFLS:.sfl=.mc)

#---- what to do ----
all: $(TARGETS)

distclean: clean
	-rm -f $(TARGETS) $(MCS) $(BINS) $(ADRS)

clean:
	-rm -f $(GARBAGE)

mc: $(MCS)

dlx: $(DLXSFLS:.sfl=.mc)
dlxc: $(DLXCSFLS:.sfl=.mc)

system0: system0.mc dlx  map.mc memory.mc
system1: system1.mc dlxc map.mc memory.mc creg00.mc bridge.mc
system2: system2.mc dlxc map.mc memory.mc creg00.mc bridge.mc PCIb.mc PCI.mc PCIbus.mc

#---- dependency ----
dlx.mc: alu32.h mult32.h rfsv.h pcsv.h idec.h malign.h dlx.h
alu32.mc: alu32.h
mult32.mc: mult32.h
idec.mc: idec.h
regfile.mc: regfile.h
malign.mc: malign.h
pcsv.mc: pcsv.h
rfsv.mc: regfile.h rfsv.h
dlxc.mc: dlx.h cache.h dlxc.h iaccess.pin iaccess.cpa iaccess.pca
cache.mc: cache.h
memory.mc: memory.h iaccess.pin iaccess.cpa iaccess.pca
map.mc: map.h
creg00.mc: creg00.h
bridge.mc: bridge.h
PCI.mc: creg00.h PCI.h PCI.tpl iaccess.pin iaccess.cpa iaccess.pca
PCIb.mc: creg00.h PCIb.h PCI.tpl iaccess.pin iaccess.cpa iaccess.pca
PCIbus.mc: PCIbus.h
system0.mc: dlx.h map.h memory.h system0.h iaccess.pin iaccess.cpa iaccess.pca
system1.mc: bridge.h creg00.h dlxc.h map.h memory.h system1.h iaccess.pin iaccess.cpa iaccess.pca
system2.mc: bridge.h dlxc.h map.h memory.h PCI.h PCIb.h PCIbus.h system2.h iaccess.pin iaccess.cpa iaccess.pca

