Skip to content

Commit 236c8ab

Browse files
committed
fix(build): use zig archive tools for z3 cross builds
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
1 parent 2fd12c9 commit 236c8ab

1 file changed

Lines changed: 39 additions & 5 deletions

File tree

tasks/scripts/setup-zig-cc-wrapper.sh

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,33 +66,67 @@ EOF
6666
chmod +x "$wrapper_dir/$tool"
6767
done
6868

69+
for tool in ar ranlib; do
70+
cat >"$wrapper_dir/$tool" <<EOF
71+
#!/usr/bin/env bash
72+
set -euo pipefail
73+
74+
exec "$zig" "$tool" "\$@"
75+
EOF
76+
chmod +x "$wrapper_dir/$tool"
77+
done
78+
6979
processor=${cargo_target%%-*}
7080
toolchain_file="$wrapper_dir/toolchain.cmake"
7181
cat >"$toolchain_file" <<EOF
7282
set(CMAKE_SYSTEM_NAME Linux)
7383
set(CMAKE_SYSTEM_PROCESSOR "$processor")
7484
set(CMAKE_C_COMPILER "$wrapper_dir/cc")
7585
set(CMAKE_CXX_COMPILER "$wrapper_dir/c++")
86+
set(CMAKE_AR "$wrapper_dir/ar")
87+
set(CMAKE_RANLIB "$wrapper_dir/ranlib")
7688
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
7789
EOF
7890

7991
is_stale_z3_build_dir() {
80-
local build_dir=$1
92+
local z3_build_dir=$1
93+
local cmake_build_dir="$z3_build_dir/out/build"
94+
95+
if [[ ! -f "$cmake_build_dir/CMakeCache.txt" ]]; then
96+
return 0
97+
fi
98+
99+
if ! grep -q "CMAKE_AR:FILEPATH=$wrapper_dir/ar" "$cmake_build_dir/CMakeCache.txt" 2>/dev/null; then
100+
return 0
101+
fi
102+
if ! grep -q "CMAKE_RANLIB:FILEPATH=$wrapper_dir/ranlib" "$cmake_build_dir/CMakeCache.txt" 2>/dev/null; then
103+
return 0
104+
fi
81105

82106
grep -R -q -E \
83107
'cargo-zigbuild|zigc(c|xx)-.*unknown-linux-gnu\.[0-9]+\.[0-9]+' \
84-
"$build_dir/CMakeCache.txt" "$build_dir/CMakeFiles" 2>/dev/null
108+
"$cmake_build_dir/CMakeCache.txt" "$cmake_build_dir/CMakeFiles" 2>/dev/null
109+
}
110+
111+
clean_z3_cargo_artifacts() {
112+
local profile_dir=$1
113+
114+
rm -rf "$profile_dir"/build/z3-sys-*
115+
rm -rf "$profile_dir"/.fingerprint/z3-sys-* "$profile_dir"/.fingerprint/z3-*
116+
rm -f "$profile_dir"/deps/libz3_sys-* "$profile_dir"/deps/z3_sys-*
117+
rm -f "$profile_dir"/deps/libz3-* "$profile_dir"/deps/z3-*
85118
}
86119

87120
for profile in release debug; do
88121
z3_build_root="target/$bare_cargo_target/$profile/build"
89122
if [[ -d $z3_build_root ]]; then
90123
while IFS= read -r z3_build_dir; do
91124
if is_stale_z3_build_dir "$z3_build_dir"; then
92-
echo "Removing stale z3-sys CMake cache: $z3_build_dir" >&2
93-
rm -rf "$z3_build_dir"
125+
echo "Removing stale z3-sys cross-build artifacts under target/$bare_cargo_target/$profile" >&2
126+
clean_z3_cargo_artifacts "target/$bare_cargo_target/$profile"
127+
break
94128
fi
95-
done < <(find "$z3_build_root" -mindepth 3 -maxdepth 3 -type d -path "*/z3-sys-*/out/build")
129+
done < <(find "$z3_build_root" -mindepth 1 -maxdepth 1 -type d -name "z3-sys-*")
96130
fi
97131
done
98132

0 commit comments

Comments
 (0)