#!/usr/bin/env bash set -e if [ "$#" -ne 1 ]; then echo "Syntax: $0 " exit 1 fi SCRIPTDIR=$(realpath $(dirname "${BASH_SOURCE[0]}")) NPROCS="$(getconf _NPROCESSORS_ONLN)" INSTALLDIR="$1" if [ "${INSTALLDIR:0:1}" != "/" ]; then INSTALLDIR="$PWD/$INSTALLDIR" fi FREETYPE=2.14.1 HARFBUZZ=12.2.0 LIBBACKTRACE=ad106d5fdd5d960bd33fae1c48a351af567fd075 LIBPNG=1.6.51 LIBWEBP=1.6.0 SDL=SDL3-3.2.26 LZ4=1.10.0 ZSTD=1.5.7 PLUTOVG=1.3.2 PLUTOSVG=0.0.7 RAPIDYAML=0.12.1 SHADERC=2025.4 SHADERC_GLSLANG=7a47e2531cb334982b2a2dd8513dca0a3de4373d SHADERC_SPIRVHEADERS=b824a462d4256d720bebb40e78b9eb8f78bbb305 SHADERC_SPIRVTOOLS=971a7b6e8d7740035bbff089bbbf9f42951ecfd5 mkdir -p deps-build cd deps-build grep . > SHASUMS < /dev/null; then curl -L \ -O "https://sourceforge.net/projects/freetype/files/freetype2/$FREETYPE/freetype-$FREETYPE.tar.xz" \ -O "https://github.com/harfbuzz/harfbuzz/archive/$HARFBUZZ/harfbuzz-$HARFBUZZ.tar.gz" \ -O "https://github.com/ianlancetaylor/libbacktrace/archive/$LIBBACKTRACE/libbacktrace-$LIBBACKTRACE.tar.gz" \ -O "https://downloads.sourceforge.net/project/libpng/libpng16/$LIBPNG/libpng-$LIBPNG.tar.xz" \ -O "https://download.sourceforge.net/libpng-apng/libpng-$LIBPNG-apng.patch.gz" \ -O "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP.tar.gz" \ -O "https://github.com/lz4/lz4/releases/download/v$LZ4/lz4-$LZ4.tar.gz" \ -O "https://libsdl.org/release/$SDL.tar.gz" \ -O "https://github.com/facebook/zstd/releases/download/v$ZSTD/zstd-$ZSTD.tar.gz" \ -O "https://github.com/google/shaderc/archive/v$SHADERC/shaderc-$SHADERC.tar.gz" \ -O "https://github.com/KhronosGroup/glslang/archive/$SHADERC_GLSLANG/shaderc-glslang-$SHADERC_GLSLANG.tar.gz" \ -O "https://github.com/KhronosGroup/SPIRV-Headers/archive/$SHADERC_SPIRVHEADERS/shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz" \ -O "https://github.com/KhronosGroup/SPIRV-Tools/archive/$SHADERC_SPIRVTOOLS/shaderc-spirv-tools-$SHADERC_SPIRVTOOLS.tar.gz" \ -O "https://github.com/sammycage/plutovg/archive/v$PLUTOVG/plutovg-$PLUTOVG.tar.gz" \ -O "https://github.com/sammycage/plutosvg/archive/v$PLUTOSVG/plutosvg-$PLUTOSVG.tar.gz" \ -O "https://github.com/biojppm/rapidyaml/releases/download/v$RAPIDYAML/rapidyaml-$RAPIDYAML-src.tgz" fi shasum -a 256 --check --strict SHASUMS echo "Building libbacktrace..." rm -fr "libbacktrace-$LIBBACKTRACE" tar xf "libbacktrace-$LIBBACKTRACE.tar.gz" cd "libbacktrace-$LIBBACKTRACE" ./configure --prefix="$INSTALLDIR" make make install cd .. echo "Building libpng..." rm -fr "libpng-$LIBPNG" tar xf "libpng-$LIBPNG.tar.xz" gzip -kd -f "libpng-$LIBPNG-apng.patch.gz" cd "libpng-$LIBPNG" patch -p1 < "../libpng-$LIBPNG-apng.patch" 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 cmake --build build --parallel ninja -C build install cd .. echo "Building LZ4..." rm -fr "lz4-$LZ4" tar xf "lz4-$LZ4.tar.gz" cd "lz4-$LZ4" cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DLZ4_BUILD_CLI=OFF -DLZ4_BUILD_LEGACY_LZ4C=OFF -B build-dir -G Ninja build/cmake cmake --build build-dir --parallel ninja -C build-dir install cd .. 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 .. echo "Building FreeType without HarfBuzz..." rm -fr "freetype-$FREETYPE" tar xf "freetype-$FREETYPE.tar.xz" cd "freetype-$FREETYPE" 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_DISABLE_BROTLI=TRUE -DFT_DISABLE_HARFBUZZ=TRUE -B build -G Ninja cmake --build build --parallel ninja -C build install cd .. 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 -DHB_HAVE_FREETYPE=ON -B build -G Ninja cmake --build build --parallel ninja -C build install cd .. 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 .. echo "Building FreeType with HarfBuzz..." rm -fr "freetype-$FREETYPE" tar xf "freetype-$FREETYPE.tar.xz" cd "freetype-$FREETYPE" 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_DISABLE_BROTLI=TRUE -DFT_REQUIRE_HARFBUZZ=TRUE -B build -G Ninja cmake --build build --parallel ninja -C build install cd .. echo "Building SDL..." rm -fr "$SDL" tar xf "$SDL.tar.gz" cd "$SDL" 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_VIDEO=OFF -DSDL_POWER=OFF -DSDL_SENSOR=OFF -DSDL_DIALOG=OFF -DSDL_TRAY=OFF -DSDL_TEST_LIBRARY=OFF -DSDL_UNIX_CONSOLE_BUILD=ON -G Ninja cmake --build build --parallel ninja -C build install cd .. echo "Building PlutoVG..." rm -fr "plutovg-$PLUTOVG" tar xf "plutovg-$PLUTOVG.tar.gz" cd "plutovg-$PLUTOVG" cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DPLUTOVG_BUILD_EXAMPLES=OFF -B build -G Ninja cmake --build build --parallel ninja -C build install cd .. echo "Building PlutoSVG..." rm -fr "plutosvg-$PLUTOSVG" tar xf "plutosvg-$PLUTOSVG.tar.gz" cd "plutosvg-$PLUTOSVG" 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 .. echo "Building RapidYAML..." rm -fr "rapidyaml-$RAPIDYAML-src" tar xf "rapidyaml-$RAPIDYAML-src.tgz" cd "rapidyaml-$RAPIDYAML-src" 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 .. echo "Building shaderc..." rm -fr "shaderc-$SHADERC" tar xf "shaderc-$SHADERC.tar.gz" cd "shaderc-$SHADERC" cd third_party tar xf "../../shaderc-glslang-$SHADERC_GLSLANG.tar.gz" mv "glslang-$SHADERC_GLSLANG" "glslang" tar xf "../../shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz" mv "SPIRV-Headers-$SHADERC_SPIRVHEADERS" "spirv-headers" tar xf "../../shaderc-spirv-tools-$SHADERC_SPIRVTOOLS.tar.gz" mv "SPIRV-Tools-$SHADERC_SPIRVTOOLS" "spirv-tools" cd .. patch -p1 < "$SCRIPTDIR/../common/shaderc-changes.patch" cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DSHADERC_SKIP_TESTS=ON -DSHADERC_SKIP_EXAMPLES=ON -DSHADERC_SKIP_COPYRIGHT_CHECK=ON -B build -G Ninja cmake --build build --parallel ninja -C build install cd .. echo "Cleaning up..." cd .. rm -r deps-build