# generated by rfsmmake -lib /Users/jserot/Dev/ml/rfsm/working/examples/../lib -with-test-targets .//main.pro

LIBDIR=/Users/jserot/Dev/ml/rfsm/working/examples/../lib

include /Users/jserot/Dev/ml/rfsm/working/examples/../lib/etc/platform


SRCS=txd.fsm main.fsm
DOT_OPTS=
SIM_OPTS=
SYSTEMC_OPTS=-sc_time_unit "SC_NS" -stop_time 550 -sc_trace
VHDL_OPTS=-vhdl_time_unit "ns" -vhdl_numeric_std -stop_time 550

.PHONY: dot sim ctask systemc vhdl clean clobber test

ifndef (MAIN)
    MAIN=main
endif

all: dot sim ctask systemc vhdl

dot: dot.run dot.view

dot.run:
	$(RFSMC) -dot -target_dir ./dot $(DOT_OPTS) $(SRCS)

dot.view:
	@$(eval files=`cat ./rfsm.output`)
	@for f in $(files); do \
		if [[ $$f = *.dot ]]; then \
			$(DOTVIEWER) $$f; \
		fi; \
	done

sim: sim.run sim.view

sim.run:
	$(RFSMC) $(SIM_OPTS) -sim -target_dir ./sim $(SRCS)

sim.view:
	$(VCDVIEWER) ./sim/$(MAIN).vcd ./sim/$(MAIN).gtkw > /tmp/gtkwave.log 2>&1; echo $$?

ctask: ctask.code

ctask.code:
	$(RFSMC) -ctask -target_dir ./ctask $(CTASK_OPTS) $(SRCS)

ctask.view:
	@$(eval files=`cat ./rfsm.output`)
	@for f in $(files); do \
		if [[ $$f = *.c ]]; then \
			$(TXTVIEWER) $$f; \
		fi; \
	done

systemc: systemc.run systemc.view

systemc.code:
	$(RFSMC) -systemc -target_dir ./systemc -lib $(LIBDIR) $(SYSTEMC_OPTS) $(SRCS)

systemc.run: systemc.code
	if [ -d ./systemc ]; then cd ./systemc; make; make run; fi

systemc.view:
	if [ -d ./systemc ]; then cd ./systemc; make view; fi

vhdl: vhdl.run vhdl.view

vhdl.code:
	$(RFSMC) -vhdl -target_dir ./vhdl -lib $(LIBDIR) $(VHDL_OPTS) $(SRCS)

vhdl.run: vhdl.code
	if [ -d ./vhdl ]; then cd ./vhdl; make; make run; fi

vhdl.view: 
	if [ -d ./vhdl ]; then cd ./vhdl; make view; fi

view:
	if [ -d ./vhdl ]; then make view3; else make view2; fi

view2:
	make sim.run
	make systemc.run
	$(VCDVIEWER) -f ./sim/$(TB).vcd -a ./sim/$(TB).gtkw > /tmp/gtkwave.log 2>&1 &
	(cd ./systemc; make view) 

view3:
	make sim.run
	make systemc.run
	make vhdl.run
	$(VCDVIEWER) -f ./sim/$(TB).vcd -a ./sim/$(TB).gtkw > /tmp/gtkwave.log 2>&1 &
	(cd ./systemc; make view) &
	(cd ./vhdl; make view) 

clean:
	\rm -f dot/*
	\rm -f ctask/*
	\rm -f systemc/{*.o,tb,core,*.vcd,*.ghw}
	\rm -f vhdl/{work*.cf,*.o,tb,*.vcd,*.ghw}
	\rm -f sim/*.vcd
	\rm -f *_deps.dot
	\rm -f *.output *.vcd

clobber: clean
	\rm -f systemc/{*.cpp,*.h,Makefile,*~}
	\rm -f vhdl/{*.vhd,Makefile,*~}
	\rm -f *~

all.test: dot.test sim.test ctask.test systemc.test vhdl.test

dot.test: dot.run

sim.test: sim.run

ctask.test: ctask.code

systemc.test: systemc.run

vhdl.test:
	if [ -d ./vhdl ]; then make vhdl.run; fi

test:
	if [ -d ./vhdl ]; then make test3; else make test2; fi

test2:
	make dot.run
	make sim.run
	make systemc.run

test3:
	make dot.run
	make sim.run
	make systemc.run
	make vhdl.run



