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.
122 lines
2.9 KiB
122 lines
2.9 KiB
#!/usr/bin/env bash |
|
|
|
set -euo pipefail |
|
|
|
usage() { |
|
echo "Usage: build.sh [target]" |
|
echo " target: target architecture. Either rs90, rg350 or retrofw" |
|
} |
|
|
|
if [[ $# -ne 1 ]]; then |
|
echo "Error: target is missing" |
|
usage |
|
exit 1 |
|
fi |
|
|
|
if [[ "$1" != "rs90" ]] && [[ "$1" != "rg350" ]] && [[ "$1" != "retrofw" ]]; then |
|
echo "Error: invalid target" |
|
usage |
|
exit 1 |
|
fi |
|
|
|
declare -r TARGET="${1}" |
|
echo "Building for target: ${TARGET}" |
|
|
|
declare -r DIR="$(dirname "${BASH_SOURCE[0]}")" |
|
cd "$DIR" |
|
declare -r ABSDIR="$(pwd)" |
|
|
|
if [[ "$TARGET" == "retrofw" ]]; then |
|
declare -r BUILDROOT_VER=buildroot-2018.02.9 |
|
declare -r BUILDROOT_ARCHIVE="$HOME/${BUILDROOT_VER}.tar.gz" |
|
fi |
|
|
|
BUILDROOT="${BUILDROOT:-$HOME/buildroot-${TARGET}-devilutionx}" |
|
|
|
main() { |
|
set -x |
|
prepare_buildroot |
|
make_buildroot |
|
build |
|
package |
|
} |
|
|
|
prepare_buildroot() { |
|
if [[ -d $BUILDROOT ]]; then |
|
return |
|
fi |
|
if [[ "$TARGET" == "rg350" ]]; then |
|
git clone --depth=1 https://github.com/tonyjih/RG350_buildroot.git "$BUILDROOT" |
|
elif [[ "$TARGET" == "rs90" ]]; then |
|
git clone --depth=1 -b od-rs90 https://github.com/OpenDingux/buildroot.git "$BUILDROOT" |
|
else |
|
if [[ ! -f $BUILDROOT_ARCHIVE ]]; then |
|
\curl https://buildroot.org/downloads/${BUILDROOT_VER}.tar.gz -o "$BUILDROOT_ARCHIVE" |
|
fi |
|
tar xf "$BUILDROOT_ARCHIVE" -C "$(dirname "$BUILDROOT_ARCHIVE")" |
|
mv "${BUILDROOT_ARCHIVE%.tar.gz}" "$BUILDROOT" |
|
fi |
|
cp buildroot_${TARGET}_defconfig "$BUILDROOT/configs/${TARGET}_devilutionx_defconfig" |
|
} |
|
|
|
make_buildroot() { |
|
cd "$BUILDROOT" |
|
if [[ "$TARGET" != "rg350" ]]; then |
|
if ! grep '--enable-static' package/libsodium/libsodium.mk; then |
|
echo 'LIBSODIUM_CONF_OPTS += --enable-static' >> package/libsodium/libsodium.mk |
|
fi |
|
fi |
|
make ${TARGET}_devilutionx_defconfig |
|
if [[ "$TARGET" == "rg350" ]]; then |
|
BR2_JLEVEL=0 make |
|
else |
|
BR2_JLEVEL=0 make toolchain libsodium libzip sdl sdl_mixer sdl_ttf |
|
fi |
|
cd - |
|
} |
|
|
|
build() { |
|
mkdir -p ../../build |
|
cd ../../build |
|
rm -f CMakeCache.txt |
|
|
|
local -a defs=(-DDINGUX=ON -DBINARY_RELEASE=ON) |
|
if [[ "$TARGET" == "rg350" ]]; then |
|
defs+=(-DNONET=ON) |
|
elif [[ "$TARGET" == "rs90" ]]; then |
|
defs+=(-DUSE_SDL1=ON) |
|
else |
|
defs+=( |
|
-DUSE_SDL1=ON |
|
-DRETROFW=ON |
|
-DHAS_KBCTRL=1 |
|
-DKBCTRL_BUTTON_DPAD_LEFT=SDLK_LEFT |
|
-DKBCTRL_BUTTON_DPAD_RIGHT=SDLK_RIGHT |
|
-DKBCTRL_BUTTON_DPAD_UP=SDLK_UP |
|
-DKBCTRL_BUTTON_DPAD_DOWN=SDLK_DOWN |
|
-DKBCTRL_BUTTON_B=SDLK_LCTRL |
|
-DKBCTRL_BUTTON_A=SDLK_LALT |
|
-DKBCTRL_BUTTON_Y=SDLK_SPACE |
|
-DKBCTRL_BUTTON_X=SDLK_LSHIFT |
|
-DKBCTRL_BUTTON_RIGHTSHOULDER=SDLK_BACKSPACE |
|
-DKBCTRL_BUTTON_LEFTSHOULDER=SDLK_TAB |
|
-DKBCTRL_BUTTON_START=SDLK_RETURN |
|
-DKBCTRL_BUTTON_BACK=SDLK_ESCAPE |
|
-DKBCTRL_MODIFIER_KEY=SDLK_END |
|
) |
|
fi |
|
cmake .. ${defs[@]} \ |
|
-DCMAKE_TOOLCHAIN_FILE="$BUILDROOT/output/host/usr/share/buildroot/toolchainfile.cmake" |
|
make -j $(nproc) |
|
cd - |
|
} |
|
|
|
package() { |
|
if [[ "$TARGET" == "retrofw" ]]; then |
|
./package-ipk.sh ../../build/devilutionx-retrofw.ipk |
|
else |
|
./package-opk.sh ../../build/devilutionx-${TARGET}.opk |
|
fi |
|
} |
|
|
|
main
|
|
|