CI: Use prebuilt dependencies

Decouple from the repository. Less CI time, and faster building of older
commits.
This commit is contained in:
Stenzek
2026-02-21 19:19:32 +10:00
parent 19b618d44b
commit cdf6d5bd29
75 changed files with 301 additions and 5315 deletions
+5 -5
View File
@@ -19,15 +19,14 @@ function retry_command {
done
}
if [ "$#" -ne 4 ]; then
echo "Syntax: $0 <path to duckstation directory> <path to build directory> <deps prefix> <output name>"
if [ "$#" -ne 3 ]; then
echo "Syntax: $0 <path to duckstation directory> <path to build directory> <output name>"
exit 1
fi
ROOTDIR=$1
BUILDDIR=$2
DEPSDIR=$3
ASSETNAME=$4
ASSETNAME=$3
BINARY=duckstation-qt
APPDIRNAME=DuckStation.AppDir
@@ -43,7 +42,7 @@ declare -a MANUAL_LIBS=(
"libdiscord-rpc.so"
"libharfbuzz.so"
"libfreetype.so.6"
"libshaderc_ds.so"
"libshaderc_shared.so"
"libspirv-cross-c-shared.so.0"
)
@@ -61,6 +60,7 @@ declare -a REMOVE_LIBS=(
set -e
DEPSDIR=$(realpath "$SCRIPTDIR/../../dep/prebuilt/linux-x64")
LINUXDEPLOY=./linuxdeploy-x86_64
LINUXDEPLOY_PLUGIN_QT=./linuxdeploy-plugin-qt-x86_64
APPIMAGETOOL=./appimagetool-x86_64
+5 -5
View File
@@ -25,16 +25,15 @@ if [ "$1" == "-inject-libc" ]; then
shift
fi
if [ "$#" -ne 5 ]; then
echo "Syntax: $0 [-inject-libc] <duckstation-qt|duckstation-mini> <target arch> <path to build directory> <deps prefix> <chroot dir>"
if [ "$#" -ne 4 ]; then
echo "Syntax: $0 [-inject-libc] <duckstation-qt|duckstation-mini> <target arch> <path to build directory> <chroot dir>"
exit 1
fi
BINARY=$1
ARCH=$2
BUILDDIR=$3
DEPSDIR=$4
CHROOTDIR=$5
CHROOTDIR=$4
STRIP=llvm-strip
@@ -114,7 +113,7 @@ declare -a DEPLIBS=(
"libcpuinfo.so"
"libdiscord-rpc.so"
"libplutosvg.so.0"
"libshaderc_ds.so"
"libshaderc_shared.so"
"libsoundtouch.so.2"
"libspirv-cross-c-shared.so.0"
@@ -221,6 +220,7 @@ set -e
IFS="
"
DEPSDIR=$(realpath "$SCRIPTDIR/../../dep/prebuilt/linux-cross-$ARCH")
APPIMAGETOOL=./appimagetool-x86_64
APPIMAGERUNTIME=./runtime-${RUNTIMEARCH}
PATCHELF=patchelf
@@ -1,439 +0,0 @@
#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <stenzek@gmail.com>
# SPDX-License-Identifier: CC-BY-NC-ND-4.0
#
# NOTE: In addition to the terms of CC-BY-NC-ND-4.0, you may not use this file to create
# packages or build recipes without explicit permission from the copyright holder.
#
set -e
if [ "$#" -lt 4 ]; then
echo "Syntax: $0 [-skip-download] [-skip-cleanup] [-only-download] <host directory> <cross architecture> <cross chroot> <output directory>"
exit 1
fi
for arg in "$@"; do
if [ "$arg" == "-skip-download" ]; then
echo "Not downloading sources."
SKIP_DOWNLOAD=true
shift
elif [ "$arg" == "-skip-cleanup" ]; then
echo "Not removing build directory."
SKIP_CLEANUP=true
shift
elif [ "$arg" == "-only-download" ]; then
echo "Only downloading sources."
ONLY_DOWNLOAD=true
shift
fi
done
SCRIPTDIR=$(realpath $(dirname "${BASH_SOURCE[0]}"))
NPROCS="$(getconf _NPROCESSORS_ONLN)"
HOSTDIR="$1"
if [ "${HOSTDIR:0:1}" != "/" ]; then
HOSTDIR="$PWD/$HOSTDIR"
fi
CROSSARCH="$2"
SYSROOTDIR="$3"
if [ "${SYSROOTDIR:0:1}" != "/" ]; then
SYSROOTDIR="$PWD/$SYSROOTDIR"
fi
INSTALLDIR="$4"
if [ "${INSTALLDIR:0:1}" != "/" ]; then
INSTALLDIR="$PWD/$INSTALLDIR"
fi
TOOLCHAINFILE="$INSTALLDIR/toolchain.cmake"
CMAKE_COMMON=(
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_TOOLCHAIN_FILE="$TOOLCHAINFILE"
-DCMAKE_PREFIX_PATH="$INSTALLDIR"
-DCMAKE_INSTALL_PREFIX="$INSTALLDIR"
)
# Determine architecture.
if [ "$CROSSARCH" == "arm64" ]; then
CROSSSYSARCH="aarch64"
CROSSTRIPLET="aarch64-linux-gnu"
CMAKEPROCESSOR="aarch64"
elif [ "$CROSSARCH" == "armhf" ]; then
CROSSSYSARCH="armhf"
CROSSTRIPLET="arm-linux-gnueabihf"
CMAKEPROCESSOR="armv7-a"
else
echo "Unknown cross arch $CROSSARCH"
exit 1
fi
source "$SCRIPTDIR/versions"
mkdir -p "${INSTALLDIR}"
mkdir -p deps-build
cd deps-build
if [[ "$SKIP_DOWNLOAD" != true && ! -f "libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz" ]]; then
curl -C - -L \
-o "brotli-$BROTLI.tar.gz" "https://github.com/google/brotli/archive/refs/tags/v$BROTLI.tar.gz" \
-o "freetype-$FREETYPE.tar.gz" "https://sourceforge.net/projects/freetype/files/freetype2/$FREETYPE/freetype-$FREETYPE.tar.gz/download" \
-o "harfbuzz-$HARFBUZZ.tar.gz" "https://github.com/harfbuzz/harfbuzz/archive/refs/tags/$HARFBUZZ.tar.gz" \
-O "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/$LIBJPEGTURBO/libjpeg-turbo-$LIBJPEGTURBO.tar.gz" \
-O "https://downloads.sourceforge.net/project/libpng/libpng16/$LIBPNG/libpng-$LIBPNG.tar.gz" \
-O "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP.tar.gz" \
-O "https://github.com/nih-at/libzip/releases/download/v$LIBZIP/libzip-$LIBZIP.tar.gz" \
-o "zlib-ng-$ZLIBNG.tar.gz" "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/$ZLIBNG.tar.gz" \
-O "https://github.com/facebook/zstd/releases/download/v$ZSTD/zstd-$ZSTD.tar.gz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtbase-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtimageformats-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtsvg-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qttools-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qttranslations-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtwayland-everywhere-src-$QT.tar.xz" \
-o "libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz" "https://github.com/ianlancetaylor/libbacktrace/archive/$LIBBACKTRACE_COMMIT.tar.gz" \
-O "https://github.com/libsdl-org/SDL/releases/download/release-$SDL3/SDL3-$SDL3.tar.gz" \
-o "cpuinfo-$CPUINFO_COMMIT.tar.gz" "https://github.com/stenzek/cpuinfo/archive/$CPUINFO_COMMIT.tar.gz" \
-o "discord-rpc-$DISCORD_RPC_COMMIT.tar.gz" "https://github.com/stenzek/discord-rpc/archive/$DISCORD_RPC_COMMIT.tar.gz" \
-o "plutosvg-$PLUTOSVG_COMMIT.tar.gz" "https://github.com/stenzek/plutosvg/archive/$PLUTOSVG_COMMIT.tar.gz" \
-o "shaderc-$SHADERC_COMMIT.tar.gz" "https://github.com/stenzek/shaderc/archive/$SHADERC_COMMIT.tar.gz" \
-o "soundtouch-$SOUNDTOUCH_COMMIT.tar.gz" "https://github.com/stenzek/soundtouch/archive/$SOUNDTOUCH_COMMIT.tar.gz"
fi
cat > SHASUMS <<EOF
$BROTLI_GZ_HASH brotli-$BROTLI.tar.gz
$FREETYPE_GZ_HASH freetype-$FREETYPE.tar.gz
$HARFBUZZ_GZ_HASH harfbuzz-$HARFBUZZ.tar.gz
$LIBJPEGTURBO_GZ_HASH libjpeg-turbo-$LIBJPEGTURBO.tar.gz
$LIBPNG_GZ_HASH libpng-$LIBPNG.tar.gz
$LIBWEBP_GZ_HASH libwebp-$LIBWEBP.tar.gz
$LIBZIP_GZ_HASH libzip-$LIBZIP.tar.gz
$ZLIBNG_GZ_HASH zlib-ng-$ZLIBNG.tar.gz
$ZSTD_GZ_HASH zstd-$ZSTD.tar.gz
$QTBASE_XZ_HASH qtbase-everywhere-src-$QT.tar.xz
$QTIMAGEFORMATS_XZ_HASH qtimageformats-everywhere-src-$QT.tar.xz
$QTSVG_XZ_HASH qtsvg-everywhere-src-$QT.tar.xz
$QTTOOLS_XZ_HASH qttools-everywhere-src-$QT.tar.xz
$QTTRANSLATIONS_XZ_HASH qttranslations-everywhere-src-$QT.tar.xz
$QTWAYLAND_XZ_HASH qtwayland-everywhere-src-$QT.tar.xz
$LIBBACKTRACE_GZ_HASH libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz
$SDL3_GZ_HASH SDL3-$SDL3.tar.gz
$CPUINFO_GZ_HASH cpuinfo-$CPUINFO_COMMIT.tar.gz
$DISCORD_RPC_GZ_HASH discord-rpc-$DISCORD_RPC_COMMIT.tar.gz
$PLUTOSVG_GZ_HASH plutosvg-$PLUTOSVG_COMMIT.tar.gz
$SHADERC_GZ_HASH shaderc-$SHADERC_COMMIT.tar.gz
$SOUNDTOUCH_GZ_HASH soundtouch-$SOUNDTOUCH_COMMIT.tar.gz
EOF
shasum -a 256 --check SHASUMS
# Have to clone with git, because it does version detection.
if [[ "$SKIP_DOWNLOAD" != true && ! -d "SPIRV-Cross" ]]; then
git clone https://github.com/KhronosGroup/SPIRV-Cross/ -b $SPIRV_CROSS_TAG --depth 1
if [ "$(git --git-dir=SPIRV-Cross/.git rev-parse HEAD)" != "$SPIRV_CROSS_SHA" ]; then
echo "SPIRV-Cross version mismatch, expected $SPIRV_CROSS_SHA, got $(git rev-parse HEAD)"
exit 1
fi
fi
# Only downloading sources?
if [ "$ONLY_DOWNLOAD" == true ]; then
exit 0
fi
# Stop pkg-config picking up host files.
export PKG_CONFIG_PATH=${SYSROOTDIR}/usr/lib/${CROSSTRIPLET}/pkgconfig:${SYSROOTDIR}/usr/lib/pkgconfig:${SYSROOTDIR}/usr/share/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=${SYSROOTDIR}
# Generate cmake toolchain file.
cat > "$TOOLCHAINFILE" << EOF
set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR ${CMAKEPROCESSOR})
set(CMAKE_C_COMPILER "/usr/bin/${CROSSTRIPLET}-gcc")
set(CMAKE_C_COMPILER_TARGET "${CROSSTRIPLET}")
set(CMAKE_C_COMPILER_AR "/usr/bin/${CROSSTRIPLET}-ar")
set(CMAKE_C_COMPILER_RANLIB "/usr/bin/${CROSSTRIPLET}-ranlib")
set(CMAKE_CXX_COMPILER "/usr/bin/${CROSSTRIPLET}-g++")
set(CMAKE_CXX_COMPILER_TARGET "${CROSSTRIPLET}")
set(CMAKE_CXX_COMPILER_AR "/usr/bin/${CROSSTRIPLET}-ar")
set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/${CROSSTRIPLET}-ranlib")
set(CMAKE_FIND_ROOT_PATH "${INSTALLDIR};${SYSROOTDIR}")
set(CMAKE_SYSROOT "${SYSROOTDIR}")
set(CMAKE_PKG_CONFIG_PC_PATH "${PKG_CONFIG_PATH}")
set(CMAKE_PKG_CONFIG_SYSROOT_DIR "${PKG_CONFIG_SYSROOT_DIR}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
EOF
# Build zlib first because of the things that depend on it.
# Disabled because it currently causes crashes on armhf.
#echo "Building zlib-ng..."
#rm -fr "zlib-ng-$ZLIBNG"
#tar xf "zlib-ng-$ZLIBNG.tar.gz"
#cd "zlib-ng-$ZLIBNG"
#cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DZLIB_COMPAT=ON -DBUILD_TESTING=OFF -DWITH_BENCHMARK_APPS=OFF -DWITH_GTEST=OFF -B build -G Ninja
#cmake --build build --parallel
#ninja -C build install
#cd ..
# NOTE: Must be a shared library because otherwise aarch64 libgcc symbols are missing when building with clang.
echo "Building libbacktrace..."
rm -fr "libbacktrace-$LIBBACKTRACE_COMMIT"
tar xf "libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz"
cd "libbacktrace-$LIBBACKTRACE_COMMIT"
CFLAGS="-fmacro-prefix-map=\"${PWD}\"=. -ffile-prefix-map=\"${PWD}\"=." ./configure --prefix="$INSTALLDIR" --build=x86_64-linux-gnu --host="${CROSSTRIPLET}" --with-pic --enable-shared --disable-static
make
make install
cd ..
rm -fr "libbacktrace-$LIBBACKTRACE_COMMIT"
echo "Building libpng..."
rm -fr "libpng-$LIBPNG"
tar xf "libpng-$LIBPNG.tar.gz"
cd "libpng-$LIBPNG"
patch -p1 < "$SCRIPTDIR/libpng-1.6.54-apng.patch"
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_STATIC=OFF -DPNG_SHARED=ON -DPNG_TOOLS=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "libpng-$LIBPNG"
echo "Building libjpeg..."
rm -fr "libjpeg-turbo-$LIBJPEGTURBO"
tar xf "libjpeg-turbo-$LIBJPEGTURBO.tar.gz"
cd "libjpeg-turbo-$LIBJPEGTURBO"
cmake "${CMAKE_COMMON[@]}" -DENABLE_STATIC=OFF -DENABLE_SHARED=ON -DWITH_TESTS=OFF -DWITH_TOOLS=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "libjpeg-turbo-$LIBJPEGTURBO"
echo "Building Zstandard..."
rm -fr "zstd-$ZSTD"
tar xf "zstd-$ZSTD.tar.gz"
cd "zstd-$ZSTD"
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DZSTD_BUILD_SHARED=ON -DZSTD_BUILD_STATIC=OFF -DZSTD_BUILD_PROGRAMS=OFF -B build -G Ninja build/cmake
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "zstd-$ZSTD"
echo "Building Brotli..."
rm -fr "brotli-$BROTLI"
tar xf "brotli-$BROTLI.tar.gz"
cd "brotli-$BROTLI"
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=OFF -DBROTLI_BUILD_TOOLS=OFF -DBROTLI_DISABLE_TESTS=ON -B build -G Ninja
ninja -C build install
cd ..
rm -fr "brotli-$BROTLI"
echo "Building WebP..."
rm -fr "libwebp-$LIBWEBP"
tar xf "libwebp-$LIBWEBP.tar.gz"
cd "libwebp-$LIBWEBP"
cmake "${CMAKE_COMMON[@]}" -B build -G Ninja \
-DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF \
-DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPINFO=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF -DBUILD_SHARED_LIBS=ON
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "libwebp-$LIBWEBP"
echo "Building libzip..."
rm -fr "libzip-$LIBZIP"
tar xf "libzip-$LIBZIP.tar.gz"
cd "libzip-$LIBZIP"
cmake "${CMAKE_COMMON[@]}" -B build -G Ninja \
-DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF -DENABLE_WINDOWS_CRYPTO=OFF \
-DENABLE_BZIP2=OFF -DENABLE_LZMA=OFF -DENABLE_ZSTD=ON -DBUILD_SHARED_LIBS=ON -DLIBZIP_DO_INSTALL=ON \
-DBUILD_TOOLS=OFF -DBUILD_REGRESS=OFF -DBUILD_OSSFUZZ=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOC=OFF
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "libzip-$LIBZIP"
echo "Building FreeType..."
rm -fr "freetype-$FREETYPE"
tar xf "freetype-$FREETYPE.tar.gz"
cd "freetype-$FREETYPE"
patch -p1 < "$SCRIPTDIR/freetype-harfbuzz-soname.patch"
patch -p1 < "$SCRIPTDIR/freetype-static-brotli.patch"
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DFT_REQUIRE_ZLIB=ON -DFT_REQUIRE_PNG=ON -DFT_DISABLE_BZIP2=TRUE -DFT_REQUIRE_BROTLI=TRUE -DFT_DYNAMIC_HARFBUZZ=TRUE -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "freetype-$FREETYPE"
echo "Building HarfBuzz..."
rm -fr "harfbuzz-$HARFBUZZ"
tar xf "harfbuzz-$HARFBUZZ.tar.gz"
cd "harfbuzz-$HARFBUZZ"
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DHB_BUILD_UTILS=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "harfbuzz-$HARFBUZZ"
echo "Building SDL..."
rm -fr "SDL3-$SDL3"
tar xf "SDL3-$SDL3.tar.gz"
cd "SDL3-$SDL3"
cmake -B build "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DSDL_SHARED=ON -DSDL_STATIC=OFF -DSDL_TESTS=OFF -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "SDL3-$SDL3"
# Couple notes:
# -fontconfig is needed otherwise Qt Widgets render only boxes.
# -qt-doubleconversion avoids a dependency on libdouble-conversion.
# ICU avoids pulling in a bunch of large libraries, and hopefully we can get away without it.
# OpenGL is needed to render window decorations in Wayland, apparently.
# dbus-runtime and linked off to avoid a relocation error (different to host.. probably should change that).
# Brotli is disabled as we static link it, and QtNetwork doesn't link with bbrotlicommon.
echo "Building Qt Base..."
rm -fr "qtbase-everywhere-src-$QT"
tar xf "qtbase-everywhere-src-$QT.tar.xz"
cd "qtbase-everywhere-src-$QT"
patch -p1 < "$SCRIPTDIR/qtbase-fusion-style.patch"
mkdir build
cd build
../configure -prefix "$INSTALLDIR" -extprefix "$INSTALLDIR" -qt-host-path "$HOSTDIR" -release -dbus runtime -fontconfig -qt-doubleconversion -ssl -openssl-runtime -opengl desktop -qpa xcb,wayland -xkbcommon -xcb -- -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAINFILE" -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF -DFEATURE_cups=OFF -DFEATURE_dbus=ON -DFEATURE_dbus_linked=OFF -DFEATURE_icu=OFF -DFEATURE_sql=OFF -DFEATURE_system_png=ON -DFEATURE_system_jpeg=ON -DFEATURE_system_zlib=ON -DFEATURE_system_freetype=ON -DFEATURE_system_harfbuzz=ON -DFEATURE_gtk3=OFF -DFEATURE_brotli=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qtbase-everywhere-src-$QT"
echo "Building Qt SVG..."
rm -fr "qtsvg-everywhere-src-$QT"
tar xf "qtsvg-everywhere-src-$QT.tar.xz"
cd "qtsvg-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qtsvg-everywhere-src-$QT"
echo "Building Qt Image Formats..."
rm -fr "qtimageformats-everywhere-src-$QT"
tar xf "qtimageformats-everywhere-src-$QT.tar.xz"
cd "qtimageformats-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF -DFEATURE_system_webp=ON
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qtimageformats-everywhere-src-$QT"
echo "Building Qt Wayland..."
rm -fr "qtwayland-everywhere-src-$QT"
tar xf "qtwayland-everywhere-src-$QT.tar.xz"
cd "qtwayland-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qtwayland-everywhere-src-$QT"
echo "Installing Qt Tools..."
rm -fr "qttools-everywhere-src-$QT"
tar xf "qttools-everywhere-src-$QT.tar.xz"
cd "qttools-everywhere-src-$QT"
patch -p1 < "$SCRIPTDIR/qttools-linguist-without-quick.patch"
patch -p1 < "$SCRIPTDIR/qttools-disable-clang.patch"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF -DFEATURE_assistant=OFF -DFEATURE_clang=OFF -DFEATURE_designer=ON -DFEATURE_kmap2qmap=OFF -DFEATURE_pixeltool=OFF -DFEATURE_pkg_config=OFF -DFEATURE_qev=OFF -DFEATURE_qtattributionsscanner=OFF -DFEATURE_qtdiag=OFF -DFEATURE_qtplugininfo=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qttools-everywhere-src-$QT"
echo "Installing Qt Translations..."
rm -fr "qttranslations-everywhere-src-$QT"
tar xf "qttranslations-everywhere-src-$QT.tar.xz"
cd "qttranslations-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qttranslations-everywhere-src-$QT"
echo "Building shaderc..."
rm -fr "shaderc-$SHADERC_COMMIT"
tar xf "shaderc-$SHADERC_COMMIT.tar.gz"
cd "shaderc-$SHADERC_COMMIT"
cmake "${CMAKE_COMMON[@]}" -DSHADERC_SKIP_TESTS=ON -DSHADERC_SKIP_EXAMPLES=ON -DSHADERC_SKIP_EXECUTABLES=ON -DSHADERC_SKIP_COPYRIGHT_CHECK=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "shaderc-$SHADERC_COMMIT"
echo "Building SPIRV-Cross..."
cd SPIRV-Cross
rm -fr build
cmake "${CMAKE_COMMON[@]}" -DSPIRV_CROSS_SHARED=ON -DSPIRV_CROSS_STATIC=OFF -DSPIRV_CROSS_CLI=OFF -DSPIRV_CROSS_ENABLE_TESTS=OFF -DSPIRV_CROSS_ENABLE_GLSL=ON -DSPIRV_CROSS_ENABLE_HLSL=OFF -DSPIRV_CROSS_ENABLE_MSL=OFF -DSPIRV_CROSS_ENABLE_CPP=OFF -DSPIRV_CROSS_ENABLE_REFLECT=OFF -DSPIRV_CROSS_ENABLE_C_API=ON -DSPIRV_CROSS_ENABLE_UTIL=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
rm -fr build
cd ..
echo "Building cpuinfo..."
rm -fr "cpuinfo-$CPUINFO_COMMIT"
tar xf "cpuinfo-$CPUINFO_COMMIT.tar.gz"
cd "cpuinfo-$CPUINFO_COMMIT"
cmake "${CMAKE_COMMON[@]}" -DCPUINFO_LIBRARY_TYPE=shared -DCPUINFO_RUNTIME_TYPE=shared -DCPUINFO_LOG_LEVEL=error -DCPUINFO_LOG_TO_STDIO=ON -DCPUINFO_BUILD_TOOLS=OFF -DCPUINFO_BUILD_UNIT_TESTS=OFF -DCPUINFO_BUILD_MOCK_TESTS=OFF -DCPUINFO_BUILD_BENCHMARKS=OFF -DUSE_SYSTEM_LIBS=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "cpuinfo-$CPUINFO_COMMIT"
echo "Building discord-rpc..."
rm -fr "discord-rpc-$DISCORD_RPC_COMMIT"
tar xf "discord-rpc-$DISCORD_RPC_COMMIT.tar.gz"
cd "discord-rpc-$DISCORD_RPC_COMMIT"
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "discord-rpc-$DISCORD_RPC_COMMIT"
echo "Building plutosvg..."
rm -fr "plutosvg-$PLUTOSVG_COMMIT"
tar xf "plutosvg-$PLUTOSVG_COMMIT.tar.gz"
cd "plutosvg-$PLUTOSVG_COMMIT"
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "plutosvg-$PLUTOSVG_COMMIT"
echo "Building soundtouch..."
rm -fr "soundtouch-$SOUNDTOUCH_COMMIT"
tar xf "soundtouch-$SOUNDTOUCH_COMMIT.tar.gz"
cd "soundtouch-$SOUNDTOUCH_COMMIT"
cmake "${CMAKE_COMMON[@]}" -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "soundtouch-$SOUNDTOUCH_COMMIT"
if [ "$SKIP_CLEANUP" != true ]; then
echo "Cleaning up..."
cd ..
rm -fr deps-build
fi
-382
View File
@@ -1,382 +0,0 @@
#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <stenzek@gmail.com>
# SPDX-License-Identifier: CC-BY-NC-ND-4.0
#
# NOTE: In addition to the terms of CC-BY-NC-ND-4.0, you may not use this file to create
# packages or build recipes without explicit permission from the copyright holder.
#
set -e
if [ "$#" -lt 1 ]; then
echo "Syntax: $0 [-skip-download] [-skip-cleanup] [-only-download] <output directory>"
exit 1
fi
for arg in "$@"; do
if [ "$arg" == "-skip-download" ]; then
echo "Not downloading sources."
SKIP_DOWNLOAD=true
shift
elif [ "$arg" == "-skip-cleanup" ]; then
echo "Not removing build directory."
SKIP_CLEANUP=true
shift
elif [ "$arg" == "-only-download" ]; then
echo "Only downloading sources."
ONLY_DOWNLOAD=true
shift
fi
done
SCRIPTDIR=$(realpath $(dirname "${BASH_SOURCE[0]}"))
NPROCS="$(getconf _NPROCESSORS_ONLN)"
INSTALLDIR="$1"
if [ "${INSTALLDIR:0:1}" != "/" ]; then
INSTALLDIR="$PWD/$INSTALLDIR"
fi
source "$SCRIPTDIR/versions"
mkdir -p deps-build
cd deps-build
if [[ "$SKIP_DOWNLOAD" != true && ! -f "libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz" ]]; then
curl -C - -L \
-o "brotli-$BROTLI.tar.gz" "https://github.com/google/brotli/archive/refs/tags/v$BROTLI.tar.gz" \
-o "freetype-$FREETYPE.tar.gz" "https://sourceforge.net/projects/freetype/files/freetype2/$FREETYPE/freetype-$FREETYPE.tar.gz/download" \
-o "harfbuzz-$HARFBUZZ.tar.gz" "https://github.com/harfbuzz/harfbuzz/archive/refs/tags/$HARFBUZZ.tar.gz" \
-O "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/$LIBJPEGTURBO/libjpeg-turbo-$LIBJPEGTURBO.tar.gz" \
-O "https://downloads.sourceforge.net/project/libpng/libpng16/$LIBPNG/libpng-$LIBPNG.tar.gz" \
-O "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP.tar.gz" \
-O "https://github.com/nih-at/libzip/releases/download/v$LIBZIP/libzip-$LIBZIP.tar.gz" \
-o "zlib-ng-$ZLIBNG.tar.gz" "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/$ZLIBNG.tar.gz" \
-O "https://github.com/facebook/zstd/releases/download/v$ZSTD/zstd-$ZSTD.tar.gz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtbase-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtimageformats-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtsvg-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qttools-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qttranslations-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtwayland-everywhere-src-$QT.tar.xz" \
-o "libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz" "https://github.com/ianlancetaylor/libbacktrace/archive/$LIBBACKTRACE_COMMIT.tar.gz" \
-O "https://github.com/libsdl-org/SDL/releases/download/release-$SDL3/SDL3-$SDL3.tar.gz" \
-o "cpuinfo-$CPUINFO_COMMIT.tar.gz" "https://github.com/stenzek/cpuinfo/archive/$CPUINFO_COMMIT.tar.gz" \
-o "discord-rpc-$DISCORD_RPC_COMMIT.tar.gz" "https://github.com/stenzek/discord-rpc/archive/$DISCORD_RPC_COMMIT.tar.gz" \
-o "plutosvg-$PLUTOSVG_COMMIT.tar.gz" "https://github.com/stenzek/plutosvg/archive/$PLUTOSVG_COMMIT.tar.gz" \
-o "shaderc-$SHADERC_COMMIT.tar.gz" "https://github.com/stenzek/shaderc/archive/$SHADERC_COMMIT.tar.gz" \
-o "soundtouch-$SOUNDTOUCH_COMMIT.tar.gz" "https://github.com/stenzek/soundtouch/archive/$SOUNDTOUCH_COMMIT.tar.gz"
fi
cat > SHASUMS <<EOF
$BROTLI_GZ_HASH brotli-$BROTLI.tar.gz
$FREETYPE_GZ_HASH freetype-$FREETYPE.tar.gz
$HARFBUZZ_GZ_HASH harfbuzz-$HARFBUZZ.tar.gz
$LIBJPEGTURBO_GZ_HASH libjpeg-turbo-$LIBJPEGTURBO.tar.gz
$LIBPNG_GZ_HASH libpng-$LIBPNG.tar.gz
$LIBWEBP_GZ_HASH libwebp-$LIBWEBP.tar.gz
$LIBZIP_GZ_HASH libzip-$LIBZIP.tar.gz
$ZLIBNG_GZ_HASH zlib-ng-$ZLIBNG.tar.gz
$ZSTD_GZ_HASH zstd-$ZSTD.tar.gz
$QTBASE_XZ_HASH qtbase-everywhere-src-$QT.tar.xz
$QTIMAGEFORMATS_XZ_HASH qtimageformats-everywhere-src-$QT.tar.xz
$QTSVG_XZ_HASH qtsvg-everywhere-src-$QT.tar.xz
$QTTOOLS_XZ_HASH qttools-everywhere-src-$QT.tar.xz
$QTTRANSLATIONS_XZ_HASH qttranslations-everywhere-src-$QT.tar.xz
$QTWAYLAND_XZ_HASH qtwayland-everywhere-src-$QT.tar.xz
$LIBBACKTRACE_GZ_HASH libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz
$SDL3_GZ_HASH SDL3-$SDL3.tar.gz
$CPUINFO_GZ_HASH cpuinfo-$CPUINFO_COMMIT.tar.gz
$DISCORD_RPC_GZ_HASH discord-rpc-$DISCORD_RPC_COMMIT.tar.gz
$PLUTOSVG_GZ_HASH plutosvg-$PLUTOSVG_COMMIT.tar.gz
$SHADERC_GZ_HASH shaderc-$SHADERC_COMMIT.tar.gz
$SOUNDTOUCH_GZ_HASH soundtouch-$SOUNDTOUCH_COMMIT.tar.gz
EOF
shasum -a 256 --check SHASUMS
# Have to clone with git, because it does version detection.
if [[ "$SKIP_DOWNLOAD" != true && ! -d "SPIRV-Cross" ]]; then
git clone https://github.com/KhronosGroup/SPIRV-Cross/ -b $SPIRV_CROSS_TAG --depth 1
if [ "$(git --git-dir=SPIRV-Cross/.git rev-parse HEAD)" != "$SPIRV_CROSS_SHA" ]; then
echo "SPIRV-Cross version mismatch, expected $SPIRV_CROSS_SHA, got $(git rev-parse HEAD)"
exit 1
fi
fi
# Only downloading sources?
if [ "$ONLY_DOWNLOAD" == true ]; then
exit 0
fi
# Prefer local deps for pkg-config search path.
if [[ -z "$PKG_CONFIG_PATH" ]]; then
export PKG_CONFIG_PATH="$INSTALLDIR/lib/pkgconfig:$INSTALLDIR/lib64/pkgconfig"
else
export PKG_CONFIG_PATH="$INSTALLDIR/lib/pkgconfig:$INSTALLDIR/lib64/pkgconfig:${PKG_CONFIG_PATH}"
fi
# Build zlib first because of the things that depend on it.
echo "Building zlib-ng..."
rm -fr "zlib-ng-$ZLIBNG"
tar xf "zlib-ng-$ZLIBNG.tar.gz"
cd "zlib-ng-$ZLIBNG"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DZLIB_COMPAT=ON -DBUILD_TESTING=OFF -DWITH_BENCHMARK_APPS=OFF -DWITH_GTEST=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "zlib-ng-$ZLIBNG"
echo "Building libbacktrace..."
rm -fr "libbacktrace-$LIBBACKTRACE_COMMIT"
tar xf "libbacktrace-$LIBBACKTRACE_COMMIT.tar.gz"
cd "libbacktrace-$LIBBACKTRACE_COMMIT"
CFLAGS="-fmacro-prefix-map=\"${PWD}\"=. -ffile-prefix-map=\"${PWD}\"=." ./configure --prefix="$INSTALLDIR" --with-pic
make
make install
cd ..
rm -fr "libbacktrace-$LIBBACKTRACE_COMMIT"
echo "Building libpng..."
rm -fr "libpng-$LIBPNG"
tar xf "libpng-$LIBPNG.tar.gz"
cd "libpng-$LIBPNG"
patch -p1 < "$SCRIPTDIR/libpng-1.6.54-apng.patch"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_STATIC=OFF -DPNG_SHARED=ON -DPNG_TOOLS=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "libpng-$LIBPNG"
echo "Building libjpeg..."
rm -fr "libjpeg-turbo-$LIBJPEGTURBO"
tar xf "libjpeg-turbo-$LIBJPEGTURBO.tar.gz"
cd "libjpeg-turbo-$LIBJPEGTURBO"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DENABLE_STATIC=OFF -DENABLE_SHARED=ON -DWITH_TESTS=OFF -DWITH_TOOLS=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "libjpeg-turbo-$LIBJPEGTURBO"
echo "Building Zstandard..."
rm -fr "zstd-$ZSTD"
tar xf "zstd-$ZSTD.tar.gz"
cd "zstd-$ZSTD"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DZSTD_BUILD_SHARED=ON -DZSTD_BUILD_STATIC=OFF -DZSTD_BUILD_PROGRAMS=OFF -B build -G Ninja build/cmake
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "zstd-$ZSTD"
echo "Building Brotli..."
rm -fr "brotli-$BROTLI"
tar xf "brotli-$BROTLI.tar.gz"
cd "brotli-$BROTLI"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=OFF -DBROTLI_BUILD_TOOLS=OFF -DBROTLI_DISABLE_TESTS=ON -B build -G Ninja
ninja -C build install
cd ..
rm -fr "brotli-$BROTLI"
echo "Building WebP..."
rm -fr "libwebp-$LIBWEBP"
tar xf "libwebp-$LIBWEBP.tar.gz"
cd "libwebp-$LIBWEBP"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -B build -G Ninja \
-DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF \
-DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPINFO=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF -DBUILD_SHARED_LIBS=ON
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "libwebp-$LIBWEBP"
echo "Building libzip..."
rm -fr "libzip-$LIBZIP"
tar xf "libzip-$LIBZIP.tar.gz"
cd "libzip-$LIBZIP"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -B build -G Ninja \
-DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF -DENABLE_WINDOWS_CRYPTO=OFF \
-DENABLE_BZIP2=OFF -DENABLE_LZMA=OFF -DENABLE_ZSTD=ON -DBUILD_SHARED_LIBS=ON -DLIBZIP_DO_INSTALL=ON \
-DBUILD_TOOLS=OFF -DBUILD_REGRESS=OFF -DBUILD_OSSFUZZ=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOC=OFF
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "libzip-$LIBZIP"
echo "Building FreeType..."
rm -fr "freetype-$FREETYPE"
tar xf "freetype-$FREETYPE.tar.gz"
cd "freetype-$FREETYPE"
patch -p1 < "$SCRIPTDIR/freetype-harfbuzz-soname.patch"
patch -p1 < "$SCRIPTDIR/freetype-static-brotli.patch"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DFT_REQUIRE_ZLIB=ON -DFT_REQUIRE_PNG=ON -DFT_DISABLE_BZIP2=TRUE -DFT_REQUIRE_BROTLI=TRUE -DFT_DYNAMIC_HARFBUZZ=TRUE -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "freetype-$FREETYPE"
echo "Building HarfBuzz..."
rm -fr "harfbuzz-$HARFBUZZ"
tar xf "harfbuzz-$HARFBUZZ.tar.gz"
cd "harfbuzz-$HARFBUZZ"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DHB_BUILD_UTILS=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "harfbuzz-$HARFBUZZ"
echo "Building SDL..."
rm -fr "SDL3-$SDL3"
tar xf "SDL3-$SDL3.tar.gz"
cd "SDL3-$SDL3"
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DSDL_SHARED=ON -DSDL_STATIC=OFF -DSDL_TESTS=OFF -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "SDL3-$SDL3"
# Couple notes:
# -fontconfig is needed otherwise Qt Widgets render only boxes.
# -qt-doubleconversion avoids a dependency on libdouble-conversion.
# ICU avoids pulling in a bunch of large libraries, and hopefully we can get away without it.
# OpenGL is needed to render window decorations in Wayland, apparently.
# Brotli is disabled as we static link it, and QtNetwork doesn't link with bbrotlicommon.
echo "Building Qt Base..."
rm -fr "qtbase-everywhere-src-$QT"
tar xf "qtbase-everywhere-src-$QT.tar.xz"
cd "qtbase-everywhere-src-$QT"
patch -p1 < "$SCRIPTDIR/qtbase-disable-pcre2-jit.patch"
patch -p1 < "$SCRIPTDIR/qtbase-fusion-style.patch"
mkdir build
cd build
../configure -prefix "$INSTALLDIR" -release -dbus-linked -fontconfig -qt-doubleconversion -ssl -openssl-runtime -opengl desktop -qpa xcb,wayland -xkbcommon -xcb -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF -DFEATURE_cups=OFF -DFEATURE_dbus=ON -DFEATURE_icu=OFF -DFEATURE_sql=OFF -DFEATURE_system_png=ON -DFEATURE_system_jpeg=ON -DFEATURE_system_zlib=ON -DFEATURE_system_freetype=ON -DFEATURE_system_harfbuzz=ON -DFEATURE_gtk3=OFF -DFEATURE_brotli=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qtbase-everywhere-src-$QT"
echo "Building Qt SVG..."
rm -fr "qtsvg-everywhere-src-$QT"
tar xf "qtsvg-everywhere-src-$QT.tar.xz"
cd "qtsvg-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qtsvg-everywhere-src-$QT"
echo "Building Qt Image Formats..."
rm -fr "qtimageformats-everywhere-src-$QT"
tar xf "qtimageformats-everywhere-src-$QT.tar.xz"
cd "qtimageformats-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF -DFEATURE_system_webp=ON
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qtimageformats-everywhere-src-$QT"
echo "Building Qt Wayland..."
rm -fr "qtwayland-everywhere-src-$QT"
tar xf "qtwayland-everywhere-src-$QT.tar.xz"
cd "qtwayland-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qtwayland-everywhere-src-$QT"
echo "Installing Qt Tools..."
rm -fr "qttools-everywhere-src-$QT"
tar xf "qttools-everywhere-src-$QT.tar.xz"
cd "qttools-everywhere-src-$QT"
patch -p1 < "$SCRIPTDIR/qttools-linguist-without-quick.patch"
patch -p1 < "$SCRIPTDIR/qttools-disable-clang.patch"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF -DFEATURE_assistant=OFF -DFEATURE_clang=OFF -DFEATURE_designer=ON -DFEATURE_kmap2qmap=OFF -DFEATURE_pixeltool=OFF -DFEATURE_pkg_config=OFF -DFEATURE_qev=OFF -DFEATURE_qtattributionsscanner=OFF -DFEATURE_qtdiag=OFF -DFEATURE_qtplugininfo=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qttools-everywhere-src-$QT"
echo "Installing Qt Translations..."
rm -fr "qttranslations-everywhere-src-$QT"
tar xf "qttranslations-everywhere-src-$QT.tar.xz"
cd "qttranslations-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DQT_GENERATE_SBOM=OFF
cmake --build . --parallel
ninja install
cd ../../
rm -fr "qttranslations-everywhere-src-$QT"
echo "Building shaderc..."
rm -fr "shaderc-$SHADERC_COMMIT"
tar xf "shaderc-$SHADERC_COMMIT.tar.gz"
cd "shaderc-$SHADERC_COMMIT"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DSHADERC_SKIP_TESTS=ON -DSHADERC_SKIP_EXAMPLES=ON -DSHADERC_SKIP_EXECUTABLES=ON -DSHADERC_SKIP_COPYRIGHT_CHECK=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "shaderc-$SHADERC_COMMIT"
echo "Building SPIRV-Cross..."
cd SPIRV-Cross
rm -fr build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DSPIRV_CROSS_SHARED=ON -DSPIRV_CROSS_STATIC=OFF -DSPIRV_CROSS_CLI=OFF -DSPIRV_CROSS_ENABLE_TESTS=OFF -DSPIRV_CROSS_ENABLE_GLSL=ON -DSPIRV_CROSS_ENABLE_HLSL=OFF -DSPIRV_CROSS_ENABLE_MSL=OFF -DSPIRV_CROSS_ENABLE_CPP=OFF -DSPIRV_CROSS_ENABLE_REFLECT=OFF -DSPIRV_CROSS_ENABLE_C_API=ON -DSPIRV_CROSS_ENABLE_UTIL=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
rm -fr build
cd ..
echo "Building cpuinfo..."
rm -fr "cpuinfo-$CPUINFO_COMMIT"
tar xf "cpuinfo-$CPUINFO_COMMIT.tar.gz"
cd "cpuinfo-$CPUINFO_COMMIT"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DCPUINFO_LIBRARY_TYPE=shared -DCPUINFO_RUNTIME_TYPE=shared -DCPUINFO_LOG_LEVEL=error -DCPUINFO_LOG_TO_STDIO=ON -DCPUINFO_BUILD_TOOLS=OFF -DCPUINFO_BUILD_UNIT_TESTS=OFF -DCPUINFO_BUILD_MOCK_TESTS=OFF -DCPUINFO_BUILD_BENCHMARKS=OFF -DUSE_SYSTEM_LIBS=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "cpuinfo-$CPUINFO_COMMIT"
echo "Building discord-rpc..."
rm -fr "discord-rpc-$DISCORD_RPC_COMMIT"
tar xf "discord-rpc-$DISCORD_RPC_COMMIT.tar.gz"
cd "discord-rpc-$DISCORD_RPC_COMMIT"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "discord-rpc-$DISCORD_RPC_COMMIT"
echo "Building plutosvg..."
rm -fr "plutosvg-$PLUTOSVG_COMMIT"
tar xf "plutosvg-$PLUTOSVG_COMMIT.tar.gz"
cd "plutosvg-$PLUTOSVG_COMMIT"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "plutosvg-$PLUTOSVG_COMMIT"
echo "Building soundtouch..."
rm -fr "soundtouch-$SOUNDTOUCH_COMMIT"
tar xf "soundtouch-$SOUNDTOUCH_COMMIT.tar.gz"
cd "soundtouch-$SOUNDTOUCH_COMMIT"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -B build -G Ninja
cmake --build build --parallel
ninja -C build install
cd ..
rm -fr "soundtouch-$SOUNDTOUCH_COMMIT"
if [ "$SKIP_CLEANUP" != true ]; then
echo "Cleaning up..."
cd ..
rm -fr deps-build
fi
-418
View File
@@ -1,418 +0,0 @@
#!/bin/bash
# SPDX-License-Identifier: CC-BY-NC-ND-4.0
set -e
merge_binaries() {
X86DIR=$1
ARMDIR=$2
echo "Merging ARM64 binaries from $ARMDIR into fat binaries at $X86DIR..."
IFS="
"
pushd "$X86DIR"
for X86BIN in $(find . -type f \( -name '*.dylib' -o -name '*.a' -o -perm +111 \)); do
if file "$X86DIR/$X86BIN" | grep "Mach-O " | grep " x86_64" >/dev/null; then
ARMBIN="${ARMDIR}/${X86BIN}"
echo "Merge $ARMBIN to $X86BIN..."
lipo -create "$X86BIN" "$ARMBIN" -o "$X86BIN"
fi
done
popd
}
if [ "$#" -ne 1 ]; then
echo "Syntax: $0 <output directory>"
exit 1
fi
export MACOSX_DEPLOYMENT_TARGET=13.3
NPROCS="$(getconf _NPROCESSORS_ONLN)"
SCRIPTDIR=$(realpath $(dirname "${BASH_SOURCE[0]}"))
INSTALLDIR="$1"
if [ "${INSTALLDIR:0:1}" != "/" ]; then
INSTALLDIR="$PWD/$INSTALLDIR"
fi
source "$SCRIPTDIR/versions"
MOLTENVK=1.4.0
mkdir -p deps-build
cd deps-build
export PKG_CONFIG_PATH="$INSTALLDIR/lib/pkgconfig:$PKG_CONFIG_PATH"
export LDFLAGS="-L$INSTALLDIR/lib $LDFLAGS"
export CFLAGS="-I$INSTALLDIR/include $CFLAGS"
export CXXFLAGS="-I$INSTALLDIR/include $CXXFLAGS"
CMAKE_COMMON=(
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_SHARED_LINKER_FLAGS="-dead_strip -dead_strip_dylibs"
-DCMAKE_PREFIX_PATH="$INSTALLDIR"
-DCMAKE_INSTALL_PREFIX="$INSTALLDIR"
-DCMAKE_INSTALL_NAME_DIR='$<INSTALL_PREFIX>/lib'
)
CMAKE_ARCH_X64=-DCMAKE_OSX_ARCHITECTURES="x86_64"
CMAKE_ARCH_ARM64=-DCMAKE_OSX_ARCHITECTURES="arm64"
CMAKE_ARCH_UNIVERSAL=-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
# SBOM generation appears to be broken on MacOS, and I can't be arsed to debug it.
CMAKE_COMMON_QT=(
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
-DQT_GENERATE_SBOM=OFF
)
cat > SHASUMS <<EOF
$BROTLI_GZ_HASH brotli-$BROTLI.tar.gz
$FREETYPE_GZ_HASH freetype-$FREETYPE.tar.gz
$HARFBUZZ_GZ_HASH harfbuzz-$HARFBUZZ.tar.gz
$LIBPNG_GZ_HASH libpng-$LIBPNG.tar.gz
$LIBJPEGTURBO_GZ_HASH libjpeg-turbo-$LIBJPEGTURBO.tar.gz
$LIBWEBP_GZ_HASH libwebp-$LIBWEBP.tar.gz
$LIBZIP_GZ_HASH libzip-$LIBZIP.tar.gz
$SDL3_GZ_HASH SDL3-$SDL3.tar.gz
$ZSTD_GZ_HASH zstd-$ZSTD.tar.gz
$FFMPEG_XZ_HASH ffmpeg-$FFMPEG_VERSION.tar.xz
fc74aef926ee3cd473fe260a93819c09fdc939bff669271a587e9ebaa43d4306 v$MOLTENVK.tar.gz
$QTBASE_XZ_HASH qtbase-everywhere-src-$QT.tar.xz
$QTIMAGEFORMATS_XZ_HASH qtimageformats-everywhere-src-$QT.tar.xz
$QTSVG_XZ_HASH qtsvg-everywhere-src-$QT.tar.xz
$QTTOOLS_XZ_HASH qttools-everywhere-src-$QT.tar.xz
$QTTRANSLATIONS_XZ_HASH qttranslations-everywhere-src-$QT.tar.xz
$CPUINFO_GZ_HASH cpuinfo-$CPUINFO_COMMIT.tar.gz
$DISCORD_RPC_GZ_HASH discord-rpc-$DISCORD_RPC_COMMIT.tar.gz
$PLUTOSVG_GZ_HASH plutosvg-$PLUTOSVG_COMMIT.tar.gz
$SHADERC_GZ_HASH shaderc-$SHADERC_COMMIT.tar.gz
$SOUNDTOUCH_GZ_HASH soundtouch-$SOUNDTOUCH_COMMIT.tar.gz
EOF
curl -L \
-o "brotli-$BROTLI.tar.gz" "https://github.com/google/brotli/archive/refs/tags/v$BROTLI.tar.gz" \
-o "freetype-$FREETYPE.tar.gz" "https://sourceforge.net/projects/freetype/files/freetype2/$FREETYPE/freetype-$FREETYPE.tar.gz/download" \
-o "harfbuzz-$HARFBUZZ.tar.gz" "https://github.com/harfbuzz/harfbuzz/archive/refs/tags/$HARFBUZZ.tar.gz" \
-O "https://downloads.sourceforge.net/project/libpng/libpng16/$LIBPNG/libpng-$LIBPNG.tar.gz" \
-O "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/$LIBJPEGTURBO/libjpeg-turbo-$LIBJPEGTURBO.tar.gz" \
-O "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP.tar.gz" \
-O "https://github.com/nih-at/libzip/releases/download/v$LIBZIP/libzip-$LIBZIP.tar.gz" \
-O "https://github.com/libsdl-org/SDL/releases/download/release-$SDL3/SDL3-$SDL3.tar.gz" \
-O "https://github.com/facebook/zstd/releases/download/v$ZSTD/zstd-$ZSTD.tar.gz" \
-O "https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.xz" \
-O "https://github.com/KhronosGroup/MoltenVK/archive/refs/tags/v$MOLTENVK.tar.gz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtbase-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtimageformats-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtsvg-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qttools-everywhere-src-$QT.tar.xz" \
-O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qttranslations-everywhere-src-$QT.tar.xz" \
-o "cpuinfo-$CPUINFO_COMMIT.tar.gz" "https://github.com/stenzek/cpuinfo/archive/$CPUINFO_COMMIT.tar.gz" \
-o "discord-rpc-$DISCORD_RPC_COMMIT.tar.gz" "https://github.com/stenzek/discord-rpc/archive/$DISCORD_RPC_COMMIT.tar.gz" \
-o "plutosvg-$PLUTOSVG_COMMIT.tar.gz" "https://github.com/stenzek/plutosvg/archive/$PLUTOSVG_COMMIT.tar.gz" \
-o "shaderc-$SHADERC_COMMIT.tar.gz" "https://github.com/stenzek/shaderc/archive/$SHADERC_COMMIT.tar.gz" \
-o "soundtouch-$SOUNDTOUCH_COMMIT.tar.gz" "https://github.com/stenzek/soundtouch/archive/$SOUNDTOUCH_COMMIT.tar.gz"
shasum -a 256 --check SHASUMS
# Have to clone with git, because it does version detection.
if [ ! -d "SPIRV-Cross" ]; then
git clone https://github.com/KhronosGroup/SPIRV-Cross/ -b $SPIRV_CROSS_TAG --depth 1
if [ "$(git --git-dir=SPIRV-Cross/.git rev-parse HEAD)" != "$SPIRV_CROSS_SHA" ]; then
echo "SPIRV-Cross version mismatch, expected $SPIRV_CROSS_SHA, got $(git rev-parse HEAD)"
exit 1
fi
fi
echo "Installing libpng..."
rm -fr "libpng-$LIBPNG"
tar xf "libpng-$LIBPNG.tar.gz"
cd "libpng-$LIBPNG"
patch -p1 < "$SCRIPTDIR/libpng-1.6.54-apng.patch"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_X64" -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_FRAMEWORK=OFF -B build
make -C build "-j$NPROCS"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_ARM64" -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_ARM_NEON=on -DPNG_FRAMEWORK=OFF -B build-arm64
make -C build-arm64 "-j$NPROCS"
merge_binaries $(realpath build) $(realpath build-arm64)
make -C build install
cd ..
rm -fr "libpng-$LIBPNG"
echo "Building libjpeg..."
rm -fr "libjpeg-turbo-$LIBJPEGTURBO"
tar xf "libjpeg-turbo-$LIBJPEGTURBO.tar.gz"
cd "libjpeg-turbo-$LIBJPEGTURBO"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_X64" -DENABLE_STATIC=OFF -DENABLE_SHARED=ON -DWITH_TESTS=OFF -DWITH_TOOLS=OFF -B build
make -C build "-j$NPROCS"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_ARM64" -DENABLE_STATIC=OFF -DENABLE_SHARED=ON -DWITH_TESTS=OFF -DWITH_TOOLS=OFF -B build-arm64
make -C build-arm64 "-j$NPROCS"
merge_binaries $(realpath build) $(realpath build-arm64)
make -C build install
cd ..
rm -fr "libjpeg-turbo-$LIBJPEGTURBO"
echo "Installing Zstandard..."
rm -fr "zstd-$ZSTD"
tar xf "zstd-$ZSTD.tar.gz"
cd "zstd-$ZSTD"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_X64" -DBUILD_SHARED_LIBS=ON -DZSTD_BUILD_PROGRAMS=OFF -B build-dir build/cmake
make -C build-dir "-j$NPROCS"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_ARM64" -DBUILD_SHARED_LIBS=ON -DZSTD_BUILD_PROGRAMS=OFF -B build-dir-arm64 build/cmake
make -C build-dir-arm64 "-j$NPROCS"
merge_binaries $(realpath build-dir) $(realpath build-dir-arm64)
make -C build-dir install
cd ..
rm -fr "zstd-$ZSTD"
echo "Installing Brotli..."
rm -fr "brotli-$BROTLI"
tar xf "brotli-$BROTLI.tar.gz"
cd "brotli-$BROTLI"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DBUILD_SHARED_LIBS=OFF -DBROTLI_BUILD_TOOLS=OFF -DBROTLI_DISABLE_TESTS=ON -B build
cmake --build build --parallel
cmake --install build
cd ..
rm -fr "brotli-$BROTLI"
echo "Installing WebP..."
rm -fr "libwebp-$LIBWEBP"
tar xf "libwebp-$LIBWEBP.tar.gz"
cd "libwebp-$LIBWEBP"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_X64" -B build \
-DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF \
-DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPINFO=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF -DBUILD_SHARED_LIBS=ON
make -C build "-j$NPROCS"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_ARM64" -B build-arm64 \
-DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF \
-DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPINFO=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF -DBUILD_SHARED_LIBS=ON
make -C build-arm64 "-j$NPROCS"
merge_binaries $(realpath build) $(realpath build-arm64)
make -C build install
cd ..
rm -fr "libwebp-$LIBWEBP"
echo "Installing libzip..."
rm -fr "libzip-$LIBZIP"
tar xf "libzip-$LIBZIP.tar.gz"
cd "libzip-$LIBZIP"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -B build \
-DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF -DENABLE_WINDOWS_CRYPTO=OFF \
-DENABLE_BZIP2=OFF -DENABLE_LZMA=OFF -DENABLE_ZSTD=ON -DBUILD_SHARED_LIBS=ON -DLIBZIP_DO_INSTALL=ON \
-DBUILD_TOOLS=OFF -DBUILD_REGRESS=OFF -DBUILD_OSSFUZZ=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOC=OFF
cmake --build build --parallel
cmake --install build
cd ..
rm -fr "libzip-$LIBZIP"
echo "Building FreeType..."
rm -fr "freetype-$FREETYPE"
tar xf "freetype-$FREETYPE.tar.gz"
cd "freetype-$FREETYPE"
patch -p1 < "$SCRIPTDIR/freetype-harfbuzz-soname.patch"
patch -p1 < "$SCRIPTDIR/freetype-static-brotli.patch"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DBUILD_SHARED_LIBS=ON -DFT_REQUIRE_ZLIB=ON -DFT_REQUIRE_PNG=ON -DFT_DISABLE_BZIP2=TRUE -DFT_REQUIRE_BROTLI=TRUE -DFT_DYNAMIC_HARFBUZZ=TRUE -B build
cmake --build build --parallel
cmake --install build
cd ..
rm -fr "freetype-$FREETYPE"
echo "Building HarfBuzz..."
rm -fr "harfbuzz-$HARFBUZZ"
tar xf "harfbuzz-$HARFBUZZ.tar.gz"
cd "harfbuzz-$HARFBUZZ"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DBUILD_SHARED_LIBS=ON -DHB_BUILD_UTILS=OFF -B build
cmake --build build --parallel
cmake --install build
cd ..
rm -fr "harfbuzz-$HARFBUZZ"
echo "Installing SDL..."
rm -fr "SDL3-$SDL3"
tar xf "SDL3-$SDL3.tar.gz"
cd "SDL3-$SDL3"
cmake -B build "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DSDL_SHARED=ON -DSDL_STATIC=OFF -DSDL_TESTS=OFF -DSDL_X11=OFF -DBUILD_SHARED_LIBS=ON
make -C build "-j$NPROCS"
make -C build install
cd ..
rm -fr "SDL3-$SDL3"
echo "Installing FFmpeg..."
rm -fr "ffmpeg-$FFMPEG_VERSION"
tar xf "ffmpeg-$FFMPEG_VERSION.tar.xz"
cd "ffmpeg-$FFMPEG_VERSION"
mkdir build
cd build
LDFLAGS="-dead_strip $LDFLAGS" CFLAGS="-Os $CFLAGS" CXXFLAGS="-Os $CXXFLAGS" \
../configure --prefix="$INSTALLDIR" \
--enable-cross-compile --arch=x86_64 --cc='clang -arch x86_64' --cxx='clang++ -arch x86_64' --disable-x86asm \
--disable-all --disable-autodetect --disable-static --enable-shared \
--enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale \
--enable-audiotoolbox --enable-videotoolbox \
--enable-encoder=ffv1,qtrle,pcm_s16be,pcm_s16le,*_at,*_videotoolbox \
--enable-muxer=avi,matroska,mov,mp3,mp4,wav \
--enable-protocol=file
make "-j$NPROCS"
cd ..
mkdir build-arm64
cd build-arm64
LDFLAGS="-dead_strip $LDFLAGS" CFLAGS="-Os $CFLAGS" CXXFLAGS="-Os $CXXFLAGS" \
../configure --prefix="$INSTALLDIR" \
--enable-cross-compile --arch=arm64 --cc='clang -arch arm64' --cxx='clang++ -arch arm64' --disable-x86asm \
--disable-all --disable-autodetect --disable-static --enable-shared \
--enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale \
--enable-audiotoolbox --enable-videotoolbox \
--enable-encoder=ffv1,qtrle,pcm_s16be,pcm_s16le,*_at,*_videotoolbox \
--enable-muxer=avi,matroska,mov,mp3,mp4,wav \
--enable-protocol=file
make "-j$NPROCS"
cd ..
merge_binaries $(realpath build) $(realpath build-arm64)
cd build
make install
cd ../..
rm -fr "ffmpeg-$FFMPEG_VERSION"
# MoltenVK already builds universal binaries, nothing special to do here.
echo "Installing MoltenVK..."
rm -fr "MoltenVK-${MOLTENVK}"
tar xf "v$MOLTENVK.tar.gz"
cd "MoltenVK-${MOLTENVK}"
./fetchDependencies --macos
make macos
cp Package/Latest/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib "$INSTALLDIR/lib/"
cd ..
rm -fr "MoltenVK-${MOLTENVK}"
echo "Installing Qt Base..."
rm -fr "qtbase-everywhere-src-$QT"
tar xf "qtbase-everywhere-src-$QT.tar.xz"
cd "qtbase-everywhere-src-$QT"
# Stop checkboxes in Fusion theme having such bright outlines.
patch -p1 < "$SCRIPTDIR/qtbase-fusion-style.patch"
# Allow window-modal dialog boxes in Tahoe, it's not a problem for us.
patch -p1 < "$SCRIPTDIR/qtbase-window-modal-tahoe.patch"
# since we don't have a direct reference to QtSvg, it doesn't deployed directly from the main binary
# (only indirectly from iconengines), and the libqsvg.dylib imageformat plugin does not get deployed.
# We could run macdeployqt twice, but that's even more janky than patching it.
patch -p1 < "$SCRIPTDIR/qtbase-macdeploy-imageformats.patch"
cmake -B build "${CMAKE_COMMON[@]}" "${CMAKE_COMMON_QT[@]}" -DFEATURE_dbus=OFF -DFEATURE_framework=OFF -DFEATURE_icu=OFF -DFEATURE_opengl=OFF -DFEATURE_sql=OFF -DFEATURE_gssapi=OFF -DFEATURE_system_png=ON -DFEATURE_system_jpeg=ON -DFEATURE_system_zlib=ON -DFEATURE_system_freetype=ON -DFEATURE_system_harfbuzz=ON -DFEATURE_brotli=OFF
make -C build "-j$NPROCS"
make -C build install
cd ..
rm -fr "qtbase-everywhere-src-$QT"
echo "Installing Qt SVG..."
rm -fr "qtsvg-everywhere-src-$QT"
tar xf "qtsvg-everywhere-src-$QT.tar.xz"
cd "qtsvg-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "${CMAKE_COMMON_QT[@]}"
make "-j$NPROCS"
make install
cd ../..
rm -fr "qtsvg-everywhere-src-$QT"
echo "Installing Qt Image Formats..."
rm -fr "qtimageformats-everywhere-src-$QT"
tar xf "qtimageformats-everywhere-src-$QT.tar.xz"
cd "qtimageformats-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "${CMAKE_COMMON_QT[@]}" -DFEATURE_system_webp=ON
make "-j$NPROCS"
make install
cd ../..
rm -fr "qtimageformats-everywhere-src-$QT"
echo "Installing Qt Tools..."
rm -fr "qttools-everywhere-src-$QT"
tar xf "qttools-everywhere-src-$QT.tar.xz"
cd "qttools-everywhere-src-$QT"
patch -p1 < "$SCRIPTDIR/qttools-linguist-without-quick.patch"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "${CMAKE_COMMON_QT[@]}" -DFEATURE_assistant=OFF -DFEATURE_clang=OFF -DFEATURE_designer=ON -DFEATURE_kmap2qmap=OFF -DFEATURE_linguist=ON -DFEATURE_pixeltool=OFF -DFEATURE_pkg_config=OFF -DFEATURE_qev=OFF -DFEATURE_qtattributionsscanner=OFF -DFEATURE_qtdiag=OFF -DFEATURE_qtplugininfo=OFF
make "-j$NPROCS"
make install
cd ../..
rm -fr "qttools-everywhere-src-$QT"
echo "Installing Qt Translations..."
rm -fr "qttranslations-everywhere-src-$QT"
tar xf "qttranslations-everywhere-src-$QT.tar.xz"
cd "qttranslations-everywhere-src-$QT"
mkdir build
cd build
"$INSTALLDIR/bin/qt-configure-module" .. -- "${CMAKE_COMMON[@]}" "${CMAKE_COMMON_QT[@]}"
make "-j$NPROCS"
make install
cd ../..
rm -fr "qttranslations-everywhere-src-$QT"
echo "Building shaderc..."
rm -fr "shaderc-$SHADERC_COMMIT"
tar xf "shaderc-$SHADERC_COMMIT.tar.gz"
cd "shaderc-$SHADERC_COMMIT"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DSHADERC_SKIP_TESTS=ON -DSHADERC_SKIP_EXAMPLES=ON -DSHADERC_SKIP_COPYRIGHT_CHECK=ON -DSHADERC_SKIP_EXECUTABLES=ON -B build
make -C build "-j$NPROCS"
make -C build install
cd ..
rm -fr "shaderc-$SHADERC_COMMIT"
echo "Building SPIRV-Cross..."
cd SPIRV-Cross
rm -fr build
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DSPIRV_CROSS_SHARED=ON -DSPIRV_CROSS_STATIC=OFF -DSPIRV_CROSS_CLI=OFF -DSPIRV_CROSS_ENABLE_TESTS=OFF -DSPIRV_CROSS_ENABLE_GLSL=ON -DSPIRV_CROSS_ENABLE_HLSL=OFF -DSPIRV_CROSS_ENABLE_MSL=ON -DSPIRV_CROSS_ENABLE_CPP=OFF -DSPIRV_CROSS_ENABLE_REFLECT=OFF -DSPIRV_CROSS_ENABLE_C_API=ON -DSPIRV_CROSS_ENABLE_UTIL=ON -B build
cmake --build build --parallel
cmake --install build
rm -fr build
cd ..
echo "Building cpuinfo..."
rm -fr "cpuinfo-$CPUINFO_COMMIT"
tar xf "cpuinfo-$CPUINFO_COMMIT.tar.gz"
cd "cpuinfo-$CPUINFO_COMMIT"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_X64" -DCPUINFO_LIBRARY_TYPE=shared -DCPUINFO_RUNTIME_TYPE=shared -DCPUINFO_LOG_LEVEL=error -DCPUINFO_LOG_TO_STDIO=ON -DCPUINFO_BUILD_TOOLS=OFF -DCPUINFO_BUILD_UNIT_TESTS=OFF -DCPUINFO_BUILD_MOCK_TESTS=OFF -DCPUINFO_BUILD_BENCHMARKS=OFF -DUSE_SYSTEM_LIBS=ON -B build
make -C build "-j$NPROCS"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_ARM64" -DCPUINFO_LIBRARY_TYPE=shared -DCPUINFO_RUNTIME_TYPE=shared -DCPUINFO_LOG_LEVEL=error -DCPUINFO_LOG_TO_STDIO=ON -DCPUINFO_BUILD_TOOLS=OFF -DCPUINFO_BUILD_UNIT_TESTS=OFF -DCPUINFO_BUILD_MOCK_TESTS=OFF -DCPUINFO_BUILD_BENCHMARKS=OFF -DUSE_SYSTEM_LIBS=ON -B build-arm64
make -C build-arm64 "-j$NPROCS"
merge_binaries $(realpath build) $(realpath build-arm64)
make -C build install
cd ..
rm -fr "cpuinfo-$CPUINFO_COMMIT"
echo "Building discord-rpc..."
rm -fr "discord-rpc-$DISCORD_RPC_COMMIT"
tar xf "discord-rpc-$DISCORD_RPC_COMMIT.tar.gz"
cd "discord-rpc-$DISCORD_RPC_COMMIT"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DBUILD_SHARED_LIBS=ON -B build
cmake --build build --parallel
cmake --install build
cd ..
rm -fr "discord-rpc-$DISCORD_RPC_COMMIT"
echo "Building plutosvg..."
rm -fr "plutosvg-$PLUTOSVG_COMMIT"
tar xf "plutosvg-$PLUTOSVG_COMMIT.tar.gz"
cd "plutosvg-$PLUTOSVG_COMMIT"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build
cmake --build build --parallel
cmake --install build
cd ..
rm -fr "plutosvg-$PLUTOSVG_COMMIT"
echo "Building soundtouch..."
rm -fr "soundtouch-$SOUNDTOUCH_COMMIT"
tar xf "soundtouch-$SOUNDTOUCH_COMMIT.tar.gz"
cd "soundtouch-$SOUNDTOUCH_COMMIT"
cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -B build
cmake --build build --parallel
cmake --install build
cd ..
rm -fr "soundtouch-$SOUNDTOUCH_COMMIT"
echo "Cleaning up..."
cd ..
rm -rf deps-build
@@ -1,378 +0,0 @@
@echo off
setlocal enabledelayedexpansion
rem SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <stenzek@gmail.com>
rem SPDX-License-Identifier: CC-BY-NC-ND-4.0
echo Setting environment...
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsamd64_arm64.bat" (
call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsamd64_arm64.bat"
) else if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsamd64_arm64.bat" (
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsamd64_arm64.bat"
) else (
echo Visual Studio 2022 not found.
goto error
)
set SEVENZIP="C:\Program Files\7-Zip\7z.exe"
set PATCH="C:\Program Files\Git\usr\bin\patch.exe"
if defined DEBUG (
echo DEBUG=%DEBUG%
) else (
set DEBUG=1
)
pushd %~dp0
set "SCRIPTDIR=%CD%"
cd ..\..\dep\msvc
mkdir deps-build
cd deps-build || goto error
set "BUILDDIR=%CD%"
cd ..
mkdir deps-arm64
cd deps-arm64 || goto error
set "INSTALLDIR=%CD%"
cd ..
cd deps-x64 || goto error
set "X64INSTALLDIR=%CD%"
cd ..
popd
echo SCRIPTDIR=%SCRIPTDIR%
echo BUILDDIR=%BUILDDIR%
echo INSTALLDIR=%INSTALLDIR%
cd "%BUILDDIR%"
REM Read each line from the file and set as environment variable
for /f "usebackq tokens=1,2 delims==" %%a in ("%SCRIPTDIR%\versions") do (
if not "%%a"=="" if not "%%b"=="" (
set "%%a=%%b"
rem echo Set %%a=%%b
)
)
call :downloadfile "brotli-%BROTLI%.tar.gz" "https://github.com/google/brotli/archive/refs/tags/v%BROTLI%.tar.gz" "%BROTLI_GZ_HASH%" || goto error
call :downloadfile "freetype-%FREETYPE%.tar.gz" "https://download.savannah.gnu.org/releases/freetype/freetype-%FREETYPE%.tar.gz" "%FREETYPE_GZ_HASH%" || goto error
call :downloadfile "harfbuzz-%HARFBUZZ%.tar.gz" "https://github.com/harfbuzz/harfbuzz/archive/refs/tags/%HARFBUZZ%.tar.gz" "%HARFBUZZ_GZ_HASH%" || goto error
call :downloadfile "libpng-%LIBPNG%.tar.gz" "https://download.sourceforge.net/libpng/libpng-%LIBPNG%.tar.gz" "%LIBPNG_GZ_HASH%" || goto error
call :downloadfile "libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/%LIBJPEGTURBO%/libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" "%LIBJPEGTURBO_GZ_HASH%" || goto error
call :downloadfile "SDL3-%SDL3%.zip" "https://github.com/libsdl-org/SDL/releases/download/release-%SDL3%/SDL3-%SDL3%.zip" "%SDL3_ZIP_HASH%" || goto error
call :downloadfile "qtbase-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtbase-everywhere-src-%QT%.zip" "%QTBASE_ZIP_HASH%" || goto error
call :downloadfile "qtimageformats-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtimageformats-everywhere-src-%QT%.zip" "%QTIMAGEFORMATS_ZIP_HASH%" || goto error
call :downloadfile "qtsvg-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtsvg-everywhere-src-%QT%.zip" "%QTSVG_ZIP_HASH%" || goto error
call :downloadfile "qttools-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttools-everywhere-src-%QT%.zip" "%QTTOOLS_ZIP_HASH%" || goto error
call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttranslations-everywhere-src-%QT%.zip" "%QTTRANSLATIONS_ZIP_HASH%" || goto error
call :downloadfile "libwebp-%LIBWEBP%.tar.gz" "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-%LIBWEBP%.tar.gz" "%LIBWEBP_GZ_HASH%" || goto error
call :downloadfile "libzip-%LIBZIP%.tar.gz" "https://github.com/nih-at/libzip/releases/download/v%LIBZIP%/libzip-%LIBZIP%.tar.gz" "%LIBZIP_GZ_HASH%" || goto error
call :downloadfile "zlib-ng-%ZLIBNG%.tar.gz" "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/%ZLIBNG%.tar.gz" "%ZLIBNG_GZ_HASH%" || goto error
call :downloadfile "zstd-%ZSTD%.tar.gz" "https://github.com/facebook/zstd/releases/download/v%ZSTD%/zstd-%ZSTD%.tar.gz" "%ZSTD_GZ_HASH%" || goto error
call :downloadfile "cpuinfo-%CPUINFO_COMMIT%.tar.gz" "https://github.com/stenzek/cpuinfo/archive/%CPUINFO_COMMIT%.tar.gz" "%CPUINFO_GZ_HASH%" || goto error
call :downloadfile "discord-rpc-%DISCORD_RPC_COMMIT%.tar.gz" "https://github.com/stenzek/discord-rpc/archive/%DISCORD_RPC_COMMIT%.tar.gz" "%DISCORD_RPC_GZ_HASH%" || goto error
call :downloadfile "plutosvg-%PLUTOSVG_COMMIT%.tar.gz" "https://github.com/stenzek/plutosvg/archive/%PLUTOSVG_COMMIT%.tar.gz" "%PLUTOSVG_GZ_HASH%" || goto error
call :downloadfile "shaderc-%SHADERC_COMMIT%.tar.gz" "https://github.com/stenzek/shaderc/archive/%SHADERC_COMMIT%.tar.gz" "%SHADERC_GZ_HASH%" || goto error
call :downloadfile "soundtouch-%SOUNDTOUCH_COMMIT%.tar.gz" "https://github.com/stenzek/soundtouch/archive/%SOUNDTOUCH_COMMIT%.tar.gz" "%SOUNDTOUCH_GZ_HASH%" || goto error
call :downloadfile "dxcompiler-%DXCOMPILER_VERSION%.zip" "https://www.nuget.org/api/v2/package/Microsoft.Direct3D.DXC/%DXCOMPILER_VERSION%" "%DXCOMPILER_ZIP_HASH%" || goto error
if not exist SPIRV-Cross\ (
git clone https://github.com/KhronosGroup/SPIRV-Cross/ -b %SPIRV_CROSS_TAG% --depth 1 || goto error
pushd SPIRV-Cross
git reset --hard %SPIRV_CROSS_SHA% || goto error
popd
)
if %DEBUG%==1 (
echo Building debug and release libraries...
) else (
echo Building release libraries...
)
set FORCEPDB=-DCMAKE_EXE_LINKER_FLAGS_RELEASE="/DEBUG" -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="/DEBUG" -DCMAKE_MODULE_LINKER_FLAGS_RELEASE="/DEBUG"
set ARM64TOOLCHAIN=-DCMAKE_TOOLCHAIN_FILE="%SCRIPTDIR%\cmake-toolchain-windows-arm64.cmake"
echo Building zlib-ng...
rmdir /S /Q "zlib-ng-%ZLIBNG%"
tar -xf "zlib-ng-%ZLIBNG%.tar.gz" || goto error
cd "zlib-ng-%ZLIBNG%" || goto error
rem BUILD_SHARED_LIBS deliberately ommitted so that both shared and static libraries are built, we need static for the updater.
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DZLIB_COMPAT=ON -DBUILD_TESTING=OFF -DWITH_BENCHMARK_APPS=OFF -DWITH_GTEST=OFF -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "zlib-ng-%ZLIBNG%"
echo Building libpng...
rmdir /S /Q "libpng-%LIBPNG%"
tar -xf "libpng-%LIBPNG%.tar.gz" || goto error
cd "libpng-%LIBPNG%" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\libpng-1.6.54-apng.patch" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_STATIC=OFF -DPNG_SHARED=ON -DPNG_TOOLS=OFF -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "libpng-%LIBPNG%"
echo Building libjpeg...
rmdir /S /Q "libjpeg-turbo-%LIBJPEGTURBO%"
tar -xf "libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" || goto error
cd "libjpeg-turbo-%LIBJPEGTURBO%" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DENABLE_STATIC=OFF -DENABLE_SHARED=ON -DWITH_TESTS=OFF -DWITH_TOOLS=OFF -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "libjpeg-turbo-%LIBJPEGTURBO%"
echo Building Zstandard...
rmdir /S /Q "zstd-%ZSTD%"
tar -xf "zstd-%ZSTD%.tar.gz" --exclude "zstd-%ZSTD%/tests/cli-tests/*" || goto error
cd "zstd-%ZSTD%"
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DZSTD_BUILD_SHARED=ON -DZSTD_BUILD_STATIC=OFF -DZSTD_BUILD_PROGRAMS=OFF -B build -G Ninja build/cmake
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "zstd-%ZSTD%"
echo Building Brotli...
rmdir /S /Q "brotli-%BROTLI%"
tar -xf "brotli-%BROTLI%.tar.gz" || goto error
cd "brotli-%BROTLI%" || goto error
cmake -B build %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=OFF -DBROTLI_BUILD_TOOLS=OFF -DBROTLI_DISABLE_TESTS=ON -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "brotli-%BROTLI%"
echo Building WebP...
rmdir /S /Q "libwebp-%LIBWEBP%"
tar -xf "libwebp-%LIBWEBP%.tar.gz" || goto error
cd "libwebp-%LIBWEBP%" || goto error
cmake -B build %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF -DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPINFO=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF -DBUILD_SHARED_LIBS=ON -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "libwebp-%LIBWEBP%"
echo Building libzip...
rmdir /S /Q "libzip-%LIBZIP%"
tar -xf "libzip-%LIBZIP%.tar.gz" || goto error
cd "libzip-%LIBZIP%" || goto error
cmake -B build %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF -DENABLE_WINDOWS_CRYPTO=OFF -DENABLE_BZIP2=OFF -DENABLE_LZMA=OFF -DENABLE_ZSTD=ON -DBUILD_SHARED_LIBS=ON -DLIBZIP_DO_INSTALL=ON -DBUILD_TOOLS=OFF -DBUILD_REGRESS=OFF -DBUILD_OSSFUZZ=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOC=OFF -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "libzip-%LIBZIP%"
echo Building FreeType...
rmdir /S /Q "freetype-%FREETYPE%"
tar -xf "freetype-%FREETYPE%.tar.gz" || goto error
cd "freetype-%FREETYPE%" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\freetype-harfbuzz-soname.patch" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\freetype-static-brotli.patch" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DFT_REQUIRE_ZLIB=TRUE -DFT_REQUIRE_PNG=TRUE -DFT_DISABLE_BZIP2=TRUE -DFT_REQUIRE_BROTLI=TRUE -DFT_DYNAMIC_HARFBUZZ=TRUE -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "freetype-%FREETYPE%"
echo Building HarfBuzz...
rmdir /S /Q "harfbuzz-%HARFBUZZ%"
tar -xf "harfbuzz-%HARFBUZZ%.tar.gz" || goto error
cd "harfbuzz-%HARFBUZZ%" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DHB_BUILD_UTILS=OFF -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "harfbuzz-%HARFBUZZ%"
echo Building SDL...
rmdir /S /Q "SDL3-%SDL3%"
%SEVENZIP% x "SDL3-%SDL3%.zip" || goto error
cd "SDL3-%SDL3%" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\sdl3-ezfrd64-dll.patch" || goto error
cmake -B build %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release %FORCEPDB% -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DSDL_SHARED=ON -DSDL_STATIC=OFF -DSDL_TESTS=OFF -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
copy build\SDL3.pdb "%INSTALLDIR%\bin" || goto error
cd .. || goto error
rmdir /S /Q "SDL3-%SDL3%"
if %DEBUG%==1 (
set QTBUILDSPEC=-DCMAKE_CONFIGURATION_TYPES="Release;Debug" -G "Ninja Multi-Config"
) else (
set QTBUILDSPEC=-DCMAKE_BUILD_TYPE=Release -G Ninja
)
echo Building Qt base...
rmdir /S /Q "qtbase-everywhere-src-%QT%"
%SEVENZIP% x "qtbase-everywhere-src-%QT%.zip" || goto error
cd "qtbase-everywhere-src-%QT%" || goto error
rem Stop checkboxes in Fusion theme having such bright outlines.
%PATCH% -p1 < "%SCRIPTDIR%\qtbase-fusion-style.patch" || goto error
cmake -B build %ARM64TOOLCHAIN% -DFEATURE_sql=OFF -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DQT_HOST_PATH="%X64INSTALLDIR%" %FORCEPDB% -DQT_GENERATE_SBOM=OFF -DINPUT_ssl=yes -DINPUT_openssl=no -DFEATURE_system_png=ON -DFEATURE_system_jpeg=ON -DFEATURE_system_zlib=ON -DFEATURE_system_freetype=ON -DFEATURE_system_harfbuzz=ON -DFEATURE_brotli=OFF %QTBUILDSPEC% || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "qtbase-everywhere-src-%QT%"
echo Building Qt SVG...
rmdir /S /Q "qtsvg-everywhere-src-%QT%"
%SEVENZIP% x "qtsvg-everywhere-src-%QT%.zip" || goto error
cd "qtsvg-everywhere-src-%QT%" || goto error
mkdir build || goto error
cd build || goto error
call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DQT_GENERATE_SBOM=OFF || goto error
cmake --build . --parallel || goto error
ninja install || goto error
cd ..\.. || goto error
rmdir /S /Q "qtsvg-everywhere-src-%QT%"
echo Building Qt Image Formats...
rmdir /S /Q "qtimageformats-everywhere-src-%QT%"
%SEVENZIP% x "qtimageformats-everywhere-src-%QT%.zip" || goto error
cd "qtimageformats-everywhere-src-%QT%" || goto error
mkdir build || goto error
cd build || goto error
call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DQT_GENERATE_SBOM=OFF -DFEATURE_system_webp=ON || goto error
cmake --build . --parallel || goto error
ninja install || goto error
cd ..\.. || goto error
rmdir /S /Q "qtimageformats-everywhere-src-%QT%"
echo Building Qt Tools...
rmdir /S /Q "qttools-everywhere-src-%QT%"
%SEVENZIP% x "qttools-everywhere-src-%QT%.zip" || goto error
cd "qttools-everywhere-src-%QT%" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\qttools-linguist-without-quick.patch" || goto error
mkdir build || goto error
cd build || goto error
call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DQT_GENERATE_SBOM=OFF -DFEATURE_assistant=OFF -DFEATURE_clang=OFF -DFEATURE_designer=OFF -DFEATURE_kmap2qmap=OFF -DFEATURE_pixeltool=OFF -DFEATURE_pkg_config=OFF -DFEATURE_qev=OFF -DFEATURE_qtattributionsscanner=OFF -DFEATURE_qtdiag=OFF -DFEATURE_qtplugininfo=OFF || goto error
cmake --build . --parallel || goto error
ninja install || goto error
cd ..\.. || goto error
rmdir /S /Q "qttools-everywhere-src-%QT%"
echo Building Qt Translations...
rmdir /S /Q "qttranslations-everywhere-src-%QT%"
%SEVENZIP% x "qttranslations-everywhere-src-%QT%.zip" || goto error
cd "qttranslations-everywhere-src-%QT%" || goto error
mkdir build || goto error
cd build || goto error
call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DQT_GENERATE_SBOM=OFF || goto error
cmake --build . --parallel || goto error
ninja install || goto error
cd ..\.. || goto error
rmdir /S /Q "qttranslations-everywhere-src-%QT%"
echo Building shaderc...
rmdir /S /Q "shaderc-%SHADERC_COMMIT%"
tar -xf "shaderc-%SHADERC_COMMIT%.tar.gz" || goto error
cd "shaderc-%SHADERC_COMMIT%" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DSHADERC_SKIP_TESTS=ON -DSHADERC_SKIP_EXAMPLES=ON -DSHADERC_SKIP_EXECUTABLES=ON -DSHADERC_SKIP_COPYRIGHT_CHECK=ON -DSHADERC_ENABLE_SHARED_CRT=ON -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "shaderc-%SHADERC_COMMIT%"
echo Building SPIRV-Cross...
cd SPIRV-Cross || goto error
rmdir /S /Q "build"
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DSPIRV_CROSS_SHARED=ON -DSPIRV_CROSS_STATIC=OFF -DSPIRV_CROSS_CLI=OFF -DSPIRV_CROSS_ENABLE_TESTS=OFF -DSPIRV_CROSS_ENABLE_GLSL=ON -DSPIRV_CROSS_ENABLE_HLSL=ON -DSPIRV_CROSS_ENABLE_MSL=OFF -DSPIRV_CROSS_ENABLE_CPP=OFF -DSPIRV_CROSS_ENABLE_REFLECT=OFF -DSPIRV_CROSS_ENABLE_C_API=ON -DSPIRV_CROSS_ENABLE_UTIL=ON -B build -G Ninja
cmake --build build --parallel || goto error
ninja -C build install || goto error
rmdir /S /Q "build"
cd .. || goto error
echo Building cpuinfo...
rmdir /S /Q "cpuinfo-%CPUINFO_COMMIT%"
tar -xf "cpuinfo-%CPUINFO_COMMIT%.tar.gz" || goto error
cd "cpuinfo-%CPUINFO_COMMIT%" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DCPUINFO_LIBRARY_TYPE=shared -DCPUINFO_RUNTIME_TYPE=shared -DCPUINFO_LOG_LEVEL=error -DCPUINFO_LOG_TO_STDIO=ON -DCPUINFO_BUILD_TOOLS=OFF -DCPUINFO_BUILD_UNIT_TESTS=OFF -DCPUINFO_BUILD_MOCK_TESTS=OFF -DCPUINFO_BUILD_BENCHMARKS=OFF -DUSE_SYSTEM_LIBS=ON -B build -G Ninja
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "cpuinfo-%CPUINFO_COMMIT%"
echo Building discord-rpc...
rmdir /S /Q "discord-rpc-%DISCORD_RPC_COMMIT%"
tar -xf "discord-rpc-%DISCORD_RPC_COMMIT%.tar.gz" || goto error
cd "discord-rpc-%DISCORD_RPC_COMMIT%" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -B build -G Ninja
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "discord-rpc-%DISCORD_RPC_COMMIT%"
echo Building plutosvg...
rmdir /S /Q "plutosvg-%PLUTOSVG_COMMIT%"
tar -xf "plutosvg-%PLUTOSVG_COMMIT%.tar.gz" || goto error
cd "plutosvg-%PLUTOSVG_COMMIT%" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build -G Ninja
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "plutosvg-%PLUTOSVG_COMMIT%"
rem This currently isn't using clang-cl. It probably should, might be losing a little speed.
echo Building soundtouch...
rmdir /S /Q "soundtouch-%SOUNDTOUCH_COMMIT%"
tar -xf "soundtouch-%SOUNDTOUCH_COMMIT%.tar.gz" || goto error
cd "soundtouch-%SOUNDTOUCH_COMMIT%" || goto error
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "soundtouch-%SOUNDTOUCH_COMMIT%"
rem These should already exist, but just in case.
mkdir "%INSTALLDIR%\bin"
mkdir "%INSTALLDIR%\include"
mkdir "%INSTALLDIR%\lib"
echo Extracting DXCompiler...
rmdir /S /Q "dxcompiler-%DXCOMPILER_VERSION%"
mkdir "dxcompiler-%DXCOMPILER_VERSION%"
cd "dxcompiler-%DXCOMPILER_VERSION%" || goto error
%SEVENZIP% x "..\dxcompiler-%DXCOMPILER_VERSION%.zip" || goto error
copy build\native\include\* "%INSTALLDIR%\include" || goto error
copy build\native\bin\arm64\*.dll "%INSTALLDIR%\bin" || goto error
copy build\native\lib\arm64\*.lib "%INSTALLDIR%\lib" || goto error
cd .. || goto error
rmdir /S /Q "dxcompiler-%DXCOMPILER_VERSION%"
echo Cleaning up...
cd ..
rd /S /Q deps-build
echo Exiting with success.
exit 0
:error
echo Failed with error #%errorlevel%.
pause
exit %errorlevel%
:downloadfile
if not exist "%~1" (
echo Downloading %~1 from %~2...
curl -L -o "%~1" "%~2" || goto error
)
rem based on https://gist.github.com/gsscoder/e22daefaff9b5d8ac16afb070f1a7971
set idx=0
for /f %%F in ('certutil -hashfile "%~1" SHA256') do (
set "out!idx!=%%F"
set /a idx += 1
)
set filechecksum=%out1%
if /i %~3==%filechecksum% (
echo Validated %~1.
exit /B 0
) else (
echo Expected %~3 got %filechecksum%.
exit /B 1
)
@@ -1,377 +0,0 @@
@echo off
setlocal enabledelayedexpansion
rem SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <stenzek@gmail.com>
rem SPDX-License-Identifier: CC-BY-NC-ND-4.0
echo Setting environment...
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" (
call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
) else if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" (
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
) else (
echo Visual Studio 2022 not found.
goto error
)
set SEVENZIP="C:\Program Files\7-Zip\7z.exe"
set PATCH="C:\Program Files\Git\usr\bin\patch.exe"
if defined DEBUG (
echo DEBUG=%DEBUG%
) else (
set DEBUG=1
)
pushd %~dp0
set "SCRIPTDIR=%CD%"
cd ..\..\dep\msvc
mkdir deps-build
cd deps-build || goto error
set "BUILDDIR=%CD%"
cd ..
mkdir deps-x64
cd deps-x64 || goto error
set "INSTALLDIR=%CD%"
popd
echo SCRIPTDIR=%SCRIPTDIR%
echo BUILDDIR=%BUILDDIR%
echo INSTALLDIR=%INSTALLDIR%
set "PATH=%PATH%;%INSTALLDIR%\bin"
cd "%BUILDDIR%"
REM Read each line from the file and set as environment variable
for /f "usebackq tokens=1,2 delims==" %%a in ("%SCRIPTDIR%\versions") do (
if not "%%a"=="" if not "%%b"=="" (
set "%%a=%%b"
rem echo Set %%a=%%b
)
)
call :downloadfile "brotli-%BROTLI%.tar.gz" "https://github.com/google/brotli/archive/refs/tags/v%BROTLI%.tar.gz" "%BROTLI_GZ_HASH%" || goto error
call :downloadfile "freetype-%FREETYPE%.tar.gz" "https://download.savannah.gnu.org/releases/freetype/freetype-%FREETYPE%.tar.gz" "%FREETYPE_GZ_HASH%" || goto error
call :downloadfile "harfbuzz-%HARFBUZZ%.tar.gz" "https://github.com/harfbuzz/harfbuzz/archive/refs/tags/%HARFBUZZ%.tar.gz" "%HARFBUZZ_GZ_HASH%" || goto error
call :downloadfile "libpng-%LIBPNG%.tar.gz" "https://download.sourceforge.net/libpng/libpng-%LIBPNG%.tar.gz" "%LIBPNG_GZ_HASH%" || goto error
call :downloadfile "libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/%LIBJPEGTURBO%/libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" "%LIBJPEGTURBO_GZ_HASH%" || goto error
call :downloadfile "SDL3-%SDL3%.zip" "https://github.com/libsdl-org/SDL/releases/download/release-%SDL3%/SDL3-%SDL3%.zip" "%SDL3_ZIP_HASH%" || goto error
call :downloadfile "qtbase-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtbase-everywhere-src-%QT%.zip" "%QTBASE_ZIP_HASH%" || goto error
call :downloadfile "qtimageformats-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtimageformats-everywhere-src-%QT%.zip" "%QTIMAGEFORMATS_ZIP_HASH%" || goto error
call :downloadfile "qtsvg-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtsvg-everywhere-src-%QT%.zip" "%QTSVG_ZIP_HASH%" || goto error
call :downloadfile "qttools-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttools-everywhere-src-%QT%.zip" "%QTTOOLS_ZIP_HASH%" || goto error
call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttranslations-everywhere-src-%QT%.zip" "%QTTRANSLATIONS_ZIP_HASH%" || goto error
call :downloadfile "libwebp-%LIBWEBP%.tar.gz" "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-%LIBWEBP%.tar.gz" "%LIBWEBP_GZ_HASH%" || goto error
call :downloadfile "libzip-%LIBZIP%.tar.gz" "https://github.com/nih-at/libzip/releases/download/v%LIBZIP%/libzip-%LIBZIP%.tar.gz" "%LIBZIP_GZ_HASH%" || goto error
call :downloadfile "zlib-ng-%ZLIBNG%.tar.gz" "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/%ZLIBNG%.tar.gz" "%ZLIBNG_GZ_HASH%" || goto error
call :downloadfile "zstd-%ZSTD%.tar.gz" "https://github.com/facebook/zstd/releases/download/v%ZSTD%/zstd-%ZSTD%.tar.gz" "%ZSTD_GZ_HASH%" || goto error
call :downloadfile "cpuinfo-%CPUINFO_COMMIT%.tar.gz" "https://github.com/stenzek/cpuinfo/archive/%CPUINFO_COMMIT%.tar.gz" "%CPUINFO_GZ_HASH%" || goto error
call :downloadfile "discord-rpc-%DISCORD_RPC_COMMIT%.tar.gz" "https://github.com/stenzek/discord-rpc/archive/%DISCORD_RPC_COMMIT%.tar.gz" "%DISCORD_RPC_GZ_HASH%" || goto error
call :downloadfile "plutosvg-%PLUTOSVG_COMMIT%.tar.gz" "https://github.com/stenzek/plutosvg/archive/%PLUTOSVG_COMMIT%.tar.gz" "%PLUTOSVG_GZ_HASH%" || goto error
call :downloadfile "shaderc-%SHADERC_COMMIT%.tar.gz" "https://github.com/stenzek/shaderc/archive/%SHADERC_COMMIT%.tar.gz" "%SHADERC_GZ_HASH%" || goto error
call :downloadfile "soundtouch-%SOUNDTOUCH_COMMIT%.tar.gz" "https://github.com/stenzek/soundtouch/archive/%SOUNDTOUCH_COMMIT%.tar.gz" "%SOUNDTOUCH_GZ_HASH%" || goto error
call :downloadfile "dxcompiler-%DXCOMPILER_VERSION%.zip" "https://www.nuget.org/api/v2/package/Microsoft.Direct3D.DXC/%DXCOMPILER_VERSION%" "%DXCOMPILER_ZIP_HASH%" || goto error
if not exist SPIRV-Cross\ (
git clone https://github.com/KhronosGroup/SPIRV-Cross/ -b %SPIRV_CROSS_TAG% --depth 1 || goto error
pushd SPIRV-Cross
git reset --hard %SPIRV_CROSS_SHA% || goto error
popd
)
if %DEBUG%==1 (
echo Building debug and release libraries...
) else (
echo Building release libraries...
)
set FORCEPDB=-DCMAKE_EXE_LINKER_FLAGS_RELEASE="/DEBUG" -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="/DEBUG" -DCMAKE_MODULE_LINKER_FLAGS_RELEASE="/DEBUG"
echo Building zlib-ng...
rmdir /S /Q "zlib-ng-%ZLIBNG%"
tar -xf "zlib-ng-%ZLIBNG%.tar.gz" || goto error
cd "zlib-ng-%ZLIBNG%" || goto error
rem BUILD_SHARED_LIBS deliberately ommitted so that both shared and static libraries are built, we need static for the updater.
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DZLIB_COMPAT=ON -DBUILD_TESTING=OFF -DWITH_BENCHMARK_APPS=OFF -DWITH_GTEST=OFF -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "zlib-ng-%ZLIBNG%"
echo Building libpng...
rmdir /S /Q "libpng-%LIBPNG%"
tar -xf "libpng-%LIBPNG%.tar.gz" || goto error
cd "libpng-%LIBPNG%" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\libpng-1.6.54-apng.patch" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_STATIC=OFF -DPNG_SHARED=ON -DPNG_TOOLS=OFF -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "libpng-%LIBPNG%"
echo Building libjpeg...
rmdir /S /Q "libjpeg-turbo-%LIBJPEGTURBO%"
tar -xf "libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" || goto error
cd "libjpeg-turbo-%LIBJPEGTURBO%" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DENABLE_STATIC=OFF -DENABLE_SHARED=ON -DWITH_TESTS=OFF -DWITH_TOOLS=OFF -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "libjpeg-turbo-%LIBJPEGTURBO%"
echo Building Zstandard...
rmdir /S /Q "zstd-%ZSTD%"
tar -xf "zstd-%ZSTD%.tar.gz" --exclude "zstd-%ZSTD%/tests/cli-tests/*" || goto error
cd "zstd-%ZSTD%"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DZSTD_BUILD_SHARED=ON -DZSTD_BUILD_STATIC=OFF -DZSTD_BUILD_PROGRAMS=OFF -B build -G Ninja build/cmake
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "zstd-%ZSTD%"
echo Building Brotli...
rmdir /S /Q "brotli-%BROTLI%"
tar -xf "brotli-%BROTLI%.tar.gz" || goto error
cd "brotli-%BROTLI%" || goto error
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=OFF -DBROTLI_BUILD_TOOLS=OFF -DBROTLI_DISABLE_TESTS=ON -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "brotli-%BROTLI%"
echo Building WebP...
rmdir /S /Q "libwebp-%LIBWEBP%"
tar -xf "libwebp-%LIBWEBP%.tar.gz" || goto error
cd "libwebp-%LIBWEBP%" || goto error
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF -DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPINFO=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF -DBUILD_SHARED_LIBS=ON -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "libwebp-%LIBWEBP%"
echo Building libzip...
rmdir /S /Q "libzip-%LIBZIP%"
tar -xf "libzip-%LIBZIP%.tar.gz" || goto error
cd "libzip-%LIBZIP%" || goto error
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF -DENABLE_WINDOWS_CRYPTO=OFF -DENABLE_BZIP2=OFF -DENABLE_LZMA=OFF -DENABLE_ZSTD=ON -DBUILD_SHARED_LIBS=ON -DLIBZIP_DO_INSTALL=ON -DBUILD_TOOLS=OFF -DBUILD_REGRESS=OFF -DBUILD_OSSFUZZ=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOC=OFF -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "libzip-%LIBZIP%"
echo Building FreeType...
rmdir /S /Q "freetype-%FREETYPE%"
tar -xf "freetype-%FREETYPE%.tar.gz" || goto error
cd "freetype-%FREETYPE%" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\freetype-harfbuzz-soname.patch" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\freetype-static-brotli.patch" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DFT_REQUIRE_ZLIB=TRUE -DFT_REQUIRE_PNG=TRUE -DFT_DISABLE_BZIP2=TRUE -DFT_REQUIRE_BROTLI=TRUE -DFT_DYNAMIC_HARFBUZZ=TRUE -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "freetype-%FREETYPE%"
echo Building HarfBuzz...
rmdir /S /Q "harfbuzz-%HARFBUZZ%"
tar -xf "harfbuzz-%HARFBUZZ%.tar.gz" || goto error
cd "harfbuzz-%HARFBUZZ%" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DHB_BUILD_UTILS=OFF -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "harfbuzz-%HARFBUZZ%"
echo Building SDL...
rmdir /S /Q "SDL3-%SDL3%"
%SEVENZIP% x "SDL3-%SDL3%.zip" || goto error
cd "SDL3-%SDL3%" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\sdl3-ezfrd64-dll.patch" || goto error
cmake -B build -DCMAKE_BUILD_TYPE=Release %FORCEPDB% -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DSDL_SHARED=ON -DSDL_STATIC=OFF -DSDL_TESTS=OFF -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
copy build\SDL3.pdb "%INSTALLDIR%\bin" || goto error
cd .. || goto error
rmdir /S /Q "SDL3-%SDL3%"
if %DEBUG%==1 (
set QTBUILDSPEC=-DCMAKE_CONFIGURATION_TYPES="Release;Debug" -G "Ninja Multi-Config"
) else (
set QTBUILDSPEC=-DCMAKE_BUILD_TYPE=Release -G Ninja
)
echo Building Qt base...
rmdir /S /Q "qtbase-everywhere-src-%QT%"
%SEVENZIP% x "qtbase-everywhere-src-%QT%.zip" || goto error
cd "qtbase-everywhere-src-%QT%" || goto error
rem Disable the PCRE2 JIT, it doesn't properly verify AVX2 support.
%PATCH% -p1 < "%SCRIPTDIR%\qtbase-disable-pcre2-jit.patch" || goto error
rem Stop checkboxes in Fusion theme having such bright outlines.
%PATCH% -p1 < "%SCRIPTDIR%\qtbase-fusion-style.patch" || goto error
cmake -B build -DFEATURE_sql=OFF -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" %FORCEPDB% -DQT_GENERATE_SBOM=OFF -DINPUT_ssl=yes -DINPUT_openssl=no -DFEATURE_system_png=ON -DFEATURE_system_jpeg=ON -DFEATURE_system_zlib=ON -DFEATURE_system_freetype=ON -DFEATURE_system_harfbuzz=ON -DFEATURE_brotli=OFF %QTBUILDSPEC% || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "qtbase-everywhere-src-%QT%"
echo Building Qt SVG...
rmdir /S /Q "qtsvg-everywhere-src-%QT%"
%SEVENZIP% x "qtsvg-everywhere-src-%QT%.zip" || goto error
cd "qtsvg-everywhere-src-%QT%" || goto error
mkdir build || goto error
cd build || goto error
call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DQT_GENERATE_SBOM=OFF || goto error
cmake --build . --parallel || goto error
ninja install || goto error
cd ..\.. || goto error
rmdir /S /Q "qtsvg-everywhere-src-%QT%"
echo Building Qt Image Formats...
rmdir /S /Q "qtimageformats-everywhere-src-%QT%"
%SEVENZIP% x "qtimageformats-everywhere-src-%QT%.zip" || goto error
cd "qtimageformats-everywhere-src-%QT%" || goto error
mkdir build || goto error
cd build || goto error
call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DQT_GENERATE_SBOM=OFF -DFEATURE_system_webp=ON || goto error
cmake --build . --parallel || goto error
ninja install || goto error
cd ..\.. || goto error
rmdir /S /Q "qtimageformats-everywhere-src-%QT%"
echo Building Qt Tools...
rmdir /S /Q "qttools-everywhere-src-%QT%"
%SEVENZIP% x "qttools-everywhere-src-%QT%.zip" || goto error
cd "qttools-everywhere-src-%QT%" || goto error
%PATCH% -p1 < "%SCRIPTDIR%\qttools-linguist-without-quick.patch" || goto error
mkdir build || goto error
cd build || goto error
call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DQT_GENERATE_SBOM=OFF -DFEATURE_assistant=OFF -DFEATURE_clang=OFF -DFEATURE_designer=ON -DFEATURE_kmap2qmap=OFF -DFEATURE_pixeltool=OFF -DFEATURE_pkg_config=OFF -DFEATURE_qev=OFF -DFEATURE_qtattributionsscanner=OFF -DFEATURE_qtdiag=OFF -DFEATURE_qtplugininfo=OFF || goto error
cmake --build . --parallel || goto error
ninja install || goto error
cd ..\.. || goto error
rmdir /S /Q "qttools-everywhere-src-%QT%"
echo Building Qt Translations...
rmdir /S /Q "qttranslations-everywhere-src-%QT%"
%SEVENZIP% x "qttranslations-everywhere-src-%QT%.zip" || goto error
cd "qttranslations-everywhere-src-%QT%" || goto error
mkdir build || goto error
cd build || goto error
call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DQT_GENERATE_SBOM=OFF|| goto error
cmake --build . --parallel || goto error
ninja install || goto error
cd ..\.. || goto error
rmdir /S /Q "qttranslations-everywhere-src-%QT%"
echo Building shaderc...
rmdir /S /Q "shaderc-%SHADERC_COMMIT%"
tar -xf "shaderc-%SHADERC_COMMIT%.tar.gz" || goto error
cd "shaderc-%SHADERC_COMMIT%" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DSHADERC_SKIP_TESTS=ON -DSHADERC_SKIP_EXAMPLES=ON -DSHADERC_SKIP_EXECUTABLES=ON -DSHADERC_SKIP_COPYRIGHT_CHECK=ON -DSHADERC_ENABLE_SHARED_CRT=ON -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "shaderc-%SHADERC_COMMIT%"
echo Building SPIRV-Cross...
cd SPIRV-Cross || goto error
rmdir /S /Q "build"
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DSPIRV_CROSS_SHARED=ON -DSPIRV_CROSS_STATIC=OFF -DSPIRV_CROSS_CLI=OFF -DSPIRV_CROSS_ENABLE_TESTS=OFF -DSPIRV_CROSS_ENABLE_GLSL=ON -DSPIRV_CROSS_ENABLE_HLSL=ON -DSPIRV_CROSS_ENABLE_MSL=OFF -DSPIRV_CROSS_ENABLE_CPP=OFF -DSPIRV_CROSS_ENABLE_REFLECT=OFF -DSPIRV_CROSS_ENABLE_C_API=ON -DSPIRV_CROSS_ENABLE_UTIL=ON -B build -G Ninja
cmake --build build --parallel || goto error
ninja -C build install || goto error
rmdir /S /Q "build"
cd .. || goto error
echo Building cpuinfo...
rmdir /S /Q "cpuinfo-%CPUINFO_COMMIT%"
tar -xf "cpuinfo-%CPUINFO_COMMIT%.tar.gz" || goto error
cd "cpuinfo-%CPUINFO_COMMIT%" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DCPUINFO_LIBRARY_TYPE=shared -DCPUINFO_RUNTIME_TYPE=shared -DCPUINFO_LOG_LEVEL=error -DCPUINFO_LOG_TO_STDIO=ON -DCPUINFO_BUILD_TOOLS=OFF -DCPUINFO_BUILD_UNIT_TESTS=OFF -DCPUINFO_BUILD_MOCK_TESTS=OFF -DCPUINFO_BUILD_BENCHMARKS=OFF -DUSE_SYSTEM_LIBS=ON -B build -G Ninja
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "cpuinfo-%CPUINFO_COMMIT%"
echo Building discord-rpc...
rmdir /S /Q "discord-rpc-%DISCORD_RPC_COMMIT%"
tar -xf "discord-rpc-%DISCORD_RPC_COMMIT%.tar.gz" || goto error
cd "discord-rpc-%DISCORD_RPC_COMMIT%" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -B build -G Ninja
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "discord-rpc-%DISCORD_RPC_COMMIT%"
echo Building plutosvg...
rmdir /S /Q "plutosvg-%PLUTOSVG_COMMIT%"
tar -xf "plutosvg-%PLUTOSVG_COMMIT%.tar.gz" || goto error
cd "plutosvg-%PLUTOSVG_COMMIT%" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build -G Ninja
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "plutosvg-%PLUTOSVG_COMMIT%"
echo Building soundtouch...
rmdir /S /Q "soundtouch-%SOUNDTOUCH_COMMIT%"
tar -xf "soundtouch-%SOUNDTOUCH_COMMIT%.tar.gz" || goto error
cd "soundtouch-%SOUNDTOUCH_COMMIT%" || goto error
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -B build -G Ninja || goto error
cmake --build build --parallel || goto error
ninja -C build install || goto error
cd .. || goto error
rmdir /S /Q "soundtouch-%SOUNDTOUCH_COMMIT%"
rem These should already exist, but just in case.
mkdir "%INSTALLDIR%\bin"
mkdir "%INSTALLDIR%\include"
mkdir "%INSTALLDIR%\lib"
echo Extracting DXCompiler...
rmdir /S /Q "dxcompiler-%DXCOMPILER_VERSION%"
mkdir "dxcompiler-%DXCOMPILER_VERSION%"
cd "dxcompiler-%DXCOMPILER_VERSION%" || goto error
%SEVENZIP% x "..\dxcompiler-%DXCOMPILER_VERSION%.zip" || goto error
copy build\native\include\* "%INSTALLDIR%\include" || goto error
copy build\native\bin\x64\*.dll "%INSTALLDIR%\bin" || goto error
copy build\native\lib\x64\*.lib "%INSTALLDIR%\lib" || goto error
cd .. || goto error
rmdir /S /Q "dxcompiler-%DXCOMPILER_VERSION%"
echo Cleaning up...
cd ..
rd /S /Q deps-build
echo Exiting with success.
exit 0
:error
echo Failed with error #%errorlevel%.
pause
exit %errorlevel%
:downloadfile
if not exist "%~1" (
echo Downloading %~1 from %~2...
curl -L -o "%~1" "%~2" || goto error
)
rem based on https://gist.github.com/gsscoder/e22daefaff9b5d8ac16afb070f1a7971
set idx=0
for /f %%F in ('certutil -hashfile "%~1" SHA256') do (
set "out!idx!=%%F"
set /a idx += 1
)
set filechecksum=%out1%
if /i %~3==%filechecksum% (
echo Validated %~1.
exit /B 0
) else (
echo Expected %~3 got %filechecksum%.
exit /B 1
)
-356
View File
@@ -1,356 +0,0 @@
#!/usr/bin/env bash
set -e
if [ "$#" -lt 1 ]; then
echo "Syntax: $0 <output director>"
exit 1
fi
for arg in "$@"; do
if [ "$arg" == "-skip-download" ]; then
echo "Not downloading sources."
SKIP_DOWNLOAD=true
shift
elif [ "$arg" == "-skip-cleanup" ]; then
echo "Not removing build directory."
SKIP_CLEANUP=true
shift
elif [ "$arg" == "" ]; then
# Eat empty args.
shift
fi
done
SCRIPTDIR=$(realpath $(dirname "${BASH_SOURCE[0]}"))
NPROCS="$(getconf _NPROCESSORS_ONLN)"
INSTALLDIR="$1"
if [ "${INSTALLDIR:0:1}" != "/" ]; then
INSTALLDIR="$PWD/$INSTALLDIR"
fi
mkdir -p deps-build
cd deps-build
DEPSINSTALLDIR="$PWD/ffmpeg-deps"
echo "Installation directory is $INSTALLDIR"
echo "FFmpeg dependencies directory is $DEPSINSTALLDIR"
source "$SCRIPTDIR/versions"
LAME=3.100
LIBVPX=1.15.2
FDK_AAC=0fc0e0e0b89de3becd5f099eae725f13eeecc0d1
LIBAOM=d772e334cc724105040382a977ebb10dfd393293
LIBOGG=1.3.5
LIBVORBIS=1.3.7
LIBTHEORA=1.1.1
FLAC=1.5.0
SPEEX=1.2.0
AMF=1.4.36
OPUS=1.5.2
SVT_AV1=3.1.2
GLSLANG=15.4.0
VULKAN_HEADERS=1.4.329
# Encoder list from freedesktop SDK, which apparently came from Fedora.
# Disabled list: av1_qsv h264_qsv hevc_qsv mjpeg_qsv mpeg2_qsv vc1_qsv vp8_qsv vp9_qsv
# av1_nvenc h264_nvenc hevc_nvenc libxvid libtwolame libopenh264 libgsm libgsm_ms
# ilbc libilbc libopencore_amrnb libopenjpeg libvo_amrwbenc libjxl libcodec2 hap librav1e
FFMPEG_ENCODER_LIST=""\
"a64multi a64multi5 aac libfdk_aac ac3 adpcm_adx "\
"adpcm_argo adpcm_g722 adpcm_g726 adpcm_g726le adpcm_ima_alp adpcm_ima_amv "\
"adpcm_ima_apm adpcm_ima_qt adpcm_ima_ssi adpcm_ima_wav adpcm_ima_ws adpcm_ms "\
"adpcm_swf adpcm_yamaha alac alias_pix amv anull "\
"apng ass asv1 asv2 av1_amf "\
"av1_vaapi av1_vulkan ayuv bitpacked bmp cinepak "\
"cljr dca dfpwm dnxhd dpx dvbsub "\
"dvdsub dvvideo exr ffv1 ffv1_vulkan ffvhuff flac "\
"flashsv flashsv2 flv g723_1 gif h261 "\
"h263 h263_v4l2m2m h263p h264_amf "\
"h264_v4l2m2m h264_vaapi h264_vulkan hdr hevc_amf "\
"hevc_v4l2m2m hevc_vaapi hevc_vulkan huffyuv jpegls "\
"jpeg2000 libaom libaom_av1 libmp3lame "\
"libopus libschroedinger libspeex libsvtav1 libtheora "\
"libvorbis libvpx_vp8 libvpx_vp9 libwebp "\
"libwebp_anim mjpeg mjpeg_vaapi mlp "\
"mp2 mp2fixed mpeg1video mpeg2video mpeg2_vaapi "\
"mpeg4 mpeg4_v4l2m2m msmpeg4v2 msmpeg4v3 msvideo1 nellymoser "\
"opus pam pbm pcm_alaw pcm_f32be pcm_f32le "\
"pcm_f64be pcm_f64le pcm_mulaw pcm_s16be pcm_s16be_planar pcm_s16le "\
"pcm_s16le_planar pcm_s24be pcm_s24le pcm_s24le_planar pcm_s32be pcm_s32le "\
"pcm_s32le_planar pcm_s8 pcm_s8_planar pcm_u16be pcm_u16le pcm_u24be "\
"pcm_u24le pcm_u32be pcm_u32le pcm_u8 pcx pgm "\
"pgmyuv phm png ppm qoi qtrle "\
"r10k r210 ra_144 rawvideo roq roq_dpcm "\
"rpza rv10 rv20 s302m sbc sgi "\
"smc snow sonic sonic_ls speedhq srt "\
"ssa subrip sunrast svq1 targa text "\
"tiff truehd tta ttml utvideo v210 "\
"v308 v408 v410 vc1_v4l2m2m vc2 "\
"vnull vorbis vp8_v4l2m2m vp8_vaapi "\
"vp9_vaapi wavpack wbmp webvtt wmav1 wmav2 "\
"wmv1 wmv2 wrapped_avframe xbm xface xsub "\
"xwd y41p yuv4 zlib zmbv"
FFMPEG_ENCODERS=""
for encoder in $FFMPEG_ENCODER_LIST; do
if [ -z "$FFMPEG_ENCODERS" ]; then
FFMPEG_ENCODERS="--enable-encoder=$encoder"
else
FFMPEG_ENCODERS="$FFMPEG_ENCODERS,$encoder"
fi
done
if [ "$SKIP_DOWNLOAD" != true ]; then
if [ ! -f "ffmpeg-$FFMPEG_VERSION.tar.xz" ]; then
curl -C - -L -O "https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.xz"
fi
if [ ! -f "lame-$LAME.tar.gz" ]; then
curl -C - -L -o "lame-$LAME.tar.gz" "https://sourceforge.net/projects/lame/files/lame/$LAME/lame-$LAME.tar.gz/download"
fi
if [ ! -f "libvpx-$LIBVPX.tar.gz" ]; then
curl -C - -L -o "libvpx-$LIBVPX.tar.gz" "https://github.com/webmproject/libvpx/archive/refs/tags/v$LIBVPX.tar.gz"
fi
if [ ! -f "fdk-aac-stripped-$FDK_AAC.tar.gz" ]; then
curl -C - -L -o "fdk-aac-stripped-$FDK_AAC.tar.gz" "https://gitlab.freedesktop.org/wtaymans/fdk-aac-stripped/-/archive/$FDK_AAC/fdk-aac-stripped-$FDK_AAC.tar.gz"
fi
if [ ! -d "aom" ]; then
git clone https://aomedia.googlesource.com/aom
cd aom
git checkout "$LIBAOM"
cd ..
fi
if [ ! -f "libogg-$LIBOGG.tar.gz" ]; then
curl -C - -L -O "https://downloads.xiph.org/releases/ogg/libogg-$LIBOGG.tar.gz"
fi
if [ ! -f "libvorbis-$LIBVORBIS.tar.gz" ]; then
curl -C - -L -O "https://github.com/xiph/vorbis/releases/download/v$LIBVORBIS/libvorbis-$LIBVORBIS.tar.gz"
fi
if [ ! -f "libtheora-$LIBTHEORA.tar.bz2" ]; then
curl -C - -L -O "https://downloads.xiph.org/releases/theora/libtheora-$LIBTHEORA.tar.bz2"
fi
if [ ! -f "flac-$FLAC.tar.xz" ]; then
curl -C - -L -O "https://downloads.xiph.org/releases/flac/flac-$FLAC.tar.xz"
fi
if [ ! -f "speex-$SPEEX.tar.gz" ]; then
curl -C - -L -O "https://downloads.xiph.org/releases/speex/speex-$SPEEX.tar.gz"
fi
if [ ! -f "AMF-headers-v$AMF.tar.gz" ]; then
curl -C - -L -O "https://github.com/GPUOpen-LibrariesAndSDKs/AMF/releases/download/v$AMF/AMF-headers-v$AMF.tar.gz"
fi
if [ ! -f "opus-$OPUS.tar.gz" ]; then
curl -C - -L -O "https://downloads.xiph.org/releases/opus/opus-$OPUS.tar.gz"
fi
if [ ! -f "SVT-AV1-$SVT_AV1.tar.gz" ]; then
curl -C - -L -O "https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v$SVT_AV1/SVT-AV1-$SVT_AV1.tar.gz"
fi
if [ ! -f "glslang-$GLSLANG.tar.gz" ]; then
curl -C - -L -o "glslang-$GLSLANG.tar.gz" "https://github.com/KhronosGroup/glslang/archive/refs/tags/$GLSLANG.tar.gz"
fi
if [ ! -f "Vulkan-Headers-$VULKAN_HEADERS.tar.gz" ]; then
curl -C - -L -o "Vulkan-Headers-$VULKAN_HEADERS.tar.gz" "https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/v$VULKAN_HEADERS.tar.gz"
fi
fi
cat > SHASUMS <<EOF
$FFMPEG_XZ_HASH ffmpeg-$FFMPEG_VERSION.tar.xz
ec07ee21b820a73f5bae224e92fd3c492f52732d4885f0637f48189afdd87564 AMF-headers-v$AMF.tar.gz
7322744f239a0d8460fde84e92cca77f2fe9d7e25a213789659df9e86b696b42 fdk-aac-stripped-$FDK_AAC.tar.gz
f2c1c76592a82ffff8413ba3c4a1299b6c7ab06c734dee03fd88630485c2b920 flac-$FLAC.tar.xz
ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e lame-$LAME.tar.gz
0eb4b4b9420a0f51db142ba3f9c64b333f826532dc0f48c6410ae51f4799b664 libogg-$LIBOGG.tar.gz
b6ae1ee2fa3d42ac489287d3ec34c5885730b1296f0801ae577a35193d3affbc libtheora-$LIBTHEORA.tar.bz2
0e982409a9c3fc82ee06e08205b1355e5c6aa4c36bca58146ef399621b0ce5ab libvorbis-$LIBVORBIS.tar.gz
b6ae1ee2fa3d42ac489287d3ec34c5885730b1296f0801ae577a35193d3affbc libtheora-$LIBTHEORA.tar.bz2
26fcd3db88045dee380e581862a6ef106f49b74b6396ee95c2993a260b4636aa libvpx-$LIBVPX.tar.gz
65c1d2f78b9f2fb20082c38cbe47c951ad5839345876e46941612ee87f9a7ce1 opus-$OPUS.tar.gz
eaae8af0ac742dc7d542c9439ac72f1f385ce838392dc849cae4536af9210094 speex-$SPEEX.tar.gz
084720e7818cec7cb38d31ab478478b910d643fe5b13fc2cfcbd9da9c9d5c84b SVT-AV1-$SVT_AV1.tar.gz
b16c78e7604b9be9f546ee35ad8b6db6f39bbbbfb19e8d038b6fe2ea5bba4ff4 glslang-$GLSLANG.tar.gz
7ea67aabccdecc6ef616b4c243f563ac9bca945a63d4f4cca21f1bbcd828b18e Vulkan-Headers-$VULKAN_HEADERS.tar.gz
EOF
shasum -a 256 --check SHASUMS
export PKG_CONFIG_PATH="$INSTALLDIR/lib/pkgconfig:$INSTALLDIR/lib64/pkgconfig:$DEPSINSTALLDIR/lib/pkgconfig:$DEPSINSTALLDIR/lib64/pkgconfig:$PKG_CONFIG_PATH"
echo "Building LAME"
rm -fr "lame-$LAME"
tar xf "lame-$LAME.tar.gz"
cd "lame-$LAME"
mkdir build
cd build
../configure --prefix="$DEPSINSTALLDIR" --disable-shared --enable-static --with-pic --disable-frontend
make -j "$NPROCS"
make install
cd ../..
echo "Building libvpx..."
rm -fr "libvpx-$LIBVPX"
tar xf "libvpx-$LIBVPX.tar.gz"
cd "libvpx-$LIBVPX"
mkdir build-ds
cd build-ds
../configure --prefix="$DEPSINSTALLDIR" --disable-shared --enable-static --enable-pic --disable-examples --disable-tools --disable-docs --enable-vp8 --enable-vp9
make -j "$NPROCS"
make install
cd ../..
echo "Building fdk-aac..."
rm -fr "fdk-aac-stripped-$FDK_AAC"
tar xf "fdk-aac-stripped-$FDK_AAC.tar.gz"
cd "fdk-aac-stripped-$FDK_AAC"
./autogen.sh
mkdir build
cd build
../configure --prefix="$DEPSINSTALLDIR" --enable-static --disable-shared --with-pic
make -j "$NPROCS"
make install
cd ../..
echo "Building libaom..."
cd aom
rm -fr build-ds
cmake -B build-ds -G Ninja -DCMAKE_INSTALL_PREFIX="$DEPSINSTALLDIR" -DCMAKE_PREFIX_PATH="$DEPSINSTALLDIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DENABLE_DOCS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_TESTDATA=OFF -DENABLE_TESTS=OFF -DENABLE_TOOLS=OFF
cmake --build build-ds --parallel
cmake --install build-ds
cd ..
echo "Building libogg..."
rm -fr "libogg-$LIBOGG"
tar xf "libogg-$LIBOGG.tar.gz"
cd "libogg-$LIBOGG"
mkdir build-ds
cd build-ds
../configure --prefix="$DEPSINSTALLDIR" --enable-static --disable-shared --with-pic
make -j "$NPROCS"
make install
cd ../..
echo "Building libvorbis..."
rm -fr "libvorbis-$LIBVORBIS"
tar xf "libvorbis-$LIBVORBIS.tar.gz"
cd "libvorbis-$LIBVORBIS"
mkdir build-ds
cd build-ds
../configure --prefix="$DEPSINSTALLDIR" --enable-static --disable-shared --with-pic
make -j "$NPROCS"
make install
cd ../..
echo "Building libtheora..."
rm -fr "libtheora-$LIBTHEORA"
tar xf "libtheora-$LIBTHEORA.tar.bz2"
cd "libtheora-$LIBTHEORA"
mkdir build-ds
cd build-ds
../configure --prefix="$DEPSINSTALLDIR" --enable-static --disable-shared --with-pic --disable-examples --disable-sdltest --disable-vorbistest --disable-oggtest
make -j "$NPROCS"
make install
cd ../..
echo "Building speex..."
rm -fr "speex-$SPEEX"
tar xf "speex-$SPEEX.tar.gz"
cd "speex-$SPEEX"
mkdir build-ds
cd build-ds
../configure --prefix="$DEPSINSTALLDIR" --enable-static --disable-shared --with-pic
make -j "$NPROCS"
make install
cd ../..
echo "Building flac..."
rm -fr "flac-$FLAC"
tar xf "flac-$FLAC.tar.xz"
cd "flac-$FLAC"
mkdir build-ds
cd build-ds
../configure --prefix="$DEPSINSTALLDIR" --enable-static --disable-shared --with-pic --disable-examples --disable-programs
make -j "$NPROCS"
make install
cd ../..
echo "Installing AMF..."
rm -fr "AMF"
tar xf "AMF-headers-v$AMF.tar.gz"
cd "amf-headers-v$AMF/AMF"
mkdir -p "$DEPSINSTALLDIR/include/AMF"
cp -a core components "$DEPSINSTALLDIR/include/AMF"
cd ../..
echo "Building libopus..."
rm -fr "opus-$OPUS"
tar xf "opus-$OPUS.tar.gz"
cd "opus-$OPUS"
mkdir build
cd build
../configure --prefix="$DEPSINSTALLDIR" --enable-static --disable-shared --with-pic --disable-doc
make -j "$NPROCS"
make install
cd ../..
echo "Building SVT-AV1..."
rm -fr SVT-AV1-v$SVT_AV1-*
tar xf "SVT-AV1-$SVT_AV1.tar.gz"
cd SVT-AV1-v$SVT_AV1-*
cmake -B build-ds -G Ninja -DCMAKE_INSTALL_PREFIX="$DEPSINSTALLDIR" -DCMAKE_PREFIX_PATH="$DEPSINSTALLDIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF
cmake --build build-ds --parallel
cmake --install build-ds
cd ..
echo "Building Vulkan-Headers..."
rm -fr "Vulkan-Headers-$VULKAN_HEADERS"
tar xf "Vulkan-Headers-$VULKAN_HEADERS.tar.gz"
cd "Vulkan-Headers-$VULKAN_HEADERS"
cmake -B build-ds -G Ninja -DCMAKE_INSTALL_PREFIX="$DEPSINSTALLDIR" -DCMAKE_PREFIX_PATH="$DEPSINSTALLDIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF
cmake --build build-ds --parallel
cmake --install build-ds
cd ..
echo "Building glslang..."
rm -fr "glslang-$GLSLANG"
tar xf "glslang-$GLSLANG.tar.gz"
cd "glslang-$GLSLANG"
./update_glslang_sources.py
cmake -B build-ds -G Ninja -DCMAKE_INSTALL_PREFIX="$DEPSINSTALLDIR" -DCMAKE_PREFIX_PATH="$DEPSINSTALLDIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DGLSLANG_TESTS=OFF
cmake --build build-ds --parallel
cmake --install build-ds
cd ..
echo "Building ffmpeg..."
rm -fr "ffmpeg-$FFMPEG_VERSION"
tar xf "ffmpeg-$FFMPEG_VERSION.tar.xz"
cd "ffmpeg-$FFMPEG_VERSION"
mkdir build
cd build
../configure --prefix="$INSTALLDIR" --disable-static --enable-shared \
--pkg-config-flags="--static" \
--extra-cflags="-I$DEPSINSTALLDIR/include" \
--extra-ldflags="-L$DEPSINSTALLDIR/lib" --extra-ldflags="-L$DEPSINSTALLDIR/lib64" \
--extra-ldsoflags="-Wl,-rpath,XORIGIN" \
--disable-all --disable-autodetect --enable-libmp3lame --enable-libvpx --enable-zlib --enable-libwebp \
--enable-libfdk-aac --enable-libaom --enable-libvorbis --enable-libtheora --enable-libspeex \
--enable-v4l2-m2m --enable-vaapi --enable-amf --enable-libopus --enable-libsvtav1 --enable-vulkan --enable-libglslang \
--enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale \
--enable-muxer=avi,matroska,mov,mp3,mp4,wav \
--enable-protocol=file \
$FFMPEG_ENCODERS
make -j "$NPROCS"
make install
# Fix up rpath to point to current directory.
find "$INSTALLDIR" -name 'libavcodec.so' -exec patchelf --set-rpath '$ORIGIN' {} \;
find "$INSTALLDIR" -name 'libavformat.so' -exec patchelf --set-rpath '$ORIGIN' {} \;
find "$INSTALLDIR" -name 'libavutil.so' -exec patchelf --set-rpath '$ORIGIN' {} \;
find "$INSTALLDIR" -name 'libswresample.so' -exec patchelf --set-rpath '$ORIGIN' {} \;
find "$INSTALLDIR" -name 'libswscale.so' -exec patchelf --set-rpath '$ORIGIN' {} \;
cd ../..
if [ "$SKIP_CLEANUP" != true ]; then
echo "Cleaning up..."
cd ..
rm -fr deps-build
fi
@@ -1,4 +0,0 @@
set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_VERSION 10)
set(CMAKE_SYSTEM_PROCESSOR arm64)
@@ -1,18 +0,0 @@
--- freetype-2.14.1/src/autofit/ft-hb.c 2025-09-24 17:27:12.271362737 +1000
+++ freetype-2.14.1/src/autofit/ft-hb.c 2025-09-24 17:27:22.590123789 +1000
@@ -33,12 +33,12 @@
#ifndef FT_LIBHARFBUZZ
# ifdef _WIN32
-# define FT_LIBHARFBUZZ "libharfbuzz-0.dll"
+# define FT_LIBHARFBUZZ "libharfbuzz.dll"
# else
# ifdef __APPLE__
-# define FT_LIBHARFBUZZ "libharfbuzz.0.dylib"
+# define FT_LIBHARFBUZZ "libharfbuzz.dylib"
# else
-# define FT_LIBHARFBUZZ "libharfbuzz.so.0"
+# define FT_LIBHARFBUZZ "libharfbuzz.so"
# endif
# endif
#endif
-46
View File
@@ -1,46 +0,0 @@
--- freetype-2.14.1/CMakeLists.txt 2025-09-11 04:12:24.000000000 -0700
+++ freetype-2.14.1/CMakeLists.txt 2025-12-25 21:49:45.733862900 -0800
@@ -577,7 +577,7 @@
list(APPEND PKGCONFIG_REQUIRES_PRIVATE "harfbuzz >= ${HARFBUZZ_MIN_VERSION}")
endif ()
if (BROTLIDEC_FOUND)
- target_link_libraries(freetype PRIVATE ${BROTLIDEC_LIBRARIES})
+ target_link_libraries(freetype PRIVATE ${BROTLIDEC_LIBRARIES} ${BROTLICOMMON_LIBRARIES})
target_compile_definitions(freetype PRIVATE ${BROTLIDEC_DEFINITIONS})
target_include_directories(freetype PRIVATE ${BROTLIDEC_INCLUDE_DIRS})
list(APPEND PKGCONFIG_REQUIRES_PRIVATE "libbrotlidec")
--- freetype-2.14.1/builds/cmake/FindBrotliDec.cmake 2025-09-07 19:48:18.000000000 -0700
+++ freetype-2.14.1/builds/cmake/FindBrotliDec.cmake 2025-12-25 21:48:38.433700400 -0800
@@ -21,7 +21,7 @@
find_package(PkgConfig QUIET)
-pkg_check_modules(PC_BROTLIDEC QUIET libbrotlidec)
+pkg_check_modules(PC_BROTLIDEC QUIET libbrotlidec libbrotlicommon)
if (PC_BROTLIDEC_VERSION)
set(BROTLIDEC_VERSION "${PC_BROTLIDEC_VERSION}")
@@ -40,10 +40,22 @@
${PC_BROTLIDEC_LIBRARY_DIRS})
+find_path(BROTLICOMMON_INCLUDE_DIRS
+ NAMES brotli/decode.h
+ HINTS ${PC_BROTLICOMMON_INCLUDEDIR}
+ ${PC_BROTLICOMMON_INCLUDE_DIRS}
+ PATH_SUFFIXES brotli)
+
+find_library(BROTLICOMMON_LIBRARIES
+ NAMES brotlicommon
+ HINTS ${PC_BROTLICOMMON_LIBDIR}
+ ${PC_BROTLICOMMON_LIBRARY_DIRS})
+
+
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
BrotliDec
- REQUIRED_VARS BROTLIDEC_INCLUDE_DIRS BROTLIDEC_LIBRARIES
+ REQUIRED_VARS BROTLIDEC_INCLUDE_DIRS BROTLICOMMON_INCLUDE_DIRS BROTLIDEC_LIBRARIES BROTLICOMMON_LIBRARIES
FOUND_VAR BROTLIDEC_FOUND
VERSION_VAR BROTLIDEC_VERSION)
File diff suppressed because it is too large Load Diff
@@ -1,35 +0,0 @@
--- qtbase/src/3rdparty/pcre2/CMakeLists.txt 2024-03-19 08:46:43.000000000 -0700
+++ qtbase/src/3rdparty/pcre2/CMakeLists.txt 2024-06-06 21:52:20.539619500 -0700
@@ -41,6 +41,7 @@
src/pcre2_xclass.c
DEFINES
HAVE_CONFIG_H
+ PCRE2_DISABLE_JIT
PUBLIC_DEFINES
PCRE2_CODE_UNIT_WIDTH=16
PUBLIC_INCLUDE_DIRECTORIES
@@ -52,23 +53,8 @@
## Scopes:
#####################################################################
-qt_internal_extend_target(BundledPcre2 CONDITION QNX OR UIKIT
- DEFINES
- PCRE2_DISABLE_JIT
-)
-
-qt_internal_extend_target(BundledPcre2 CONDITION (TEST_architecture_arch STREQUAL "arm") AND WIN32
- DEFINES
- PCRE2_DISABLE_JIT
-)
-
-qt_internal_extend_target(BundledPcre2 CONDITION (TEST_architecture_arch STREQUAL "arm64") AND WIN32
- DEFINES
- PCRE2_DISABLE_JIT
-)
-
if (APPLE)
- target_compile_options(BundledPcre2 PRIVATE "SHELL:-Xarch_arm64 -DPCRE2_DISABLE_JIT")
+ target_compile_options(BundledPcre2 PRIVATE "SHELL:-Xarch_arm64")
endif()
qt_internal_extend_target(BundledPcre2 CONDITION WIN32
-19
View File
@@ -1,19 +0,0 @@
--- qtbase/src/widgets/styles/qfusionstyle.cpp 2025-09-03 17:32:08
+++ qtbase/src/widgets/styles/qfusionstyle.cpp 2025-09-03 17:56:20
@@ -588,11 +588,12 @@
painter->setBrush((state & State_Sunken) ? QBrush(pressedColor) : gradient);
- if (option->state & State_HasFocus && option->state & State_KeyboardFocusChange)
+ if (option->state & State_HasFocus && option->state & State_KeyboardFocusChange) {
painter->setPen(highlightedOutline);
- else
- painter->setPen(colorScheme() == Qt::ColorScheme::Dark ? outline.lighter(240)
- : outline.lighter(110));
+ } else {
+ const bool isDark = (option->palette.windowText().color().value() > option->palette.window().color().value());
+ painter->setPen(isDark ? outline.lighter(155) : outline.lighter(110));
+ }
painter->drawRect(rect);
QColor checkMarkColor = option->palette.text().color().darker(120);
@@ -1,19 +0,0 @@
--- a/src/tools/macdeployqt/shared/shared.cpp
+++ b/src/tools/macdeployqt/shared/shared.cpp
@@ -1122,14 +1122,8 @@
addPlugins(QStringLiteral("networkinformation"));
}
- // All image formats (svg if QtSvg is used)
- const bool usesSvg = deploymentInfo.containsModule("Svg", libInfix);
- addPlugins(QStringLiteral("imageformats"), [usesSvg](const QString &lib) {
- if (lib.contains(QStringLiteral("qsvg")) && !usesSvg)
- return false;
- return true;
- });
-
+ // All image formats
+ addPlugins(QStringLiteral("imageformats"));
addPlugins(QStringLiteral("iconengines"));
// Platforminputcontext plugins if QtGui is in use
@@ -1,14 +0,0 @@
--- a/src/plugins/platforms/cocoa/qcocoamessagedialog.mm
+++ b/src/plugins/platforms/cocoa/qcocoamessagedialog.mm
@@ -87,11 +87,6 @@ bool QCocoaMessageDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality w
return false;
}
- // Tahoe has issues with window-modal alert buttons not responding to mouse
- if (windowModality == Qt::WindowModal
- && QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSTahoe)
- return false;
-
// And without options we don't know what to show
if (!options())
return false;
-20
View File
@@ -1,20 +0,0 @@
--- a/configure.cmake
+++ b/configure.cmake
@@ -3,11 +3,11 @@
#### Tests
-qt_find_package(WrapLibClang 8 PROVIDED_TARGETS WrapLibClang::WrapLibClang)
+#qt_find_package(WrapLibClang 8 PROVIDED_TARGETS WrapLibClang::WrapLibClang)
-if(TARGET WrapLibClang::WrapLibClang)
- set(TEST_libclang "ON" CACHE BOOL "Required libclang version found." FORCE)
-endif()
+#if(TARGET WrapLibClang::WrapLibClang)
+# set(TEST_libclang "ON" CACHE BOOL "Required libclang version found." FORCE)
+#endif()
@@ -1,238 +0,0 @@
--- a/src/linguist/CMakeLists.txt
+++ b/src/linguist/CMakeLists.txt
@@ -16,7 +16,7 @@ add_subdirectory(lupdate)
add_subdirectory(lupdate-pro)
if(QT_FEATURE_process AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton
AND QT_FEATURE_png AND QT_FEATURE_mdiarea AND QT_FEATURE_syntaxhighlighter
- AND TARGET Qt::Widgets AND TARGET Qt::Quick)
+ AND TARGET Qt::Widgets)
add_subdirectory(linguist)
endif()
--- a/src/linguist/linguist/CMakeLists.txt
+++ b/src/linguist/linguist/CMakeLists.txt
@@ -22,7 +22,6 @@ qt_internal_add_app(linguist
errorsview.cpp errorsview.h
finddialog.cpp finddialog.h finddialog.ui
uiformpreviewview.cpp uiformpreviewview.h
- qmlformpreviewview.h qmlformpreviewview.cpp
globals.cpp globals.h
main.cpp
mainwindow.cpp mainwindow.h mainwindow.ui
@@ -53,8 +52,6 @@ qt_internal_add_app(linguist
Qt::GuiPrivate
Qt::UiToolsPrivate
Qt::Widgets
- Qt::QuickWidgets
- Qt::QuickLayouts
)
qt_internal_extend_target(linguist CONDITION QT_FEATURE_printsupport
@@ -66,46 +63,6 @@ qt_internal_extend_target(linguist CONDITION QT_FEATURE_printsupport
set(available_plugins "")
-set(plugin_targets
- Qt::qtquickcontrols2plugin
- Qt::qtquick2plugin
- Qt::qtquickdialogsplugin
- Qt::qtquickcontrols2universalstyleplugin
- Qt::qtquickcontrols2basicstyleplugin
- Qt::qtquickcontrols2fluentwinui3styleplugin
- Qt::qtquickcontrols2fusionstyleplugin
- Qt::qtquickcontrols2imaginestyleplugin
- Qt::qtquickcontrols2iosstyleplugin
- Qt::qtquickcontrols2macosstyleplugin
- Qt::qtquickcontrols2materialstyleplugin
- Qt::qtquicktemplates2plugin
- Qt::qtquickcontrols2implplugin
- Qt::qtquickdialogs2quickimplplugin
- Qt::qtquickcontrols2universalstyleimplplugin
- Qt::qtquickcontrols2basicstyleimplplugin
- Qt::qtquickcontrols2fluentwinui3styleimplplugin
- Qt::qtquickcontrols2fusionstyleimplplugin
- Qt::qtquickcontrols2imaginestyleimplplugin
- Qt::qtquickcontrols2iosstyleimplplugin
- Qt::qtquickcontrols2macosstyleimplplugin
- Qt::qtquickcontrols2materialstyleimplplugin
- Qt::quickwindow
-)
-
-foreach(plugin ${plugin_targets})
- if(TARGET ${plugin})
- list(APPEND available_plugins ${plugin})
- endif()
-endforeach()
-
-if (available_plugins)
- if(BUILD_SHARED_LIBS)
- add_dependencies(linguist ${available_plugins})
- else()
- qt_internal_extend_target(linguist LIBRARIES ${available_plugins})
- endif()
-endif()
-
qt_add_ui(linguist
SOURCES
batchtranslation.ui
--- a/src/linguist/linguist/mainwindow.cpp
+++ b/src/linguist/linguist/mainwindow.cpp
@@ -12,7 +12,6 @@
#include "errorsview.h"
#include "finddialog.h"
#include "uiformpreviewview.h"
-#include "qmlformpreviewview.h"
#include "globals.h"
#include "messageeditor.h"
#include "messagemodel.h"
@@ -79,11 +78,6 @@ static bool hasUiFormPreview(const QString &fileName)
return fileName.endsWith(".ui"_L1) || fileName.endsWith(".jui"_L1);
}
-static bool hasQmlFormPreview(const QString &fileName, bool qmlPreviewChecked)
-{
- return fileName.endsWith(QLatin1String(".qml")) && qmlPreviewChecked;
-}
-
static QString leadingWhitespace(const QString &str)
{
int i = 0;
@@ -491,11 +485,9 @@ MainWindow::MainWindow()
m_sourceAndFormView = new QStackedWidget(this);
m_sourceAndFormDock->setWidget(m_sourceAndFormView);
m_uiFormPreviewView = new UiFormPreviewView(0, m_dataModel);
- m_qmlFormPreviewView = new QmlFormPreviewView(m_dataModel);
m_sourceCodeView = new SourceCodeView(0);
m_sourceAndFormView->addWidget(m_sourceCodeView);
m_sourceAndFormView->addWidget(m_uiFormPreviewView);
- m_sourceAndFormView->addWidget(m_qmlFormPreviewView);
// Set up errors dock widget
m_errorsDock = new QDockWidget(this);
@@ -693,7 +685,6 @@ void MainWindow::modelCountChanged()
m_ui.actionFindPrev->setEnabled(false);
m_uiFormPreviewView->setSourceContext(-1, 0);
- m_qmlFormPreviewView->setSourceContext(-1, 0);
}
struct OpenedFile {
@@ -1673,9 +1664,6 @@ void MainWindow::translationChanged(const MultiDataIndex &index)
MessageItem *m = m_dataModel->messageItem(index);
if (hasUiFormPreview(m->fileName()))
m_uiFormPreviewView->setSourceContext(index.model(), m);
- else if (hasQmlFormPreview(m->fileName(), m_ui.actionQmlPreview->isChecked()))
- if (!m_qmlFormPreviewView->setSourceContext(index.model(), m))
- m_ui.actionQmlPreview->setChecked(false);
}
// This and the following function operate directly on the messageitem,
@@ -1691,10 +1679,6 @@ void MainWindow::updateTranslation(const QStringList &translations)
m->setTranslations(translations);
if (!m->fileName().isEmpty() && hasUiFormPreview(m->fileName()))
m_uiFormPreviewView->setSourceContext(m_currentIndex.model(), m);
- else if (!m->fileName().isEmpty()
- && hasQmlFormPreview(m->fileName(), m_ui.actionQmlPreview->isChecked()))
- if (!m_qmlFormPreviewView->setSourceContext(m_currentIndex.model(), m))
- m_ui.actionQmlPreview->setChecked(false);
updateDanger(m_currentIndex, true);
if (m->isFinished())
@@ -2099,7 +2083,6 @@ void MainWindow::setupMenuBar()
connect(m_ui.actionDisplayGuesses, &QAction::triggered,
m_phraseView, &PhraseView::toggleGuessing);
connect(m_ui.actionStatistics, &QAction::triggered, this, &MainWindow::showStatistics);
- connect(m_ui.actionQmlPreview, &QAction::triggered, this, &MainWindow::toggleQmlPreview);
connect(m_ui.actionVisualizeWhitespace, &QAction::triggered,
this, &MainWindow::toggleVisualizeWhitespace);
connect(m_ui.actionIncreaseZoom, &QAction::triggered,
@@ -2209,11 +2192,7 @@ void MainWindow::updateSourceView(int model, MessageItem *item)
if (hasUiFormPreview(item->fileName())) {
m_sourceAndFormView->setCurrentWidget(m_uiFormPreviewView);
m_uiFormPreviewView->setSourceContext(model, item);
- } else if (hasQmlFormPreview(item->fileName(), m_ui.actionQmlPreview->isChecked())
- && m_qmlFormPreviewView->setSourceContext(model, item)) {
- m_sourceAndFormView->setCurrentWidget(m_qmlFormPreviewView);
} else {
- m_ui.actionQmlPreview->setChecked(false);
m_sourceAndFormView->setCurrentWidget(m_sourceCodeView);
QDir dir = QFileInfo(m_dataModel->srcFileName(model)).dir();
QString fileName = QDir::cleanPath(dir.absoluteFilePath(item->fileName()));
@@ -2754,14 +2733,6 @@ void MainWindow::showStatistics()
updateStatistics();
}
-void MainWindow::toggleQmlPreview()
-{
- if (m_ui.actionQmlPreview->isChecked())
- m_sourceAndFormView->setCurrentWidget(m_qmlFormPreviewView);
- else
- m_sourceAndFormView->setCurrentWidget(m_sourceCodeView);
-}
-
void MainWindow::toggleVisualizeWhitespace()
{
m_messageEditor->setVisualizeWhitespace(m_ui.actionVisualizeWhitespace->isChecked());
--- a/src/linguist/linguist/mainwindow.h
+++ b/src/linguist/linguist/mainwindow.h
@@ -37,7 +37,6 @@ class BatchTranslationDialog;
class ErrorsView;
class FocusWatcher;
class UiFormPreviewView;
-class QmlFormPreviewView;
class MessageEditor;
class PhraseView;
class SourceCodeView;
@@ -130,7 +129,6 @@ private slots:
FindDialog::FindOptions options, int statusFilter);
void revalidate();
void showStatistics();
- void toggleQmlPreview();
void toggleVisualizeWhitespace();
void onWhatsThis();
void updatePhraseDicts();
@@ -196,7 +194,6 @@ private:
QStackedWidget *m_sourceAndFormView;
SourceCodeView *m_sourceCodeView;
UiFormPreviewView *m_uiFormPreviewView;
- QmlFormPreviewView *m_qmlFormPreviewView;
ErrorsView *m_errorsView;
QLabel *m_progressLabel;
QLabel *m_modifiedLabel;
--- a/src/linguist/linguist/mainwindow.ui
+++ b/src/linguist/linguist/mainwindow.ui
@@ -97,7 +97,6 @@
</widget>
<addaction name="actionResetSorting"/>
<addaction name="actionDisplayGuesses"/>
- <addaction name="actionQmlPreview"/>
<addaction name="actionLengthVariants"/>
<addaction name="actionVisualizeWhitespace"/>
<addaction name="separator"/>
@@ -646,26 +645,6 @@
<enum>QAction::NoRole</enum>
</property>
</action>
- <action name="actionQmlPreview">
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>&amp;QML preview</string>
- </property>
- <property name="toolTip">
- <string>Displays a preview of QML documents.</string>
- </property>
- <property name="whatsThis">
- <string/>
- </property>
- <property name="menuRole">
- <enum>QAction::NoRole</enum>
- </property>
- </action>
<action name="actionManual">
<property name="text">
<string>&amp;Manual</string>
-73
View File
@@ -1,73 +0,0 @@
From f369e804e27731e128caf3b370e0569e0695c57e Mon Sep 17 00:00:00 2001
From: Sam Lantinga <slouken@libsdl.org>
Date: Wed, 7 Jan 2026 17:11:57 -0800
Subject: [PATCH] Fixed crash when the broken EZFRD64.DLL is present
Fixes https://github.com/ppy/osu/issues/13634
---
src/joystick/windows/SDL_dinputjoystick.c | 38 +++++++++++++++++++----
1 file changed, 32 insertions(+), 6 deletions(-)
diff --git a/src/joystick/windows/SDL_dinputjoystick.c b/src/joystick/windows/SDL_dinputjoystick.c
index d265d9fcd5fa4..62ffbb46ec9fa 100644
--- a/src/joystick/windows/SDL_dinputjoystick.c
+++ b/src/joystick/windows/SDL_dinputjoystick.c
@@ -45,6 +45,7 @@ extern HWND SDL_HelperWindow;
// local variables
static bool coinitialized = false;
static LPDIRECTINPUT8 dinput = NULL;
+static bool has_broken_EZFRD64DLL = false;
// Taken from Wine - Thanks!
static DIOBJECTDATAFORMAT dfDIJoystick2[] = {
@@ -437,6 +438,29 @@ bool SDL_DINPUT_JoystickInit(void)
dinput = NULL;
return SetDIerror("IDirectInput::Initialize", result);
}
+
+#ifdef _WIN64
+ if (SDL_GetHintBoolean("SDL_JOYSTICK_CHECK_EZFRD64", true)) {
+ // The 64-bit version of EZFRD64.DLL crashes after being loaded,
+ // which happens implicitly when querying the device capabilities,
+ // so make sure we don't do that if there's a possibility of crashing
+ static const char *directories[] = {
+ "C:/Windows/USB_Vibration",
+ "C:/Windows/USB Vibration"
+ };
+ for (int i = 0; i < SDL_arraysize(directories) && !has_broken_EZFRD64DLL; ++i) {
+ int count = 0;
+ char **files = SDL_GlobDirectory(directories[i], "*/EZFRD64.DLL", SDL_GLOB_CASEINSENSITIVE, &count);
+ if (count > 0) {
+ has_broken_EZFRD64DLL = true;
+ }
+ SDL_free(files);
+ }
+ if (has_broken_EZFRD64DLL) {
+ SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Broken EZFRD64.DLL detected, disabling DirectInput force feedback");
+ }
+ }
+#endif
return true;
}
@@ -778,12 +802,14 @@ bool SDL_DINPUT_JoystickOpen(SDL_Joystick *joystick, JoyStick_DeviceData *joysti
return SetDIerror("IDirectInputDevice8::SetDataFormat", result);
}
- // Get device capabilities
- result =
- IDirectInputDevice8_GetCapabilities(joystick->hwdata->InputDevice,
- &joystick->hwdata->Capabilities);
- if (FAILED(result)) {
- return SetDIerror("IDirectInputDevice8::GetCapabilities", result);
+ if (!has_broken_EZFRD64DLL) {
+ // Get device capabilities to see if we are force feedback capable
+ result =
+ IDirectInputDevice8_GetCapabilities(joystick->hwdata->InputDevice,
+ &joystick->hwdata->Capabilities);
+ if (FAILED(result)) {
+ return SetDIerror("IDirectInputDevice8::GetCapabilities", result);
+ }
}
// Force capable?
-78
View File
@@ -1,78 +0,0 @@
# SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <stenzek@gmail.com>
# SPDX-License-Identifier: CC-BY-NC-ND-4.0
#
# NOTE: In addition to the terms of CC-BY-NC-ND-4.0, you may not use this file to create
# packages or build recipes without explicit permission from the copyright holder.
#
BROTLI=1.2.0
BROTLI_GZ_HASH=816c96e8e8f193b40151dad7e8ff37b1221d019dbcb9c35cd3fadbfe6477dfec
FREETYPE=2.14.1
FREETYPE_GZ_HASH=174d9e53402e1bf9ec7277e22ec199ba3e55a6be2c0740cb18c0ee9850fc8c34
HARFBUZZ=12.3.2
HARFBUZZ_GZ_HASH=3ca6621821e19266710ec1a0cb6146fdc832a75828f7c55fea5502c2a810c3c8
LIBBACKTRACE_COMMIT=793921876c981ce49759114d7bb89bb89b2d3a2d
LIBBACKTRACE_GZ_HASH=858b1225351052234f7e71f0f36622fc9ad33aac947db7816d0b443ae0dd33ce
LIBJPEGTURBO=3.1.3
LIBJPEGTURBO_GZ_HASH=075920b826834ac4ddf97661cc73491047855859affd671d52079c6867c1c6c0
LIBPNG=1.6.54
LIBPNG_GZ_HASH=472db714567391842e410090df5a37e0f5b2ec67148a3007678b0482d2ba5219
LIBWEBP=1.6.0
LIBWEBP_GZ_HASH=e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564
LIBZIP=1.11.4
LIBZIP_GZ_HASH=82e9f2f2421f9d7c2466bbc3173cd09595a88ea37db0d559a9d0a2dc60dc722e
ZLIBNG=2.3.2
ZLIBNG_GZ_HASH=6a0561b50b8f5f6434a6a9e667a67026f2b2064a1ffa959c6b2dae320161c2a8
ZSTD=1.5.7
ZSTD_GZ_HASH=eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3
SDL3=3.4.0
SDL3_GZ_HASH=082cbf5f429e0d80820f68dc2b507a94d4cc1b4e70817b119bbb8ec6a69584b8
SDL3_ZIP_HASH=9ac2debb493e0d3e13dbd2729fb91f4bfeb00a0f4dff5e04b73cc9bac276b38d
QT=6.10.2
QTMINOR=6.10
QTBASE_XZ_HASH=aeb78d29291a2b5fd53cb55950f8f5065b4978c25fb1d77f627d695ab9adf21e
QTBASE_ZIP_HASH=690e08ce807041150d388b5351de2e591febf0a0bc973b56e1197e2df9a2d96f
QTIMAGEFORMATS_XZ_HASH=8b8f9c718638081e7b3c000e7f31910140b1202a98e98df5d1b496fe6f639d67
QTIMAGEFORMATS_ZIP_HASH=a407e489ca8d68639530e881aea797f58754e355ca06024a73358bd9cc5fca17
QTSVG_XZ_HASH=f07ff80f38caf235187200345392ca7479445ddf49a36c3694cd52a735dad6e1
QTSVG_ZIP_HASH=fd9f4f6e983a55f6b0ba4c49ce13f8b014cd30d12e75a49a478a640462f9bf64
QTTOOLS_XZ_HASH=1e3d2c07c1fd76d2425c6eaeeaa62ffaff5f79210c4e1a5bc2a6a9db668d5b24
QTTOOLS_ZIP_HASH=a498357aed659c66aa87ceb556eacab55e3e7d7c9b9599049066de70eb7efa59
QTTRANSLATIONS_XZ_HASH=b3b3813bc9d76b545716dc8b6e659fa71b6e2bc14569e9fab6dab8b30650a644
QTTRANSLATIONS_ZIP_HASH=cf5e04a2048c02369f579c1251f61af965f241cde2d69de3db90e6c9f0ee2bf3
QTWAYLAND_XZ_HASH=391998eb432719df26a6a67d8efdc67f8bf2afdd76c1ee3381ebff4fe7527ee2
CPUINFO_COMMIT=ad0339d52555e0252688c4cba69695e13bf3e383
CPUINFO_GZ_HASH=6621f2e66d6bab2d6833698a3966c0d80cb71544a350fbfa98c5db67a474c1eb
DISCORD_RPC_COMMIT=cc59d26d1d628fbd6527aac0ac1d6301f4978b92
DISCORD_RPC_GZ_HASH=297cd48a287a9113eec44902574084c6ab3b6a8b28d02606765a7fded431d7d8
PLUTOSVG_COMMIT=bc845bb6b6511e392f9e1097b26f70cf0b3c33be
PLUTOSVG_GZ_HASH=cc8eed38daf68aaaaa96e904f68f5524c02f10b5d42062b91cdc93f93445f68a
SHADERC_COMMIT=85cd26cc38e3e8b5e3c649f4551900ee330d6552
SHADERC_GZ_HASH=06c7bf901ee887e1ce17bbca7c17dd7190f9987ff394138e2c8702c651803584
SOUNDTOUCH_COMMIT=463ade388f3a51da078dc9ed062bf28e4ba29da7
SOUNDTOUCH_GZ_HASH=fe45c2af99f6102d2704277d392c1c83b55180a70bfd17fb888cc84a54b70573
SPIRV_CROSS_TAG=vulkan-sdk-1.4.328.1
SPIRV_CROSS_SHA=7affe74d77f93a622bb5002789d5332d32e512ee
DXCOMPILER_VERSION=1.8.2505.32
DXCOMPILER_ZIP_HASH=c6e82b70c14552f1dd58e4a79c93eeab1567eeb0a9ee63a51564c410429bce3e
FFMPEG_VERSION=8.0.1
FFMPEG_XZ_HASH=05ee0b03119b45c0bdb4df654b96802e909e0a752f72e4fe3794f487229e5a41