| #!/usr/bin/env bash |
|
|
| set -Eeuo pipefail |
| IFS=$'\n\t' |
|
|
| echo "Setting up sccache for faster Rust compilation..." |
|
|
| has_cmd() { command -v "$1" >/dev/null 2>&1; } |
|
|
| install_sccache() { |
| echo "sccache not found." |
| if [[ "${AUTO_INSTALL:-0}" != "1" ]]; then |
| read -r -p "Install sccache now? [y/N] " response |
| response=${response:-N} |
| if [[ ! "$response" =~ ^[Yy]$ ]]; then |
| echo "Skipping installation. Please install sccache manually:" |
| echo " cargo install sccache" |
| echo " or" |
| echo " brew install sccache (macOS)" |
| echo " or" |
| echo " sudo apt-get install -y sccache (Debian/Ubuntu)" |
| echo " or" |
| echo " sudo dnf install -y sccache (RHEL/Fedora)" |
| echo " or" |
| echo " sudo pacman -S sccache (Arch)" |
| exit 0 |
| fi |
| fi |
|
|
| if has_cmd cargo; then |
| echo "Installing via cargo..." |
| cargo install sccache --locked |
| elif has_cmd brew; then |
| echo "Installing via Homebrew..." |
| brew install sccache |
| elif has_cmd apt-get; then |
| echo "Installing via apt-get..." |
| sudo apt-get update -y && sudo apt-get install -y sccache |
| elif has_cmd dnf; then |
| echo "Installing via dnf..." |
| sudo dnf install -y sccache |
| elif has_cmd pacman; then |
| echo "Installing via pacman..." |
| sudo pacman -S --noconfirm sccache |
| else |
| echo "No supported package manager detected. Install manually:" |
| echo " cargo install sccache" |
| exit 1 |
| fi |
| } |
|
|
| if ! has_cmd sccache; then |
| install_sccache |
| fi |
|
|
| echo "Configuring sccache..." |
|
|
| export SCCACHE_CACHE_SIZE="${SCCACHE_CACHE_SIZE:-10G}" |
| export SCCACHE_STATS="${SCCACHE_STATS:-1}" |
|
|
| |
| SCCACHE_BIN="$(command -v sccache)" |
| if [[ -z "${SCCACHE_BIN}" ]]; then |
| echo "Unexpected: sccache still not on PATH after install. Check your environment." |
| exit 1 |
| fi |
| export RUSTC_WRAPPER="${SCCACHE_BIN}" |
|
|
| echo "sccache version: $(sccache --version || echo 'unknown')" |
| echo "Current cache stats:" |
| sccache -s || true |
|
|
| |
| if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then |
| echo |
| echo "Environment variables exported for this process only." |
| echo "To persist, add to your shell profile (e.g., ~/.bashrc or ~/.zshrc):" |
| echo ' export RUSTC_WRAPPER="$(command -v sccache 2>/dev/null || echo "")"' |
| echo ' export SCCACHE_CACHE_SIZE="10G"' |
| |
| echo ' export SCCACHE_STATS="1"' |
| fi |
|
|
| echo "sccache is configured." |
|
|