You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.4 KiB
82 lines
2.4 KiB
#!/bin/bash |
|
set -euo pipefail |
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|
ROOT_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)" |
|
BUILD_DIR="${ROOT_DIR}/build-dreamcast" |
|
CD_ROOT="${SCRIPT_DIR}/cd_root" |
|
|
|
ELF_NAME="devilutionx.elf" |
|
STRIPPED_NAME="devilutionx-stripped.elf" |
|
BIN_NAME="1ST_READ.BIN" |
|
|
|
KOS_BASE="${KOS_BASE:-/opt/toolchains/dc/kos}" |
|
KOS_ENV="${KOS_ENV:-${KOS_BASE}/environ.sh}" |
|
MKDCDISC="${MKDCDISC:-/opt/toolchains/dc/antiruins/tools/mkdcdisc}" |
|
|
|
if [ -f "${KOS_ENV}" ]; then |
|
# shellcheck disable=SC1090 |
|
# Temporarily disable -u because KOS environ may have unbound variables |
|
set +u |
|
source "${KOS_ENV}" |
|
set -u |
|
else |
|
echo "Error: KOS environ not found at ${KOS_ENV}" |
|
exit 1 |
|
fi |
|
|
|
if [ ! -x "${MKDCDISC}" ]; then |
|
echo "Error: mkdcdisc not found at ${MKDCDISC}" |
|
exit 1 |
|
fi |
|
|
|
GPF_SDL_DIR="${SCRIPT_DIR}/SDL-gpf" |
|
GPF_SDL_LIB="${KOS_BASE}/addons/lib/dreamcast/libSDL.a" |
|
GPF_SDL_HEADER="${KOS_BASE}/addons/include/dreamcast/SDL/SDL_dreamcast.h" |
|
|
|
if [ ! -f "${GPF_SDL_HEADER}" ]; then |
|
echo "Building GPF SDL (SDL-dreamhal--GLDC) for DMA video..." |
|
if [ ! -d "${GPF_SDL_DIR}" ]; then |
|
git clone --depth 1 -b SDL-dreamhal--GLDC \ |
|
https://github.com/GPF/SDL-1.2 "${GPF_SDL_DIR}" |
|
fi |
|
make -C "${GPF_SDL_DIR}" -f Makefile.dc -j"$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)" |
|
echo "GPF SDL installed to ${GPF_SDL_LIB}" |
|
else |
|
echo "GPF SDL already installed at ${GPF_SDL_LIB}" |
|
fi |
|
|
|
rm -rf "${BUILD_DIR}" |
|
mkdir -p "${BUILD_DIR}" |
|
|
|
cmake_args=( |
|
-S "${ROOT_DIR}" |
|
-B "${BUILD_DIR}" |
|
-DCMAKE_TOOLCHAIN_FILE="${ROOT_DIR}/CMake/platforms/dreamcast.toolchain.cmake" |
|
-DDEVILUTIONX_SYSTEM_LUA=OFF |
|
) |
|
|
|
if command -v ninja >/dev/null 2>&1; then |
|
cmake_args+=(-G Ninja) |
|
fi |
|
|
|
cmake "${cmake_args[@]}" |
|
cmake --build "${BUILD_DIR}" -j"$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)" |
|
|
|
if [ ! -f "${BUILD_DIR}/${ELF_NAME}" ]; then |
|
echo "Error: ${BUILD_DIR}/${ELF_NAME} not found after build" |
|
exit 1 |
|
fi |
|
|
|
sh-elf-strip -s "${BUILD_DIR}/${ELF_NAME}" -o "${BUILD_DIR}/${STRIPPED_NAME}" |
|
|
|
mkdir -p "${CD_ROOT}" |
|
cp "${BUILD_DIR}/${STRIPPED_NAME}" "${CD_ROOT}/${BIN_NAME}" |
|
cp "${BUILD_DIR}/devilutionx.mpq" "${CD_ROOT}/devilutionx.mpq" |
|
|
|
"${MKDCDISC}" -e "${CD_ROOT}/${BIN_NAME}" \ |
|
-D "${CD_ROOT}" \ |
|
-o "${SCRIPT_DIR}/devilutionx-playable.cdi" \ |
|
-n "DevilutionX" |
|
|
|
echo "CDI: ${SCRIPT_DIR}/devilutionx-playable.cdi"
|
|
|