include common/make.config

.PHONY: OPENCL_BENCHMARK_ALL OPENCL_BENCHMAR_CPU_AND_GPU OPENCL_BENCHMARK_CPU OPENCL_BENCHMARK_GPU OPENCL_BENCHMARK_GPU_PRIMARY OPENCL_BENCHMARK_GPU_SECONDARY OPENCL_BENCHMARK_ALL_BATCH CREATE_CHARTS
RODINIA_BASE_DIR := $(shell pwd)

OPENCL_BIN_DIR := $(RODINIA_BASE_DIR)/bin/linux/opencl

OCL_DIRS  := backprop bfs cfd dwt2d gaussian hybridsort hotspot kmeans lavaMD leukocyte lud nn nw srad streamcluster particlefilter pathfinder

BENCH_DIRS  := backprop bfs cfd dwt2d gaussian hotspot hybridsort kmeans lavaMD leukocyte/OpenCL lud/ocl nn nw particlefilter pathfinder srad streamcluster

all: OPENCL

OPENCL:
	cd opencl/backprop;			make;	cp backprop $(OPENCL_BIN_DIR)
	cd opencl/bfs;				make;	cp bfs	    $(OPENCL_BIN_DIR)
	cd opencl/cfd;				make;	cp euler3d	$(OPENCL_BIN_DIR)
	cd opencl/hotspot;			make;	cp hotspot	$(OPENCL_BIN_DIR)
	cd opencl/kmeans;			make;	cp kmeans	$(OPENCL_BIN_DIR)
	cd opencl/lavaMD;			make;	cp lavaMD	$(OPENCL_BIN_DIR)
	cd opencl/leukocyte;		make;	cp OpenCL/leukocyte	$(OPENCL_BIN_DIR)
	cd opencl/lud/ocl;			make;	cp lud		$(OPENCL_BIN_DIR)
	cd opencl/nw;				make;	cp nw		$(OPENCL_BIN_DIR)
	cd opencl/srad;				make; 	cp srad		$(OPENCL_BIN_DIR)
	cd opencl/streamcluster;	make;	cp streamcluster	$(OPENCL_BIN_DIR)
	cd opencl/pathfinder;		make;	cp pathfinder	$(OPENCL_BIN_DIR)
	cd opencl/particlefilter;	make;	cp OCL_particlefilter_naive OCL_particlefilter_single OCL_particlefilter_double $(OPENCL_BIN_DIR)
	cd opencl/gaussian;			make;	cp gaussian	$(OPENCL_BIN_DIR)
	cd opencl/nn;				make;	cp nn	$(OPENCL_BIN_DIR)
	cd opencl/hybridsort;       make;   cp hybridsort $(OPENCL_BIN_DIR)
	cd opencl/dwt2d;            make;   cp dwt2d  $(OPENCL_BIN_DIR)

OPENCL_BENCHMARK_ALL: OPENCL_BENCHMARK_CPU OPENCL_BENCHMARK_GPU_PRIMARY OPENCL_BENCHMARK_GPU_SECONDARY

OPENCL_BENCHMARK_ALL_BATCH:
	for i in 1 2 3 4 5 6 7 8 9 10; do make OPENCL_BENCHMARK_ALL; done;

OPENCL_BENCHMAR_CPU_AND_GPU: OPENCL_BENCHMARK_CPU OPENCL_BENCHMARK_GPU

OPENCL_BENCHMARK_CPU:
	for dir in $(BENCH_DIRS) ; do ./time-and-save.sh opencl/$$dir cpu ; done

OPENCL_BENCHMARK_GPU:
	for dir in $(BENCH_DIRS) ; do ./time-and-save.sh opencl/$$dir gpu ; done

OPENCL_BENCHMARK_GPU_PRIMARY:
	for dir in $(BENCH_DIRS) ; do ./time-and-save.sh opencl/$$dir gpu-primary ; done

OPENCL_BENCHMARK_GPU_SECONDARY:
	for dir in $(BENCH_DIRS) ; do ./time-and-save.sh opencl/$$dir gpu-secondary ; done

CREATE_CHARTS:
	cd plot; ./create-charts.sh

clean: OCL_clean OPENCL_BENCHMARK_clean

OCL_clean:
	cd $(OPENCL_BIN_DIR); rm -f *
	for dir in $(OCL_DIRS) ; do cd opencl/$$dir ; make clean ; cd ../.. ; done

OPENCL_BENCHMARK_clean:
	rm -r results
