aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile47
1 files changed, 41 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index 62ec245..87a5708 100644
--- a/Makefile
+++ b/Makefile
@@ -3,9 +3,11 @@ CUDA ?= /usr/local/cuda
3# Note that CXX and CC are predefined as g++ and cc (respectively) by Make 3# Note that CXX and CC are predefined as g++ and cc (respectively) by Make
4NVCC ?= $(CUDA)/bin/nvcc 4NVCC ?= $(CUDA)/bin/nvcc
5# Everything has to have -lcuda, as it's needed for libsmctrl 5# Everything has to have -lcuda, as it's needed for libsmctrl
6LDFLAGS := -lcuda -I$(CUDA)/include -L$(CUDA)/lib64 6LDFLAGS := -ldl -lcuda -I$(CUDA)/include -L$(CUDA)/lib64
7ARCH = $(shell $(CC) -dumpmachine)
8CFLAGS := -Wall -Wno-parentheses
7 9
8.PHONY: clean tests all 10.PHONY: clean tests all install remove run_tests
9 11
10# ----- Main Library ----- 12# ----- Main Library -----
11libsmctrl.so: libsmctrl.c libsmctrl.h 13libsmctrl.so: libsmctrl.c libsmctrl.h
@@ -14,9 +16,14 @@ libsmctrl.so: libsmctrl.c libsmctrl.h
14# -fPIC is needed even if built as a static library, in case we are linked into 16# -fPIC is needed even if built as a static library, in case we are linked into
15# another shared library 17# another shared library
16libsmctrl.a: libsmctrl.c libsmctrl.h 18libsmctrl.a: libsmctrl.c libsmctrl.h
17 $(CC) $< -c -o libsmctrl.o -fPIC $(CFLAGS) $(LDFLAGS) 19 $(CC) $< -c -o libsmctrl.o -fPIC -DLIBSMCTRL_STATIC $(CFLAGS) $(LDFLAGS)
18 ar rcs $@ libsmctrl.o 20 ar rcs $@ libsmctrl.o
19 21
22# ----- CUDA Wrapper -----
23libcuda.so.1: libsmctrl.c libsmctrl.h
24 $(CC) $< -shared -o $@ -fPIC -DLIBSMCTRL_WRAPPER $(CFLAGS) $(LDFLAGS)
25 patchelf libcuda.so.1 --add-needed libcuda.so
26
20# ----- Utilities ----- 27# ----- Utilities -----
21# Use static linking with tests to avoid LD_LIBRARY_PATH issues 28# Use static linking with tests to avoid LD_LIBRARY_PATH issues
22nvtaskset: nvtaskset.c libsmctrl.so libsmctrl.a 29nvtaskset: nvtaskset.c libsmctrl.so libsmctrl.a
@@ -29,7 +36,7 @@ libsmctrl_test_gpc_info: libsmctrl_test_gpc_info.c libsmctrl.a testbench.h
29libsmctrl_test_mask_shared.o: libsmctrl_test_mask_shared.cu testbench.h 36libsmctrl_test_mask_shared.o: libsmctrl_test_mask_shared.cu testbench.h
30 $(NVCC) -ccbin $(CXX) $< -c -g 37 $(NVCC) -ccbin $(CXX) $< -c -g
31 38
32libsmctrl_test_supreme_mask: libsmctrl_test_supreme_mask.c libsmctrl.a libsmctrl_test_mask_shared.o 39libsmctrl_test_supreme_mask: libsmctrl_test_supreme_mask.c libsmctrl.a libsmctrl_test_mask_shared.o libcuda.so.1 nvtaskset
33 $(NVCC) -ccbin $(CXX) $@.c -o $@ libsmctrl_test_mask_shared.o -g -L. -l:libsmctrl.a $(LDFLAGS) 40 $(NVCC) -ccbin $(CXX) $@.c -o $@ libsmctrl_test_mask_shared.o -g -L. -l:libsmctrl.a $(LDFLAGS)
34 41
35libsmctrl_test_global_mask: libsmctrl_test_global_mask.c libsmctrl.a libsmctrl_test_mask_shared.o 42libsmctrl_test_global_mask: libsmctrl_test_global_mask.c libsmctrl.a libsmctrl_test_mask_shared.o
@@ -52,7 +59,7 @@ tests: libsmctrl_test_gpc_info libsmctrl_test_supreme_mask \
52 libsmctrl_test_stream_mask_override libsmctrl_test_next_mask \ 59 libsmctrl_test_stream_mask_override libsmctrl_test_next_mask \
53 libsmctrl_test_next_mask_override 60 libsmctrl_test_next_mask_override
54 61
55all: libsmctrl.so nvtaskset tests 62all: libsmctrl.so libcuda.so.1 nvtaskset tests
56 63
57clean: 64clean:
58 rm -f libsmctrl.so libsmctrl.o libsmctrl.a libsmctrl_test_gpc_info \ 65 rm -f libsmctrl.so libsmctrl.o libsmctrl.a libsmctrl_test_gpc_info \
@@ -60,4 +67,32 @@ clean:
60 libsmctrl_test_global_mask \ 67 libsmctrl_test_global_mask \
61 libsmctrl_test_stream_mask libsmctrl_test_stream_mask_override \ 68 libsmctrl_test_stream_mask libsmctrl_test_stream_mask_override \
62 libsmctrl_test_next_mask libsmctrl_test_next_mask_override \ 69 libsmctrl_test_next_mask libsmctrl_test_next_mask_override \
63 nvtaskset 70 nvtaskset libcuda.so.1
71
72install: libcuda.so.1
73 @# Check that CUDA is installed first
74 test -f /lib/$(ARCH)/libcuda.so.*.*
75 @# Change libcuda.so link to bypass libcuda.so.1
76 sudo ln -sf /lib/$(ARCH)/libcuda.so.*.* /lib/$(ARCH)/libcuda.so
77 @# Remove libcuda.so.1 symlink
78 sudo rm /lib/$(ARCH)/libcuda.so.1
79 @# Install wrapper as libcuda.so.1
80 sudo cp libcuda.so.1 /lib/$(ARCH)/libcuda.so.1
81
82remove:
83 @# Test that our library in installed first
84 test ! -L /lib/$(ARCH)/libcuda.so.1
85 @# Overwrite install with original symlinks
86 sudo ln -sf libcuda.so.1 /lib/$(ARCH)/libcuda.so
87 sudo ln -sf /lib/$(ARCH)/libcuda.so.*.* /lib/$(ARCH)/libcuda.so.1
88
89run_tests: tests
90 ./libsmctrl_test_global_mask
91 ./libsmctrl_test_next_mask
92 ./libsmctrl_test_stream_mask
93 ./libsmctrl_test_next_mask_override
94 ./libsmctrl_test_stream_mask_override
95 @# Must set LD_LIBRARY_PATH in case make install has not been run
96 LD_LIBRARY_PATH=. ./libsmctrl_test_supreme_mask
97 ./libsmctrl_test_gpc_info
98 @ echo "All tests passed!"