-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
133 lines (108 loc) · 4.75 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
ifeq ($(OS),Windows_NT)
# TODO
# CC=gcc -Ofast -ggdb -Wall -Wpedantic
# CXX=g++ --std=c++17 -Ofast -ggdb -Wall -Wpedantic
# LOPENCL=-lOpenCL
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
CC=gcc -Ofast -ggdb -Wall -Wpedantic
CXX=g++ --std=c++17 -Ofast -ggdb -Wall -Wpedantic
CLCXX:=$(CXX)
LOPENCL=-lOpenCL
endif
ifeq ($(UNAME_S),Darwin)
CC=clang -Ofast -ggdb -Wall -Wpedantic
CXX=clang++ --std=c++17 -Ofast -ggdb -Wall -Wpedantic
CLCXX=clang++ -framework OpenCL --std=c++17 -Ofast -ggdb -Wall -Wpedantic
LOPENCL=
endif
endif
default: lib
all: print pi pi_simple pi_urandom coin_flip myurandom algorithms equality frequency fastest_multiplier speedup_measurement pi_parallel
lib: lib/librand_gpu.so
lib/librand_gpu.so: RNG.o
@mkdir -p lib
$(CLCXX) -shared -o lib/librand_gpu.so RNG.o $(LOPENCL) -flto
install: lib/librand_gpu.so
# @mkdir -p ~/.local/lib/
cp lib/* /usr/local/lib/
cp include/* /usr/local/include/
bin/test_kernel: tools/test_kernel.cpp kernel.hpp
@mkdir -p bin/c++
$(CLCXX) -o bin/test_kernel tools/test_kernel.cpp $(LOPENCL)
-bin/test_kernel
RNG.o: bin/test_kernel include/RNG.hpp src/RNG.cpp
$(CXX) -c src/RNG.cpp -fPIC
kernel.hpp: tools/convert_kernel.py src/kernels/*.cl
tools/convert_kernel.py src/kernels/ kernel.hpp
print: lib/librand_gpu.so examples/print.c
@mkdir -p bin/c++
@mkdir -p bin/static/c++
$(CC) -Llib -o bin/print examples/print.c -lrand_gpu
$(CC) -o bin/static/print examples/print.c lib/librand_gpu.so -flto
$(CXX) -Llib -o bin/c++/print examples/print.cpp -lrand_gpu
$(CXX) -o bin/static/c++/print examples/print.cpp lib/librand_gpu.so
pi: lib/librand_gpu.so examples/pi.c
@mkdir -p bin/c++
@mkdir -p bin/static/c++
$(CC) -Llib -o bin/pi examples/pi.c -lrand_gpu
$(CC) -o bin/static/pi examples/pi.c lib/librand_gpu.so -flto
$(CXX) -Llib -o bin/c++/pi examples/pi.cpp -lrand_gpu
$(CXX) -o bin/static/c++/pi examples/pi.cpp lib/librand_gpu.so -flto
pi_simple: lib/librand_gpu.so examples/pi_simple.c
@mkdir -p bin/c++
@mkdir -p bin/static/c++
$(CC) -Llib -o bin/pi_simple examples/pi_simple.c -lrand_gpu
$(CC) -o bin/static/pi_simple examples/pi_simple.c lib/librand_gpu.so -flto
$(CXX) -Llib -o bin/c++/pi_simple examples/pi_simple.cpp -lrand_gpu
$(CXX) -o bin/static/c++/pi_simple examples/pi_simple.cpp lib/librand_gpu.so -flto
pi_urandom: lib/librand_gpu.so examples/pi_urandom.c
@mkdir -p bin/static
$(CC) -Llib -o bin/pi_urandom examples/pi_urandom.c -lrand_gpu
$(CC) -o bin/static/pi_urandom examples/pi_urandom.c lib/librand_gpu.so -flto
pi_parallel: lib/librand_gpu.so examples/pi_parallel.cpp
@mkdir -p bin/c++
$(CC) -Llib -o bin/pi_parallel examples/pi_parallel.c -lm -lrand_gpu -fopenmp
$(CXX) -Llib -o bin/c++/pi_parallel examples/pi_parallel.cpp -lm -lrand_gpu -fopenmp
coin_flip: lib/librand_gpu.so examples/coin_flip.c
@mkdir -p bin/c++
@mkdir -p bin/static/c++
$(CC) -Llib -o bin/coin_flip examples/coin_flip.c -lm -lrand_gpu
$(CC) -o bin/static/coin_flip examples/coin_flip.c lib/librand_gpu.so -flto
myurandom: lib/librand_gpu.so examples/myurandom.c
@mkdir -p bin/c++
@mkdir -p bin/static/c++
$(CC) -Llib -o bin/myurandom examples/myurandom.c -lm -lrand_gpu
$(CC) -o bin/static/myurandom examples/myurandom.c lib/librand_gpu.so -lm -flto
algorithms: lib/librand_gpu.so test/algorithms.cpp
@mkdir -p bin/c++
@mkdir -p bin/static/c++
$(CXX) -Llib -o bin/c++/algorithms test/algorithms.cpp -lrand_gpu
$(CXX) -o bin/static/c++/algorithms test/algorithms.cpp lib/librand_gpu.so -flto
equality: lib/librand_gpu.so test/equality.cpp
@mkdir -p bin/c++
$(CXX) -Llib -o bin/c++/equality test/equality.cpp -lrand_gpu
frequency: lib/librand_gpu.so test/frequency.cpp
@mkdir -p bin/c++
$(CXX) -Llib -o bin/c++/frequency test/frequency.cpp -lrand_gpu
fastest_multiplier: lib/librand_gpu.so test/fastest_multiplier.c
@mkdir -p bin
@mkdir -p bin/static
$(CC) -Llib -Wno-unused-value -o bin/fastest_multiplier test/fastest_multiplier.c -lrand_gpu
$(CC) -Wno-unused-value -o bin/static/fastest_multiplier test/fastest_multiplier.c lib/librand_gpu.so -flto
speedup_measurement: lib/librand_gpu.so test/speedup_measurement.cpp
@mkdir -p bin/c++
@mkdir -p bin/static/c++
$(CXX) -Llib -o bin/c++/speedup_measurement test/speedup_measurement.cpp -lrand_gpu
$(CXX) -o bin/static/c++/speedup_measurement test/speedup_measurement.cpp lib/librand_gpu.so -flto
speedup_measurement_parallel: lib/librand_gpu.so test/speedup_measurement_parallel.cpp
@mkdir -p bin/c++
@mkdir -p bin/static/c++
$(CXX) -o bin/c++/speedup_measurement_parallel test/speedup_measurement_parallel.cpp -lrand_gpu -fopenmp
$(CXX) -o bin/c++/speedup_measurement_parallel test/speedup_measurement_parallel.cpp -lrand_gpu -fopenmp
clean:
-rm -rf bin/
-rm -f *.o
-rm -rf lib/
-rm -f kernel.hpp