aboutsummaryrefslogtreecommitdiffstats
path: root/z3/docker
diff options
context:
space:
mode:
Diffstat (limited to 'z3/docker')
-rw-r--r--z3/docker/.gitignore5
-rw-r--r--z3/docker/README.md14
-rwxr-xr-xz3/docker/build_in_docker.sh25
-rwxr-xr-xz3/docker/cross_build.sh15
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
5out/
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
9We intentionally build in Ubuntu Focal to avoid a dependency on glibc 2.35.
10See https://github.com/Z3Prover/z3/issues/6572 for details.
11
12This should not be necessary once Z3 4.12.3 is released, as now Z3 nighly
13includes linux-aarch64 builds.
14See 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
7set -euo pipefail
8
9z3_version="$1"
10target_uid="$2"
11target_gid="$3"
12
13apt-get update
14apt-get install -y python3 make gcc-aarch64-linux-gnu g++-aarch64-linux-gnu unzip
15wget "https://github.com/Z3Prover/z3/archive/refs/tags/z3-${z3_version}.zip"
16unzip "z3-${z3_version}.zip"
17cd "z3-z3-${z3_version}"
18export CC=aarch64-linux-gnu-gcc
19export CXX=aarch64-linux-gnu-g++
20# See https://docs.aws.amazon.com/linux/al2023/ug/performance-optimizations.html
21export CFLAGS="-march=armv8.2-a+crypto -mtune=neoverse-n1 -ftree-vectorize"
22export CXXFLAGS="${CFLAGS}"
23python3 scripts/mk_unix_dist.py -f --nodotnet --arch=arm64
24cp --preserve=all "./dist/z3-${z3_version}-arm64-glibc-2.31/bin"/*.so /data/out/
25chown "${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
7set -euo pipefail
8
9z3_version="$(grep '^version=' ../gradle.properties | cut -d'=' -f2)"
10
11rm -rf out
12mkdir out
13docker 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)"
14rm -rf ../subprojects/solver-linux-aarch64/src/main/resources/z3java-linux-aarch64/*.so
15cp ./out/* ../subprojects/solver-linux-aarch64/src/main/resources/z3java-linux-aarch64/