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
2827done
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; }
3332if [[ ! -d /tmp/SDL2-$v_sdl ]]
3433then
4847fi
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; }
5352if [[ ! -d /tmp/SDL2_image-$v_img ]]
5453then
6867fi
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; }
7372if [[ ! -d /tmp/SDL2_ttf-$v_ttf ]]
7473then
8786 G_DIETPI-NOTIFY 2 ' Skipping libSDL2_ttf which has been built already'
8887fi
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
11190v_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; }
11392v_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 "
11894G_EXEC cd /tmp
11995G_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 "
12197G_EXEC tar xf " v$v_ami .tar.gz"
12298G_EXEC rm " v$v_ami .tar.gz"
12399G_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
131108G_DIETPI-NOTIFY 2 ' Building Amiberry DEB package'
132109G_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]
145123Description=Amiberry Amiga Emulator (DietPi)
146124Documentation=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
149133WorkingDirectory=/mnt/dietpi_userdata/amiberry
150- Environment=LD_LIBRARY_PATH=/mnt/dietpi_userdata/amiberry/lib
151134StandardInput=tty
152135TTYPath=/dev/tty3
153136ExecStartPre=/bin/chvt 3
154- ExecStart=/mnt/dietpi_userdata/amiberry /amiberry
137+ ExecStart=/usr/bin /amiberry
155138ExecStopPost=/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
165157cat << '_EOF_ ' > "$DIR/DEBIAN/prerm"
@@ -198,9 +190,9 @@ DEPS_APT_VERSIONED=${DEPS_APT_VERSIONED%,}
198190grep -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"
202194old_version=$( dpkg-deb -f package.deb Version)
203- G_EXEC rm package.deb
195+ G_EXEC_NOHALT=1 G_EXEC rm package.deb
204196suffix=${old_version#* -dietpi}
205197[[ $old_version == " $v_ami -" * ]] && v_ami+=" -dietpi$(( suffix+ 1 )) " || v_ami+=" -dietpi1"
206198
@@ -217,15 +209,15 @@ Section: games
217209Priority: optional
218210Homepage: https://amiberry.com/
219211Description: 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_
222214G_CONFIG_INJECT ' Installed-Size: ' " Installed-Size: $( du -sk " $DIR " | mawk ' {print $1}' ) " " $DIR /DEBIAN/control"
223215
224216# - Permissions
225217G_EXEC chown -R 0:0 " $DIR "
226218G_EXEC find " $DIR " -type f -exec chmod 0644 {} +
227219G_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
231223G_EXEC_OUTPUT=1 G_EXEC dpkg-deb -b " $DIR "
0 commit comments