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