@echo off setlocal :: Description of command line arguments (disabled by default): :: "debug" The target is intended to run in a debugger with debug info and optimizations disabled :: "developer" The target will include all developer tooling :: "profiling" The target will be compiled with profiling markup :: "asan" The target will compile with address sanitizer enabled :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Verify environment :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if "%Platform%" neq "x64" ( echo ERROR: Platform is not "x64" - please run this from the MSVC x64 native tools command prompt. exit /b 1 ) where /q clang.exe || ( echo ERROR: "clang.exe" not found. exit /b 1 ) where /q lld-link || ( echo ERROR: "lld-link.exe" not found. exit /b 1 ) where /q ninja.exe || ( echo ERROR: "ninja.exe" not found. exit /b 1 ) where /q cmake || ( echo ERROR: "cmake.exe" not found. exit /b 1 ) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Choose configuration from args :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Must explicitly pass disabled CMake options or else missing options are :: assumed to be equal to the value from the last build set cmake_options_zero=-DRTC=0 -DASAN=0 -DCRTLIB=0 -DDEBINFO=0 -DDEVELOPER=0 -DPROFILING=0 -DUNOPTIMIZED=0 set cmake_options_enabled= echo ======================================== for %%a in (%*) do set "%%a=1" if "%debug%" == "1" ( echo [Debug build] set cmake_options_enabled=%cmake_options_enabled% -DRTC=1 -DCRTLIB=1 -DDEBINFO=1 -DUNOPTIMIZED=1 ) else ( echo [Release build] ) if "%developer%" == "1" ( echo [Developer build] set cmake_options_enabled=%cmake_options_enabled% -DDEVELOPER=1 ) else ( echo [User build] ) if "%profiling%" == "1" ( echo [Profiling enabled] set cmake_options_enabled=%cmake_options_enabled% -DPROFILING=1 -DCRTLIB=1 -DDEBINFO=1 ) if "%asan%" == "1" ( echo [Address sanitizer enabled] set cmake_options_enabled=%cmake_options_enabled% -DASAN=1 -DCRTLIB=1 -DDEBINFO=1 ) echo ======================================== :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Build :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if not exist "build" mkdir build cmake -H. -G Ninja -B build %cmake_options_zero% %cmake_options_enabled%^ -DCMAKE_C_COMPILER:PATH="clang.exe"^ -DCMAKE_CXX_COMPILER:PATH="clang.exe"^ -DCMAKE_C_COMPILER_ID="Clang"^ -DCMAKE_CXX_COMPILER_ID="Clang"^ -DCMAKE_SYSTEM_NAME="Generic"^ -DPLATFORM_WIN32=1 if NOT %errorlevel% == 0 exit /b 1 cmake --build build :: cmake --build build -v exit /b %errorlevel%