#-------------------------------------------------------------------------------
# GraphBLAS/CUDA/Makefile
#-------------------------------------------------------------------------------

# cuda 10.1 is assumed

SRC = GB*.cu
SRC2 = $(notdir $(wildcard $(SRC)))
OBJ = $(SRC2:.cu=.o)

I = -I. -I../Source -I../Source/Template -I../Include
SO_NAME = libgraphblascuda.a

LIBS = -L/usr/local/cuda/lib64 -lcudadevrt -lcudart

CUDA_OPTS = -O2 --cudart=shared \
        --relocatable-device-code true \
        --std=c++11 -Xcompiler -fPIC

$(SO_NAME): $(OBJ)
	echo $(OBJ)
	ar rv $@ $^

%.o: %.cu
	nvcc -c $(I) $(CUDA_OPTS) -o $@ $< $(LIBS)

config:
	nvidia-smi
	nvcc --version
	@echo " "
	@echo "SO_NAME:   " $(SO_NAME)
	@echo "SO_OPTS:   " $(SO_OPTS)
	@echo "LIBS:      " $(LIBS)
	@echo "CUDA_OPTS: " $(CUDA_OPTS)
	@echo "SRC:       " $(SRC)
	@echo "OBJ:       " $(OBJ)
	@echo "I:         " $(I)
	@echo " "
	gcc  --version
	icc  --version

clean:
	rm -f *.o

distclean: clean
	rm -f *.so

purge: distclean

