@@ -5,6 +5,13 @@ if [ "$INSTALL_SOLVERS" != "1" ]; then
5
5
exit 0
6
6
fi
7
7
8
+ INFO_MSG=" [INFO]"
9
+ WARN_MSG=" \033[33m[WARNING]\033[0m"
10
+ ERROR_MSG=" \033[1;31m[ERROR]\033[0m"
11
+
12
+ # curl command with default flags
13
+ CURL=' curl -L -s -C -'
14
+
8
15
TEMP_DIR=" $( pwd) /temp"
9
16
SOLVERS_DIR=${1:- " $( pwd) /solvers" }
10
17
@@ -19,36 +26,65 @@ SHORT_ARCH=$(uname -m | sed 's/x86_64/x64/;s/aarch64/arm64/;')
19
26
20
27
# libc linked against z3
21
28
# (glibc for Linux, osx for macOS)
22
- LIBC_NAME=$( uname -s | tr ' [:upper:]' ' [:lower:]' | sed ' s/darwin/osx/;s/linux/glibc/;' )
29
+ Z3_LIBC_NAME=$( uname -s | tr ' [:upper:]' ' [:lower:]' | sed ' s/darwin/osx/;s/linux/glibc/;' )
30
+
31
+ # os names as used by CVC5 builds
32
+ CVC5_OS_NAME=$( uname -s | tr ' [:upper:]' ' [:lower:]' | sed ' s/darwin/macOS/;s/linux/Linux/;' )
23
33
24
34
mkdir -p " $SOLVERS_DIR "
25
35
mkdir -p " $TEMP_DIR "
36
+
37
+ reset_temp_dir () {
38
+ rm -rf " $TEMP_DIR "
39
+ mkdir -p " $TEMP_DIR "
40
+ }
41
+
42
+ echo " $INFO_MSG Installing Solvers to $SOLVERS_DIR "
43
+
26
44
# cvc5
27
- wget -c " https://github.com/cvc5/cvc5/releases/download/cvc5-${CVC5_VER} /cvc5-Linux-${ARCH} -static.zip" -O " $TEMP_DIR /cvc5.zip" -q
28
- unzip " $TEMP_DIR /cvc5.zip" -d " $TEMP_DIR "
45
+ echo " $INFO_MSG Installing cvc5 (v${CVC5_VER} )"
46
+
47
+ $CURL " https://github.com/cvc5/cvc5/releases/download/cvc5-${CVC5_VER} /cvc5-${CVC5_OS_NAME} -${ARCH} -static.zip" --output " $TEMP_DIR /cvc5.zip"
48
+ unzip -q " $TEMP_DIR /cvc5.zip" -d " $TEMP_DIR "
29
49
CVC5_DIR=$( find " $TEMP_DIR " -mindepth 1 -maxdepth 1 -type d -name " *cvc5*" )
30
50
mv " $CVC5_DIR /bin/cvc5" " $SOLVERS_DIR /cvc5"
31
51
chmod +x " $SOLVERS_DIR /cvc5"
32
- rm -rf " $TEMP_DIR "
33
52
34
- # # CVC4
35
- wget -c " https://cvc4.cs.stanford.edu/downloads/builds/x86_64-linux-opt/cvc4-${CVC4_VER} -x86_64-linux-opt" -O " $SOLVERS_DIR /cvc4" -q
53
+ reset_temp_dir
54
+
55
+ # CVC4
56
+ echo " $INFO_MSG Installing CVC4 (v${CVC4_VER} )"
57
+
58
+ if [ " $CVC5_OS_NAME " = " macOS" ]; then
59
+ echo " $WARN_MSG CVC4 installation on macOS; defaulting to only build available (x86_64 v1.8)"
60
+ $CURL " https://github.com/CVC4/CVC4-archived/releases/download/1.8/cvc4-1.8-macos-opt" --output " $SOLVERS_DIR /cvc4"
61
+ elif [ " $CVC5_OS_NAME " = " Linux" ]; then
62
+ $CURL " https://cvc4.cs.stanford.edu/downloads/builds/x86_64-linux-opt/cvc4-${CVC4_VER} -x86_64-linux-opt" --output " $SOLVERS_DIR /cvc4"
63
+ else
64
+ echo " $ERROR_MSG CVC4 installation not supported on unknown OS: $CVC5_OS_NAME "
65
+ exit 1
66
+ fi
36
67
chmod +x " $SOLVERS_DIR /cvc4"
37
68
69
+ reset_temp_dir
70
+
38
71
# z3
39
- mkdir -p " $TEMP_DIR "
40
- Z3_FILE_PREFIX=" z3-${Z3_VER} -${SHORT_ARCH} -${LIBC_NAME} "
72
+ echo " $INFO_MSG Installing Z3 (v${Z3_VER} )"
73
+
74
+ # z3 release file names contain libc versions in them, which makes them hard to
75
+ # guess. Just get the correct one via the GitHub release API.
76
+ Z3_FILE_PREFIX=" z3-${Z3_VER} -${SHORT_ARCH} -${Z3_LIBC_NAME} " # followed by -<libcversion>.zip
41
77
Z3_URL=$(
42
- curl -s " https://api.github.com/repos/Z3Prover/z3/releases/tags/z3-${Z3_VER} " | # get release info
43
- grep " browser_download_url.*${Z3_FILE_PREFIX} " | # | # find url for the correct build
78
+ $CURL " https://api.github.com/repos/Z3Prover/z3/releases/tags/z3-${Z3_VER} " | # get release info
79
+ grep " browser_download_url.*${Z3_FILE_PREFIX} " | # find url for the correct build
44
80
sed ' s/^.*: //;s/^"//;s/"$//' # strip non-url
45
81
)
46
- wget -c " ${Z3_URL} " -O " $TEMP_DIR /z3.zip" -q
47
- unzip " $TEMP_DIR /z3.zip" -d " $TEMP_DIR "
82
+ $CURL " ${Z3_URL} " --output " $TEMP_DIR /z3.zip"
83
+ unzip -q " $TEMP_DIR /z3.zip" -d " $TEMP_DIR "
48
84
Z3_DIR=$( find " $TEMP_DIR " -mindepth 1 -maxdepth 1 -type d -name " *z3*" )
49
85
mv " $Z3_DIR /bin/z3" " $SOLVERS_DIR /z3"
50
86
chmod +x " $SOLVERS_DIR /z3"
51
87
rm -rf " $TEMP_DIR "
52
88
53
- echo " ************** Solvers Installed ************** "
54
- exit 0
89
+ echo " $INFO_MSG Solvers Installed"
90
+ exit 0
0 commit comments