mirror of
https://github.com/SirHumza/orbisRPC.git
synced 2026-10-14 21:01:24 +02:00
This removes the old signed manifest staging flow and makes upgrades check-only notifications, while deleting dead manifest/release-key code and switching default art URLs to the GitHub raw asset pack. It also fixes oversized Discord READY handling by streaming envelope extraction instead of buffering giant frames, avoids repeated reconnect notifications, and updates host tests/build scripts to reflect the new no-install updater path.
69 lines
3.7 KiB
Bash
Executable File
69 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# build.sh - orbisRPC: compile payload ELF + fself for PS4.
|
|
# Usage: ./scripts/build.sh [elf|fself|all] default: all
|
|
# Zero-guess: validates toolchain up front with actionable errors.
|
|
set -euo pipefail
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
cd "$ROOT"
|
|
|
|
SDK="${OO_PS4_TOOLCHAIN:-/Users/mac/PS4Toolchain/OpenOrbis/PS4Toolchain}"
|
|
# Auto-detect Homebrew LLVM on macOS if LLVM_HOME not set
|
|
if [ -z "${LLVM_HOME:-}" ]; then
|
|
for cand in /opt/homebrew/opt/llvm /usr/local/opt/llvm /usr/local/llvm; do
|
|
if [ -x "$cand/bin/clang" ]; then LLVM_HOME="$cand"; break; fi
|
|
done
|
|
fi
|
|
LLVM_BIN="${LLVM_HOME:-/usr/local/opt/llvm}/bin"
|
|
# Auto-detect lld
|
|
if [ -z "${LLD:-}" ]; then
|
|
if [ -x "/Users/mac/lldbuild/build/bin/ld.lld" ]; then LLD="/Users/mac/lldbuild/build/bin/ld.lld"
|
|
elif command -v ld.lld >/dev/null 2>&1; then LLD="$(command -v ld.lld)"
|
|
else LLD="$LLVM_BIN/ld.lld"
|
|
fi
|
|
fi
|
|
export PATH="$LLVM_BIN:$SDK/bin/macos:$PATH"
|
|
CC="$LLVM_BIN/clang"
|
|
LD="$LLD"
|
|
|
|
fail() { echo "BUILD FAIL: $1" >&2; exit 1; }
|
|
[ -x "$CC" ] || fail "clang not found at $CC. Install: brew install llvm OR LLVM_HOME=/path ./scripts/build.sh"
|
|
[ -x "$LD" ] || fail "ld.lld not found at $LD. Set LLD=/path/to/ld.lld"
|
|
[ -d "$SDK" ] || fail "OpenOrbis SDK not found at $SDK. Set OO_PS4_TOOLCHAIN=~/PS4Toolchain/OpenOrbis/PS4Toolchain"
|
|
[ -f "$SDK/lib/crt1.o" ] || fail "missing $SDK/lib/crt1.o — corrupt toolchain download, re-extract v0.5.4"
|
|
[ -f "$SDK/link.x" ] || fail "missing $SDK/link.x — corrupt toolchain download"
|
|
[ -f "$SDK/include/orbis/Net.h" ] || fail "SDK headers missing orkNet.h — wrong SDK version?"
|
|
[ -d "third_party/mbedtls/include" ] || fail "third_party/mbedtls missing — git submodule update --init?"
|
|
[ -f "third_party/mbedtls/include/mbedtls/ssl.h" ] || fail "mbedtls headers missing"
|
|
command -v "$SDK/bin/macos/create-fself-macos" >/dev/null 2>&1 || [ -x "$SDK/bin/macos/create-fself-macos" ] || fail "create-fself-macos missing in SDK/bin/macos"
|
|
|
|
TARGET="x86_64-pc-freebsd12-elf"
|
|
CFLAGS="--target=$TARGET -fPIC -std=gnu11 -Wall -Wno-unused \
|
|
-Wno-int-conversion -Wno-incompatible-pointer-types \
|
|
-DMBEDTLS_NO_PLATFORM_ENTROPY \
|
|
-isystem $SDK/include -Ithird_party/mbedtls/include"
|
|
LIBS="-lc -lkernel -lSceNet -lSceNetCtl -lSceSysmodule \
|
|
-lSceUserService -lSceAppInstUtil -lSceAppContent"
|
|
LDFLAGS="-m elf_x86_64 -pie --eh-frame-hdr -L$SDK/lib $LIBS $SDK/lib/crt1.o --script $SDK/link.x"
|
|
export OO_PS4_TOOLCHAIN="$SDK"
|
|
OUT="$ROOT/build"; mkdir -p "$OUT"
|
|
echo "=== compiling (CC=$CC LD=$LD SDK=$SDK) ==="
|
|
for f in log cfg jsonlite b64 sfo procwalk bigapp fw pkgzone gamecache notify retro tmdb_crypto tmdb updater updater_http updater_util tls ws detect discord daemon compat lock timesync art health main; do
|
|
"$CC" $CFLAGS -c -o "$OUT/$f.o" "orbisrpc/$f.c" || fail "compile $f"
|
|
done
|
|
echo "=== mbedtls (skip net_sockets/timing: POSIX-only) ==="
|
|
for f in $(find third_party/mbedtls/library -name '*.c' ! -name 'net_sockets.c' ! -name 'timing.c' ! -name 'entropy_poll.c' | sort); do
|
|
o="$OUT/mbed_$(echo "$f" | sed 's|third_party/mbedtls/library/||; s|\.c$||').o"
|
|
"$CC" $CFLAGS -c -o "$o" "$f" || fail "mbedtls $f"
|
|
done
|
|
echo "=== linking ($LD) ==="
|
|
"$LD" $OUT/*.o -o "$OUT/orbisrpc.elf" $LDFLAGS || fail "link — see duplicate-symbol or missing-lib errors above"
|
|
echo "ELF -> $OUT/orbisrpc.elf ($(stat -f%z "$OUT/orbisrpc.elf" 2>/dev/null || stat -c%s "$OUT/orbisrpc.elf") bytes)"
|
|
MODE="${1:-all}"
|
|
if [ "$MODE" = "fself" ] || [ "$MODE" = "all" ]; then
|
|
"$SDK/bin/macos/create-fself-macos" -in="$OUT/orbisrpc.elf" \
|
|
-out="$OUT/orbisrpc.fself" --eboot "$OUT/orbisrpc-eboot.bin" --paid 0x3800000000000011 || fail "fself creation"
|
|
echo "FSELF -> $OUT/orbisrpc.fself"
|
|
echo " (GoldHEN payload to deploy is $OUT/orbisrpc.elf -> /data/GoldHEN/payloads/orbisrpc.bin)"
|
|
fi
|
|
echo "done."
|