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

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