# generated by rfsmmake -lib ../../../../lib main.pro

LIBDIR=../../../../lib

include ../../../../lib/etc/platform


SRCS=emetteur.fsm recepteur.fsm interm.fsm main.fsm
DOT_OPTS=-dot_actions_nl 
SIM_OPTS=
SYSTEMC_OPTS=-sc_time_unit "SC_NS" -stop_time 800 -sc_trace
VHDL_OPTS=-vhdl_time_unit "ns" -vhdl_numeric_std -stop_time 800 -vhdl_trace

.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 *~
