diff --git a/build-aarch64.sh b/build-aarch64.sh new file mode 100644 index 0000000..7ae6cf7 --- /dev/null +++ b/build-aarch64.sh @@ -0,0 +1,164 @@ +#!/bin/bash -e + +# this script is intended to be run on debian 13 aarch64 + + +VERSION="5.15.2" + +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 + +# 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 and luanti source code +echo -e "${BOLD}Downloading LuaJIT 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 +unzip luanti.zip +mv luanti-${VERSION} luanti/ + +# create patch files +cat > patch-1.patch <<'EOF' +3713c3713 +< m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.16f, 2.0f); +--- +> m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.001f, 2.0f); +EOF + +cat > patch-2.patch <<'EOF' +151c151 +< repeat_place_time (Place repetition interval) float 0.25 0.16 2.0 +--- +> repeat_place_time (Place repetition interval) float 0.25 0.001 2.0 +EOF + +# apply patches +patch luanti/src/client/game.cpp patch-1.patch +patch luanti/builtin/settingtypes.txt patch-2.patch + +rm patch-[1-2].patch + +# compile luajit +echo -e "${BOLD}Compiling LuaJIT...${RESET}" +cd luajit +make amalg -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 + +# install into the AppDir folder +ninja install -j$(nproc) + +# build the appimage itself +cd AppDir + +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 +mv usr/share/locale usr/share/luanti + +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" "$@" +EOF + +chmod +x AppRun + +# bundle the libraries +INCLUDE_LIBS=( + libopenal.so.1 + libSDL2-2.0.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 + libzstd.so.1 + libsqlite3.so.0 + libleveldb.so.1d + libsnappy.so.1 +) + +mkdir -p usr/lib/ +for i in "${INCLUDE_LIBS[@]}"; do + cp /usr/lib/aarch64-linux-gnu/${i} usr/lib/ +done + +# finally make the appimage +cd .. +ARCH=aarch64 ./appimagetool --appimage-extract-and-run AppDir/ + +# move the appimage to this script's folder +mv Luanti-aarch64.AppImage ../../luanti-${VERSION}-aarch64.AppImage + +# clean up +cd ../.. + +rm -rf luanti{,.zip} +rm -rf luajit/ + +# done :D +echo -e "${BOLD}${GREEN}Done!${RESET}" + diff --git a/build-x86_64.sh b/build-x86_64.sh new file mode 100644 index 0000000..47188ed --- /dev/null +++ b/build-x86_64.sh @@ -0,0 +1,164 @@ +#!/bin/bash -e + +# this script is intended to be run on debian 13 x86_64 + + +VERSION="5.15.2" + +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 + +# 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 and luanti source code +echo -e "${BOLD}Downloading LuaJIT 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 +unzip luanti.zip +mv luanti-${VERSION} luanti/ + +# create patch files +cat > patch-1.patch <<'EOF' +3713c3713 +< m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.16f, 2.0f); +--- +> m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.001f, 2.0f); +EOF + +cat > patch-2.patch <<'EOF' +151c151 +< repeat_place_time (Place repetition interval) float 0.25 0.16 2.0 +--- +> repeat_place_time (Place repetition interval) float 0.25 0.001 2.0 +EOF + +# apply patches +patch luanti/src/client/game.cpp patch-1.patch +patch luanti/builtin/settingtypes.txt patch-2.patch + +rm patch-[1-2].patch + +# compile luajit +echo -e "${BOLD}Compiling LuaJIT...${RESET}" +cd luajit +make amalg -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-x86_64.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 + +# install into the AppDir folder +ninja install -j$(nproc) + +# build the appimage itself +cd AppDir + +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 +mv usr/share/locale usr/share/luanti + +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" "$@" +EOF + +chmod +x AppRun + +# bundle the libraries +INCLUDE_LIBS=( + libopenal.so.1 + libSDL2-2.0.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 + libzstd.so.1 + libsqlite3.so.0 + libleveldb.so.1d + libsnappy.so.1 +) + +mkdir -p usr/lib/ +for i in "${INCLUDE_LIBS[@]}"; do + cp /usr/lib/x86_64-linux-gnu/${i} usr/lib/ +done + +# finally make the appimage +cd .. +ARCH=x86_64 ./appimagetool --appimage-extract-and-run AppDir/ + +# move the appimage to this script's folder +mv Luanti-x86_64.AppImage ../../luanti-${VERSION}-x86_64.AppImage + +# clean up +cd ../.. + +rm -rf luanti{,.zip} +rm -rf luajit/ + +# done :D +echo -e "${BOLD}${GREEN}Done!${RESET}" +