Why? Open Source Qt 5 will stop receiving updates rather sooner than later so it's worth switching to Qt 6 to remain compatible with modern systems. Reviewed-on: http://vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion/torzu-emu/torzu/pulls/130
100 lines
4.6 KiB
Bash
Executable File
100 lines
4.6 KiB
Bash
Executable File
#! /bin/bash
|
|
set -e
|
|
|
|
# Make sure script is called from inside our container
|
|
test -e /tmp/torzu-src-ro || (echo "Script MUST NOT be called directly!" ; exit 1)
|
|
|
|
# Set up environment
|
|
export LANG=C.UTF-8
|
|
export LC_ALL=C.UTF-8
|
|
unset LC_ADDRESS LC_NAME LC_MONETARY LC_PAPER LC_TELEPHONE LC_MEASUREMENT LC_TIME
|
|
|
|
# Raise max open files count
|
|
ulimit -n 50000
|
|
|
|
# Install dependencies
|
|
apt -y install cmake ninja-build build-essential autoconf pkg-config locales wget git file mold libtool lsb-release wget software-properties-common gnupg \
|
|
glslang-tools libssl-dev libavcodec-dev libavfilter-dev libavutil-dev libswscale-dev libpulse-dev libasound2-dev libudev-dev libice6
|
|
if [ "$BUILD_QT" = 1 ]; then
|
|
apt -y install libxcb-composite0-dev libxcb-damage0-dev libxcb-dpms0-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-ewmh-dev libxcb-present-dev libxcb-record0-dev libxcb-res0-dev libxcb-screensaver0-dev libxcb-xf86dri0-dev libxcb-xtest0-dev libxcb-xv0-dev libxcb-xvmc0-dev libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libgl-dev
|
|
else
|
|
apt -y install qt6-base-dev qt6-base-private-dev qt6-multimedia-dev qt6-qpa-plugins
|
|
fi
|
|
if [ ! "$BUILD_USE_CPM" = 1 ]; then
|
|
apt -y install libfmt-dev libenet-dev liblz4-dev nlohmann-json3-dev zlib1g-dev libopus-dev libsimpleini-dev libstb-dev libzstd-dev libusb-1.0-0-dev libcubeb-dev libcpp-jwt-dev libvulkan-dev gamemode-dev libasound2-dev libglu1-mesa-dev libxext-dev mesa-common-dev libva-dev
|
|
|
|
if [ ! -f /usr/local/lib/cmake/Boost-1.88.0/BoostConfigVersion.cmake ]; then
|
|
# Install Boost
|
|
wget https://archives.boost.io/release/1.88.0/source/boost_1_88_0.tar.bz2
|
|
echo "Extracting Boost sources..."
|
|
tar xf boost_1_88_0.tar.bz2
|
|
cd boost_1_88_0
|
|
./bootstrap.sh
|
|
./b2 install --with-{headers,context,system,fiber,atomic,filesystem} link=static
|
|
cd ..
|
|
rm -rf boost_1_88_0 boost_1_88_0.tar.bz2
|
|
fi
|
|
fi
|
|
|
|
# Install Clang
|
|
if ([ "$BUILD_USE_CLANG" = 1 ] && ! clang-19 --version); then
|
|
cd /tmp
|
|
wget https://apt.llvm.org/llvm.sh
|
|
chmod +x llvm.sh
|
|
./llvm.sh 19
|
|
rm llvm.sh
|
|
fi
|
|
|
|
# Mount Torzu sources with temporary overlay
|
|
cd /tmp
|
|
mkdir torzu-src-upper torzu-src-work torzu-src
|
|
mount -t overlay overlay -olowerdir=torzu-src-ro,upperdir=torzu-src-upper,workdir=torzu-src-work torzu-src
|
|
|
|
# Get extra configuration/compilation options
|
|
EXTRA_COMPILE_FLAGS=""
|
|
EXTRA_CMAKE_FLAGS=""
|
|
if [ "$BUILD_USE_CLANG" = 1 ]; then
|
|
export CC=clang-19 CXX=clang++-19
|
|
EXTRA_CMAKE_FLAGS="-DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX"
|
|
EXTRA_COMPILE_FLAGS="-fuse-ld=lld-19 -Wno-unused-command-line-argument"
|
|
FATLTO_FLAG="-flto=full"
|
|
else
|
|
FATLTO_FLAG="-flto"
|
|
fi
|
|
if [ "$BUILD_USE_THIN_LTO" = 1 ]; then
|
|
EXTRA_COMPILE_FLAGS="$EXTRA_COMPILE_FLAGS -flto=thin"
|
|
fi
|
|
if [ "$BUILD_USE_FAT_LTO" = 1 ]; then
|
|
EXTRA_COMPILE_FLAGS="$EXTRA_COMPILE_FLAGS $FATLTO_FLAG"
|
|
fi
|
|
if [ "$BUILD_USE_CPM" = 1 ]; then
|
|
EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DYUZU_USE_CPM=ON"
|
|
fi
|
|
if [ "$BUILD_QT" = 1 ]; then
|
|
EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DYUZU_BUILD_QT6=ON"
|
|
if [ "$BUILD_PREFER_STATIC" = 1 ]; then
|
|
EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DYUZU_BUILD_QT6_STATIC=ON"
|
|
fi
|
|
fi
|
|
if [ "$BUILD_PREFER_STATIC" = 1 ]; then
|
|
EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DBUILD_SHARED_LIBS=OFF -DCMAKE_FIND_LIBRARY_SUFFIXES=.a;.so"
|
|
fi
|
|
|
|
# Build Torzu
|
|
cd /tmp
|
|
mkdir torzu-build
|
|
cd torzu-build
|
|
cmake /tmp/torzu-src -GNinja -DCMAKE_BUILD_TYPE=Release -DYUZU_TESTS=OFF -DENABLE_QT_TRANSLATION=OFF -DSPIRV_WERROR=OFF -DSPIRV-Headers_SOURCE_DIR=/tmp/torzu-src/externals/SPIRV-Headers -DCMAKE_{C,CXX}_FLAGS="$EXTRA_COMPILE_FLAGS -fdata-sections -ffunction-sections" -DCMAKE_{EXE,SHARED}_LINKER_FLAGS="-Wl,--gc-sections" $EXTRA_CMAKE_FLAGS
|
|
ninja || (
|
|
echo "Compilation has failed. Dropping you into a shell so you can inspect the situation. Run 'ninja' to retry and exit shell once compilation has finished successfully."
|
|
echo "Note that any changes made here will not be reflected to the host environment."
|
|
bash
|
|
)
|
|
|
|
# Generate AppImage
|
|
cp -rv /tmp/torzu-src/AppImageBuilder /tmp/AppImageBuilder
|
|
cd /tmp/AppImageBuilder
|
|
./build.sh /tmp/torzu-build /tmp/torzu.AppImage || echo "This error is known. Using workaround..."
|
|
cp /lib/$(uname -m)-linux-gnu/libICE.so.6 build/
|
|
mv build /tmp/hosttmp/torzu-debian-appimage-rootfs
|