Browse Source

Added build steps for new platform Miyoo Mini (#5057)

pull/5088/head
Brocky 4 years ago committed by GitHub
parent
commit
1d7f20c9ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 50
      .github/workflows/miyoo_mini_release.yml
  2. 4
      CMake/Platforms.cmake
  3. 30
      CMake/platforms/miyoo_mini.cmake
  4. 109
      Packaging/miyoo_mini/build.sh
  5. 49
      Packaging/miyoo_mini/setup_toolchain.sh
  6. 1
      Packaging/miyoo_mini/skeleton_MiniUI/Diablo/Diablo.m3u
  7. 12
      Packaging/miyoo_mini/skeleton_MiniUI/Diablo/launch.sh
  8. 37
      Packaging/miyoo_mini/skeleton_MiniUI/Diablo/readme.txt
  9. 23
      Packaging/miyoo_mini/skeleton_OnionOS/Emu/PORTS/Binaries/Diablo.port/launch.sh
  10. 0
      Packaging/miyoo_mini/skeleton_OnionOS/Emu/PORTS/PORTS/Diablo.port
  11. BIN
      Packaging/miyoo_mini/skeleton_OnionOS/Emu/PORTS/PORTS/Imgs/Diablo.png
  12. 38
      Packaging/miyoo_mini/skeleton_OnionOS/readme.txt
  13. 6
      Packaging/miyoo_mini/toolchain_env.sh
  14. 7
      docs/building.md
  15. 9
      docs/installing.md

50
.github/workflows/miyoo_mini_release.yml

@ -0,0 +1,50 @@
name: Miyoo Mini Release Build
on:
release:
types: [created]
workflow_dispatch:
jobs:
miyoo-mini:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Install toolchain
working-directory: ${{github.workspace}}
run: sudo Packaging/miyoo_mini/setup_toolchain.sh
- name: Build
working-directory: ${{github.workspace}}
run: >
source Packaging/miyoo_mini/toolchain_env.sh &&
Packaging/miyoo_mini/build.sh
- name: Upload-OnionOS-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v2
with:
name: devilutionx-onion-os.zip
path: build-miyoo-mini/devilutionx-onion-os.zip
- name: Upload-miniUI-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v2
with:
name: devilutionx-miniui.zip
path: build-miyoo-mini/devilutionx-miniui.zip
- name: Update Release
if: ${{ github.event_name == 'release' && github.event.action == 'created' && !env.ACT }}
uses: ncipollo/release-action@v1
with:
artifacts: "build-miyoo-mini/devilutionx-onion-os.zip,build-miyoo-mini/devilutionx-miniui.zip"
allowUpdates: true
omitBody: true
omitName: true
omitPrereleaseDuringUpdate: true
token: ${{ secrets.GITHUB_TOKEN }}

4
CMake/Platforms.cmake

@ -18,7 +18,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD|OpenBSD|DragonFly|NetBSD")
endif()
set(TARGET_PLATFORM host CACHE STRING "Target platform")
set_property(CACHE TARGET_PLATFORM PROPERTY STRINGS host retrofw rg99 rg350 gkd350h cpigamesh)
set_property(CACHE TARGET_PLATFORM PROPERTY STRINGS host retrofw rg99 rg350 gkd350h cpigamesh miyoo_mini)
if(TARGET_PLATFORM STREQUAL "retrofw")
include(platforms/retrofw)
elseif(TARGET_PLATFORM STREQUAL "rg99")
@ -31,6 +31,8 @@ elseif(TARGET_PLATFORM STREQUAL "cpigamesh")
include(platforms/cpigamesh)
elseif(TARGET_PLATFORM STREQUAL "lepus")
include(platforms/lepus)
elseif(TARGET_PLATFORM STREQUAL "miyoo_mini")
include(platforms/miyoo_mini)
endif()
if(NINTENDO_SWITCH)

30
CMake/platforms/miyoo_mini.cmake

@ -0,0 +1,30 @@
set(BUILD_ASSETS_MPQ OFF)
set(USE_SDL1 ON)
set(NONET ON)
set(DEVILUTIONX_SYSTEM_LIBSODIUM OFF)
set(DEVILUTIONX_SYSTEM_BZIP2 OFF)
set(SDL1_VIDEO_MODE_BPP 32)
set(SDL1_VIDEO_MODE_FLAGS SDL_HWSURFACE)
set(SDL1_FORCE_SVID_VIDEO_MODE ON)
set(PREFILL_PLAYER_NAME ON)
set(DEFAULT_AUDIO_SAMPLE_RATE 44100)
# The mini's buttons are connected via GPIO and are mapped to keyboard inputs
set(HAS_KBCTRL 1)
set(KBCTRL_BUTTON_DPAD_LEFT SDLK_LEFT)
set(KBCTRL_BUTTON_DPAD_RIGHT SDLK_RIGHT)
set(KBCTRL_BUTTON_DPAD_UP SDLK_UP)
set(KBCTRL_BUTTON_DPAD_DOWN SDLK_DOWN)
set(KBCTRL_BUTTON_B SDLK_SPACE) # Select spell
set(KBCTRL_BUTTON_A SDLK_LCTRL) # Attack
set(KBCTRL_BUTTON_Y SDLK_LSHIFT) # cast spell
set(KBCTRL_BUTTON_X SDLK_LALT) # pickup item
set(KBCTRL_BUTTON_RIGHTSHOULDER SDLK_t) # use mana potion
set(KBCTRL_BUTTON_LEFTSHOULDER SDLK_e) # use health potion
set(KBCTRL_BUTTON_START SDLK_TAB) # Use L2 for panel hotkeys
set(KBCTRL_BUTTON_BACK SDLK_BACKSPACE) # Use R2 for spell hotkeys
# Map start to menu and select to automap.
set(REMAP_KEYBOARD_KEYS "{SDLK_RETURN,SDLK_ESCAPE},{SDLK_RCTRL,SDLK_TAB}")

109
Packaging/miyoo_mini/build.sh

@ -0,0 +1,109 @@
#!/usr/bin/env bash
set -euo pipefail
declare -r PACKAGING_DIR=`cd -- "$(dirname "$0")" >/dev/null 2>&1; pwd -P`
declare -r CFLAGS="-O3 -marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7ve -Wall"
declare -r LDFLAGS="-lSDL -lmi_sys -lmi_gfx -s -lSDL -lSDL_image"
declare -r BUILD_DIR="build-miyoo-mini"
declare -r MIYOO_CUSTOM_SDL_REPO="https://github.com/Brocky/SDL-1.2-miyoo-mini.git"
declare -r MIYOO_CUSTOM_SDL_BRANCH="miniui-miyoomini"
main() {
# ensure we are in devilutionx root
cd "$PACKAGING_DIR/../.."
rm -f "$BUILD_DIR/CMakeCache.txt"
cmake_configure -DCMAKE_BUILD_TYPE=Release
cmake_build
package_onion
package_miniui
}
cmake_configure() {
cmake -S. -B"$BUILD_DIR" \
"-DTARGET_PLATFORM=miyoo_mini" \
-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \
-DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \
-DBUILD_TESTING=OFF \
-DCMAKE_FIND_ROOT_PATH="/opt/miyoomini-toolchain/arm-linux-gnueabihf/sysroot" \
"$@"
}
cmake_build() {
cmake --build "$BUILD_DIR"
}
build_custom_sdl() {
# make clean folder for custom SDL build
rm -rf $BUILD_DIR/CustomSDL
mkdir $BUILD_DIR/CustomSDL
# clone the repo and build the lib
cd $BUILD_DIR/CustomSDL
git clone $MIYOO_CUSTOM_SDL_REPO --branch $MIYOO_CUSTOM_SDL_BRANCH --single-branch .
./make.sh
# change back to devilutionx root
cd "$PACKAGING_DIR/../.."
cp -rfL "$BUILD_DIR/CustomSDL/build/.libs/libSDL-1.2.so.0" "$BUILD_DIR/OnionOS/Emu/PORTS/Binaries/Diablo.port/lib/libSDL-1.2.so.0"
}
prepare_onion_skeleton() {
mkdir -p $BUILD_DIR/OnionOS
# Copy basic skeleton
cp -rf Packaging/miyoo_mini/skeleton_OnionOS/* $BUILD_DIR/OnionOS
# ensure devilutionx asset dir
mkdir -p $BUILD_DIR/OnionOS/Emu/PORTS/Binaries/Diablo.port/assets
# ensure lib dir for custom SDL
mkdir -p $BUILD_DIR/OnionOS/Emu/PORTS/Binaries/Diablo.port/lib
# ensure config dir
mkdir -p $BUILD_DIR/OnionOS/Saves/CurrentProfile/config/DevilutionX
# ensure save dir
mkdir -p $BUILD_DIR/OnionOS/Saves/CurrentProfile/saves/DevilutionX
}
package_onion() {
prepare_onion_skeleton
build_custom_sdl
# copy assets
cp -rf $BUILD_DIR/assets/* $BUILD_DIR/OnionOS/Emu/PORTS/Binaries/Diablo.port/assets
# copy executable
cp -f $BUILD_DIR/devilutionx $BUILD_DIR/OnionOS/Emu/PORTS/Binaries/Diablo.port/devilutionx
rm -f $BUILD_DIR/onion.zip
cd $BUILD_DIR/OnionOS
zip -r ../devilutionx-onion-os.zip .
cd "$PACKAGING_DIR/../.."
}
prepare_miniui_skeleton() {
mkdir -p $BUILD_DIR/MiniUI
# copy basic skeleton
cp -rf Packaging/miyoo_mini/skeleton_MiniUI/* $BUILD_DIR/MiniUI
# ensure devilutionx asset dir
mkdir -p $BUILD_DIR/MiniUI/Diablo/assets
}
package_miniui() {
prepare_miniui_skeleton
# copy assets
cp -rf $BUILD_DIR/assets/* $BUILD_DIR/MiniUI/Diablo/assets
# copy executable
cp -f $BUILD_DIR/devilutionx $BUILD_DIR/MiniUI/Diablo/devilutionx
rm -f $BUILD_DIR/miniui.zip
cd $BUILD_DIR/MiniUI
zip -r ../devilutionx-miniui.zip .
cd "$PACKAGING_DIR/../.."
}
main

49
Packaging/miyoo_mini/setup_toolchain.sh

@ -0,0 +1,49 @@
#!/bin/sh
main() {
install_dependencies
install_toolchain
}
install_toolchain() {
TOOLCHAIN_VERSION=v0.0.2
TOOLCHAIN_TAR="miyoomini-toolchain.tar.xz"
TOOLCHAIN_ARCH=`uname -m`
if [ "$TOOLCHAIN_ARCH" = "aarch64" ]; then
TOOLCHAIN_REPO=miyoomini-toolchain-buildroot-aarch64
else
TOOLCHAIN_REPO=miyoomini-toolchain-buildroot
fi
TOOLCHAIN_URL="https://github.com/shauninman/$TOOLCHAIN_REPO/releases/download/$TOOLCHAIN_VERSION/$TOOLCHAIN_TAR"
cd /opt
wget "$TOOLCHAIN_URL"
echo "extracting remote toolchain $TOOLCHAIN_VERSION ($TOOLCHAIN_ARCH)"
tar xf "./$TOOLCHAIN_TAR"
rm -rf "./$TOOLCHAIN_TAR"
}
install_dependencies() {
apt-get -y update && apt-get -y install \
bc \
build-essential \
bzip2 \
bzr \
cmake \
cmake-curses-gui \
cpio \
git \
libncurses5-dev \
make \
rsync \
scons \
tree \
unzip \
wget \
zip
}
main

1
Packaging/miyoo_mini/skeleton_MiniUI/Diablo/Diablo.m3u

@ -0,0 +1 @@
launch.sh

12
Packaging/miyoo_mini/skeleton_MiniUI/Diablo/launch.sh

@ -0,0 +1,12 @@
#!/bin/sh
cd "$(dirname "$0")"
HOME="$USERDATA_PATH"
if [ -f "DIABDAT.MPQ" ] || [ -f "spawn.mpq" ]; then
./devilutionx
else
show "okay.png"
say "Missing DIABDAT.MPQ!"$'\n\n'"Please see readme.txt"$'\n'"in the Diablo folder"$'\n'"on your SD card."$'\n'
confirm only
fi

37
Packaging/miyoo_mini/skeleton_MiniUI/Diablo/readme.txt

@ -0,0 +1,37 @@
devilutionx(Diablo port) for MiniUI
====================================
Installation
--------
- Copy this folder onto your SD card in the location /Roms/Native Games (SH)/
For the full game:
- Get the DIABDAT.MPQ from either the CD or GOG release (https://github.com/diasurgical/devilutionX/wiki/Extracting-the-.MPQs-from-the-GoG-installer)
- Copy the DIABDAT.MPQ into this folder
- Optional: If you want to also play the Hellfire expansion, copy hellfire.mpq, hfmonk.mpq, hfmusic.mpq, hfvoice.mpq into this fodler aswell
For the free shareware version:
- Get the spawn.mpq (https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq)
- Copy the spawn.mpq into this folder
Controls
--------
- D-Pad: move
- A: Attack nearest enemy, talk to NPC, pickup/place in inventory, OK in menus
- B: select spell, back in menus
- X: pickup items, open chests and doors, use item in inventory
- Y: cast spell, delete character in main menu
- L: use health item from belt
- R: use mana potion from belt
- Start: game menu (alt: L2 + Up)
- Select: toggle automap (alt: Start + Down)
- L2 show quick acess overlay
- L2 + Up: game menu
- L2 + Down: toggle automap
- L2 + Left: character sheet
- L2 + Right: inventory
- L2 + Y: quest log
- L2 + B: spell book
- R2 + D-Pad: simulate mouse
- R2 + A;B;X;Y: spell hotkeys

23
Packaging/miyoo_mini/skeleton_OnionOS/Emu/PORTS/Binaries/Diablo.port/launch.sh

@ -0,0 +1,23 @@
#!/bin/sh
progdir=`cd -- "$(dirname "$0")" >/dev/null 2>&1; pwd -P`
savedir="/mnt/SDCARD/Saves/CurrentProfile/saves/DevilutionX"
configdir="/mnt/SDCARD/Saves/CurrentProfile/config/DevilutionX"
cd $progdir
if [ -f "./FILES_HERE/DIABDAT.MPQ" ] || [ -f "./FILES_HERE/spawn.mpq" ]; then
# Timer initialisation
cd /mnt/SDCARD/App/PlayActivity
./playActivity "init"
export LD_LIBRARY_PATH="$progdir/lib:$LD_LIBRARY_PATH"
SDL_HIDE_BATTERY=1 $progdir/devilutionx --data-dir $progdir/FILES_HERE --save-dir $savedir --config-dir $configdir
# Timer registration
cd /mnt/SDCARD/App/PlayActivity
./playActivity "Diablo"
else
cd "/mnt/SDCARD/Emu/PORTS/Binaries/missingFile"
./infoPanel
fi

0
Packaging/miyoo_mini/skeleton_OnionOS/Emu/PORTS/PORTS/Diablo.port

BIN
Packaging/miyoo_mini/skeleton_OnionOS/Emu/PORTS/PORTS/Imgs/Diablo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

38
Packaging/miyoo_mini/skeleton_OnionOS/readme.txt

@ -0,0 +1,38 @@
devilutionx(Diablo port) for OnionOS
====================================
Installation
--------
- Activate the Ports Collection inside the Onion Installer on your device
- Copy everything from this archive to the root of your sd card
For the full game:
- Get the DIABDAT.MPQ from either the CD or GOG release (https://github.com/diasurgical/devilutionX/wiki/Extracting-the-.MPQs-from-the-GoG-installer)
- Copy the DIABDAT.MPQ into Emu/PORTS/Binaries/Diablo.port/FILES_HERE
- Optional: If you want to also play the Hellfire expansion, copy hellfire.mpq, hfmonk.mpq, hfmusic.mpq, hfvoice.mpq into the same folder
For the free shareware version:
- Get the spawn.mpq (https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq)
- Copy the spawn.mpq into Emu/PORTS/Binaries/Diablo.port/FILES_HERE
Controls
--------
- D-Pad: move
- A: Attack nearest enemy, talk to NPC, pickup/place in inventory, OK in menus
- B: select spell, back in menus
- X: pickup items, open chests and doors, use item in inventory
- Y: cast spell, delete character in main menu
- L: use health item from belt
- R: use mana potion from belt
- Start: game menu (alt: L2 + Up)
- Select: toggle automap (alt: Start + Down)
- L2 show quick acess overlay
- L2 + Up: game menu
- L2 + Down: toggle automap
- L2 + Left: character sheet
- L2 + Right: inventory
- L2 + Y: quest log
- L2 + B: spell book
- R2 + D-Pad: simulate mouse
- R2 + A;B;X;Y: spell hotkeys

6
Packaging/miyoo_mini/toolchain_env.sh

@ -0,0 +1,6 @@
#!/bin/sh
export PATH="/opt/miyoomini-toolchain/usr/bin:${PATH}:/opt/miyoomini-toolchain/usr/arm-linux-gnueabihf/sysroot/bin"
export CROSS_COMPILE=/opt/miyoomini-toolchain/usr/bin/arm-linux-gnueabihf-
export PREFIX=/opt/miyoomini-toolchain/usr/arm-linux-gnueabihf/sysroot/usr
export UNION_PLATFORM=miyoomini

7
docs/building.md

@ -476,6 +476,13 @@ Packaging/xbox-one/build.bat
[Xbox One/Series manual](manual/platforms/xbox-one.md)
</details>
<details><summary>Miyoo Mini</summary>
Building for Miyoo Mini must be run from inside the [Toolchain Docker image](https://github.com/MiyooMini/union-toolchain).
Executing `Packaging/miyoo_mini/build.sh` will create the folder `build-miyoo-mini/SDROOT` which has the correct structure to be used with
OnionOS Port Collection.
</details>
<details><summary><b>CMake build options</b></summary>
### General

9
docs/installing.md

@ -202,3 +202,12 @@ If you'd like to use this option, scan the QR code below.
~~~
</details>
<details><summary>Miyoo Mini</summary>
**Requires OnionOS to be installed**
- Activate the ports collection by using the onion installer on the device
- Copy the contents of the released .zip-file onto the root of your SD card
- Copy the MPQ files to `/Emu/PORTS/Binaries/Diablo.port/FILES_HERE/`
</details>

Loading…
Cancel
Save