include ../env.mk

EXE_SCASS = system_systemcass.x
EXE_SC    = system_systemc.x
EXE       = ${EXE_SCASS}
OBJECTS   = $(EXE:.x=.o)
LINKS     = $(OBJECTS:.o=.cpp)

RESULTS   = systemcass_dynamiclink_10.txt systemcass_m_nodynamiclink_10.txt systemcass_a_nodynamiclink_10.txt systemcass_p_nodynamiclink_10.txt

.SECONDARY:

main : $(EXE) 

test : ${RESULTS}
	diff systemcass_dynamiclink_10.txt systemcass_m_nodynamiclink_10.txt || eval ${failcom}
	diff systemcass_a_nodynamiclink_10.txt systemcass_p_nodynamiclink_10.txt || eval ${failcom}
	diff systemcass_dynamiclink_10.txt systemcass_a_nodynamiclink_10.txt || eval ${failcom}
	@echo Test OK.

systemcass_a_nodynamiclink_10.txt : system_systemcass.x
	((./system_systemcass.x --nobanner --a --nodynamiclink 10 ) | tail -n 5  > systemcass_a_nodynamiclink_10.txt) || eval ${failcom}

systemcass_p_nodynamiclink_10.txt : system_systemcass.x
	((./system_systemcass.x --nobanner --p --nodynamiclink 10 ) | tail -n 5 > systemcass_p_nodynamiclink_10.txt) || eval ${failcom}

systemcass_m_nodynamiclink_10.txt : system_systemcass.x
	((./system_systemcass.x --nobanner --m --nodynamiclink 10 ) | tail -n 5  > systemcass_m_nodynamiclink_10.txt) || eval ${failcom}

systemcass_dynamiclink_10.txt : system_systemcass.x
	((./system_systemcass.x --nobanner 10 ) | tail -n 5 > systemcass_dynamiclink_10.txt) || eval ${failcom}

%.png : %.dot
	dot -Tpng -o $*.png $*.dot

%_systemc.x : %_systemc.o $(SYSTEMC_LIB)
	$(CXX) -o $@ $*_systemc.o $(LFLAGS_SYSTEMC) 2>&1 | $(CPPFILT)

%_systemcass.x : %_systemcass.o  $(SYSTEMCASS_LIB)
	$(CXX) -o $@ $*_systemcass.o $(LFLAGS_SYSTEMCASS) 2>&1 | $(CPPFILT)

-include Makefile.deps

%_systemc.cpp : %.cpp 
	ln -s $*.cpp $*_systemc.cpp

%_systemcass.cpp : %.cpp 
	ln -s $*.cpp $*_systemcass.cpp

%_systemc.o : %_systemc.cpp 
	$(CXX) $(CFLAGS_SYSTEMC) -MM $*_systemc.cpp >> Makefile.deps
	$(CXX) $(CFLAGS_SYSTEMC) -c $*_systemc.cpp -o $*_systemc.o

%_systemcass.o : %_systemcass.cpp
	$(CXX) $(CFLAGS_SYSTEMCASS) -MM $*_systemcass.cpp >> Makefile.deps
	$(CXX) $(CFLAGS_SYSTEMCASS) -c $*_systemcass.cpp -o $*_systemcass.o

clean :
	-echo > Makefile.deps
	-rm -f *.o gmon.out
	-rm -f signal_order.txt module_order.dot signal_graph.dot port_graph.dot
	-rm -f module_graph.dot process_order.dot
	-rm -f $(EXE) $(OBJECTS) 
	-for i in $(LINKS) ; do unlink $$i ; done 2> /dev/null
	-rm -f core*
	-rm -rf generated_by_systemcass
	-rm -rf tracesystem_systemcass.x.vcd tracesystem_systemc.x.vcd
	-rm -rf ${RESULTS}
	
