Files

40 lines
997 B
Bash
Executable File

#!/usr/bin/env bash
# Install mold linker and make it the default linker.
#
# Retries on transient HTTP errors (e.g., 500) that the `rui314/setup-mold`
# GitHub Action does not handle.
set -euo pipefail
MOLD_VERSION="${MOLD_VERSION:-2.40.4}"
arch="$(uname -m)"
url="https://github.com/rui314/mold/releases/download/v${MOLD_VERSION}/mold-${MOLD_VERSION}-${arch}-linux.tar.gz"
if [ "$(whoami)" = root ]; then
SUDO=""
else
SUDO="sudo"
fi
echo "Installing mold ${MOLD_VERSION} (${arch})..."
wget -O- \
--timeout=10 \
--tries=5 \
--waitretry=3 \
--retry-connrefused \
--retry-on-http-error=429,500,502,503,504 \
--progress=dot:mega \
"$url" \
| $SUDO tar -C /usr/local --strip-components=1 --no-overwrite-dir -xzf -
# Make mold the default linker
current_ld="$(realpath /usr/bin/ld)"
if [ "$current_ld" != /usr/local/bin/mold ]; then
$SUDO ln -sf /usr/local/bin/mold "$current_ld"
fi
echo "mold ${MOLD_VERSION} installed successfully"
mold --version