78 lines
1.5 KiB
Bash
Executable File
78 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
EXAMPLE_CONFIG="$ROOT_DIR/.cargo/config.toml.example"
|
|
LOCAL_CONFIG="$ROOT_DIR/.cargo/config.toml"
|
|
|
|
have_cmd() {
|
|
command -v "$1" >/dev/null 2>&1
|
|
}
|
|
|
|
install_with_manager() {
|
|
if have_cmd pacman; then
|
|
sudo pacman -S --needed clang mold sccache
|
|
return
|
|
fi
|
|
|
|
if have_cmd apt-get; then
|
|
sudo apt-get update
|
|
sudo apt-get install -y clang mold sccache
|
|
return
|
|
fi
|
|
|
|
if have_cmd dnf; then
|
|
sudo dnf install -y clang mold sccache
|
|
return
|
|
fi
|
|
|
|
if have_cmd zypper; then
|
|
sudo zypper install -y clang mold sccache
|
|
return
|
|
fi
|
|
|
|
echo "Unsupported package manager. Install these manually: clang mold sccache" >&2
|
|
exit 1
|
|
}
|
|
|
|
echo "Checking build tools..."
|
|
|
|
missing=0
|
|
for tool in clang mold sccache; do
|
|
if have_cmd "$tool"; then
|
|
echo " found: $tool"
|
|
else
|
|
echo " missing: $tool"
|
|
missing=1
|
|
fi
|
|
done
|
|
|
|
if [[ "$missing" -eq 1 ]]; then
|
|
echo
|
|
echo "Installing missing tools..."
|
|
install_with_manager
|
|
else
|
|
echo
|
|
echo "All recommended tools are already installed."
|
|
fi
|
|
|
|
mkdir -p "$(dirname "$LOCAL_CONFIG")"
|
|
|
|
if [[ -f "$LOCAL_CONFIG" ]]; then
|
|
echo
|
|
echo "Keeping existing Cargo config at $LOCAL_CONFIG"
|
|
else
|
|
cp "$EXAMPLE_CONFIG" "$LOCAL_CONFIG"
|
|
echo
|
|
echo "Wrote $LOCAL_CONFIG from template."
|
|
fi
|
|
|
|
cat <<'EOF'
|
|
|
|
Recommended usage:
|
|
CARGO_BUILD_JOBS=8 RUSTC_WRAPPER=sccache npm run build:local
|
|
|
|
Adjust the jobs value for your machine.
|
|
EOF
|