@echo off setlocal enabledelayedexpansion 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%" set FREETYPE=2.13.2 set HARFBUZZ=8.3.1 set LIBJPEG=9f set LIBPNG=1643 set QT=6.7.0 set QTMINOR=6.7 set SDL=SDL2-2.30.2 set WEBP=1.3.2 set ZLIB=1.3.1 set ZLIBSHORT=131 set ZSTD=1.5.5 set SHADERC=2024.0 set SHADERC_GLSLANG=d73712b8f6c9047b09e99614e20d456d5ada2390 set SHADERC_SPIRVHEADERS=8b246ff75c6615ba4532fe4fde20f1be090c3764 set SHADERC_SPIRVTOOLS=04896c462d9f3f504c99a4698605b6524af813c1 set SPIRV_CROSS=vulkan-sdk-1.3.280.0 call :downloadfile "freetype-%FREETYPE%.tar.gz" https://download.savannah.gnu.org/releases/freetype/freetype-%FREETYPE%.tar.gz 1ac27e16c134a7f2ccea177faba19801131116fd682efc1f5737037c5db224b5 || goto error call :downloadfile "harfbuzz-%HARFBUZZ%.zip" https://github.com/harfbuzz/harfbuzz/archive/refs/tags/%HARFBUZZ%.zip b2bc56184ae37324bc4829fde7d3f9e6916866ad711ee85792e457547c9fd127 || goto error call :downloadfile "lpng%LIBPNG%.zip" https://download.sourceforge.net/libpng/lpng1643.zip fc466a1e638e635d6c66363bdf3f38555b81b0141d0b06ba45b49ccca327436d || goto error call :downloadfile "jpegsr%LIBJPEG%.zip" https://ijg.org/files/jpegsr%LIBJPEG%.zip 6255da8c89e09d694e6800688c76145eb6870a76ac0d36c74fccd61b3940aafa || goto error call :downloadfile "%SDL%.zip" "https://libsdl.org/release/%SDL%.zip" 09a822abf6e97f80d09cf9c46115faebb3476b0d56c1c035aec8ec3f88382ae7 || goto error call :downloadfile "qtbase-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtbase-everywhere-src-%QT%.zip" 31a1e0c69bb37e6631de02f8cf0b75afdc2ce44890c32dac38d362c251c12483 || goto error call :downloadfile "qtimageformats-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtimageformats-everywhere-src-%QT%.zip" 450c0b1c3cd51e2e110fceaf60e157641c2698d18b12a3552d43fa1539bfdbbc || goto error call :downloadfile "qtsvg-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtsvg-everywhere-src-%QT%.zip" b869be09ccb72949a3311dc87ac702b6e854edfd5bff2bc2cc4d7fd549b1869a || goto error call :downloadfile "qttools-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttools-everywhere-src-%QT%.zip" cfaf16a33ebecd950f19e80c7a8ecc512263d57079fe78ea4b79fa1898233c08 || goto error call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttranslations-everywhere-src-%QT%.zip" 69241747af86bc5b6c2829de4a28d56d3c1119dd21c379b84615178d45b8f3aa || goto error call :downloadfile "libwebp-%WEBP%.tar.gz" "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-%WEBP%.tar.gz" 2a499607df669e40258e53d0ade8035ba4ec0175244869d1025d460562aa09b4 || goto error call :downloadfile "zlib%ZLIBSHORT%.zip" "https://zlib.net/zlib%ZLIBSHORT%.zip" 72af66d44fcc14c22013b46b814d5d2514673dda3d115e64b690c1ad636e7b17 || goto error call :downloadfile "zstd-%ZSTD%.zip" "https://github.com/facebook/zstd/archive/refs/tags/v%ZSTD%.zip" c5c8daa1d40dabc51790c62a5b86af2b36dfc4e1a738ff10dc4a46ea4e68ee51 || goto error call :downloadfile "shaderc-%SHADERC%.zip" "https://github.com/google/shaderc/archive/refs/tags/v%SHADERC%.zip" 5397160432fb5b780e9372327060b1be47acafcd0689fea44fd939e7305668ba || goto error call :downloadfile "shaderc-glslang-%SHADERC_GLSLANG%.zip" "https://github.com/KhronosGroup/glslang/archive/%SHADERC_GLSLANG%.zip" 58a0d4b670986f8618c371b088f2ee11006596e8c71fe499ec044d5ea469d39b || goto error call :downloadfile "shaderc-spirv-headers-%SHADERC_SPIRVHEADERS%.zip" "https://github.com/KhronosGroup/SPIRV-Headers/archive/%SHADERC_SPIRVHEADERS%.zip" 1385538d16f8875e76209388187b3814cb0b0e9cecc3bc440faa7665b570ff47 || goto error call :downloadfile "shaderc-spirv-tools-%SHADERC_SPIRVTOOLS%.zip" "https://github.com/KhronosGroup/SPIRV-Tools/archive/%SHADERC_SPIRVTOOLS%.zip" 4eb9a3fc940ed1b05f968c181763dfdb8e637cbfbf57c625112b3ad0f76e2c28 || goto error call :downloadfile "SPIRV-Cross-%SPIRV_CROSS%.zip" "https://github.com/KhronosGroup/SPIRV-Cross/archive/refs/tags/%SPIRV_CROSS%.zip" 8428a0faf339b3fed2e9acb0b7a8176e7f5384c712b8d7f1e09505650dd10e93 || goto error if %DEBUG%==1 ( echo Building debug and release libraries... ) else ( echo Building release libraries... ) set FORCEPDB=-DCMAKE_SHARED_LINKER_FLAGS_RELEASE="/DEBUG" set ARM64TOOLCHAIN=-DCMAKE_TOOLCHAIN_FILE="%SCRIPTDIR%\cmake-toolchain-windows-arm64.cmake" echo Building Zlib... rmdir /S /Q "zlib-%ZLIB%" %SEVENZIP% x "zlib%ZLIBSHORT%.zip" || goto error cd "zlib-%ZLIB%" || goto error cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DZLIB_BUILD_EXAMPLES=OFF -B build -G Ninja || goto error cmake --build build --parallel || goto error ninja -C build install || goto error cd .. || goto error echo Building libpng... rmdir /S /Q "lpng%LIBPNG%" %SEVENZIP% x "lpng%LIBPNG%.zip" || goto error cd "lpng%LIBPNG%" || 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 echo Building libjpeg... %SEVENZIP% x "jpegsr%LIBJPEG%.zip" || goto error cd "jpeg-%LIBJPEG%" || goto error %PATCH% -p1 < "%SCRIPTDIR%\libjpeg-cmake.patch" || goto error cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -B build -G Ninja || goto error cmake --build build --parallel || goto error ninja -C build install || goto error cd .. || goto error echo Building FreeType without HarfBuzz... rmdir /S /Q "freetype-%FREETYPE%" tar -xf "freetype-%FREETYPE%.tar.gz" || goto error cd "freetype-%FREETYPE%" || 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_DISABLE_BROTLI=TRUE -DFT_DISABLE_HARFBUZZ=TRUE -B build -G Ninja || goto error cmake --build build --parallel || goto error ninja -C build install || goto error cd .. || goto error echo Building HarfBuzz... rmdir /S /Q "harfbuzz-%HARFBUZZ%" %SEVENZIP% x "-x^!harfbuzz-%HARFBUZZ%\README" "harfbuzz-%HARFBUZZ%.zip" || 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 echo Building FreeType with HarfBuzz... rmdir /S /Q "freetype-%FREETYPE%" tar -xf "freetype-%FREETYPE%.tar.gz" || goto error cd "freetype-%FREETYPE%" || 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_DISABLE_BROTLI=TRUE -DFT_REQUIRE_HARFBUZZ=TRUE -B build -G Ninja || goto error cmake --build build --parallel || goto error ninja -C build install || goto error cd .. || goto error echo Building Zstandard... rmdir /S /Q "zstd-%ZSTD%" %SEVENZIP% x "-x^!zstd-1.5.5\tests\cli-tests\bin" "zstd-%ZSTD%.zip" || 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 echo Building WebP... rmdir /S /Q "libwebp-%WEBP%" tar -xf "libwebp-%WEBP%.tar.gz" || goto error cd "libwebp-%WEBP%" || 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 echo Building SDL... rmdir /S /Q "%SDL%" %SEVENZIP% x "%SDL%.zip" || goto error cd "%SDL%" || 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 -G Ninja || goto error cmake --build build --parallel || goto error ninja -C build install || goto error copy build\SDL2.pdb "%INSTALLDIR%\bin" || goto error cd .. || goto error 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 cmake -B build %ARM64TOOLCHAIN% -DFEATURE_sql=OFF -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DQT_HOST_PATH="%X64INSTALLDIR%" %FORCEPDB% -DINPUT_gui=yes -DINPUT_widgets=yes -DINPUT_ssl=yes -DINPUT_openssl=no -DINPUT_schannel=yes -DFEATURE_system_png=ON -DFEATURE_system_jpeg=ON -DFEATURE_system_zlib=ON -DFEATURE_system_freetype=ON -DFEATURE_system_harfbuzz=ON %QTBUILDSPEC% || goto error cmake --build build --parallel || goto error ninja -C build install || goto error cd .. || goto error 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%" || goto error cmake --build . --parallel || goto error ninja install || goto error cd ..\.. || goto error 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%" -DFEATURE_system_webp=ON || goto error cmake --build . --parallel || goto error ninja install || goto error cd ..\.. || goto error echo Building Qt Tools... rmdir /S /Q "qtimageformats-everywhere-src-%QT%" %SEVENZIP% x "qttools-everywhere-src-%QT%.zip" || goto error cd "qttools-everywhere-src-%QT%" || goto error mkdir build || goto error cd build || goto error call "%INSTALLDIR%\bin\qt-configure-module.bat" .. -- %FORCEPDB% -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 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% || goto error cmake --build . --parallel || goto error ninja install || goto error cd ..\.. || goto error echo Building shaderc... rmdir /S /Q "shaderc-%SHADERC%" %SEVENZIP% x "shaderc-%SHADERC%.zip" || goto error cd "shaderc-%SHADERC%" || goto error cd third_party || goto error %SEVENZIP% x "..\..\shaderc-glslang-%SHADERC_GLSLANG%.zip" || goto error rename "glslang-%SHADERC_GLSLANG%" "glslang" || goto error %SEVENZIP% x "..\..\shaderc-spirv-headers-%SHADERC_SPIRVHEADERS%.zip" || goto error rename "SPIRV-Headers-%SHADERC_SPIRVHEADERS%" "spirv-headers" || goto error %SEVENZIP% x "..\..\shaderc-spirv-tools-%SHADERC_SPIRVTOOLS%.zip" || goto error rename "SPIRV-Tools-%SHADERC_SPIRVTOOLS%" "spirv-tools" || goto error cd .. || goto error %PATCH% -p1 < "%SCRIPTDIR%\shaderc-changes.patch" || 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_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 echo Building SPIRV-Cross... rmdir /S /Q "SPIRV-Cross-%SPIRV_CROSS%" %SEVENZIP% x "SPIRV-Cross-%SPIRV_CROSS%.zip" || goto error cd "SPIRV-Cross-%SPIRV_CROSS%" || goto error 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 cd .. || goto error 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 )