dawn-cmake/infra/kokoro/windows/build.bat

165 lines
5.6 KiB
Batchfile
Raw Normal View History

@rem Copyright 2021 The Tint and Dawn Authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
goto :main
:task_begin
set TASK_NAME=%~1
echo %TASK_NAME% starting at %Time%
exit /b 0
:print_last_task_duration
if not "%TASK_NAME%" == "" (
echo %TASK_NAME% completed at %Time%
)
exit /b 0
:status
echo.
echo.
call :print_last_task_duration
echo.
echo *****************************************************************
echo %~1
echo *****************************************************************
echo.
call :task_begin "%~1"
exit /b 0
:main
set ORIGINAL_SRC_DIR= %~dp0\..\..\..
set TEMP_DIR=%TEMP%\dawn-temp
set SRC_DIR="%TEMP_DIR%\dawn-src"
set BUILD_DIR="%TEMP_DIR%\dawn-build"
cd /d %ORIGINAL_SRC_DIR%
if not exist ".git\" (
echo "ORIGINAL_SRC_DIR should point to project root: %ORIGINAL_SRC_DIR%"
goto :error
)
if exist %TEMP_DIR% (
call :status "Deleting %TEMP_DIR%"
del /q/f/s %TEMP_DIR% > NUL || goto :error
rmdir /q/s %TEMP_DIR% > NUL || goto :error
)
mkdir %TEMP_DIR% || goto :error
call :status "Fetching and installing DXC"
@echo on
set DXC_RELEASE="https://github.com/microsoft/DirectXShaderCompiler/releases/download/v1.7.2207/dxc_2022_07_18.zip"
curl -k -L %DXC_RELEASE% --output "%TEMP_DIR%\dxc_release.zip" || goto :error
powershell.exe -Command "Expand-Archive -LiteralPath '%TEMP_DIR%\dxc_release.zip' -DestinationPath '%TEMP_DIR%\dxc'" || goto :error
set DXC_PATH=%TEMP_DIR%\dxc\bin\x64
call :status "Fetching and installing Windows SDK for d3dcompiler DLL"
@echo on
set WINSDK_DLL_INSTALLER=https://go.microsoft.com/fwlink/?linkid=2164145
set WINSDK_VERSION=10.0.20348.0
curl -k -L %WINSDK_DLL_INSTALLER% --output "%TEMP_DIR%\winsdksetup.exe" || goto :error
start "download" /wait "%TEMP_DIR%\winsdksetup.exe" /quiet /norestart /ceip off /features OptionId.DesktopCPPx64 /layout "%TEMP_DIR%\winsdkinstall" || goto :error
start "install" /wait "%TEMP_DIR%\winsdkinstall\Installers\Windows SDK for Windows Store Apps Tools-x86_en-us.msi" || goto :error
set D3DCOMPILER_PATH=C:\Program Files (x86)\Windows Kits\10\bin\%WINSDK_VERSION%\x64
@echo off
call :status "Installing depot_tools"
@echo on
pushd %TEMP_DIR%
rem For Windows, we must download and extract a bundle.
rem See https://chromium.googlesource.com/chromium/src/+/HEAD/docs/windows_build_instructions.md#install
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://storage.googleapis.com/chrome-infra/depot_tools.zip', 'depot_tools.zip')" || goto :error
powershell -Command "Expand-Archive -Force 'depot_tools.zip' 'depot_tools'" || goto :error
rem Run gclient once to install deps
set PATH=%TEMP_DIR%\depot_tools;%PATH%
set DEPOT_TOOLS_UPDATE=1
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
call gclient || goto :error
@echo off
popd
call :status "Cloning to clean source directory"
@echo on
mkdir %SRC_DIR% || goto :error
cd /d %SRC_DIR% || goto :error
call git clone %ORIGINAL_SRC_DIR% . || goto :error
@echo off
call :status "Fetching dependencies"
@echo on
copy scripts\standalone.gclient .gclient || goto :error
call gclient sync || goto :error
@echo off
call :status "Configuring build system"
@echo on
mkdir %BUILD_DIR%
cd /d %BUILD_DIR%
set COMMON_CMAKE_FLAGS= ^
-DTINT_BUILD_DOCS=O ^
-DTINT_BUILD_BENCHMARKS=1 ^
-DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
-DTINT_BUILD_BENCHMARKS=1 ^
-DTINT_BUILD_SPV_READER=1 ^
-DTINT_BUILD_WGSL_READER=1 ^
-DTINT_BUILD_GLSL_WRITER=1 ^
-DTINT_BUILD_HLSL_WRITER=1 ^
-DTINT_BUILD_MSL_WRITER=1 ^
-DTINT_BUILD_SPV_WRITER=1 ^
-DTINT_BUILD_WGSL_WRITER=1 ^
-DTINT_RANDOMIZE_HASHES=1
@echo off
call :status "Building dawn"
@echo on
rem Disable msbuild "Intermediate or Output directory cannot reside in Temporary directory"
set IgnoreWarnIntDirInTempDetected=true
rem Add Python3 to path as this Kokoro image only has Python2 in it
set PATH=C:\Python37;%PATH%
rem To use ninja with CMake requires VC env vars
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
@echo on
rem Note that we need to specify the C and C++ compiler only because Cygwin is in PATH and CMake finds GCC and picks that over MSVC
rem We also need to specify the Ninja binary is ninja.bat because the Ninja picked up otherwise is depot_tools' shell script.
cmake %SRC_DIR% -G "Ninja" -DCMAKE_MAKE_PROGRAM="ninja.bat" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" %COMMON_CMAKE_FLAGS% || goto :error
cmake --build . || goto :error
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" /clean_env
@echo off
call :status "Running tint_unittests"
@echo on
tint_unittests.exe || goto :error
@echo off
call :status "Testing test/tint/test-all.sh"
@echo on
cd /d %SRC_DIR% || goto :error
rem Run tests with DXC, FXC and Metal validation
set OLD_PATH=%PATH%
set PATH=C:\Program Files\Metal Developer Tools\macos\bin;%PATH%
call git bash -- ./test/tint/test-all.sh ../dawn-build/tint.exe --verbose || goto :error
set PATH=%OLD_PATH%
@echo off
call :status "Done"
exit /b 0
:error
echo BUILD FAILED! errorlevel: %errorlevel%
exit /b %errorlevel%