CC = gcc

# CUDA toolkit installation path
CUDA_DIR = /usr/local/cuda-7.5

# CUDA toolkit libraries
CUDA_LIB_DIR := $(CUDA_DIR)/lib
ifeq ($(shell uname -m), x86_64)
     ifeq ($(shell if test -d $(CUDA_DIR)/lib64; then echo T; else echo F; fi), T)
     	CUDA_LIB_DIR := $(CUDA_DIR)/lib64
     endif
endif

NVCC = $(CUDA_DIR)/bin/nvcc

# AMD_DIR
#OPENCL_DIR = /if10/kw5na/Packages/AMD-APP-SDK-v2.8-RC-lnx64
#OPENCL_LIB = $(OPENCL_DIR)/lib/x86_64/ -lOpenCL
OPENCL_DIR = /opt/amd/opencl/current
OPENCL_INC = $(OPENCL_DIR)/include/
OPENCL_LIB = $(OPENCL_DIR)/lib -lOpenCL
#ifeq ($(shell uname -m), x86_64)
#     ifeq ($(shell if test -d $(OPENCL_DIR)/lib/x86_64/; then echo T; else echo F; fi), T)
#     	OPENCL_LIB = $(OPENCL_DIR)/lib/x86_64/
#     endif
#endif
#
#

HIP_PATH?= $(wildcard /opt/rocm/hip)
ifeq (,$(HIP_PATH))
	HIP_PATH=../../../..
endif
HIP_EXAMPLES ?=../../..
RODINIA_ROOT ?=$(HIP_EXAMPLES)/rodinia_3.0
include $(HIP_EXAMPLES)/common/hip.prologue.make

# 'make prof=1' enables profiling
ifeq ($(prof),1)
    HIPCC_FLAGS += -DPROFILING
endif

#---
#Automated infrastructure for running tests.
#
#Create run scripts in "run/TESTNAME/run*.cmd" and golden output files in "run/TESTNAME/run*.gold".
#
USECOLORS?=1
ifeq ($(USECOLORS),1)
GREEN=\033[0;32m
RED=\033[0;31m
NC=\033[0m
endif

TESTNAME=$(notdir $(CURDIR))
TESTDIR  = ../../test/$(TESTNAME)
TESTCMDS=$(wildcard $(TESTDIR)/run*.cmd)
TESTOUTS=$(notdir $(TESTCMDS:.cmd=.out))
TESTDIFFS=$(TESTOUTS:.out=.diff)
TESTPERFS=$(TESTOUTS:.out=.perf)
ITERS?=5
NUMBERS:= $(shell seq 2 ${ITERS})
FORCE=FORCE
.PHONY: FORCE

# The steps below are typically included at top of makefile but we want "make" with no arguments to build the TESTNAME target
.DEFAULT_GOAL:=$(TESTNAME)
$(TESTNAME) : $(HIP_DEPS)


%.out :  $(TESTNAME) $(FORCE)
	@echo "executing: $(TESTDIR)/$(@:.out=.cmd)...    " 
	@$(TESTDIR)/$(@:.out=.cmd) > $@

%.diff : FORCE
	@echo -n "executing: $(TESTDIR)/$(@:.diff=.cmd)...    "
	@if [ -f "$(TESTDIR)/$(@:.diff=.check)" ]; then { $(TESTDIR)/$(@:.diff=.cmd) > $(@:.diff=.out) && $(TESTDIR)/$(@:.diff=.check) $(@:.diff=.out) $(TESTDIR)/gold > $@ && echo "  $(GREEN)PASSED!$(NC)" || echo "  $(RED)FAILED!$(NC)"; }; else { touch $@; $(TESTDIR)/$(@:.diff=.cmd) > $(@:.diff=.out) && echo "  $(GREEN)PASSED!$(NC)" || echo "  $(RED)FAILED!$(NC)"; }; fi

%.perf : FORCE
	@echo -n "generating perf data for $(TESTDIR)/$(@:.perf=.cmd) over $(ITERS) iterations...     "
	@/usr/bin/time -a -o $(TESTNAME)-perftest.log -f "$(TESTNAME)-$(@:.perf=.cmd),$(ITERS),%e,%U,%S" bash -c 'for i in {1..$(ITERS)}; do $(TESTDIR)/$(@:.perf=.cmd) >/dev/null 2>&1 ; done'
	@echo "\b\b$(GREEN)DONE!$(NC)"

echo_test_config:
	@echo "testname= $(TESTNAME)"
	@echo "pwd=$(CURDIR)"
	@echo "TESTDIR $(TESTDIR)"
	@echo "cmds= $(TESTCMDS)"
	@echo "outs= $(TESTOUTS)"
	@echo "diffs= $(TESTDIFFS)"
	@echo "HIP_DEPS= $(HIP_DEPS)"
    

# Generate testout files.
runout: $(TESTOUTS)

#Update gold reference inputs.
gold: $(TESTOUTS)
	cp $(TESTOUTS) $(TESTDIR)/gold

#Run tests.
test: $(TESTNAME) $(TESTDIFFS)

#Run performance measurements
perftest: $(TESTNAME) $(TESTDIFFS) $(TESTPERFS)

