#
# Kiwi Scientific Acceleration - Noc16 demo
#

KDISTRO    ?=$(HPRLS)/kiwipro/kiwic/distro
KIWIDLL ?=$(KDISTRO)/support/Kiwi.dll
CV_INT_ARITH   ?=$(KDISTRO)/lib/hpr_ipblocks/cvip0/cvgates.v
CV_FP_ARITH    ?=$(KDISTRO)/lib/hpr_ipblocks/cvip0/cv_fparith.v
KIWIFS            =$(KDISTRO)support/filesystem/kiwifs_bev.v
KIWI_LARGERAMS    =$(KDISTRO)support/rams/generic_large_kiwi_rams.v
VERILATOR_ROOT ?=/usr/share/verilator

INCDIRS=
ANAME=Knoc16Test
LLEVEL=20

# CSharp Compiler
CSC     ?=mcs

KIWIC  ?=$(KDISTRO)/bin/kiwic \
	-give-backtrace \
        -res2-loadstore-port-count=0 \
	-vnl-resets=synchronous   \
	-vnl-roundtrip=disable \
	-kiwic-cil-dump=combined \
	-kiwic-kcode-dump=enable \
	-bevelab-loglevel=20 \
	-kiwife-gtrace-loglevel=$(LLEVEL) \
	-kiwife-firstpass-loglevel=$(LLEVEL) \
	-bevelab-default-pause-mode=hard \
	-bevelab-soft-pause-threshold=30 \
	-vnl-rootmodname=DUT  \

# -diosim-tl=16 # : higher for more visibility. 
# -conerefine-loglevel=0
# -repack-to-roms=enable
#	-bevelab-ubudget=1000 \
#     -firstpass-loglevel=0 -gtrace-loglevel=0 \
#     -kiwic-register-colours=1 
#  -restructure2=disable \
#  -vnl-ifshare=none 
#  -verboselevel=10 

SNAME1=KiwiFileSystemStubs3
SNAME2=Noc16Station
SNAME3=spare3
SNAME4=spare4

all:   $(ANAME).v ll_run_isim

# mono_run

# ll_run 
# ll_run2  
# mono_run

kill:
#	rm -f kmeans.v

$(ANAME).exe:$(ANAME).cs  $(SNAME1).dll $(SNAME2).dll #  $(SNAME3).dll # $(SNAME4).dll
	$(CSC) $(ANAME).cs  /r:$(KIWIDLL) # /r:$(SNAME1).dll  /r:$(SNAME2).dll # /r:$(SNAME3).dll /r:$(SNAME4).dll

mono_run:$(ANAME).exe
	MONO_PATH=$(HPRLS)/kiwipro/kiwic/distro/support:.. time mono  $(ANAME).exe | tee goldspool


hl_run:$(ANAME).exe
	$(KIWIC)  -sim 20000  -repack=disable -conerefine=disable -bevelab=disable  -verilog-gen=disable $(ANAME).exe 


$(ANAME).v:$(ANAME).exe $(SNAME1).dll $(SNAME2).dll # $(SNAME4).dll
	$(KIWIC) $(ANAME).exe $(SNAME1).dll  $(SNAME2).dll # $(SNAME3).dll # $(SNAME4).dll -vnl=$(ANAME).v -ip-incdir=$(INCDIRS)  	
	cp $(ANAME).v ~/Dropbox/out


#------------------------------------------------
# Have you not heard of Makefile rules?
$(SNAME1).dll:$(SNAME1).cs $(SNAME2).dll
	$(CSC) $(SNAME1).cs  /target:library /r:$(KIWIDLL) /r:$(SNAME2).dll

$(SNAME2).dll:$(SNAME2).cs
	$(CSC) $(SNAME2).cs  /target:library /r:$(KIWIDLL) # /r:$(SNAME3).dll

$(SNAME3).dll:$(SNAME3).cs
	$(CSC) $(SNAME3).cs  /target:library /r:$(KIWIDLL)


#------------------------------------------------
server2:

	$(CSC) $(SNAME2).cs  /target:library /r:$(KIWIDLL)
	$(KIWIC)  $(SNAME2).dll "-root=JoyStickUnit;JoyStickUnit.ReadStick" -obj-dir-name=. -log-dir-name=obj_d.JoyStickUnit  -res2-loadstore-port-count=0 -vnl-resets=synchronous -vnl JoyStickUnit.v 
#------------------------------------------------
server3:

	$(CSC) $(SNAME3).cs  /target:library /r:$(KIWIDLL)
	$(KIWIC)  $(SNAME3).dll "-root=DuplexInterFPGALink;DuplexInterFPGALink.Write64;DuplexInterFPGALink.Read64;DuplexInterFPGALink.LinkStatus" -obj-dir-name=. -log-dir-name=obj_d.DuplexInterFPGALink  -res2-loadstore-port-count=0 -vnl-resets=synchronous -vnl DuplexInterFPGALink.v 


#------------------------------------------------
# spare
$(SNAME4).dll:$(SNAME4).cs $(SNAME1).dll
	$(CSC) /target:library $(SNAME4).cs /r:$(KIWIDLL) /r:$(SNAME1).dll



#------------------------------------------------
# RTLSIM Icarus Run
KIWIFS_BEV=$(HPRLS)/kiwipro/kiwi/filesystem/kiwifs_bev.v

ll_run_isim:$(ANAME).v
	iverilog $(ANAME).v $(CV_INT_ARITH)  $(CV_FP_ARITH)  Knoc16HostModel.v  $(KIWIFS_BEV) vsys.v
	ulimit -t 3 ;	./a.out| tee icarus.spool
	cp vcd.vcd ~/Dropbox

# $(SNAME1).v $(SNAME2).v

diff:
	diff goldspool icarus.spool

#------------------------------------------------
# RTLSIM Verilator Run
ll_run_verilator:vrun
	ulimit -t10; time ./vrun
	tail -8 KiwiC.rpt

vrun:verilated/VVERI_SIMSYS.cpp veriltop-kmeans.cpp vsys.v
	g++ -o vrun -g -O2 -Iverilated -I$(VERILATOR_ROOT)/include veriltop-kmeans.cpp verilated/VVERI_SIMSYS.cpp $(VERILATOR_ROOT)/include/verilated.cpp verilated/VVERI_SIMSYS__Syms.cpp

verilated/VVERI_SIMSYS.cpp:$(ANAME).v veril_sys.v
	verilator --Mdir verilated -Wno-fatal -cc --top-module VERI_SIMSYS $(ANAME).v veril_sys.v $(CV_INT_ARITH) $(CV_FP_ARITH) $(SNAME1).v $(SNAME2).v


#------------------------------------------------
# make these links once please - should be automated.
links:
	ln -s $(KIWIDLL)

#---
dot:
	dot -Tpng < controlflow_combined.dot > ~/Dropbox/a.png


zip:
	zip kmeans.zip *.cs Makefile *cpp *v *h *xml

# eof
