#!/usr/bin/env bash # SPDX-License-Identifier: GPL-3.0-or-later set -euo pipefail readonly expected_sdl_commit="0baf4ac49382b537ba449901b5b6d0d189bb1fbb" readonly script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly root="$(cd "${script_dir}/.." && pwd)" readonly sdk="${PS5_PAYLOAD_SDK:-${root}/work/toolchains/ps5-payload-sdk-v0.41}" readonly sdl_source="${CHIMERA_GFX_SDL_SOURCE:-${root}/work/upstream/SDL}" readonly sdl_stage="${root}/work/generated/SDL-phase1-video-only" readonly sdl_build="${root}/build/phase1-sdl" readonly project_build="${root}/build/phase1-videoout" readonly sdl_patch="${root}/packaging/patches/sdl2-phase1-video-only.patch" if [[ ! -f "${sdk}/toolchain/prospero.cmake" ]]; then echo "missing verified PS5 Payload SDK v0.41" >&2 exit 2 fi if ! command -v llvm-readelf-18 >/dev/null 2>&1; then echo "missing llvm-readelf-18 for the strict dynamic-table audit" >&2 exit 2 fi if [[ ! -d "${sdl_source}/.git" ]]; then echo "missing pinned PS5 SDL source checkout" >&2 exit 2 fi if [[ "$(git -C "${sdl_source}" rev-parse HEAD)" != "${expected_sdl_commit}" ]]; then echo "PS5 SDL checkout is not at the locked commit" >&2 exit 2 fi if [[ ! -e "${sdl_stage}/.git" ]]; then mkdir -p "$(dirname "${sdl_stage}")" git -C "${sdl_source}" -c core.autocrlf=false -c core.eol=lf \ worktree add --detach "${sdl_stage}" "${expected_sdl_commit}" fi if [[ "$(git -C "${sdl_stage}" rev-parse HEAD)" != "${expected_sdl_commit}" ]]; then echo "staged PS5 SDL checkout is not at the locked commit" >&2 exit 2 fi if git -C "${sdl_stage}" apply --check "${sdl_patch}" 2>/dev/null; then git -C "${sdl_stage}" apply "${sdl_patch}" elif ! git -C "${sdl_stage}" apply --reverse --check "${sdl_patch}" \ 2>/dev/null; then echo "staged PS5 SDL checkout differs from the reviewed overlay" >&2 exit 2 fi if [[ "$(git -C "${sdl_stage}" diff --name-only)" != \ "src/video/ps5/SDL_ps5video.c" ]]; then echo "staged PS5 SDL checkout has changes outside the reviewed overlay" >&2 exit 2 fi export LLVM_CONFIG="${LLVM_CONFIG:-/usr/bin/llvm-config-18}" cmake -S "${sdl_stage}" -B "${sdl_build}" -G Ninja \ -DCMAKE_TOOLCHAIN_FILE="${sdk}/toolchain/prospero.cmake" \ -DCMAKE_BUILD_TYPE=Release \ -DSDL_SHARED=OFF \ -DSDL_STATIC=ON \ -DSDL_TEST=OFF \ -DSDL2_DISABLE_SDL2MAIN=ON \ -DSDL_AUDIO=OFF \ -DSDL_JOYSTICK=OFF \ -DSDL_HAPTIC=OFF \ -DSDL_SENSOR=OFF \ -DSDL_POWER=OFF \ -DSDL_FILE=OFF \ -DSDL_FILESYSTEM=OFF \ -DSDL_LOCALE=OFF \ -DSDL_MISC=OFF \ -DSDL_OPENGL=OFF \ -DSDL_LOADSO=OFF \ -DSDL_RENDER=OFF \ -DSDL_VULKAN=OFF \ -DSDL_DUMMYVIDEO=OFF \ -DSDL_OFFSCREEN=OFF \ -DSDL_HIDAPI=OFF cmake --build "${sdl_build}" --target SDL2-static cmake -S "${root}" -B "${project_build}" -G Ninja \ -DCMAKE_TOOLCHAIN_FILE="${sdk}/toolchain/prospero.cmake" \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TESTING=OFF \ -DCHIMERA_GFX_BUILD_PS5_PROBE=ON \ -DCHIMERA_GFX_BUILD_PHASE1_VIDEOOUT_CLEAR=ON \ -DCHIMERA_GFX_PHASE1_SDL_BUILD="${sdl_build}" \ -DCHIMERA_GFX_PS5_ALLOWED_FIRMWARE=NONE cmake --build "${project_build}" --clean-first python3 "${root}/tools/audit_ps5_artifacts.py" \ --nm "${sdk}/bin/prospero-nm" \ --readelf "$(command -v llvm-readelf-18)" \ --probe "${project_build}/chimera-gfx-capability-probe.elf" \ --symbol-manifest "${root}/manifests/ps5_gnm_symbols.json" \ --phase1 "${project_build}/chimera-gfx-phase1-videoout-clear.elf" echo "Built offline only; do not transfer or execute either ELF."