blob: a409fb0acd6b124b351d1ee5d145904181e71734 (
plain) (
blame)
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
|
#!/bin/bash
# Build a KLEE docker image. If needed, build all dependent layers as well.
set -e
# We are going to build docker containers
export DOCKER_BUILD=1
# All scripts are located relative to this one
DIR="$(cd "$(dirname "$0")" && pwd)"
source "${DIR}/common-defaults.sh"
KLEEDIR="${DIR}/../.."
###############################################################################
# Setup Docker variables needed to build layers layers
###############################################################################
add_arg_variable() {
name=$1
name_var=${!name}
if [[ (-z "$name_var") || ($name_var == "") ]] ; then
val=""
else
val="--build-arg ${name}=${name_var} "
fi
echo "$val"
}
DOCKER_OPTS=()
for v in \
LLVM_VERSION \
LLVM_VERSION_SHORT \
ENABLE_OPTIMIZED \
DISABLE_ASSERTIONS \
ENABLE_DEBUG \
REQUIRES_RTTI \
LLVM_SUFFIX \
REPOSITORY \
SANITIZER_BUILD \
SANITIZER_SUFFIX \
PACKAGED \
KLEE_TRAVIS_BUILD \
TRAVIS_OS_NAME \
METASMT_VERSION \
METASMT_DEFAULT \
METASMT_BOOST_VERSION \
SOLVER_SUFFIX \
Z3_VERSION \
STP_VERSION \
KLEE_UCLIBC \
DEPS_SUFFIX \
USE_TCMALLOC \
COVERAGE \
KEEP_SRC \
KEEP_BUILD \
TCMALLOC_VERSION \
GTEST_VERSION \
SOLVERS \
; do
DOCKER_OPTS+=($(add_arg_variable $v))
done
echo "DOCKER_OPTS: ${DOCKER_OPTS[@]}"
docker_build_and_push() {
merge=$1
image=$2
script=$3
set +e
# Get or build layer
echo "$image"
if ! docker pull $image ; then
set -e
# Update if needed
echo "BUILD IMAGE"
merge_arg=""
# if [[ "${merge}x" == "1x" ]]; then
# #merge_arg="--squash"
# fi
docker build ${merge_arg} -f "${DIR}/$script" ${@:4} -t "$image" "${KLEEDIR}"
set +e
docker push "$image"
fi
return 0
}
###############################################################################
# Build different layers
###############################################################################
# Check if the build of dependencies only has been requested
if [[ -z ${DOCKER_BUILD_DEPS_ONLY} || "${DOCKER_BUILD_DEPS_ONLY}x" == "1x" ]]; then
echo "Build dependencies"
docker_build_and_push 1 ${REPOSITORY}/base Dockerfile_base "${DOCKER_OPTS[@]}"
docker_build_and_push 1 ${REPOSITORY}/llvm_built:${LLVM_VERSION_SHORT}${LLVM_SUFFIX} Dockerfile_llvm_build "${DOCKER_OPTS[@]}"
docker_build_and_push 1 ${REPOSITORY}/solver:${LLVM_VERSION_SHORT}${LLVM_SUFFIX}${SOLVER_SUFFIX} Dockerfile_solver_build "${DOCKER_OPTS[@]}"
docker_build_and_push 1 ${REPOSITORY}/klee_deps:${LLVM_VERSION_SHORT}${LLVM_SUFFIX}${SOLVER_SUFFIX}${DEPS_SUFFIX} Dockerfile_klee_deps "${DOCKER_OPTS[@]}"
fi
if [[ -z ${DOCKER_BUILD_DEPS_ONLY} || "${DOCKER_BUILD_DEPS_ONLY}x" != "1x" ]]; then
docker build -f "${DIR}/Dockerfile_klee" "${DOCKER_OPTS[@]}" --build-arg SOLVERS="$SOLVERS" -t ${REPOSITORY}/klee:${LLVM_VERSION_SHORT}${LLVM_SUFFIX}${SANITIZER_SUFFIX}${SOLVER_SUFFIX}${DEPS_SUFFIX} "${KLEEDIR}"
fi
|