@setlocal enabledelayedexpansion @set REAL_ARCH=%PROCESSOR_ARCHITECTURE% @echo %PROCESSOR_IDENTIFIER% | findstr /i "ARMv8" >nul @if %errorlevel%==0 set REAL_ARCH=ARM64 @if %REAL_ARCH%==AMD64 ( set MSVCUP_ARCH=x86_64 set HOST_CPU=x64 ) else if %REAL_ARCH%==ARM64 ( set MSVCUP_ARCH=aarch64 set HOST_CPU=arm64 ) else ( echo error: unhandled PROCESSOR_ARCHITECTURE "%REAL_ARCH%" ) @if "%~1"=="-h" ( echo Usage: build [TARGET_CPU] echo TARGET_CPU can be one of x64, arm64 or x86 echo TARGET_CPU defaults to HOST_CPU ^(%HOST_CPU%^) exit /b 1 ) @if "%~1"=="" ( set TARGET_CPU=%HOST_CPU% ) else ( set TARGET_CPU=%~1 ) @if not exist %~dp0msvcup.exe ( echo msvcup.exe: installing... curl -L -o %~dp0msvcup.zip https://github.com/marler8997/msvcup/releases/download/v2026_03_02/msvcup-%MSVCUP_ARCH%-windows.zip tar -C%~dp0 -xf %~dp0msvcup.zip del %~dp0msvcup.zip ) else ( echo msvcup.exe: already installed ) @if not exist %~dp0msvcup.exe exit /b 1 %~dp0msvcup.exe install %~dp0msvc --manifest-update-off autoenv msvc-14.44.17.14 sdk-10.0.22621.7 ninja-1.13.2 cmake-4.2.3 @if %errorlevel% neq 0 (exit /b %errorlevel%) @if not exist %~dp0out\%TARGET_CPU%\build.ninja ( %~dp0msvc\bin\cmake.exe -S %~dp0 -B %~dp0out/%TARGET_CPU% -DCMAKE_TOOLCHAIN_FILE=%~dp0/msvc/autoenv/%TARGET_CPU%/toolchain-cross.cmake -GNinja -DCMAKE_MAKE_PROGRAM=%~dp0msvc\ninja.exe @if %errorlevel% neq 0 (exit /b %errorlevel%) ) @if not exist %~dp0out\%TARGET_CPU%\build.ninja exit /b 1 %~dp0msvc\ninja.exe -C %~dp0out\%TARGET_CPU%