-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathrun-docker
executable file
·105 lines (92 loc) · 2.7 KB
/
run-docker
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
#!/bin/bash
set -e
LOCAL_FILE=$(realpath "$1")
COMPILER=$2
OPTIM_FLAG=$3
VERSION_FLAG=$4
ASM_FORMAT=$5
CLEAN_CACHE=$6
LIB_VERSION=$7
ADDITIONAL_FLAGS=${*:8}
if ! [[ $COMPILER == "clang-"?*"."? || $COMPILER == "gcc-"?*"."? ]] ; then
>&2 echo "Unknown compiler"
exit 1
fi
if [ "$OPTIM_FLAG" == 0 ]; then
OPTIM=""
elif [ "$OPTIM_FLAG" == 1 ]; then
OPTIM="-O1"
elif [ "$OPTIM_FLAG" == 2 ]; then
OPTIM="-O2"
elif [ "$OPTIM_FLAG" == 3 ]; then
OPTIM="-O3"
elif [ "$OPTIM_FLAG" == "S" ]; then
OPTIM="-Os"
elif [ "$OPTIM_FLAG" == "G" ]; then
OPTIM="-Og"
elif [ "$OPTIM_FLAG" == "F" ]; then
OPTIM="-Ofast"
else
>&2 echo "Unsupported optimization flag ${OPTIM_FLAG}"
exit 1
fi
if [[ $VERSION_FLAG =~ c\+\+[0-9][0-9a-z] ]]; then
VERSION="-std=${VERSION_FLAG}"
else
>&2 echo "Unknown STD version"
exit 1
fi
if [[ $ADDITIONAL_FLAGS =~ \B(?!\-f) ]]; then
>&2 echo "Unsupported flag"
exit 1
fi
if [[ $ASM_FORMAT =~ ^(?!(no|att|intel).)*$ ]]; then
>&2 echo "Unsupported ASM format"
exit 1
fi
LOCK=$LOCAL_FILE.lock
lockfile "$LOCK"
INFILE=$LOCAL_FILE.cpp
OUTFILE=$LOCAL_FILE.out
CIDFILE=$LOCAL_FILE.cid
PERFFILE=$LOCAL_FILE.perf
FUNCFILE=$LOCAL_FILE.func
CONTAINERFILE=$LOCAL_FILE.cont
if [ "$CLEAN_CACHE" = true ] && [ -f "$OUTFILE" ]; then
rm "$OUTFILE"
rm -f "$PERFFILE"
fi
if [ -f "$OUTFILE" ] && [[ "$RECORD_PERF" = false || -f "$PERFFILE" ]]; then
>&2 echo "Showing cached results"
else
touch "$OUTFILE"
chmod 666 "$OUTFILE"
if [ -z "$UNLIMITED_RESOURCES" ]; then
MEMORY_LIMITS='--memory=500m --cpu-period=100000 --cpu-quota=25000'
fi
if [ "${ASM_FORMAT}" != "no" ]; then
touch "$PERFFILE"
chmod 666 "$PERFFILE"
ANNOTATE="--security-opt seccomp=seccomp.json"
ANNOTATE_CMD=" && ./annotate -M${ASM_FORMAT}"
ANNOTATE_RECORD="perf record -g"
ANNOTATE_IN="docker cp $FUNCFILE \$CONTAINER:/home/builder/bench.func"
ANNOTATE_OUT="docker cp \$CONTAINER:/home/builder/bench.perf $PERFFILE"
fi
if [[ $LIB_VERSION == llvm ]] && [[ $COMPILER == clang* ]]; then
BUILD_COMMAND=build-libcxx
else
BUILD_COMMAND=build
fi
CONTAINER=$(docker create $ANNOTATE $MEMORY_LIMITS --cidfile="$CIDFILE" -t fredtingaud/quick-bench:"$COMPILER" /bin/bash -c "./$BUILD_COMMAND $OPTIM $VERSION $ADDITIONAL_FLAGS && $ANNOTATE_RECORD ./run $ANNOTATE_CMD")
echo "$CONTAINER" > "$CONTAINERFILE"
docker cp "$INFILE" "$CONTAINER":/home/builder/bench-file.cpp
eval $ANNOTATE_IN
docker start -a "$CONTAINER"
docker cp "$CONTAINER":/home/builder/bench.out "$OUTFILE"
eval $ANNOTATE_OUT
docker rm "$CONTAINER"
rm "$CONTAINERFILE"
rm "$CIDFILE"
fi
rm -f "$LOCK"