#!/usr/bin/env bash # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 set -euo pipefail usage() { echo "Usage: setup-zig-cc-wrapper.sh " >&2 } if [[ $# -ne 3 ]]; then usage exit 2 fi cargo_target=$1 zig_target=$2 wrapper_dir=$3 bare_cargo_target=$cargo_target if [[ $bare_cargo_target =~ ^(.+)\.[0-9]+\.[0-9]+$ ]]; then bare_cargo_target=${BASH_REMATCH[1]} fi # cargo-zigbuild accepts Rust target triples with glibc suffixes, for example # x86_64-unknown-linux-gnu.2.28. Zig's C/C++ driver expects the vendorless form. zig_cc_target=${zig_target/-unknown-linux-/-linux-} if [[ -n ${ZIG:-} ]]; then zig=$ZIG elif command -v mise >/dev/null 2>&1; then zig=$(mise which zig) else zig=$(command -v zig) fi mkdir -p "$wrapper_dir" for tool in cc c++; do cat >"$wrapper_dir/$tool" <"$wrapper_dir/ar" <"$wrapper_dir/ranlib" <"$toolchain_file" </dev/null } for profile in release debug; do z3_build_root="target/$bare_cargo_target/$profile/build" if [[ -d $z3_build_root ]]; then while IFS= read -r z3_build_dir; do if is_stale_z3_build_dir "$z3_build_dir"; then echo "Removing stale z3-sys CMake cache: $z3_build_dir" >&2 rm -rf "$z3_build_dir" fi done < <(find "$z3_build_root" -mindepth 3 -maxdepth 3 -type d -path "*/z3-sys-*/out/build") fi done target_env=${cargo_target//[-.]/_} bare_target_env=${bare_cargo_target//[-.]/_} if [[ -n ${GITHUB_ENV:-} ]]; then { echo "CC_${target_env}=$wrapper_dir/cc" echo "CXX_${target_env}=$wrapper_dir/c++" echo "AR_${target_env}=$wrapper_dir/ar" echo "RANLIB_${target_env}=$wrapper_dir/ranlib" echo "CMAKE_TOOLCHAIN_FILE_${target_env}=$toolchain_file" if [[ $bare_target_env != "$target_env" ]]; then echo "CC_${bare_target_env}=$wrapper_dir/cc" echo "CXX_${bare_target_env}=$wrapper_dir/c++" echo "AR_${bare_target_env}=$wrapper_dir/ar" echo "RANLIB_${bare_target_env}=$wrapper_dir/ranlib" echo "CMAKE_TOOLCHAIN_FILE_${bare_target_env}=$toolchain_file" fi } >>"$GITHUB_ENV" else echo "export CC_${target_env}=$wrapper_dir/cc" echo "export CXX_${target_env}=$wrapper_dir/c++" echo "export AR_${target_env}=$wrapper_dir/ar" echo "export RANLIB_${target_env}=$wrapper_dir/ranlib" echo "export CMAKE_TOOLCHAIN_FILE_${target_env}=$toolchain_file" if [[ $bare_target_env != "$target_env" ]]; then echo "export CC_${bare_target_env}=$wrapper_dir/cc" echo "export CXX_${bare_target_env}=$wrapper_dir/c++" echo "export AR_${bare_target_env}=$wrapper_dir/ar" echo "export RANLIB_${bare_target_env}=$wrapper_dir/ranlib" echo "export CMAKE_TOOLCHAIN_FILE_${bare_target_env}=$toolchain_file" fi fi