Files
chimera-gfx-Public/tools/build-phase1-videoout.sh
Chimera GFX release export a6037502d7
phase0-ci / build-and-audit (push) Successful in 2m14s
Publish Chimera GFX source
2026-09-03 03:27:14 +02:00

98 lines
3.4 KiB
Bash

#!/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."