
####################### SETTINGS
VERILATOR	= /usr/local/share/verilator
SYSTEMPERL	= /home/ohsawa/SystemPerl-1.310
SYSTEMC		= /usr/local/systemc-2.2
SYSTEMC_LIB	= $(SYSTEMC)/lib-linux

####################### Verilog srcs
RTL		= ../rtl
TOP		= PUZZLE_BOX
VSRC		= $(RTL)/PB_LAS.v \
		  $(RTL)/PB_ESTK.v \
		  $(RTL)/PB_FPM.v \
		  $(RTL)/PB_SLAVE.v

####################### SystemC srcs
OBJS		= trans.o stim.o tb.o 

####################### Compile options
#CXXFLAGS	= -Wall -O2 -DDEBUG -DDEBUG_VERBOSE
CXXFLAGS	= -Wall -O2 -DDEBUG -I../conf
DUMPFLAGS	= -DVM_TRACE -I$(SYSTEMPERL)/src



#####################################################
##### make targets: dot't touch 'em all.
VERILATED	= $(VERILATOR)/include/verilated.cpp
TOP_AR		= obj_dir/V$(TOP)__ALL.a
TOP_H		= obj_dir/V$(TOP).h

a.out:	$(TOP_AR) $(OBJS) verilated.o SpTraceVcdC.o
	g++ $(CXXFLAGS) -L$(SYSTEMC_LIB) $(OBJS) $(TOP_AR) verilated.o SpTraceVcdC.o -lsystemc

$(TOP_H):	$(RTL)/$(TOP).v $(VSRC)
	export SYSTEMPERL=$(SYSTEMPERL); verilator -sc --trace -I$(RTL) $(RTL)/$(TOP).v $(VSRC)

$(TOP_AR):	$(TOP_H)
	cd obj_dir; make USER_CPPFLAGS="$(CXXFLAGS)" -f V$(TOP).mk; cd ..

verilated.o:
	g++ $(CXXFLAGS) -I$(SYSTEMC)/include -c $(VERILATED)

SpTraceVcdC.o:
	g++ $(CXXFLAGS) -I$(SYSTEMC)/include -I$(SYSTEMPERL)/src -c $(SYSTEMPERL)/src/SpTraceVcdC.cpp

.cc.o:
	g++ $(CXXFLAGS) $(DUMPFLAGS) -I$(SYSTEMC)/include -I$(VERILATOR)/include -I./obj_dir -c $<

.PHONY:	clean
clean:
	rm -rf *.o obj_dir a.out *.vcd
