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