Compare commits

...

18 commits

Author SHA1 Message Date
a-bad-dev
59fd8e4532
Update scripts for 5.16.1 2026-05-10 14:33:22 -03:00
a-bad-dev
b445356066
Update scripts for 5.16.1 2026-05-10 14:32:52 -03:00
a-bad-dev
d9a3b03291
Update scripts for 5.16.0
5.16.0 is broken, do not use it.
This is only for completeness.
2026-05-10 14:10:31 -03:00
a-bad-dev
b43be1cba0
Update scripts for 5.16.0
5.16.0 is broken, do not use it.
This is only for completeness.
2026-05-10 14:09:58 -03:00
a-bad-dev
38781a65fe
Update scripts for 5.16.0-rc1 2026-04-28 21:58:18 -03:00
a-bad-dev
2df8b64e79
Update scripts for 5.16.0-rc1 2026-04-28 21:57:50 -03:00
a-bad-dev
935c614f07
compile our own SDL2 2026-04-20 13:29:17 -03:00
a-bad-dev
cfbd156583
Update build.sh 2026-04-18 17:14:32 -03:00
a-bad-dev
57518baae5
Update scripts for 5.15.2 2026-04-14 18:45:31 -03:00
a-bad-dev
360644feaf
Update scripts for 5.15.2 2026-04-14 18:45:12 -03:00
a-bad-dev
45605a703a
small fixes 2026-04-14 18:25:40 -03:00
a-bad-dev
4f071a2cba
small fixes 2026-04-14 18:23:04 -03:00
a-bad-dev
fcd2eecdfd Update scripts for 5.15.1 2026-02-08 11:47:03 -04:00
a-bad-dev
275de7f8ee
add a script to test the appimage 2026-02-01 17:52:55 -04:00
a-bad-dev
8882e863ed
Update build.sh 2026-02-01 17:49:42 -04:00
a-bad-dev
1c334a9b64
updates 2026-02-01 16:05:03 -04:00
a-bad-dev
ceecf4d4c6
fix appimage filename being hardcoded 2026-01-26 10:55:09 -04:00
a-bad-dev
4fa2e35224
update build script 2026-01-26 00:11:40 -04:00
2 changed files with 216 additions and 46 deletions

172
build.sh
View file

@ -1,99 +1,175 @@
#!/bin/bash -e
# Builds an AppImage using appimagetool.
# You need to run this inside of a build directory in the source tree,
# it will generate the build files and compile Minetest for you.
# run this script on an aarch64 computer, running modern debian or
# something similar, otherwise it's not going to work...
# This script should be run on Debian 11 Bullseye.
VERSION="5.16.1"
SDL_VERSION="2.32.10"
apt-get install -y git g++ make ninja-build libc6-dev cmake libpng-dev libjpeg-dev libxi-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-openssl-dev libfreetype6-dev zlib1g-dev libgmp-dev libzstd-dev libleveldb-dev gettext desktop-file-utils ca-certificates wget file --no-install-recommends
BOLD="\x1b[1m"
RED="\x1b[31m"
GREEN="\x1b[32m"
RESET="\x1b[0m"
git clone --depth 1 https://github.com/LuaJIT/LuaJIT.git luajit
git clone --depth 1 --branch stable-5 https://github.com/luanti-org/luanti.git
# COMPILE LUAJIT
pushd luajit
make amalg -j4
popd
pushd luanti
mkdir -p build; cd build
# Download appimagetool
if [ ! -f appimagetool ]; then
# Old version of appimagetool:
#wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-aarch64.AppImage -O appimagetool
wget https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-aarch64.AppImage -O appimagetool
chmod +x appimagetool
# make sure we are root
if [ "$(id -u)" != "0" ]; then
echo -e "${BOLD}${RED}This script must be run as root!${RESET}"
exit 1
fi
# Compile and install into AppDir
# install deps
echo -e "${BOLD}Downloading deps...${RESET}"
apt-get install -y --no-install-recommends \
git \
g++ \
make \
ninja-build \
libc6-dev \
cmake \
curl \
libpng-dev \
libjpeg-dev \
libxi-dev \
libgl1-mesa-dev \
libsqlite3-dev \
libogg-dev \
libvorbis-dev \
libopenal-dev \
libcurl4-openssl-dev \
libfreetype6-dev \
zlib1g-dev \
libgmp-dev \
libsdl2-dev \
libzstd-dev \
libleveldb-dev \
gettext \
desktop-file-utils \
ca-certificates \
file
# download luajit, SDL2, and luanti source code
echo -e "${BOLD}Downloading LuaJIT, SDL2, and Luanti source code...${RESET}"
git clone --depth=1 https://github.com/LuaJIT/LuaJIT.git luajit
curl -Lo luanti.zip https://github.com/luanti-org/luanti/archive/refs/tags/${VERSION}.zip
curl -Lo sdl2.zip https://github.com/libsdl-org/SDL/releases/download/release-${SDL_VERSION}/SDL2-${SDL_VERSION}.zip
unzip luanti.zip
mv luanti-${VERSION} luanti/
rm luanti.zip
unzip sdl2.zip
mv SDL2-${SDL_VERSION} sdl2
rm sdl2.zip
# compile luajit
echo -e "${BOLD}Compiling LuaJIT...${RESET}"
cd luajit
make amalg -j$(nproc)
cd ..
# compile sdl2
echo -e "${BOLD}Compiling SDL2...${RESET}"
cd sdl2
mkdir build
cd build
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DSDL_INSTALL_CMAKEDIR=usr/lib/cmake/SDL2 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/ \
-DCMAKE_C_FLAGS="-DSDL_LEAN_AND_MEAN=1" \
-DSDL_{AUDIO,RENDER,VULKAN,TEST,STATIC}=OFF
ninja -j$(nproc)
strip -s *.so
DESTDIR="../../" ninja install -j$(nproc)
cd ../..
# prepare to compile luanti
cd luanti
mkdir -p build
cd build
echo -e "${BOLD}Downloading AppImageTool${RESET}"
curl -Lo appimagetool https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-aarch64.AppImage
chmod +x appimagetool
# compile luanti
echo -e "${BOLD}Compiling Luanti...${RESET}"
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=AppDir/usr \
-DBUILD_UNITTESTS=OFF \
-DENABLE_SYSTEM_JSONCPP=OFF \
-DLUA_INCLUDE_DIR=../../luajit/src/ \
-DLUA_LIBRARY=../../luajit/src/libluajit.a
ninja
objcopy --only-keep-debug ../bin/luanti luanti.debug
objcopy --strip-debug --add-gnu-debuglink=luanti.debug ../bin/luanti
ninja install
# install into the AppDir folder
ninja install -j$(nproc)
# build the appimage itself
cd AppDir
# Put desktop and icon at root
echo -e "${BOLD}Building AppImage...${RESET}"
# put desktop and icon at root of AppDir
ln -sf usr/share/applications/org.luanti.luanti.desktop luanti.desktop
ln -sf usr/share/icons/hicolor/128x128/apps/luanti.png luanti.png
ln -sf luanti.png .DirIcon
# Fix locales
# fix locales
mv usr/share/locale usr/share/luanti
cat > AppRun <<\APPRUN
#!/bin/sh
cat > AppRun <<'EOF'
#!/bin/bash
APP_PATH="$(dirname "$(readlink -f "${0}")")"
export LD_LIBRARY_PATH="${APP_PATH}"/usr/lib/:"${LD_LIBRARY_PATH}"
exec "${APP_PATH}/usr/bin/luanti" "$@"
APPRUN
EOF
chmod +x AppRun
# List of libraries from the system that should be bundled in the AppImage.
# bundle the libraries
INCLUDE_LIBS=(
libopenal.so.1
libSDL2-2.0.so.0
libsndio.so.7.0
libbsd.so.0
libmd.so.0
libsndio.so.7.0
libbsd.so.0
libmd.so.0
libjpeg.so.62
libpng16.so.16
libvorbisfile.so.3
libogg.so.0
libvorbis.so.0
libogg.so.0
libvorbis.so.0
libzstd.so.1
libsqlite3.so.0
libleveldb.so.1d
libsnappy.so.1
libsnappy.so.1
)
mkdir -p usr/lib/
for i in "${INCLUDE_LIBS[@]}"; do
cp /usr/lib/aarch64-linux-gnu/$i usr/lib/
cp /usr/lib/aarch64-linux-gnu/${i} usr/lib/
done
# Actually build the appimage
# copy our SDL2 into place
cp ../../../usr/lib/libSDL2-2.0.so.0 usr/lib/
# finally make the appimage
cd ..
ARCH=aarch64 ./appimagetool --appimage-extract-and-run AppDir/
# Move the appimage to ~
mv Luanti-aarch64.AppImage ../../luanti-5.15.0-aarch64.AppImage
# move the appimage to this script's folder
mv Luanti-aarch64.AppImage ../../luanti-${VERSION}-aarch64.AppImage
# Clean up
# clean up
cd ../..
rm -rf luanti/
rm -rf sdl2/
rm -rf usr/
rm -rf luajit/
echo "Done!"
# done :D
echo -e "${BOLD}${GREEN}Done!${RESET}"

94
test.sh Normal file
View file

@ -0,0 +1,94 @@
#!/bin/bash -e
# test the AppImage built with build.sh
# again, this only works on aarch64
VERSION="5.16.1"
BOLD="\x1b[1m"
RED="\x1b[31m"
GREEN="\x1b[32m"
RESET="\x1b[0m"
# make sure we are root
if [ "$(id -u)" != 0 ]; then
echo -e "${BOLD}${RED}This script must be run as root!${RESET}"
exit 1
fi
# make sure no other luanti processes are running
if [ "$(ps aux | grep luanti | wc -l)" != 1 ]; then
echo -e "${BOLD}${RED}No Luanti processes may be running while this script is run.${RESET}"
exit 1
fi
# check if the AppImage even exists
echo -e "${BOLD}Checking if AppImage exists...${RESET}"
if [ ! -f luanti-${VERSION}-aarch64.AppImage ]; then
echo -e "${BOLD}${RED}AppImage not found, have you run build.sh?${RESET}"
exit 1
fi
# list of dependencies needed to make the AppImage
DEPS=(
git
g++
make
ninja-build
libc6-dev
cmake
curl
libpng-dev
libjpeg-dev
libxi-dev
libgl1-mesa-dev
libsqlite3-dev
libogg-dev
libvorbis-dev
libopenal-dev
libcurl4-openssl-dev
libfreetype6-dev
zlib1g-dev
libgmp-dev
libsdl2-dev
libzstd-dev
libleveldb-dev
gettext
desktop-file-utils
ca-certificates
file
)
# remove the dependencies
echo -e "${BOLD}Removing dependencies...${RESET}"
for d in "${DEPS[@]}"; do
apt remove ${d} -y
done
# test the AppImage
echo -e "${BOLD}${GREEN}Testing AppImage in 5 seconds${RESET}"
sleep 5
./luanti-${VERSION}-aarch64.AppImage &
sleep 10
if [ "$(ps | grep luanti | wc -l)" == 0 ]; then
echo -e "${BOLD}${RED}AppImage test failed.${RESET}"
exit 1
fi
# kill luanti
pkill -9 luanti
echo -e "${BOLD}${GREEN}AppImage test sucessful.${RESET}"
echo -e "${BOLD}Reinstalling dependencies...${RESET}"
# reinstall the dependencies
for d in "${DEPS[@]}"; do
apt-get install -y ${d}
done
exit 0