LAPACK_DIR = /opt/intel/mkl/lib/intel64
LAPACK_LIB = -L$(LAPACK_DIR) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread

CUDA_DIR = /usr/local/cuda
CUDA_LIB = -L$(CUDA_DIR)/lib64 -lcublas -lcudart

NVCC = nvcc
NVCC_FLAGS = -O3 -Xptxas -v -m 64 -arch compute_20

CXX = icc
CXX_FLAGS = -openmp -Wall -O3 -I$(CUDA_DIR)/include

FC = ifort
FC_FLAGS = -openmp -O3

all: openmp gpu

openmp: omp_hello omp_workshare1 omp_dgemm omp_dgemm_fortran

gpu: gpu_multd gpu_dgemm

%: %.o
	$(CXX) $(CUDA_LIB) $(LAPACK_LIB) -lrt $^ -o $@

omp_dgemm_fortran: omp_dgemm_fortran.o
	$(FC) $(LAPACK_LIB) $^ -o $@

%.o: 	%.c++
	$(CXX) $(CXX_FLAGS) -c $<

%.o: 	%.f90
	$(FC) $(FC_FLAGS) -c $<

%.o:    %.cu
	$(NVCC) $(NVCC_FLAGS) -c $<

clean:
	rm -f omp_hello omp_workshare1 omp_dgemm omp_dgemm_fortran gpu_multd gpu_dgemm *.o
