This commit is contained in:
+133
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
LLVM_VERSION="${LLVM_VERSION:-22}"
|
||||
MESON_VERSION="${MESON_VERSION:-latest}"
|
||||
INSTALL_VULKAN="${INSTALL_VULKAN:-true}"
|
||||
VULKAN_SOURCE="${VULKAN_SOURCE:-apt}"
|
||||
LUNARG_SDK_VERSION="${LUNARG_SDK_VERSION:-1.4.309.0}"
|
||||
MAKE_DEFAULT="${MAKE_DEFAULT:-true}"
|
||||
|
||||
log() { printf '\n\033[1;34m==> %s\033[0m\n' "$*"; }
|
||||
warn() { printf '\n\033[1;33mwarning: %s\033[0m\n' "$*" >&2; }
|
||||
|
||||
if command -v sudo >/dev/null 2>&1 && [ "$(id -u)" -ne 0 ]; then
|
||||
SUDO=sudo
|
||||
else
|
||||
SUDO=""
|
||||
fi
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
apt_install() {
|
||||
$SUDO apt-get install -y --no-install-recommends "$@"
|
||||
}
|
||||
|
||||
log "Installing base packages"
|
||||
$SUDO apt-get update
|
||||
apt_install \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg \
|
||||
lsb-release \
|
||||
software-properties-common \
|
||||
wget \
|
||||
xz-utils \
|
||||
build-essential \
|
||||
pkg-config \
|
||||
git \
|
||||
python3 \
|
||||
python3-venv \
|
||||
python3-pip \
|
||||
ninja-build
|
||||
|
||||
log "Installing LLVM/Clang ${LLVM_VERSION}"
|
||||
if ! apt-cache show "clang-${LLVM_VERSION}" >/dev/null 2>&1; then
|
||||
warn "clang-${LLVM_VERSION} is not in the current apt sources; adding apt.llvm.org"
|
||||
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | $SUDO gpg --dearmor -o /usr/share/keyrings/llvm-snapshot.gpg
|
||||
CODENAME="$(. /etc/os-release && printf '%s' "${VERSION_CODENAME:-}")"
|
||||
if [ -z "$CODENAME" ]; then
|
||||
CODENAME="$(lsb_release -sc)"
|
||||
fi
|
||||
echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/${CODENAME}/ llvm-toolchain-${CODENAME}-${LLVM_VERSION} main" | \
|
||||
$SUDO tee "/etc/apt/sources.list.d/llvm-${LLVM_VERSION}.list" >/dev/null
|
||||
$SUDO apt-get update
|
||||
fi
|
||||
|
||||
apt_install \
|
||||
"clang-${LLVM_VERSION}" \
|
||||
"clang-tools-${LLVM_VERSION}" \
|
||||
"lld-${LLVM_VERSION}" \
|
||||
"lldb-${LLVM_VERSION}" \
|
||||
"llvm-${LLVM_VERSION}" \
|
||||
"llvm-${LLVM_VERSION}-dev"
|
||||
|
||||
if [ "$MAKE_DEFAULT" = "true" ]; then
|
||||
log "Making Clang ${LLVM_VERSION} the default compiler for this runner"
|
||||
for tool in clang clang++ clang-cpp llvm-ar llvm-ranlib llvm-nm llvm-strip lld lldb; do
|
||||
if command -v "${tool}-${LLVM_VERSION}" >/dev/null 2>&1; then
|
||||
$SUDO update-alternatives --install "/usr/bin/${tool}" "${tool}" "$(command -v "${tool}-${LLVM_VERSION}")" 100
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
log "Installing Meson in an isolated venv"
|
||||
MESON_VENV="/opt/meson-venv"
|
||||
$SUDO python3 -m venv "$MESON_VENV"
|
||||
$SUDO "$MESON_VENV/bin/python" -m pip install --upgrade pip setuptools wheel
|
||||
if [ "$MESON_VERSION" = "latest" ]; then
|
||||
$SUDO "$MESON_VENV/bin/python" -m pip install --upgrade meson
|
||||
else
|
||||
$SUDO "$MESON_VENV/bin/python" -m pip install --upgrade "meson==${MESON_VERSION}"
|
||||
fi
|
||||
$SUDO ln -sf "$MESON_VENV/bin/meson" /usr/local/bin/meson
|
||||
|
||||
if [ "$INSTALL_VULKAN" = "true" ]; then
|
||||
case "$VULKAN_SOURCE" in
|
||||
apt)
|
||||
log "Installing Vulkan development packages from distro apt repositories"
|
||||
apt_install \
|
||||
libvulkan-dev \
|
||||
vulkan-tools \
|
||||
vulkan-validationlayers \
|
||||
glslang-tools \
|
||||
spirv-tools \
|
||||
spirv-headers || {
|
||||
warn "Some Vulkan packages were unavailable; retrying minimal Vulkan package set"
|
||||
apt_install libvulkan-dev vulkan-tools glslang-tools spirv-tools
|
||||
}
|
||||
;;
|
||||
lunarg)
|
||||
log "Installing Vulkan SDK from LunarG (${LUNARG_SDK_VERSION})"
|
||||
. /etc/os-release
|
||||
if [ "${ID:-}" != "ubuntu" ]; then
|
||||
warn "LunarG apt repo is Ubuntu-oriented. Falling back to distro apt Vulkan packages."
|
||||
apt_install libvulkan-dev vulkan-tools glslang-tools spirv-tools
|
||||
else
|
||||
CODENAME="${VERSION_CODENAME:-$(lsb_release -sc)}"
|
||||
curl -fsSL https://packages.lunarg.com/lunarg-signing-key-pub.asc | \
|
||||
$SUDO gpg --dearmor -o /usr/share/keyrings/lunarg.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/lunarg.gpg] https://packages.lunarg.com/vulkan/${LUNARG_SDK_VERSION}/ubuntu ${CODENAME} main" | \
|
||||
$SUDO tee /etc/apt/sources.list.d/lunarg-vulkan-sdk.list >/dev/null
|
||||
$SUDO apt-get update
|
||||
apt_install vulkan-sdk
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported VULKAN_SOURCE=${VULKAN_SOURCE}; expected apt or lunarg" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
log "Versions"
|
||||
python3 --version
|
||||
python3 -m pip --version || true
|
||||
meson --version
|
||||
ninja --version
|
||||
clang --version
|
||||
if command -v vulkaninfo >/dev/null 2>&1; then
|
||||
vulkaninfo --summary || true
|
||||
fi
|
||||
|
||||
log "Build environment ready"
|
||||
Reference in New Issue
Block a user