
#HEXAGON_TOOLS_INSTALL_DIR ?= /local/tools/hexagon/7.4.01
#HEXAGON_TOOLS_INSTALL_DIR ?= /local/tools/hexagon/8.0.05
HEXAGON_TOOLS_INSTALL_DIR ?= /local/tools/hexagon/8.1.alpha4




HEXAGON_TOOLS_EXAMPLES = $(HEXAGON_TOOLS_INSTALL_DIR)/Examples
HEXAGON_LIBNATIVE_INC = $(HEXAGON_TOOLS_INSTALL_DIR)/Tools/libnative/include
HEXAGON_LIBNATIVE_LIB = $(HEXAGON_TOOLS_INSTALL_DIR)/Tools/libnative/lib
HEXAGON_BIN_DIR = $(HEXAGON_TOOLS_INSTALL_DIR)/Tools/bin
HEXAGON_SIM = $(HEXAGON_BIN_DIR)/hexagon-sim 

#
# should work for v60 or v62 here
#
HEXV=v62
CPP_PROC=-m$(HEXV)
ASM_PROC=-mcpu=hexagon$(HEXV)

HEX_UTILS_H ?= ../../../../../hexagon/include
SQUISH_QDSP ?= ../../../../../hexagon/util/squish_qdsp_asm.py

HEX_AS ?= $(HEXAGON_BIN_DIR)/hexagon-llvm-mc
HEX_CPP ?= $(HEXAGON_BIN_DIR)/hexagon-clang
HEX_CPPLD ?= $(HEXAGON_BIN_DIR)/hexagon-clang++ $(CPP_PROC)
HEX_CPP_OPTS = -O2 -fno-cxx-exceptions -DNDEBUG=1 -fno-exceptions -fno-use-cxa-atexit -fno-rtti -mhvx $(HH)

HH = -I .. -I$(HEX_UTILS_H)



GPP ?= g++
GPP_LN_OPTS = -O2 -Wall -Wno-unused-function $(HH) -I$(HEXAGON_LIBNATIVE_INC)
GPPLD ?= g++
GPPLD_OPTS = 

runtest: test_rectangle_copy.HVX.out
	$(HEXAGON_SIM) $<

runtest2: test_rectangle_copy.HVX2.out
	$(HEXAGON_SIM) $<

test_rectangle_copy.HVX.out: test_rectangle_copy.HVX.o rectangle_copy.HVX.o 
	$(HEX_CPPLD) -o $@ $(LINKFLAGS) test_rectangle_copy.HVX.o rectangle_copy.HVX.o  -lhexagon

test_rectangle_copy.HVX2.out: test_rectangle_copy.HVX2.o rectangle_copy.HVX2.o 
	$(HEX_CPPLD) -o $@ $(LINKFLAGS) test_rectangle_copy.HVX2.o rectangle_copy.HVX2.o  -lhexagon

test_rectangle_copy.HVX.o:  test_rectangle_copy.c
	$(HEX_CPP) -o $@ -c -I$(HEXAGON_TOOLS_EXAMPLES)/HVX/common/include $(CPP_PROC) $(HEX_CPP_OPTS) $<

test_rectangle_copy.HVX2.o:  test_rectangle_copy.c
	$(HEX_CPP) -o $@ -c -mhvx-double -I$(HEXAGON_TOOLS_EXAMPLES)/HVX/common/include $(CPP_PROC) $(HEX_CPP_OPTS) $<

rectangle_copy.HVX.o: ../rectangle_copy.S
	$(HEX_CPP) -o $@ -c $(CPP_PROC) $(HEX_CPP_OPTS) $<

rectangle_copy.HVX2.o: ../rectangle_copy.S
	$(HEX_CPP) -o $@ -c -mhvx-double $(CPP_PROC) $(HEX_CPP_OPTS) $<


runtest_tile: test_tile_store.HVX.out
	$(HEXAGON_SIM) $<

runtest_tile2: test_tile_store.HVX2.out
	$(HEXAGON_SIM) $<

test_tile_store.HVX.out: test_tile_store.HVX.o tile_store.HVX.o 
	$(HEX_CPPLD) -o $@ $(LINKFLAGS) test_tile_store.HVX.o tile_store.HVX.o  -lhexagon

test_tile_store.HVX2.out: test_tile_store.HVX2.o tile_store.HVX2.o 
	$(HEX_CPPLD) -o $@ $(LINKFLAGS) test_tile_store.HVX2.o tile_store.HVX2.o -lhexagon

test_tile_store.HVX.o:  test_tile_store.cpp ../tile_store.h
	$(HEX_CPP) -o $@ -c -I$(HEXAGON_TOOLS_EXAMPLES)/HVX/common/include  $(CPP_PROC) $(HEX_CPP_OPTS) $<

test_tile_store.HVX2.o:  test_tile_store.cpp ../tile_store.h
	$(HEX_CPP) -o $@ -c -mhvx-double -I$(HEXAGON_TOOLS_EXAMPLES)/HVX/common/include  $(CPP_PROC) $(HEX_CPP_OPTS) $<

tile_store.HVX.o: ../tile_store.S
	$(HEX_CPP) -o $@ -c $(CPP_PROC) $(HEX_CPP_OPTS) $<

tile_store.HVX2.o: ../tile_store.S
	$(HEX_CPP) -o $@ -c -mhvx-double $(CPP_PROC) $(HEX_CPP_OPTS) $<


