| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- @echo off
- if "%1"=="/?" goto :showhelp
- if "%1"=="-?" goto :showhelp
- if "%1"=="-help" goto :showhelp
- if "%1"=="--help" goto :showhelp
- setlocal
- if "%HLSL_SRC_DIR%"=="" (
- echo Missing source directory.
- if exist %~dp0..\..\LLVMBuild.txt (
- set HLSL_SRC_DIR=%~dp0..\..
- echo Source directory deduced to be %~dp0..\..
- ) else (
- exit /b 1
- )
- )
- if "%1"=="/buildoutdir" (
- echo Build output directory set to %2
- set HLSL_BLD_DIR=%2
- shift /1
- shift /1
- )
- if "%HLSL_BLD_DIR%"=="" (
- echo Missing build directory.
- exit /b 1
- )
- where cmake.exe 1>nul 2>nul
- if errorlevel 1 (
- echo Unable to find cmake.exe on the path.
- echo cmake 3.4 is available from https://cmake.org/files/v3.4/cmake-3.4.0-win32-x86.exe
- exit /b 1
- )
- if "%BUILD_ARCH%"=="" (
- set BUILD_ARCH=Win32
- )
- set BUILD_GENERATOR=Visual Studio 14 2015
- set BUILD_VS_VER=2015
- set BUILD_CONFIG=Debug
- set DO_SETUP=1
- set DO_BUILD=1
- set CMAKE_OPTS=
- if "%1"=="-s" (
- set DO_BUILD=0
- shift /1
- )
- if "%1"=="-b" (
- set DO_SETUP=0
- shift /1
- )
- if "%1"=="-alldef" (
- set CMAKE_OPTS=-DHLSL_OPTIONAL_PROJS_IN_DEFAULT:BOOL=ON
- shift /1
- )
- if "%1"=="-analyze" (
- set CMAKE_OPTS=%CMAKE_OPTS% -DHLSL_ENABLE_ANALYZE:BOOL=ON
- shift /1
- )
- if "%1"=="-fv" (
- echo Fixed version flag set for build.
- set CMAKE_OPTS=%CMAKE_OPTS% -DHLSL_ENABLE_FIXED_VER:BOOL=ON
- shift /1
- )
- if "%1"=="-cv" (
- echo Set the CLANG_VENDOR value.
- set CMAKE_OPTS=%CMAKE_OPTS% -DCLANG_VENDOR:STRING=%2
- shift /1
- shift /1
- )
- if "%1"=="-rel" (
- set BUILD_CONFIG=Release
- shift /1
- )
- if "%1"=="-x86" (
- set BUILD_ARCH=Win32
- shift /1
- )
- if "%1"=="-x64" (
- set BUILD_ARCH=x64
- shift /1
- )
- if "%1"=="-arm" (
- set BUILD_ARCH=ARM
- shift /1
- )
- if "%1"=="-Debug" (
- set BUILD_CONFIG=Debug
- shift /1
- )
- if "%1"=="-Release" (
- set BUILD_CONFIG=Release
- shift /1
- )
- if "%1"=="-vs2017" (
- set BUILD_GENERATOR=Visual Studio 15 2017
- set BUILD_VS_VER=2017
- shift /1
- )
- rem If only VS 2017 is available, pick that by default.
- if "%BUILD_VS_VER%"=="2015" (
- reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\vs\Servicing\14.0\devenv /v Install /reg:32 1>nul 2>nul
- if errorlevel 1 (
- echo Visual Studio 2015 not available, setting up build for Visual Studio 2017.
- set BUILD_GENERATOR=Visual Studio 15 2017
- set BUILD_VS_VER=2017
- )
- )
- rem Begin SPIRV change
- if "%1"=="-spirv" (
- echo SPIR-V codegen is enabled.
- set CMAKE_OPTS=%CMAKE_OPTS% -DENABLE_SPIRV_CODEGEN:BOOL=ON
- shift /1
- )
- if "%1"=="-spirvtest" (
- echo Building SPIR-V tests is enabled.
- set CMAKE_OPTS=%CMAKE_OPTS% -DSPIRV_BUILD_TESTS:BOOL=ON
- shift /1
- )
- rem End SPIRV change
- if "%BUILD_ARCH%"=="x64" (
- set BUILD_GENERATOR=%BUILD_GENERATOR% %BUILD_ARCH:x64=Win64%
- )
- if "%1"=="-ninja" (
- set BUILD_GENERATOR=Ninja
- shift /1
- )
- set CMAKE_OPTS=%CMAKE_OPTS% -DCLANG_ENABLE_ARCMT:BOOL=OFF
- set CMAKE_OPTS=%CMAKE_OPTS% -DCLANG_ENABLE_STATIC_ANALYZER:BOOL=OFF
- set CMAKE_OPTS=%CMAKE_OPTS% -DCLANG_INCLUDE_TESTS:BOOL=OFF -DLLVM_INCLUDE_TESTS:BOOL=OFF
- set CMAKE_OPTS=%CMAKE_OPTS% -DHLSL_INCLUDE_TESTS:BOOL=ON
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_TARGETS_TO_BUILD:STRING=None
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_INCLUDE_DOCS:BOOL=OFF -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF
- set CMAKE_OPTS=%CMAKE_OPTS% -DLIBCLANG_BUILD_STATIC:BOOL=ON
- rem set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_OPTIMIZED_TABLEGEN:BOOL=ON
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_OPTIMIZED_TABLEGEN:BOOL=OFF
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_REQUIRES_EH:BOOL=ON
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_APPEND_VC_REV:BOOL=ON
- rem Enable exception handling (which requires RTTI).
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_ENABLE_RTTI:BOOL=ON
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_ENABLE_EH:BOOL=ON
- rem Setup a specific, stable triple for HLSL.
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=dxil-ms-dx
- set CMAKE_OPTS=%CMAKE_OPTS% -DCLANG_BUILD_EXAMPLES:BOOL=OFF
- set CMAKE_OPTS=%CMAKE_OPTS% -DLLVM_REQUIRES_RTTI:BOOL=ON
- set CMAKE_OPTS=%CMAKE_OPTS% -DCLANG_CL:BOOL=OFF
- set CMAKE_OPTS=%CMAKE_OPTS% -DCMAKE_SYSTEM_VERSION=10.0.14393.0
- set CMAKE_OPTS=%CMAKE_OPTS% -DDXC_BUILD_ARCH=%BUILD_ARCH%
- rem This parameter is used with vcvarsall to force use of 64-bit build tools
- rem instead of 32-bit tools that run out of memory.
- if "%BUILD_ARCH%"=="Win32" (
- set BUILD_TOOLS=amd64_x86
- ) else if "%BUILD_ARCH%"=="x64" (
- set BUILD_TOOLS=amd64
- ) else if "%BUILD_ARCH%"=="ARM" (
- set BUILD_TOOLS=amd64_arm
- )
- call :configandbuild %BUILD_CONFIG% %BUILD_ARCH% %HLSL_BLD_DIR% "%BUILD_GENERATOR%"
- if errorlevel 1 exit /b 1
- if "%BUILD_GENERATOR%"=="Ninja" (
- echo Success - files are available at %HLSL_BLD_DIR%\bin
- ) else (
- echo Success - files are available at %HLSL_BLD_DIR%\%BUILD_CONFIG%\bin
- )
- call :handlesuccess
- exit /b 0
- :showhelp
- echo Builds HLSL solutions and the product and test binaries for the current
- echo flavor and architecture.
- echo.
- echo hctbuild [-s or -b] [-alldef] [-analyze] [-fv] [-rel] [-arm or -x86 or -x64] [-Release] [-Debug] [-vs2017] [-ninja]
- echo.
- echo -s creates the projects only, without building
- echo -b builds the existing project
- echo.
- echo -alldef adds optional projects to the default build
- echo -analyze adds /analyze option
- echo -fv fixes the resource version for release
- echo.
- echo -rel builds release rather than debug
- echo.
- echo current BUILD_ARCH=%BUILD_ARCH%. Override with:
- echo -x86 targets an x86 build (aka. Win32)
- echo -x64 targets an x64 build (aka. Win64)
- echo -arm targets an ARM build
- echo.
- echo Generator:
- echo -ninja use Ninja as the generator
- echo.
- echo AppVeyor Support
- echo -Release builds release
- echo -Debug builds debug
- echo -vs2017 uses Visual Studio 2017 to build
- echo.
- if not "%HLSL_BLD_DIR%"=="" (
- echo The solution file is at %HLSL_BLD_DIR%\LLVM.sln
- echo.
- )
- goto :eof
- :configandbuild
- rem Configure and build a specific configuration, typically Debug or Release.
- rem %1 - the conf name
- rem %2 - the platform name
- rem %3 - the build directory
- rem %4 - the generator name
- if not exist %3 (
- mkdir %3
- if errorlevel 1 (
- echo Unable to create %3
- call :handlefail
- exit /b 1
- )
- )
- cd /d %3
- if "%DO_SETUP%"=="1" (
- echo Creating solution files for %2, logging to %3\cmake-log.txt
- if "%BUILD_GENERATOR%"=="Ninja" (
- echo Running cmake -DCMAKE_BUILD_TYPE:STRING=%1 %CMAKE_OPTS% -G %4 %HLSL_SRC_DIR% > %3\cmake-log.txt
- cmake -DCMAKE_BUILD_TYPE:STRING=%1 %CMAKE_OPTS% -G %4 %HLSL_SRC_DIR% >> %3\cmake-log.txt 2>&1
- ) else (
- rem -DCMAKE_BUILD_TYPE:STRING=%1 is not necessary for multi-config generators like VS
- echo Running cmake %CMAKE_OPTS% -G %4 %HLSL_SRC_DIR% > %3\cmake-log.txt
- cmake %CMAKE_OPTS% -G %4 %HLSL_SRC_DIR% >> %3\cmake-log.txt 2>&1
- )
- if errorlevel 1 (
- echo Failed to configure cmake projects.
- echo ===== begin cmake-log.txt =====
- type %3\cmake-log.txt
- echo ===== end cmake-log.txt =====
- echo Run 'cmake %HLSL_SRC_DIR%' in %3 will continue project generation after fixing the issue.
- cmake --version | findstr 3.4
- if errorlevel 1 (
- echo CMake 3.4 is the currently supported version - your installed cmake may be out of date.
- echo See README.md at the root for an explanation of dependencies.
- )
- findstr -c:"Could NOT find D3D12" %3\cmake-log.txt >NUL
- if errorlevel 1 (
- rem D3D12 has been found, nothing to diagnose here.
- ) else (
- echo D3D12 has not been found. Confirm that you have installed the Windows 10 SDK.
- echo See README.md at the root for an explanation of dependencies.
- echo Run hctclean after installing the SDK to completely rebuild the projects.
- )
- call :handlefail
- exit /b 1
- )
- )
- if "%DO_BUILD%"=="1" (
- rem Should add support for the non-x86-qualified programfiles.
- echo Building solution files for %2 with %1 configuration.
- if "%BUILD_GENERATOR%" NEQ "Ninja" (
- if "%BUILD_VS_VER%"=="2015" (
- if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (
- call :buildvs_x86dir %1 %2 %3
- goto :donebuild
- )
- )
- )
- rem Just defer to cmake for now.
- cmake --build . --config %1
- :donebuild
- if errorlevel 1 (
- echo Failed to build projects.
- echo After fixing, run 'cmake --build --config %1 .' in %2
- call :handlefail
- exit /b 1
- )
- endlocal
- )
- exit /b 0
- :buildvs_x86dir
- rem Build with the VS tools in the x86 program files directory, maxcpucount makes this goes much faster.
- rem 1 - config
- rem 2 - platform
- rem 3 - build directory
- setlocal
- call "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %BUILD_TOOLS%
- rem Add /ds for a detailed summary at the end.
- echo Logging to %3\msbuild-log.txt
- MSBuild.exe /nologo /property:Configuration=%1 /property:Platform=%2 /maxcpucount:2 %3\LLVM.sln /consoleloggerparameters:Summary;Verbosity=minimal /fileloggerparameters:LogFile=%3\msbuild-log.txt
- if NOT "%ERRORLEVEL%"=="0" (
- exit /b 1
- )
- endlocal
- exit /b 0
- :handlefail
- cscript.exe //Nologo %HLSL_SRC_DIR%\utils\hct\hctspeak.js /say:"build failed"
- exit /b 0
- :handlesuccess
- cscript.exe //Nologo %HLSL_SRC_DIR%\utils\hct\hctspeak.js /say:"build succeeded"
- exit /b 0
|