# Cross-compile configuration for the proxy-engine crate.
#
# tsrust builds for both x86_64-unknown-linux-gnu and aarch64-unknown-linux-gnu
# from an x86_64 host. Without this config, cargo invokes the host `cc` to
# link aarch64 objects and fails with
#   rust-lld: error: <obj.o> is incompatible with elf64-x86-64
#
# Required Debian/Ubuntu packages for the aarch64 target to work:
#   sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
#                    libc6-dev-arm64-cross libstdc++6-arm64-cross
#
# The `libstdc++.so` dev symlink (needed by the -lstdc++ flag that the
# kokoro-tts/ort build scripts emit) is provided by this repo at
# ./crosslibs/aarch64/libstdc++.so, pointing at the versioned shared
# library installed by `libstdc++6-arm64-cross`. This avoids requiring
# the `libstdc++-13-dev-arm64-cross` package, which is not always
# installed alongside the runtime.

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
rustflags = ["-C", "link-arg=-L.cargo/crosslibs/aarch64"]

# Tell cc-rs-based build scripts (ring, zstd-sys, audiopus_sys, ort-sys) to
# use the aarch64 cross toolchain when compiling C sources for the aarch64
# target. Without these, they'd default to the host `cc` and produce x86_64
# objects that the aarch64 linker then rejects.
[env]
CC_aarch64_unknown_linux_gnu = "aarch64-linux-gnu-gcc"
CXX_aarch64_unknown_linux_gnu = "aarch64-linux-gnu-g++"
AR_aarch64_unknown_linux_gnu = "aarch64-linux-gnu-ar"
PKG_CONFIG_ALLOW_CROSS = "1"
PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu = "/"
PKG_CONFIG_LIBDIR_aarch64_unknown_linux_gnu = "/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig"
