#!/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" <>"$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