-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
executable file
·511 lines (376 loc) · 10.9 KB
/
build.sh
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
#!/bin/bash
echo "[*] This script was tested on Ubuntu 22.04. It may not work on other systems or other versions of Ubuntu."
echo "[*] Please ensure that you have ran setup.sh once to set up all the project files first."
ROOT=$(pwd)
ROOT_BUILD=$(pwd)/build
ROOT_BIN=$(pwd)/bin
if [[ -z "${CUSTOM_LLVM_BUILD_PATH}" ]]; then
echo '[!] Please set $CUSTOM_LLVM_BUILD_PATH to the directory of your custom LLVM build. E.g.'
echo 'export CUSTOM_LLVM_BUILD_PATH=/home/daniel/llvm-project/build'
exit 1
else
LLVM_BUILD_PATH="${CUSTOM_LLVM_BUILD_PATH}"
CC="${CUSTOM_LLVM_BUILD_PATH}/bin/clang"
CXX="${CUSTOM_LLVM_BUILD_PATH}/bin/clang++"
LIBOMP_INCLUDE_PATH=${CUSTOM_LLVM_BUILD_PATH}/runtimes/runtimes-bins/openmp/runtime/src
LIBOMP_LIB_PATH=${CUSTOM_LLVM_BUILD_PATH}/runtimes/runtimes-bins/openmp/runtime/src
LIBOMP_FLAGS="-fopenmp -I$LIBOMP_INCLUDE_PATH -L$LIBOMP_LIB_PATH"
fi
install_dependencies() {
echo "[+] Install dependencies (requires sudo):"
sudo apt update
sudo apt install -y git bc
sudo apt install -y libncurses5-dev libncursesw5-dev
sudo apt install -y libreadline-dev
sudo apt install -y libc6
sudo apt install -y libdb++-dev
sudo apt install -y libaio-dev
sudo apt install -y libjemalloc-dev
sudo apt install -y libnuma-dev
sudo apt install -y unzip
sudo apt install -y libboost-all-dev
sudo apt install -y libmpich-dev
sudo apt install -y zsh # used by runner.py
}
build_ompscr() {
cd $ROOT_BUILD
cd OmpSCR_v2.0
### Build
gmake clean
gmake all
## Move the binaries out
rm -rf $ROOT_BIN/OmpSCR
mkdir $ROOT_BIN/OmpSCR
mv bin/* $ROOT_BIN/OmpSCR
cd $ROOT
}
build_dracc() {
cd $ROOT_BUILD
cd DRACC/OpenMP
## Build
make clean
CC=$CC FLAGS="-fsanitize=thread" FLAGS_OPENMP="$LIBOMP_FLAGS" make all
## Move the binaries out
rm -rf $ROOT_BIN/DRACC
mkdir $ROOT_BIN/DRACC
mv bin/* $ROOT_BIN/DRACC
cd $ROOT
}
build_drb() {
cd $ROOT_BUILD
cd dataracebench
git checkout e1bffc57f35f2751afea6c9379b5863e0b2abfd9 # tested this script on this commit
rm -rf results/exec
CLANG="$CC $LIBOMP_FLAGS" CLANGXX="$CXX $LIBOMP_FLAGS" ./check-data-races.sh --tsan-clang c
rm -rf $ROOT_BIN/DRB
mkdir $ROOT_BIN/DRB
mv results/exec/* $ROOT_BIN/DRB
cd $ROOT
}
build_c11_silo() {
pushd .
cd silo
./compile.sh
rm -rf $ROOT_BIN/silo
mkdir $ROOT_BIN/silo
cp out-perf.masstree/benchmarks/dbtest $ROOT_BIN/silo
popd
}
build_c11_iris() {
pushd .
cd iris
./compile.sh
rm -rf $ROOT_BIN/iris
mkdir $ROOT_BIN/iris
cp test_lfringbuffer $ROOT_BIN/iris
cp test2 $ROOT_BIN/iris
popd
}
build_c11_mabain() {
pushd .
cd mabain
rm -rf build
rm -rf install
mkdir install
sed -i "s*~/mabain*$(pwd)/install*g" compile.sh
sed -i "s*mkdir ./tmp_dir**g" compile.sh
sed -i "s*MABAIN_INSTALL_DIR) -lmabain*MABAIN_INSTALL_DIR)/lib -lmabain*g" examples/Makefile
sed -i "s*Werror*Wno-error*g" examples/Makefile
./compile.sh
rm -rf $ROOT_BIN/mabain
mkdir $ROOT_BIN/mabain
mv examples/mb_insert_test $ROOT_BIN/mabain
mv examples/mb_iterator_test $ROOT_BIN/mabain
mv examples/mb_longest_prefix_test $ROOT_BIN/mabain
mv examples/mb_lookup_test $ROOT_BIN/mabain
mv examples/mb_memory_only_test $ROOT_BIN/mabain
mv examples/mb_multi_proc_test $ROOT_BIN/mabain
mv examples/mb_multi_thread_insert_test $ROOT_BIN/mabain
mv examples/mb_rc_test $ROOT_BIN/mabain
mv examples/mb_remove_test $ROOT_BIN/mabain
mv install $ROOT_BIN/mabain
popd
}
build_c11_gdax() {
pushd .
cd gdax-orderbook-hpp
cd demo
# prepare the dependencies
rm -rf dependencies
mkdir dependencies
cd dependencies
## libcds-2.3.2
wget https://github.com/khizmax/libcds/archive/refs/tags/v2.3.2.zip
unzip v2.3.2.zip
rm v2.3.2.zip
## rapidjson-1.1.0
wget https://github.com/Tencent/rapidjson/archive/refs/tags/v1.1.0.zip
unzip v1.1.0.zip
rm v1.1.0.zip
## websocketpp-0.8.2
wget https://github.com/zaphoyd/websocketpp/archive/refs/tags/0.8.2.zip
unzip 0.8.2.zip
rm 0.8.2.zip
cd ../..
# fix errors
sed -i 's*websocketpp-0.7.0*websocketpp-0.8.2*g' demo/Makefile
sed -i 's*`pwd`/../..:$(PATH)*"$(shell pwd)/../..:$(PATH)"*g' demo/Makefile
./compile.sh
rm -rf $ROOT_BIN/gdax
mkdir $ROOT_BIN/gdax
mv demo/dependencies $ROOT_BIN/gdax
mv demo/demo $ROOT_BIN/gdax
cp -R demo/*.txt $ROOT_BIN/gdax # IMPT: without these text files the test case wont run (just hangs and waits)
popd
}
build_c11_cdschecker() {
pushd .
cd cdschecker_modified_benchmarks
# skip this one for now because it requires building and including c11tester
# need their custom threads.h and libthreads.cc
git checkout Makefile
sed -i 's/ms-queue/ms-queue-tsan11/g' Makefile
rm ms-queue-tsan11/*.o # remove the .o files that came with the repo (want to build our own)
make
rm -rf $ROOT_BIN/cdschecker
mkdir $ROOT_BIN/cdschecker
mv barrier/barrier $ROOT_BIN/cdschecker
mv chase-lev-deque/chase-lev-deque $ROOT_BIN/cdschecker
mv dekker-fences/dekker-fences $ROOT_BIN/cdschecker
mv linuxrwlocks/linuxrwlocks $ROOT_BIN/cdschecker
mv mcs-lock/mcs-lock $ROOT_BIN/cdschecker
mv mpmc-queue/mpmc-queue $ROOT_BIN/cdschecker
mv ms-queue-tsan11/ms-queue $ROOT_BIN/cdschecker
mv spsc-queue/spsc-queue $ROOT_BIN/cdschecker
popd
}
build_c11_benchmarks() {
cd $ROOT_BUILD
cd c11concurrency-benchmarks
# they have their custom build script compile.sh so I prefer not to call make clean
# in case I miss out anything
# better to just use git clean to remove all untracked files and git-ignored files
git clean -fdx
echo -e "#/bin/bash\n$CC -fsanitize=thread \$@" > ./clang
echo -e "#/bin/bash\n$CC -fsanitize=thread \$@" > ./gcc
echo -e "#/bin/bash\n$CXX -fsanitize=thread -Wno-error=vla-cxx-extension -Wno-error=cast-align \$@" > ./clang++
echo -e "#/bin/bash\n$CXX -fsanitize=thread \$@" > ./g++
build_c11_silo
build_c11_iris
build_c11_mabain
build_c11_gdax
build_c11_cdschecker
cd $ROOT
}
build_npb() {
cd $ROOT_BUILD
cd NPB3.4.2
cd NPB3.4-OMP
make clean
make suite
# copy the bins out
rm -rf $ROOT_BIN/npb-omp
mkdir $ROOT_BIN/npb-omp
mv bin/* $ROOT_BIN/npb-omp
cd $ROOT
}
build_miniFE() {
cd $ROOT_BUILD
cd miniFE-2.2.0
cd openmp/src
make clean
make
rm -rf $ROOT_BIN/miniFE
mkdir $ROOT_BIN/miniFE
mv miniFE.x $ROOT_BIN/miniFE
cd $ROOT
}
build_miniAMR() {
cd $ROOT_BUILD
cd miniAMR-1.7.0
cd openmp
make clean
OMPI_CC=$CC make
rm -rf $ROOT_BIN/miniAMR
mkdir $ROOT_BIN/miniAMR
mv ma.x $ROOT_BIN/miniAMR
cd $ROOT
}
build_SimpleMOC() {
cd $ROOT_BUILD
cd SimpleMOC-4/src
make clean
make
rm -rf $ROOT_BIN/SimpleMOC
mkdir $ROOT_BIN/SimpleMOC
mv SimpleMOC $ROOT_BIN/SimpleMOC
mv default.in $ROOT_BIN/SimpleMOC
cd $ROOT
}
build_HPCCG() {
cd $ROOT_BUILD
cd HPCCG
make clean
make
rm -rf $ROOT_BIN/HPCCG
mkdir $ROOT_BIN/HPCCG
mv test_HPCCG $ROOT_BIN/HPCCG
cd $ROOT
}
build_kripke() {
cd $ROOT_BUILD
cd Kripke
rm -rf build
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="$LIBOMP_FLAGS -fsanitize=thread" -DCMAKE_CXX_FLAGS="$LIBOMP_FLAGS -fsanitize=thread" -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX -DCMAKE_LINKER=$CC -DCMAKE_CXX_FLAGS_RELEASE="-O3 -ffast-math" -DENABLE_OPENMP=ON -DENABLE_MPI=OFF
make -j12
rm -rf $ROOT_BIN/kripke
mkdir $ROOT_BIN/kripke
cp kripke.exe $ROOT_BIN/kripke
cp -R bin $ROOT_BIN/kripke
cd $ROOT
}
build_lulesh() {
cd $ROOT_BUILD
cd LULESH
rm -rf build
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=$CXX -DWITH_MPI=OFF -DWITH_OPENMP=ON -DOpenMP_CXX_FLAGS="$LIBOMP_FLAGS" -DOpenMP_CXX_LIB_NAMES="libomp" -DOpenMP_libomp_LIBRARY="$LLVM_BUILD_PATH/runtimes/runtimes-bins/openmp/runtime/src/libomp.so" -DCMAKE_CXX_FLAGS="-fsanitize=thread"
make -j12
rm -rf $ROOT_BIN/lulesh
mkdir $ROOT_BIN/lulesh
mv lulesh2.0 $ROOT_BIN/lulesh
cd $ROOT
}
build_xsbench() {
cd $ROOT_BUILD
cd XSBench-20
cd openmp-threading
make clean
CC=$CC CXX=$CXX make -j12
rm -rf $ROOT_BIN/xsbench
mkdir $ROOT_BIN/xsbench
mv XSBench $ROOT_BIN/xsbench
cd $ROOT
}
build_rsbench() {
cd $ROOT_BUILD
cd RSBench-13
cd openmp-threading
make clean
CC=$CC CXX=$CXX make -j10
rm -rf $ROOT_BIN/rsbench
mkdir $ROOT_BIN/rsbench
mv rsbench $ROOT_BIN/rsbench
cd $ROOT
}
build_quicksilver() {
cd $ROOT_BUILD
cd Quicksilver-1.0/src
make clean
make -j12
rm -rf $ROOT_BIN/quicksilver
mkdir $ROOT_BIN/quicksilver
mv qs $ROOT_BIN/quicksilver
cd ..
cp -R Examples $ROOT_BIN/quicksilver
cd $ROOT
}
build_comd() {
cd $ROOT_BUILD
cd CoMD-1.1
cd src-openmp
make clean
make -j12
rm -rf $ROOT_BIN/comd
mkdir $ROOT_BIN/comd
mv ../bin/CoMD-openmp $ROOT_BIN/comd
cd $ROOT
}
build_amg() {
cd $ROOT_BUILD
cd AMG-1.2
make clean
OMPI_CC=$CC make -j12
rm -rf $ROOT_BIN/AMG
mkdir $ROOT_BIN/AMG
mv test/amg $ROOT_BIN/AMG
cd $ROOT
}
build_gromacs() {
cd $ROOT_BUILD
cd gromacs-2024.1
rm -rf $ROOT_BIN/gromacs
mkdir $ROOT_BIN/gromacs
mkdir $ROOT_BIN/gromacs/build
cmake -B $ROOT_BIN/gromacs/build . -DGMX_BUILD_OWN_FFTW=ON -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=-fsanitize=thread -DCMAKE_CXX_FLAGS=-fsanitize=thread -DOpenMP_CXX_FLAGS=-I$LIBOMP_INCLUDE_PATH -DOpenMP_CXX_LIB_NAMES="libomp" -DOpenMP_libomp_LIBRARY="$LLVM_BUILD_PATH/runtimes/runtimes-bins/openmp/runtime/src/libomp.so" -DOpenMP_C_FLAGS=-I$LIBOMP_INCLUDE_PATH -DOpenMP_C_LIB_NAMES="libomp" -DBUILD_SHARED_LIBS=ON
make -C $ROOT_BIN/gromacs/build -j12
mkdir $ROOT_BIN/gromacs/testcases
cd $ROOT_BIN/gromacs/testcases
wget http://ftp.gromacs.org/pub/benchmarks/water_GMX50_bare.tar.gz
tar -xzvf water_GMX50_bare.tar.gz
rm water_GMX50_bare.tar.gz
cd $ROOT
}
build_graph500() {
cd $ROOT_BUILD
cd graph500-2.1.4
make clean
make
rm -rf $ROOT_BIN/graph500
mkdir $ROOT_BIN/graph500
mv omp-csr/omp-csr $ROOT_BIN/graph500
cd $ROOT
}
build_graphchi() {
cd $ROOT_BUILD
cd graphchi-cpp
make clean
make -j12
rm -rf $ROOT_BIN/graphchi/bin
cp -R bin $ROOT_BIN/graphchi
cd $ROOT
}
rm -rf $ROOT_BIN
mkdir $ROOT_BIN
build_ompscr
build_dracc
build_drb
build_c11_benchmarks
build_npb
build_miniFE
build_miniAMR
build_SimpleMOC
build_HPCCG
build_kripke
build_lulesh
build_xsbench
build_rsbench
build_quicksilver
build_comd
build_amg
build_gromacs
build_graph500
build_graphchi