blob: 5a5941a15e5a30b13f777b9926c4731df5d14a35 [file] [log] [blame] [edit]
@echo off
if "%1"=="/?" goto :showhelp
if "%1"=="-?" goto :showhelp
if "%1"=="-help" goto :showhelp
if "%1"=="--help" goto :showhelp
rem Default build arch is x64
if "%BUILD_ARCH%"=="" (
set BUILD_ARCH=x64
)
if "%1"=="-x86" (
set BUILD_ARCH=Win32
) else if "%1"=="-Win32" (
set BUILD_ARCH=Win32
) else if "%1"=="-x64" (
set BUILD_ARCH=x64
) else if "%1"=="-amd64" (
set BUILD_ARCH=x64
) else if "%1"=="-arm" (
set BUILD_ARCH=ARM
) else if "%1"=="-arm64" (
set BUILD_ARCH=ARM64
) else (
goto :donearch
)
shift /1
:donearch
echo Default architecture - set BUILD_ARCH=%BUILD_ARCH%
rem Set the following environment variable globally, or start Visual Studio
rem from this command line in order to use 64-bit tools.
set PreferredToolArchitecture=x64
if "%1"=="" (
echo Source directory missing.
goto :showhelp
)
if "%2"=="" (
echo Build directory missing.
goto :showhelp
)
if not exist "%~f1\utils\hct\hctstart.cmd" (
echo %1 does not look like a directory with sources - cannot find %~f1\utils\hct\hctstart.cmd
exit /b 1
)
set HLSL_SRC_DIR=%~f1
set HLSL_BLD_DIR=%~f2
echo HLSL source directory set to HLSL_SRC_DIR=%HLSL_SRC_DIR%
echo HLSL build directory set to HLSL_BLD_DIR=%HLSL_BLD_DIR%
echo.
echo You can recreate the environment with this command.
echo %0 %*
echo.
echo Setting up macros for this console - run hcthelp for a reference.
echo.
doskey hctbld=pushd %HLSL_BLD_DIR%
doskey hctbuild=%HLSL_SRC_DIR%\utils\hct\hctbuild.cmd $*
doskey hctclean=%HLSL_SRC_DIR%\utils\hct\hctclean.cmd $*
doskey hcthelp=%HLSL_SRC_DIR%\utils\hct\hcthelp.cmd $*
doskey hctshortcut=cscript.exe //Nologo %HLSL_SRC_DIR%\utils\hct\hctshortcut.js $*
doskey hctspeak=cscript.exe //Nologo %HLSL_SRC_DIR%\utils\hct\hctspeak.js $*
doskey hctsrc=pushd %HLSL_SRC_DIR%
doskey hcttest=%HLSL_SRC_DIR%\utils\hct\hcttest.cmd $*
doskey hcttools=pushd %HLSL_SRC_DIR%\utils\hct
doskey hcttodo=cscript.exe //Nologo %HLSL_SRC_DIR%\utils\hct\hcttodo.js $*
doskey hctvs=%HLSL_SRC_DIR%\utils\hct\hctvs.cmd $*
call :checksdk
if errorlevel 1 (
echo Windows SDK not properly installed. Build enviornment could not be setup correctly.
echo Please see the README.md instructions in the project root.
exit /b 1
)
where cmake.exe 1>nul 2>nul
if errorlevel 1 (
call :findcmake
)
where python.exe 1>nul 2>nul
if errorlevel 1 (
call :findpython
)
call :findminte
where te.exe 1>nul 2>nul
if errorlevel 1 (
call :findte
)
where git.exe 1>nul 2>nul
if errorlevel 1 (
call :findgit
)
pushd %HLSL_SRC_DIR%
goto :eof
:showhelp
echo hctstart - Start the HLSL console tools environment.
echo.
echo This script sets up the sources and binary environment variables
echo and installs convenience console aliases. See hcthelp for a reference.
echo.
echo Usage:
echo hctstart [-x86 or -x64] [path-to-sources] [path-to-build]
echo.
goto :eof
:findcmake
for %%e in (Community Professional Enterprise) do (
rem check VS 2022 in programfiles first
if exist "%programfiles%\Microsoft Visual Studio\2022\%%e\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin" (
set "PATH=%PATH%;%programfiles%\Microsoft Visual Studio\2022\%%e\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin"
echo Path adjusted to include cmake from Visual Studio 2022 %%e.
exit /b 0
)
rem then check VS 2019 in programfiles(x86)
if exist "%programfiles(x86)%\Microsoft Visual Studio\2019\%%e\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin" (
set "PATH=%PATH%;%programfiles(x86)%\Microsoft Visual Studio\2019\%%e\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin"
echo Path adjusted to include cmake from Visual Studio 2019 %%e.
exit /b 0
)
)
if errorlevel 1 if exist "%programfiles%\CMake\bin" set path=%path%;%programfiles%\CMake\bin
if errorlevel 1 if exist "%programfiles(x86)%\CMake\bin" set path=%path%;%programfiles(x86)%\CMake\bin
where cmake.exe 1>nul 2>nul
if errorlevel 1 (
echo Unable to find cmake on path - you will have to add this before building.
exit /b 1
)
echo Path adjusted to include cmake.
goto :eof
:findminte
set HLSL_TAEF_DIR=
set HLSL_TAEF_MINTE=
if exist "%HLSL_SRC_DIR%\external\taef\build\Binaries\%BUILD_ARCH:Win32=x86%\Te.exe" set HLSL_TAEF_MINTE=%HLSL_SRC_DIR%\external\taef\build\Binaries\%BUILD_ARCH:Win32=x86%
if exist "%programfiles%\windows kits\10\Testing\Runtimes\TAEF\%BUILD_ARCH:Win32=x86%\MinTe\Te.exe" set HLSL_TAEF_MINTE=%programfiles%\windows kits\10\Testing\Runtimes\TAEF\%BUILD_ARCH:Win32=x86%\MinTe
if exist "%programfiles(x86)%\windows kits\10\Testing\Runtimes\TAEF\%BUILD_ARCH:Win32=x86%\MinTe\Te.exe" set HLSL_TAEF_MINTE=%programfiles(x86)%\windows kits\10\Testing\Runtimes\TAEF\%BUILD_ARCH:Win32=x86%\MinTe
if exist "%programfiles%\windows kits\10\Testing\Runtimes\TAEF\MinTe\Te.exe" set HLSL_TAEF_MINTE=%programfiles%\windows kits\10\Testing\Runtimes\TAEF\MinTe
if exist "%programfiles(x86)%\windows kits\10\Testing\Runtimes\TAEF\MinTe\Te.exe" set HLSL_TAEF_MINTE=%programfiles(x86)%\windows kits\10\Testing\Runtimes\TAEF\MinTe
if "%HLSL_TAEF_MINTE%"=="" (
echo Unable to find matching MinTe, will not auto-copy AgilitySDK binaries.
exit /b 1
)
echo Found TAEF at %HLSL_TAEF_MINTE%
set HLSL_TAEF_DIR=%HLSL_BLD_DIR%\TAEF
echo Copying to %HLSL_TAEF_DIR% for use with AgilitySDK
mkdir "%HLSL_TAEF_DIR%\%BUILD_ARCH:Win32=x86%" 1>nul 2>nul
robocopy /NP /NJH /NJS /S "%HLSL_TAEF_MINTE%" "%HLSL_TAEF_DIR%\%BUILD_ARCH:Win32=x86%" *
set path=%path%;%HLSL_TAEF_DIR%\%BUILD_ARCH:Win32=x86%
goto:eof
:findte
if exist "%programfiles%\windows kits\10\Testing\Runtimes\TAEF\Te.exe" set path=%path%;%programfiles%\windows kits\10\Testing\Runtimes\TAEF
if exist "%programfiles(x86)%\windows kits\10\Testing\Runtimes\TAEF\Te.exe" set path=%path%;%programfiles(x86)%\windows kits\10\Testing\Runtimes\TAEF
if exist "%programfiles%\windows kits\8.1\Testing\Runtimes\TAEF\Te.exe" set path=%path%;%programfiles%\windows kits\8.1\Testing\Runtimes\TAEF
if exist "%programfiles(x86)%\windows kits\8.1\Testing\Runtimes\TAEF\Te.exe" set path=%path%;%programfiles(x86)%\windows kits\8.1\Testing\Runtimes\TAEF
if exist "%HLSL_SRC_DIR%\external\taef\build\Binaries\amd64\TE.exe" set path=%path%;%HLSL_SRC_DIR%\external\taef\build\Binaries\amd64
where te.exe 1>nul 2>nul
if errorlevel 1 (
echo Unable to find TAEF te.exe on path - you will have to add this before running tests.
echo WDK includes TAEF and is available from https://msdn.microsoft.com/en-us/windows/hardware/dn913721.aspx
echo Alternatively, consider a project-local install by running %HLSL_SRC_DIR%\utils\hct\hctgettaef.py
echo Please see the README.md instructions in the project root.
exit /b 1
)
echo Path adjusted to include TAEF te.exe.
:findgit
if exist "%programfiles(x86)%\Git\cmd\git.exe" set path=%path%;%programfiles(x86)%\Git\cmd
if exist "%programfiles%\Git\cmd\git.exe" set path=%path%;%programfiles%\Git\cmd
if exist "%LOCALAPPDATA%\Programs\Git\cmd\git.exe" set path=%path%;%LOCALAPPDATA%\Programs\Git\cmd
where git 1>nul 2>nul
if errorlevel 1 (
echo Unable to find git. Having git is convenient but not necessary to build and test.
)
echo Path adjusted to include git.
goto :eof
:findpython
if exist C:\Python37\python.exe set path=%path%;C:\Python37
where python.exe 1>nul 2>nul
if errorlevel 1 (
echo Unable to find python.
exit /b 1
)
echo Path adjusted to include python.
goto :eof
:checksdk
setlocal
set min_sdk_ver=17763
set REG_QUERY=REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0"
set kit_root=
for /F "tokens=1,2*" %%A in ('%REG_QUERY% /v InstallationFolder') do (
if "%%A"=="InstallationFolder" (
rem echo Found Windows 10 SDK
rem echo InstallationFolder: "%%C"
set kit_root=%%C
)
)
if ""=="%kit_root%" (
set "kit_root=%WIN10_SDK_PATH%"
)
if ""=="%kit_root%" (
echo Did not find a Windows 10 SDK installation.
exit /b 1
)
if not exist "%kit_root%" (
echo Windows 10 SDK was installed but is not accessible.
exit /b 1
)
set sdk_ver=
set d3d12_sdk_ver=
for /F "tokens=1-3" %%A in ('%REG_QUERY% /v ProductVersion') do (
if "%%A"=="ProductVersion" (
rem echo ProductVersion: %%C
for /F "tokens=1-3 delims=." %%X in ("%%C") do (
set sdk_ver=%%Z
if exist "%kit_root%\include\10.0.%%Z.0\um\d3d12.h" (
set d3d12_sdk_ver=%%Z
)
)
)
)
if ""=="%sdk_ver%" (
set sdk_ver=%WIN10_SDK_VERSION%
)
if ""=="%sdk_ver%" (
echo Could not detect Windows 10 SDK version.
exit /b 1
)
if NOT %min_sdk_ver% LEQ %sdk_ver% (
echo Found unsupported Windows 10 SDK version 10.0.%sdk_ver%.0 installed.
echo Windows 10 SDK version 10.0.%min_sdk_ver%.0 or newer is required.
exit /b 1
)
if ""=="%d3d12_sdk_ver%" (
echo Windows 10 SDK version 10.0.%sdk_ver%.0 installed, but did not find d3d12.h.
exit /b 1
) else (
echo Found Windows 10 SDK 10.0.%d3d12_sdk_ver%.0
)
endlocal
goto :eof
endlocal