diff --git a/.github/workflows/scripts/windows/build-dependencies-arm64.bat b/.github/workflows/scripts/windows/build-dependencies-arm64.bat new file mode 100644 index 0000000000..62ae60604e --- /dev/null +++ b/.github/workflows/scripts/windows/build-dependencies-arm64.bat @@ -0,0 +1,293 @@ +@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 ..\..\..\.. +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 || 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 LZ4=b8fd2d15309dd4e605070bd4486e26b6ef814e29 +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.1 +set SHADERC_GLSLANG=142052fa30f9eca191aa9dcf65359fcaed09eeec +set SHADERC_SPIRVHEADERS=5e3ad389ee56fca27c9705d093ae5387ce404df4 +set SHADERC_SPIRVTOOLS=dd4b663e13c07fea4fbb3f70c1c91c86731099f7 + +call :downloadfile "freetype-%FREETYPE%.tar.gz" https://sourceforge.net/projects/freetype/files/freetype2/%FREETYPE%/freetype-%FREETYPE%.tar.gz/download 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 "libwebp-%WEBP%.tar.gz" "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-%WEBP%.tar.gz" 2a499607df669e40258e53d0ade8035ba4ec0175244869d1025d460562aa09b4 || goto error +call :downloadfile "lz4-%LZ4%.zip" "https://github.com/lz4/lz4/archive/%LZ4%.zip" 0c33119688d6b180c7e760b0acd70059222389cfd581632623784bee27e51a31 || goto error +call :downloadfile "%SDL%.zip" "https://libsdl.org/release/%SDL%.zip" c5d78a9e0346c6695f03df8ba25e5e111a1e23c8aefa8372a1c5a0dd79acaf10 || goto error +call :downloadfile "qtbase-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtbase-everywhere-src-%QT%.zip" 3027fb990cb66436b5476b9dd17cd58f23b55a42eb1c1bcf9c7d78bca3ad7d63 || goto error +call :downloadfile "qtimageformats-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtimageformats-everywhere-src-%QT%.zip" f30065289517847d721467827ee446a5f606f6d1c750e166cbfb0ed5bf066c5e || goto error +call :downloadfile "qtsvg-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtsvg-everywhere-src-%QT%.zip" 882d1db58d35155bd92e4ed92b485d7d713b6aff0d7cf78655de0b414a980689 || goto error +call :downloadfile "qttools-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttools-everywhere-src-%QT%.zip" 93a31892ca8a4f38464e923328788ce3da881d82016fe18fa1ed12dd43ce486c || goto error +call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttranslations-everywhere-src-%QT%.zip" 102ca62fa682c0d3e700ba89069fd3b6663b9f0c2890b058e97998b6e8971fb3 || 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" 6c9f42ed6bf42750f5369b089909abfdcf0101488b4a1f41116d5159d00af8e7 || goto error +call :downloadfile "shaderc-glslang-%SHADERC_GLSLANG%.zip" "https://github.com/KhronosGroup/glslang/archive/%SHADERC_GLSLANG%.zip" 03ad8a6fa987af4653d0cfe6bdaed41bcf617f1366a151fb1574da75950cd3e8 || goto error +call :downloadfile "shaderc-spirv-headers-%SHADERC_SPIRVHEADERS%.zip" "https://github.com/KhronosGroup/SPIRV-Headers/archive/%SHADERC_SPIRVHEADERS%.zip" fa59a54334feaba5702b9c25724c3f4746123865769b36dd5a28d9ef5e9d39ab || goto error +call :downloadfile "shaderc-spirv-tools-%SHADERC_SPIRVTOOLS%.zip" "https://github.com/KhronosGroup/SPIRV-Tools/archive/%SHADERC_SPIRVTOOLS%.zip" bf385994c20293485b378c27dfdbd77a31b949deabccd9218a977f173eda9f6f || 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 LZ4... +rmdir /S /Q "lz4" +%SEVENZIP% x "lz4-%LZ4%.zip" || goto error +rename "lz4-%LZ4%" "lz4" || goto error +cd "lz4" || goto error +cmake %ARM64TOOLCHAIN% -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 -DCMAKE_C_FLAGS="/wd4711 /wd5045" -B build-dir -G Ninja build/cmake || goto error +cmake --build build-dir --parallel || goto error +ninja -C build-dir install || goto error +cd .. + +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%\..\common\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 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 +) diff --git a/.github/workflows/scripts/windows/cmake-toolchain-windows-arm64.cmake b/.github/workflows/scripts/windows/cmake-toolchain-windows-arm64.cmake new file mode 100644 index 0000000000..94bd865465 --- /dev/null +++ b/.github/workflows/scripts/windows/cmake-toolchain-windows-arm64.cmake @@ -0,0 +1,4 @@ +set(CMAKE_CROSSCOMPILING TRUE) +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_VERSION 10) +set(CMAKE_SYSTEM_PROCESSOR arm64) \ No newline at end of file diff --git a/.gitignore b/.gitignore index 254331d315..219ea785be 100644 --- a/.gitignore +++ b/.gitignore @@ -104,6 +104,7 @@ oprofile_data/ /deps-build /deps +/deps-arm64 /ipch !/3rdparty/libjpeg/change.log