1#------------------------------------------------------------------------------- 2# GraphBLAS/CUDA/Makefile 3#------------------------------------------------------------------------------- 4 5# cuda 10.1+ is assumed 6 7all: library 8 9GXX ?= g++ 10DOXYGEN ?= doxygen 11CXXFLAGS ?= -O3 -Wall -g -fmessage-length=80 12 13CXX11 ?= 1 14 15CUDA_DIR ?= /usr/local/cuda 16 17CXXFLAGS += -pthread 18 19ifeq ($(CXX11),1) 20 CXXFLAGS += -std=c++14 21endif 22 23EMBED_BEGIN = -rdynamic -Wl,-b,binary, 24EMBED_END = ,-b,default 25 26UNAME_S := $(shell uname -s) 27ifeq ($(UNAME_S),Linux) 28 CXXFLAGS += -D LINUX 29 CUDA_LIB_DIR = $(CUDA_DIR)/lib64 30else ifeq ($(UNAME_S),Darwin) 31 CUDA_LIB_DIR = $(CUDA_DIR)/lib 32endif 33 34INC += -I$(CUDA_DIR)/include 35LIB += -ldl -L$(CUDA_LIB_DIR) -lcuda -lcudart -lnvrtc 36 37 38GCC ?= gcc 39 40SRC = GB*.cu 41SRC2 = $(notdir $(wildcard $(SRC))) 42OBJ = $(SRC2:.cu=.o) 43cSRC = $(wildcard *.c) 44cOBJ = $(cSRC:.c=.o) 45cppSRC = $(wildcard *.cpp) 46cppOBJ = $(cppSRC:.cpp=.o) 47 48I = -I. -I../Source -I../Source/Template -I../Include -Irmm/rmm/include/ -Irmm/thirdparty/spdlog/include -Irmm/include/thirdparty/cnmem/include 49SO_NAME = libgraphblascuda.so 50SO_OPTS = --shared \ 51 -Xlinker -soname \ 52 -Xlinker $(SO_NAME) 53 54LIBS = -L/usr/local/cuda/lib64 -lcudadevrt -lcudart -lrmm -lspdlog -lcnmem 55 56CUDA_OPTS = -O2 --cudart=shared --gpu-architecture=compute_75 \ 57 --relocatable-device-code true \ 58 --std=c++14 -Xcompiler -fPIC 59 60library: $(SO_NAME) 61 62HEADERS = jitify.hpp 63 64TEMPLATES := $(wildcard templates/*.cu) 65 66JIT_TEMP := $(patsubst %.cu, %.cu.jit, $(TEMPLATES)) 67 68%.cu: %.cutmp 69 cp $? $@ 70 71%.cu.jit: %.cu 72 ./stringify $? > $@ 73 74stringify: stringify.cpp 75 $(GXX) -o $@ $< -O3 -Wall 76 77 78doc: jitify.hpp Doxyfile 79 $(DOXYGEN) Doxyfile 80.PHONY: doc 81 82test: $(cOBJ) 83 @echo $(cOBJ) 84 85$(cppOBJ): %.o: %.cpp 86 $(GXX) $(I) -o $@ -c $< -O2 -Wall 87 88$(cOBJ): %.o: %.c GB_stringify.h 89 $(GCC) $(I) -o $@ -c $< -O2 -Wall 90 91$(SO_NAME): $(OBJ) $(cOBJ) $(cppOBJ) $(JIT_TEMP) GB_AxB_dot3_cuda.o 92 echo $(OBJ) 93 nvcc $(SO_OPTS) $(LIBS) $(OBJ) $(cOBJ) -o $@ 94 95GB_AxB_dot3_cuda.o: $(JIT_TEMP) matrix.h 96%.o: %.cu 97 nvcc -c $(I) $(CUDA_OPTS) -o $@ $< $(LIBS) 98 99 100config: 101 nvidia-smi 102 nvcc --version 103 @echo " " 104 @echo "SO_NAME: " $(SO_NAME) 105 @echo "SO_OPTS: " $(SO_OPTS) 106 @echo "LIBS: " $(LIBS) 107 @echo "CUDA_OPTS: " $(CUDA_OPTS) 108 @echo "SRC: " $(SRC) 109 @echo "OBJ: " $(OBJ) 110 @echo "I: " $(I) 111 @echo " " 112 gcc --version 113 icc --version 114 115clean: 116 rm -f *.o 117 rm -f stringify 118.PHONY: clean 119 120distclean: clean 121 rm -f *.so *.a 122 123purge: distclean 124 125################################################################################ 126 127 128EMBED_BEGIN = -rdynamic -Wl,-b,binary, 129EMBED_END = ,-b,default 130 131UNAME_S := $(shell uname -s) 132ifeq ($(UNAME_S),Linux) 133 CXXFLAGS += -D LINUX 134 CUDA_LIB_DIR = $(CUDA_DIR)/lib64 135else ifeq ($(UNAME_S),Darwin) 136 CUDA_LIB_DIR = $(CUDA_DIR)/lib 137endif 138 139 140 141 142