diff options
Diffstat (limited to 'z3/docker')
-rw-r--r-- | z3/docker/.gitignore | 5 | ||||
-rw-r--r-- | z3/docker/README.md | 14 | ||||
-rwxr-xr-x | z3/docker/build_in_docker.sh | 25 | ||||
-rwxr-xr-x | z3/docker/cross_build.sh | 15 |
4 files changed, 59 insertions, 0 deletions
diff --git a/z3/docker/.gitignore b/z3/docker/.gitignore new file mode 100644 index 00000000..d5b53f81 --- /dev/null +++ b/z3/docker/.gitignore | |||
@@ -0,0 +1,5 @@ | |||
1 | # SPDX-FileCopyrightText: 2023 The Refinery Authors | ||
2 | # | ||
3 | # SPDX-License-Identifier: CC0-1.0 | ||
4 | |||
5 | out/ | ||
diff --git a/z3/docker/README.md b/z3/docker/README.md new file mode 100644 index 00000000..d979fd5e --- /dev/null +++ b/z3/docker/README.md | |||
@@ -0,0 +1,14 @@ | |||
1 | <!-- | ||
2 | SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | ||
3 | |||
4 | SPDX-License-Identifier: Apache-2.0 | ||
5 | --> | ||
6 | |||
7 | # Scripts for cross-building Z3 for linux-aarch64 | ||
8 | |||
9 | We intentionally build in Ubuntu Focal to avoid a dependency on glibc 2.35. | ||
10 | See https://github.com/Z3Prover/z3/issues/6572 for details. | ||
11 | |||
12 | This should not be necessary once Z3 4.12.3 is released, as now Z3 nighly | ||
13 | includes linux-aarch64 builds. | ||
14 | See https://github.com/Z3Prover/z3/issues/6835 for details. | ||
diff --git a/z3/docker/build_in_docker.sh b/z3/docker/build_in_docker.sh new file mode 100755 index 00000000..549e823d --- /dev/null +++ b/z3/docker/build_in_docker.sh | |||
@@ -0,0 +1,25 @@ | |||
1 | #!/usr/bin/env bash | ||
2 | |||
3 | # SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | ||
4 | # | ||
5 | # SPDX-License-Identifier: Apache-2.0 | ||
6 | |||
7 | set -euo pipefail | ||
8 | |||
9 | z3_version="$1" | ||
10 | target_uid="$2" | ||
11 | target_gid="$3" | ||
12 | |||
13 | apt-get update | ||
14 | apt-get install -y python3 make gcc-aarch64-linux-gnu g++-aarch64-linux-gnu unzip | ||
15 | wget "https://github.com/Z3Prover/z3/archive/refs/tags/z3-${z3_version}.zip" | ||
16 | unzip "z3-${z3_version}.zip" | ||
17 | cd "z3-z3-${z3_version}" | ||
18 | export CC=aarch64-linux-gnu-gcc | ||
19 | export CXX=aarch64-linux-gnu-g++ | ||
20 | # See https://docs.aws.amazon.com/linux/al2023/ug/performance-optimizations.html | ||
21 | export CFLAGS="-march=armv8.2-a+crypto -mtune=neoverse-n1 -ftree-vectorize" | ||
22 | export CXXFLAGS="${CFLAGS}" | ||
23 | python3 scripts/mk_unix_dist.py -f --nodotnet --arch=arm64 | ||
24 | cp --preserve=all "./dist/z3-${z3_version}-arm64-glibc-2.31/bin"/*.so /data/out/ | ||
25 | chown "${target_uid}:${target_gid}" /data/out/* | ||
diff --git a/z3/docker/cross_build.sh b/z3/docker/cross_build.sh new file mode 100755 index 00000000..522d5c02 --- /dev/null +++ b/z3/docker/cross_build.sh | |||
@@ -0,0 +1,15 @@ | |||
1 | #!/usr/bin/env bash | ||
2 | |||
3 | # SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | ||
4 | # | ||
5 | # SPDX-License-Identifier: Apache-2.0 | ||
6 | |||
7 | set -euo pipefail | ||
8 | |||
9 | z3_version="$(grep '^version=' ../gradle.properties | cut -d'=' -f2)" | ||
10 | |||
11 | rm -rf out | ||
12 | mkdir out | ||
13 | docker run --platform linux/amd64 --rm -it -v "${PWD}:/data" --entrypoint /bin/bash docker.io/eclipse-temurin:17-jdk-focal /data/build_in_docker.sh "${z3_version}" "$(id -u)" "$(id -g)" | ||
14 | rm -rf ../subprojects/solver-linux-aarch64/src/main/resources/z3java-linux-aarch64/*.so | ||
15 | cp ./out/* ../subprojects/solver-linux-aarch64/src/main/resources/z3java-linux-aarch64/ | ||