1#------------------------------------------------------------------------------- 2# GraphBLAS/CUDA/Makefile 3#------------------------------------------------------------------------------- 4 5# cuda 10.1+ is assumed 6 7all: cudaTest 8 9 10LIBS = -L/usr/local/cuda/lib64 -L/usr/local/cuda/lib64/stubs -lpthreads -lcudadevrt -lcudart -lnvrtc 11INC += -I$(CUDA_DIR)/include -I../ -I../../Source -I../../Include -I../../Source/Template -I$(TEMPLATE_DIR) -Igoogletest/include 12 13CUDA_OPTS = -O2 --cudart=shared --gpu-architecture=compute_75\ 14 --relocatable-device-code true --device-c\ 15 --std=c++11 -Xcompiler -fPIC 16 17 18%.o: %.cu 19 nvcc -c $(I) $(CUDA_OPTS) $(INC) -o $@ $< 20 21config: 22 nvidia-smi 23 nvcc --version 24 @echo " " 25 @echo "SO_NAME: " $(SO_NAME) 26 @echo "SO_OPTS: " $(SO_OPTS) 27 @echo "LIBS: " $(LIBS) 28 @echo "CUDA_OPTS: " $(CUDA_OPTS) 29 @echo "SRC: " $(SRC) 30 @echo "OBJ: " $(OBJ) 31 @echo "I: " $(I) 32 @echo " " 33 gcc --version 34 icc --version 35 36clean: 37 rm -f *.o 38 rm -f stringify 39 rm -f cudaTest 40 rm -f testJit 41.PHONY: clean 42 43distclean: clean 44 rm -f *.so *.a 45 46purge: distclean 47 48################################################################################ 49 50GXX ?= g++ 51GCC ?= gcc 52DOXYGEN ?= doxygen 53CXXFLAGS ?= -O3 -Wall -g -fmessage-length=80 54CFLAGS ?= -O2 -g -std=c11 55 56CXX11 ?= 1 57 58CUDA_DIR ?= /usr/local/cuda 59 60CXXFLAGS += -pthread 61 62ifeq ($(CXX11),1) 63 CXXFLAGS += -std=c++14 64endif 65 66EMBED_BEGIN = -rdynamic -Wl,-b,binary, 67EMBED_END = ,-b,default 68 69UNAME_S := $(shell uname -s) 70ifeq ($(UNAME_S),Linux) 71 CXXFLAGS += -D LINUX 72 CUDA_LIB_DIR = $(CUDA_DIR)/lib64 73else ifeq ($(UNAME_S),Darwin) 74 CUDA_LIB_DIR = $(CUDA_DIR)/lib 75endif 76 77TEMPLATE_DIR ?= ../templates 78 79LIB += -ldl -L$(CUDA_LIB_DIR) -L$(CUDA_LIB_DIR)/stubs -lcuda -lcudadevrt -lcudart -lnvrtc 80 81HEADERS = jitify.hpp dataFactory.hpp jitFactory.hpp jitTestFactory.hpp semiringFactory.hpp \ 82 ../type_name.hpp 83 84TEMPLATES := $(wildcard $(TEMPLATE_DIR)/*.cu) 85 86CU_OBJS := ../GB_jit_cache.o ../GB_jit_launcher.o 87 88CFILES := $(wildcard ../*.c) 89 90COBJS := $(patsubst %.c, %.o, $(CFILES) ) 91 92JIT_TEMP := $(patsubst %.cu, %.cu.jit, $(TEMPLATES)) 93 94GTEST_LIB := googletest/build/lib/libgtest.a googletest/build/lib/libgtest_main.a 95 96%.cu.jit: %.cu 97 ../stringify $? > $@ 98 99stringify: stringify.cpp 100 $(GXX) -o $@ $< -O3 -Wall 101 102%.o: %.c 103 $(GXX) -c -o $@ $< $(CFLAGS) $(INC) 104 105%.o: %.cpp 106 $(GXX) -c -o $@ $< $(CXXFLAGS) $(INC) 107 108cu_link.o: $(CU_OBJS) 109 nvcc --gpu-architecture=compute_75 --device-link $(CU_OBJS) --output-file cu_link.o 110 111 112testJit: testJit.cpp $(OBJS) $(HEADERS) $(JIT_TEMP) 113 $(GXX) -o $@ $< $(CXXFLAGS) $(INC) $(OBJS) $(LIB) 114 115AxB_dot3_test_instances.hpp: testGen.py 116 python3 testGen.py 117 118 119instances := AxB_dot3_test_instances.hpp 120 121 122cudaTest: cudaTest.cpp $(COBJS) $(OBJS) $(HEADERS) $(JIT_TEMP) cu_link.o AxB_dot3_cuda_tests.hpp $(instances) 123 $(GXX) -o $@ $< $(CXXFLAGS) $(INC) $(COBJS) $(CU_OBJS) cu_link.o $(LIB) $(GTEST_LIB) 124 125%.cu: %.cutmp 126 cp $? $@ 127 128 129doc: jitify.hpp Doxyfile 130 $(DOXYGEN) Doxyfile 131.PHONY: doc 132 133 134