Skip to content

Commit d150df4

Browse files
committed
ci: Amiberry: Implement Amiberry v7 build
1 parent 4a28191 commit d150df4

File tree

9 files changed

+319
-375
lines changed

9 files changed

+319
-375
lines changed

.build/software/Amiberry/build.bash

Lines changed: 48 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
#!/bin/bash
22
{
33
. /boot/dietpi/func/dietpi-globals || exit 1
4-
5-
[[ $1 ]] && PLATFORM=$1
6-
[[ $PLATFORM ]] || { G_WHIP_INPUTBOX 'Build Amiberry? Enter platform: https://github.com/BlitterStudio/amiberry/blob/master/Makefile' && PLATFORM=$G_WHIP_RETURNED_VALUE || exit 0; }
7-
G_DIETPI-NOTIFY 2 "Amiberry will be built for platform: \e[33m$PLATFORM"
4+
grep -q '^ID=raspbian' /etc/os-release && G_HW_ARCH=1 G_HW_ARCH_NAME='armv6l'
85

96
# APT dependencies
10-
# - wget: Used for WHDLoad database update: https://github.com/BlitterStudio/amiberry/commit/d6c103e
117
# - kbd: For "chvt" used in systemd service
12-
adeps_build=('autoconf' 'make' 'cmake' 'g++' 'pkg-config' 'libdrm-dev' 'libgbm-dev' 'libudev-dev' 'libxml2-dev' 'libpng-dev' 'libfreetype6-dev' 'libflac-dev' 'libmpg123-dev' 'libmpeg2-4-dev' 'libasound2-dev' 'libserialport-dev' 'libportmidi-dev' 'wget' 'kbd')
13-
adeps=('libdrm2' 'libgl1-mesa-dri' 'libgbm1' 'libegl1' 'libudev1' 'libxml2' 'libpng16-16' 'libfreetype6' 'libmpg123-0' 'libmpeg2-4' 'libasound2' 'libserialport0' 'libportmidi0' 'wget' 'kbd')
14-
(( $G_DISTRO > 6 )) && adeps+=('libflac12') || adeps+=('libflac8')
15-
# - Deps for RPi DispmanX builds
16-
[[ $PLATFORM == 'rpi'[1-5] || $PLATFORM == 'rpi'[345]'-64-dmx' ]] && adeps_build+=('libraspberrypi-dev') adeps+=('libraspberrypi0')
8+
adeps_build=('autoconf' 'make' 'cmake' 'g++' 'pkg-config' 'libdrm-dev' 'libgbm-dev' 'libudev-dev' 'libxml2-dev' 'libpng-dev' 'libfreetype6-dev' 'libflac-dev' 'libmpg123-dev' 'libmpeg2-4-dev' 'libasound2-dev' 'libserialport-dev' 'libportmidi-dev' 'libenet-dev' 'kbd')
9+
adeps=('libdrm2' 'libgl1-mesa-dri' 'libgbm1' 'libegl1' 'libudev1' 'libxml2' 'libpng16-16' 'libfreetype6' 'libmpg123-0' 'libmpeg2-4' 'libasound2' 'libserialport0' 'libportmidi0' 'libenet7' 'kbd')
10+
case $G_DISTRO in
11+
6) adeps+=('libflac8');;
12+
7) adeps+=('libflac12');;
13+
8) adeps+=('libflac14');;
14+
*) G_DIETPI-NOTIFY 1 "Unsupported distro version: $G_DISTRO_NAME (ID=$G_DISTRO)"; exit 1;;
15+
esac
1716
# - Graphics rendering flags and deps
1817
(( $G_HW_ARCH == 10 )) && opengl_flags=('--disable-video-opengles2' '--enable-video-opengl') adeps_build+=('libgl1-mesa-dev') adeps+=('libgl1') || opengl_flags=('--enable-video-opengles2' '--disable-video-opengl') adeps_build+=('libgles2-mesa-dev') adeps+=('libgles2')
1918

@@ -28,7 +27,7 @@ do
2827
done
2928

3029
# Build libSDL2
31-
v_sdl=$(curl -sSf 'https://api.github.com/repos/libsdl-org/SDL/releases/latest' | mawk -F\" '/^ "name"/{print $4}')
30+
v_sdl=$(curl -sSf 'https://api.github.com/repos/libsdl-org/SDL/releases' | mawk -F\" '/^ *"name": "2./{print $4}' | head -1)
3231
[[ $v_sdl ]] || { G_DIETPI-NOTIFY 1 'No latest LibSDL2 version found, aborting ...'; exit 1; }
3332
if [[ ! -d /tmp/SDL2-$v_sdl ]]
3433
then
@@ -48,7 +47,7 @@ else
4847
fi
4948

5049
# Build libSDL2_image
51-
v_img=$(curl -sSf 'https://api.github.com/repos/libsdl-org/SDL_image/releases/latest' | mawk -F\" '/^ "name"/{print $4}')
50+
v_img=$(curl -sSf 'https://api.github.com/repos/libsdl-org/SDL_image/releases' | mawk -F\" '/^ *"name": "2./{print $4}' | head -1)
5251
[[ $v_img ]] || { G_DIETPI-NOTIFY 1 'No latest libSDL2_image version found, aborting ...'; exit 1; }
5352
if [[ ! -d /tmp/SDL2_image-$v_img ]]
5453
then
@@ -68,7 +67,7 @@ else
6867
fi
6968

7069
# Build libSDL2_ttf
71-
v_ttf=$(curl -sSf 'https://api.github.com/repos/libsdl-org/SDL_ttf/releases/latest' | mawk -F\" '/^ "name"/{print $4}')
70+
v_ttf=$(curl -sSf 'https://api.github.com/repos/libsdl-org/SDL_ttf/releases' | mawk -F\" '/^ *"name": "2./{print $4}' | head -1)
7271
[[ $v_ttf ]] || { G_DIETPI-NOTIFY 1 'No latest libSDL2_ttf version found, aborting ...'; exit 1; }
7372
if [[ ! -d /tmp/SDL2_ttf-$v_ttf ]]
7473
then
@@ -87,79 +86,72 @@ else
8786
G_DIETPI-NOTIFY 2 'Skipping libSDL2_ttf which has been built already'
8887
fi
8988

90-
# Build capsimg: IPF support
91-
if [[ ! -d '/tmp/capsimg-master' ]]
92-
then
93-
G_DIETPI-NOTIFY 2 'Building capsimg'
94-
G_EXEC cd /tmp
95-
G_EXEC curl -sSfLO 'https://github.com/FrodeSolheim/capsimg/archive/master.tar.gz'
96-
G_EXEC tar xf master.tar.gz
97-
G_EXEC rm master.tar.gz
98-
G_EXEC cd capsimg-master
99-
# RISC-V: "checking build system type... ./config.guess: unable to guess system type"
100-
G_EXEC curl -sSfo CAPSImg/config.guess 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
101-
G_EXEC curl -sSfo CAPSImg/config.sub 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
102-
G_EXEC_OUTPUT=1 G_EXEC ./bootstrap
103-
G_EXEC_OUTPUT=1 G_EXEC ./configure CFLAGS='-g0 -O3' CXXFLAGS='-g0 -O3'
104-
G_EXEC_OUTPUT=1 G_EXEC make "-j$(nproc)"
105-
G_EXEC strip --strip-unneeded --remove-section=.comment --remove-section=.note capsimg.so
106-
else
107-
G_DIETPI-NOTIFY 2 'Skipping capsimg which has been built already'
108-
fi
109-
11089
# Build Amiberry
11190
v_ami=$(curl -sSf 'https://api.github.com/repos/BlitterStudio/amiberry/releases/latest' | mawk -F\" '/^ "tag_name"/{print $4}')
11291
[[ $v_ami ]] || { G_DIETPI-NOTIFY 1 'No latest Amiberry version found, aborting ...'; exit 1; }
11392
v_ami=${v_ami#v}
114-
# - ARMv6: v5.7.2 dropped support for Raspberry Pi 1, hence use v5.7.1
115-
# - Build v5.7.4 until v7.0.0 stable has been released. It requires a major rework, using cmake and no device-specific targets anymore.
116-
[[ $PLATFORM == 'rpi1'* ]] && v_ami='5.7.1' || v_ami='5.7.4'
117-
G_DIETPI-NOTIFY 2 "Building Amiberry version \e[33m$v_ami\e[90m for platform: \e[33m$PLATFORM"
93+
G_DIETPI-NOTIFY 2 "Building Amiberry version \e[33m$v_ami"
11894
G_EXEC cd /tmp
11995
G_EXEC curl -sSfLO "https://github.com/BlitterStudio/amiberry/archive/v$v_ami.tar.gz"
12096
[[ -d amiberry-$v_ami ]] && G_EXEC rm -R "amiberry-$v_ami"
12197
G_EXEC tar xf "v$v_ami.tar.gz"
12298
G_EXEC rm "v$v_ami.tar.gz"
12399
G_EXEC cd "amiberry-$v_ami"
124100
# - RISC-V: Workaround for missing ld.gold: https://github.com/BlitterStudio/amiberry/issues/1213
125-
RISCV_LD=()
126-
(( $G_HW_ARCH == 11 )) && RISCV_LD=('USE_LD=bfd')
127-
G_EXEC_OUTPUT=1 G_EXEC make "-j$(nproc)" "PLATFORM=$PLATFORM" "${RISCV_LD[@]}" # Passing flags here overrides some mandatory flags in the Makefile, where -O3 is set as well.
128-
G_EXEC strip --remove-section=.comment --remove-section=.note amiberry
101+
#RISCV_LD=()
102+
#(( $G_HW_ARCH == 11 )) && RISCV_LD=('USE_LD=bfd')
103+
G_EXEC_OUTPUT=1 G_EXEC cmake -B build -DCMAKE_INSTALL_PREFIX=/usr
104+
G_EXEC_OUTPUT=1 G_EXEC cmake --build build
105+
G_EXEC strip --remove-section=.comment --remove-section=.note build/amiberry
129106

130107
# Prepare DEB package
131108
G_DIETPI-NOTIFY 2 'Building Amiberry DEB package'
132109
G_EXEC cd /tmp
133-
DIR="amiberry_$PLATFORM"
110+
DIR="amiberry_$G_HW_ARCH_NAME"
134111
[[ -d $DIR ]] && G_EXEC rm -R "$DIR"
135-
G_EXEC mkdir -p "$DIR/"{DEBIAN,mnt/dietpi_userdata/amiberry/lib,lib/systemd/system}
112+
G_EXEC mkdir -p "$DIR/"{DEBIAN,mnt/dietpi_userdata/amiberry,lib/systemd/system}
136113

137114
# - Copy files in place
138-
G_EXEC mv "/tmp/amiberry-$v_ami/"{abr,conf,controllers,data,kickstarts,savestates,screenshots,whdboot,amiberry} "$DIR/mnt/dietpi_userdata/amiberry/"
139-
G_EXEC cp -aL /usr/local/lib/libSDL2{,_image,_ttf}-2.0.so.0 "$DIR/mnt/dietpi_userdata/amiberry/lib/"
140-
G_EXEC cp -a /tmp/capsimg-master/capsimg.so "$DIR/mnt/dietpi_userdata/amiberry/lib/"
115+
G_EXEC_OUTPUT=1 G_EXEC cmake --install "amiberry-$v_ami/build" --prefix "$DIR/usr"
116+
# - Obtain library dir
117+
LIB_DIR=$(find "$DIR/usr/lib/"*'/amiberry' -maxdepth 0)
118+
G_EXEC cp -aL /usr/local/lib/libSDL2{,_image,_ttf}-2.0.so.0 "$LIB_DIR/"
141119

142120
# - systemd service
143-
cat << '_EOF_' > "$DIR/lib/systemd/system/amiberry.service"
121+
cat << _EOF_ > "$DIR/lib/systemd/system/amiberry.service"
144122
[Unit]
145123
Description=Amiberry Amiga Emulator (DietPi)
146124
Documentation=https://github.com/BlitterStudio/amiberry/wiki
147125
148126
[Service]
127+
Environment=LD_LIBRARY_PATH=${LIB_DIR#"$DIR"}
128+
Environment=HOME=/mnt/dietpi_userdata/amiberry
129+
Environment=XDG_DATA_HOME=/mnt/dietpi_userdata
130+
Environment=XDG_CONFIG_HOME=/mnt/dietpi_userdata
131+
Environment=AMIBERRY_HOME_DIR=/mnt/dietpi_userdata/amiberry
132+
Environment=AMIBERRY_CONFIG_DIR=/mnt/dietpi_userdata/amiberry/conf
149133
WorkingDirectory=/mnt/dietpi_userdata/amiberry
150-
Environment=LD_LIBRARY_PATH=/mnt/dietpi_userdata/amiberry/lib
151134
StandardInput=tty
152135
TTYPath=/dev/tty3
153136
ExecStartPre=/bin/chvt 3
154-
ExecStart=/mnt/dietpi_userdata/amiberry/amiberry
137+
ExecStart=/usr/bin/amiberry
155138
ExecStopPost=/bin/chvt 1
156139
157140
[Install]
158-
WantedBy=local-fs.target
141+
WantedBy=multi-user.target
159142
_EOF_
160143

161-
# - conffiles
162-
echo '/mnt/dietpi_userdata/amiberry/conf/amiberry.conf' > "$DIR/DEBIAN/conffiles"
144+
# - preinst
145+
cat << '_EOF_' > "$DIR/DEBIAN/preinst"
146+
#!/bin/sh
147+
if [ -d '/mnt/dietpi_userdata/amiberry' ] && [ ! -d '/mnt/dietpi_userdata/amiberry_v5_bak' ] && dpkg --compare-versions "$2" le '5.7.4'
148+
then
149+
echo 'Backing up Amiberry v5 config/data dir to /mnt/dietpi_userdata/amiberry_v5_bak ...'
150+
rm -Rf /mnt/dietpi_userdata/amiberry/amiberry /mnt/dietpi_userdata/amiberry/data /mnt/dietpi_userdata/amiberry/lib
151+
cp -a /mnt/dietpi_userdata/amiberry /mnt/dietpi_userdata/amiberry_v5_bak
152+
[ -f '/mnt/dietpi_userdata/amiberry/conf/amiberry.conf' ] && mv /mnt/dietpi_userdata/amiberry/conf/amiberry.conf /mnt/dietpi_userdata/amiberry/amiberry.conf
153+
fi
154+
_EOF_
163155

164156
# - prerm
165157
cat << '_EOF_' > "$DIR/DEBIAN/prerm"
@@ -198,9 +190,9 @@ DEPS_APT_VERSIONED=${DEPS_APT_VERSIONED%,}
198190
grep -q '^ID=raspbian' /etc/os-release && DEPS_APT_VERSIONED=$(sed 's/+rp[it][0-9]\+[^)]*)/)/g' <<< "$DEPS_APT_VERSIONED") || DEPS_APT_VERSIONED=$(sed 's/+b[0-9]\+)/)/g' <<< "$DEPS_APT_VERSIONED")
199191

200192
# - Obtain version suffix
201-
G_EXEC curl -sSfo package.deb "https://dietpi.com/downloads/binaries/$G_DISTRO_NAME/amiberry_$PLATFORM.deb"
193+
G_EXEC_NOHALT=1 G_EXEC curl -sSfo package.deb "https://dietpi.com/downloads/binaries/$G_DISTRO_NAME/amiberry_$G_HW_ARCH_NAME.deb"
202194
old_version=$(dpkg-deb -f package.deb Version)
203-
G_EXEC rm package.deb
195+
G_EXEC_NOHALT=1 G_EXEC rm package.deb
204196
suffix=${old_version#*-dietpi}
205197
[[ $old_version == "$v_ami-"* ]] && v_ami+="-dietpi$((suffix+1))" || v_ami+="-dietpi1"
206198

@@ -217,15 +209,15 @@ Section: games
217209
Priority: optional
218210
Homepage: https://amiberry.com/
219211
Description: Optimized Amiga emulator for the Raspberry Pi and other ARM boards
220-
This package ships with optimized libSDL2 and capsimg builds.
212+
This package ships with optimized libSDL2 builds.
221213
_EOF_
222214
G_CONFIG_INJECT 'Installed-Size: ' "Installed-Size: $(du -sk "$DIR" | mawk '{print $1}')" "$DIR/DEBIAN/control"
223215

224216
# - Permissions
225217
G_EXEC chown -R 0:0 "$DIR"
226218
G_EXEC find "$DIR" -type f -exec chmod 0644 {} +
227219
G_EXEC find "$DIR" -type d -exec chmod 0755 {} +
228-
G_EXEC chmod +x "$DIR/mnt/dietpi_userdata/amiberry/amiberry" "$DIR/DEBIAN/"{prerm,postrm}
220+
G_EXEC chmod +x "$DIR/usr/bin/amiberry" "$DIR/DEBIAN/"{preinst,prerm,postrm}
229221

230222
# Build DEB package
231223
G_EXEC_OUTPUT=1 G_EXEC dpkg-deb -b "$DIR"

.build/software/Amiberry/container_build.bash

Lines changed: 0 additions & 182 deletions
This file was deleted.

0 commit comments

Comments
 (0)