91 lines
2.7 KiB
Batchfile
91 lines
2.7 KiB
Batchfile
@echo off
|
|
setlocal EnableExtensions
|
|
cd /d "%~dp0"
|
|
|
|
set "UC_PROFILE=%~1"
|
|
if not defined UC_PROFILE set "UC_PROFILE=baseline"
|
|
set "UC_RUN_TESTS=%~2"
|
|
|
|
call :find_cmake
|
|
if errorlevel 1 exit /b 1
|
|
|
|
if /I "%UC_PROFILE%"=="all" (
|
|
call :build_one scalar
|
|
if errorlevel 1 exit /b 1
|
|
call :build_one baseline
|
|
if errorlevel 1 exit /b 1
|
|
call :build_one avx2
|
|
if errorlevel 1 exit /b 1
|
|
) else if /I "%UC_PROFILE%"=="scalar" (
|
|
call :build_one scalar
|
|
) else if /I "%UC_PROFILE%"=="baseline" (
|
|
call :build_one baseline
|
|
) else if /I "%UC_PROFILE%"=="avx2" (
|
|
call :build_one avx2
|
|
) else (
|
|
echo Unknown profile "%UC_PROFILE%".
|
|
echo Usage: build.bat [scalar^|baseline^|avx2^|all] [test]
|
|
exit /b 2
|
|
)
|
|
|
|
if errorlevel 1 exit /b 1
|
|
echo.
|
|
echo Build completed. Executables are under out\bin\PROFILE\Release\
|
|
exit /b 0
|
|
|
|
:build_one
|
|
set "UC_ONE_PROFILE=%~1"
|
|
echo.
|
|
echo === Configuring %UC_ONE_PROFILE% Release ===
|
|
"%UC_CMAKE%" --preset "msvc-%UC_ONE_PROFILE%"
|
|
if errorlevel 1 exit /b 1
|
|
|
|
echo === Building %UC_ONE_PROFILE% Release ===
|
|
"%UC_CMAKE%" --build --preset "build-%UC_ONE_PROFILE%-release"
|
|
if errorlevel 1 exit /b 1
|
|
|
|
echo === Auditing %UC_ONE_PROFILE% compiler flags ===
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "tools\audit_build_flags.ps1" -Profile "%UC_ONE_PROFILE%"
|
|
if errorlevel 1 exit /b 1
|
|
|
|
if /I "%UC_RUN_TESTS%"=="test" (
|
|
if /I "%UC_ONE_PROFILE%"=="avx2" (
|
|
echo === Checking AVX2 support before running avx2 tests ===
|
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "tools\test_avx2.ps1"
|
|
if errorlevel 1 (
|
|
echo AVX2 tests skipped because this CPU/OS does not report AVX2 support.
|
|
exit /b 0
|
|
)
|
|
)
|
|
echo === Testing %UC_ONE_PROFILE% Release ===
|
|
"%UC_CMAKE%" --build "out\build\msvc-%UC_ONE_PROFILE%" --config Release --target RUN_TESTS
|
|
if errorlevel 1 exit /b 1
|
|
)
|
|
exit /b 0
|
|
|
|
:find_cmake
|
|
for /f "delims=" %%I in ('where cmake.exe 2^>nul') do (
|
|
if not defined UC_CMAKE set "UC_CMAKE=%%I"
|
|
)
|
|
if defined UC_CMAKE exit /b 0
|
|
|
|
set "UC_VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
if not exist "%UC_VSWHERE%" (
|
|
echo Could not find cmake.exe or Visual Studio Installer's vswhere.exe.
|
|
exit /b 1
|
|
)
|
|
|
|
for /f "usebackq delims=" %%I in (`"%UC_VSWHERE%" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath`) do set "UC_VSROOT=%%I"
|
|
if not defined UC_VSROOT (
|
|
echo No Visual Studio installation with MSBuild was found.
|
|
exit /b 1
|
|
)
|
|
|
|
set "UC_CMAKE=%UC_VSROOT%\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"
|
|
if not exist "%UC_CMAKE%" (
|
|
echo Visual Studio was found, but its bundled CMake is missing:
|
|
echo %UC_CMAKE%
|
|
exit /b 1
|
|
)
|
|
exit /b 0
|