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

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

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

EXEOBJS=c_side_pipe.o cNamedPipeIo.o cMpuFactory.o cMpuFactoryEnlarger.o \
	cMpu.o cSh7751.o accessfpga.o
EXENAME=c_side_pipe$(DOTEXE)
PROJNAME=pipesample.mpf

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

CXXFLAGS+=-ggdb -DMPU_PIPE
#CXXFLAGS+=-O2 -DMPU_PIPE

.PHONY : sim launch addrtest

all : $(PROJNAME) $(EXENAME) s

clean :
	-rm -rf *.o *.obj $(EXENAME) s pkg
	-rm -f *.cr.mti transcript *.wlf samplefpga.*

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

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

launch : all
	vsim -gui -do "project open $(PROJNAME); source s" &

s :
	echo 'source ../../tcl/s.tcl' > $@

pkg/mark :
	mkdir -p $(@D)
	touch $@

pkg/%_PKG.vhd : %.vhd pkg/mark
	compo.rb $< > $@

addrtest : samplefpga$(DOTEXE)
	./$<

samplefpga$(DOTEXE) : samplefpga.c samplefpga.h
	$(CC) $(CFLAGS) -DREALWORLD $(INCLUDES) -o $@ $<

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

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

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

# This description overwrites the rule that exist in /etc/makerule.
%.h : %.csv
	accessor.rb -dpih $< > $@

%.c : %.csv
	accessor.rb -dpiht $< > $@

$(EXENAME) : $(EXEOBJS)
	$(CXX) -o $@ $^

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

$(EXEOBJS:.o=.d) : samplefpga.h

-include makefile.depend
