mirror of
https://github.com/Michele-M-Media/HYPERHEN.git
synced 2026-10-21 16:12:20 -05:00
67 lines
2.4 KiB
Bash
Executable File
67 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build the embedded HyperCore payload from the vendored kstuff-a53 sources.
|
|
# This wrapper deliberately never downloads a release ELF.
|
|
|
|
set -euo pipefail
|
|
|
|
SOURCE_DIR="${1:-}"
|
|
OUTPUT_ELF="${2:-}"
|
|
PS5_PAYLOAD_SDK="${PS5_PAYLOAD_SDK:-}"
|
|
KSTUFF_OBS="${KSTUFF_OBS:-0}"
|
|
HYPERHEN_JOBS="${HYPERHEN_JOBS:-4}"
|
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
HYPERHEN_INCLUDE_DIR="${HYPERHEN_INCLUDE_DIR:-${SCRIPT_DIR}/../source/include}"
|
|
|
|
die() {
|
|
printf 'build_hypercore: %s\n' "$*" >&2
|
|
exit 1
|
|
}
|
|
|
|
[[ -n "${SOURCE_DIR}" && -d "${SOURCE_DIR}" ]] ||
|
|
die "missing kstuff-a53 source directory: ${SOURCE_DIR:-<unset>}"
|
|
[[ -n "${OUTPUT_ELF}" ]] || die "missing output ELF path"
|
|
[[ -n "${PS5_PAYLOAD_SDK}" && -d "${PS5_PAYLOAD_SDK}" ]] ||
|
|
die "PS5_PAYLOAD_SDK must point to an installed PS5 Payload SDK"
|
|
[[ "${KSTUFF_OBS}" == 0 || "${KSTUFF_OBS}" == 1 ]] ||
|
|
die "KSTUFF_OBS must be 0 or 1"
|
|
[[ "${HYPERHEN_JOBS}" =~ ^[1-9][0-9]*$ ]] ||
|
|
die "HYPERHEN_JOBS must be a positive integer"
|
|
|
|
for required in \
|
|
"ps5-kstuff/BearSSL/Makefile" \
|
|
"ps5-kstuff/libtomcrypt/makefile" \
|
|
"ps5-kstuff/isa-l_crypto/include/isa-l_crypto/aes_cbc.h"; do
|
|
[[ -f "${SOURCE_DIR}/${required}" ]] ||
|
|
die "vendored dependency is incomplete: ${required}"
|
|
done
|
|
|
|
export PS5_PAYLOAD_SDK
|
|
export PATH="${PS5_PAYLOAD_SDK}/bin:${PATH}"
|
|
|
|
# The vendored Makefiles generate objects in their source directories. Clean
|
|
# those outputs in dependency order so an interrupted build cannot leave a
|
|
# truncated syscall table or make prosper0gdb link against a half-written
|
|
# archive during the parallel build below.
|
|
make -C "${SOURCE_DIR}/ps5-kstuff-ldr" clean
|
|
make -C "${SOURCE_DIR}/ps5-kstuff" clean
|
|
make -C "${SOURCE_DIR}/prosper0gdb" clean
|
|
make -C "${SOURCE_DIR}/lib" clean
|
|
|
|
make -C "${SOURCE_DIR}/ps5-kstuff" -j"${HYPERHEN_JOBS}" \
|
|
KSTUFF_OBS="${KSTUFF_OBS}" \
|
|
HYPERHEN_INCLUDE_DIR="${HYPERHEN_INCLUDE_DIR}"
|
|
make -C "${SOURCE_DIR}/ps5-kstuff-ldr" -j"${HYPERHEN_JOBS}" \
|
|
KSTUFF_OBS="${KSTUFF_OBS}" \
|
|
HYPERHEN_INCLUDE_DIR="${HYPERHEN_INCLUDE_DIR}"
|
|
|
|
BUILT_ELF="${SOURCE_DIR}/ps5-kstuff-ldr/kstuff.elf"
|
|
[[ -s "${BUILT_ELF}" ]] || die "build completed without ${BUILT_ELF}"
|
|
|
|
mkdir -p "$(dirname "${OUTPUT_ELF}")"
|
|
cp -f "${BUILT_ELF}" "${OUTPUT_ELF}"
|
|
printf 'HyperCore source: kstuff-a53 commit 0a69ea31759f048d24b38bfaa23dbec1fd065916\n' \
|
|
> "${OUTPUT_ELF}.provenance"
|
|
|
|
printf 'build_hypercore: wrote %s (%s bytes)\n' \
|
|
"${OUTPUT_ELF}" "$(wc -c < "${OUTPUT_ELF}" | tr -d ' ')"
|