diff --git a/local/scripts/build-redbear.sh b/local/scripts/build-redbear.sh index 59ed39fc4b..5435c2ae33 100755 --- a/local/scripts/build-redbear.sh +++ b/local/scripts/build-redbear.sh @@ -9,7 +9,7 @@ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" # REDBEAR_VERSION (which tracks the OS release derived from the git branch). # Starts at 1.0 and is bumped AUTOMATICALLY on every change by the pre-commit # git hook (local/scripts/bump-build-version.sh); do not edit the minor by hand. -BUILD_REDBEAR_VERSION="1.6" +BUILD_REDBEAR_VERSION="1.7" # ── Colorized output ────────────────────────────────── # Enabled only on a TTY with NO_COLOR unset, so redirected build logs and CI @@ -1057,6 +1057,53 @@ if [ ! -e "$_HOST_TC_DIR/toolchain" ] && [ -d "$_REDOX_TC" ]; then ln -sfn "$_REDOX_TC" "$_HOST_TC_DIR/toolchain" fi +# --- Ensure the redoxer toolchain LLVM carries the AMDGPU (+NVPTX) backend --- +# Mesa resolves `dependency('llvm', modules: [amdgpu, ...])` against the host +# llvm-config in the redoxer toolchain (COOKBOOK_HOST_SYSROOT, set by the mesa +# recipe). The prebuilt toolchain LLVM is compiled X86;AArch64;RISCV only — no +# GPU codegen backend — so radeonsi/radv AND the Intel iris/ANV CLC precompile +# path fail that dependency and the whole desktop (Mesa) stack silently drops. +# The prebuilt host toolchain LLVM is not regenerated by the (binary) prefix, so +# cook host:llvm21 (its recipe carries X86;AMDGPU;NVPTX) and splice its +# llvm-config + libLLVM.so + AMDGPU headers/static libs into the toolchain. +# Idempotent: a fast no-op once the toolchain already reports AMDGPU. +if [ "$CONFIG" = "redbear-full" ]; then + _TC="$HOME/.redoxer/x86_64-unknown-redox/toolchain" + _REPO="$PROJECT_ROOT/target/release/repo" + if [ -x "$_TC/bin/llvm-config" ] \ + && ! "$_TC/bin/llvm-config" --targets-built 2>/dev/null | grep -qw AMDGPU; then + echo "${C_INFO}>>>${C_RESET} Toolchain LLVM lacks the AMDGPU backend — cooking host:llvm21 (X86;AMDGPU;NVPTX) and splicing it into the toolchain (Mesa needs this)..." + if REDBEAR_CANONICAL_BUILD=1 "$_REPO" cook host:llvm21; then + _ST="$PROJECT_ROOT/recipes/dev/llvm21/target/x86_64-unknown-linux-gnu" + _LC="$_ST/stage.runtime/usr/bin/llvm-config" + if [ -x "$_LC" ] && "$_LC" --targets-built | grep -qw AMDGPU; then + if [ ! -d "$_TC/.pre-amdgpu-backup" ]; then + mkdir -p "$_TC/.pre-amdgpu-backup/bin" "$_TC/.pre-amdgpu-backup/lib" + cp -a "$_TC/bin/llvm-config" "$_TC/.pre-amdgpu-backup/bin/" 2>/dev/null || true + cp -a "$_TC"/lib/libLLVM* "$_TC/.pre-amdgpu-backup/lib/" 2>/dev/null || true + fi + rsync -a "$_LC" "$_TC/bin/llvm-config" + rsync -a "$_ST"/stage/usr/lib/libLLVM.so "$_ST"/stage/usr/lib/libLLVM.so.* "$_ST"/stage/usr/lib/libLLVM-*.so "$_TC/lib/" 2>/dev/null || true + rsync -a "$_ST"/stage.dev/usr/lib/libLLVM*.a "$_TC/lib/" 2>/dev/null || true + rsync -a --delete "$_ST"/stage.dev/usr/include/llvm "$_TC/include/" 2>/dev/null || true + rsync -a --delete "$_ST"/stage.dev/usr/include/llvm-c "$_TC/include/" 2>/dev/null || true + if "$_TC/bin/llvm-config" --targets-built | grep -qw AMDGPU; then + echo "${C_INFO}>>>${C_RESET} Toolchain LLVM now provides AMDGPU/NVPTX." + else + echo "${C_ERR}>>> ERROR:${C_RESET} AMDGPU splice failed (toolchain still lacks AMDGPU)." >&2 + exit 1 + fi + else + echo "${C_ERR}>>> ERROR:${C_RESET} host:llvm21 did not stage an AMDGPU-enabled llvm-config." >&2 + exit 1 + fi + else + echo "${C_ERR}>>> ERROR:${C_RESET} host:llvm21 cook failed (required for the Mesa AMDGPU backend)." >&2 + exit 1 + fi + fi +fi + echo "${C_INFO}>>>${C_RESET} Pre-cooking critical packages..." if [ "$CONFIG" = "redbear-full" ]; then # The Qt stack has a strict internal build order (qtbase -> qtshadertools ->