# makefile for ModelSIM
include $(NOODLYBOX_HOME)/etc/makerule

MODELSIMLIB:=$(dir $(shell which vsim))
MODELSIM=$(MODELSIMLIB)..

VPATH=$(NOODLYBOX_HOME)/model $(NOODLYBOX_HOME)/c ../c

DPISRCS=MPU.v
DLLOBJS=c_side.o cMpuFactory.o cMpuFactoryEnlarger.o \
	cMpu.o cSh7751.o accessfpga.o
DLLNAME=c_side.dll
PROJNAME=dpisample.mpf

PSEUDO_H_FOR_MAKEDEPEND=MPU_dpi.h samplefpga.h

INCLUDES=-I$(MODELSIM)/include -I$(NOODLYBOX_HOME)/c -I.

.PHONY : sim pseudo_h

all : $(PROJNAME) $(DLLNAME)

clean :
	-rm -rf *_dpi.h *.o *.obj $(PSEUDO_H_FOR_MAKEDEPEND) $(DLLNAME)
	-rm -f *.cr.mti transcript *.wlf

depend : $(DLLOBJS:.o=.d)
	cat $^ > makefile.depend
	rm $^ $(PSEUDO_H_FOR_MAKEDEPEND)

sim : all
	vsim -gui -do "project open $(PROJNAME); source ../s; do ../sim.tcl"

makefile : ../msim_makefile
	cd .. && $(MAKE) $(notdir $(PWD))/$@

%.o : %.cpp
	$(CXX) $(CXXFLAGS) $(INCLUDES) -c $<

%.d : %.cpp
	$(CXX) $(CXXFLAGS) $(INCLUDES) -MM $< \
	| sed -e s,' [^ ]*svdpi\.h',, -e s,' [^ ]*\.cpp',, > $@

%_dpi.h : %.v
	vlog -nologo -sv -dpiheader $@ $<
	touch $@

%.h : %.csv
	accessor.rb -dpih $< > $@

%_dpi.obj : %_dpi.h
	vsim -quiet -dpiexportobj $(basename $@) $(subst _dpi.h,,$<)

$(DLLNAME) : $(DLLOBJS) $(DPISRCS:.v=_dpi.obj)
	$(CXX) -shared -Bsymbolic -o $@ $^ -L $(MODELSIMLIB) -lmtipli

$(PROJNAME) : $(NOODLYBOX_HOME)/sample/rtl/MAINDCM.v
	vsim -gui -do "set argv [list msim $(HDL) $(basename $@)]; source ../create_project.tcl"

pseudo_h :
	touch $(PSEUDO_H_FOR_MAKEDEPEND)

$(DLLOBJS:.o=.d) : pseudo_h

-include makefile.depend
