| Mark Lobodzinski | 0e39375 | 2016-05-04 09:19:54 -0600 | [diff] [blame] | 1 | @echo off |
| 2 | REM Update source for glslang, spirv-tools |
| 3 | |
| 4 | REM Determine the appropriate CMake strings for the current version of Visual Studio |
| 5 | echo Determining VS version |
| 6 | python .\determine_vs_version.py > vsversion.tmp |
| 7 | set /p VS_VERSION=< vsversion.tmp |
| 8 | echo Detected Visual Studio Version as %VS_VERSION% |
| 9 | |
| 10 | REM Cleanup the file we used to collect the VS version output since it's no longer needed. |
| 11 | del /Q /F vsversion.tmp |
| 12 | |
| 13 | setlocal EnableDelayedExpansion |
| 14 | set errorCode=0 |
| 15 | set BUILD_DIR=%~dp0 |
| Jon Ashburn | 17c6468 | 2016-05-02 08:39:14 -0600 | [diff] [blame] | 16 | set BASE_DIR=%BUILD_DIR%external |
| Mark Lobodzinski | 0e39375 | 2016-05-04 09:19:54 -0600 | [diff] [blame] | 17 | set GLSLANG_DIR=%BASE_DIR%\glslang |
| 18 | set SPIRV_TOOLS_DIR=%BASE_DIR%\spirv-tools |
| 19 | |
| 20 | REM // ======== Parameter parsing ======== // |
| 21 | |
| 22 | if "%1" == "" ( |
| 23 | echo usage: update_external_sources.bat [options] |
| 24 | echo. |
| 25 | echo Available options: |
| 26 | echo --sync-glslang just pull glslang_revision |
| 27 | echo --sync-spirv-tools just pull spirv-tools_revision |
| 28 | echo --build-glslang pulls glslang_revision, configures CMake, builds Release and Debug |
| 29 | echo --build-spirv-tools pulls spirv-tools_revision, configures CMake, builds Release and Debug |
| 30 | echo --all sync and build glslang, LunarGLASS, spirv-tools |
| 31 | goto:finish |
| 32 | ) |
| 33 | |
| 34 | set sync-glslang=0 |
| 35 | set sync-spirv-tools=0 |
| 36 | set build-glslang=0 |
| 37 | set build-spirv-tools=0 |
| 38 | set check-glslang-build-dependencies=0 |
| 39 | |
| 40 | :parameterLoop |
| 41 | |
| 42 | if "%1"=="" goto:parameterContinue |
| 43 | |
| 44 | if "%1" == "--sync-glslang" ( |
| 45 | set sync-glslang=1 |
| 46 | shift |
| 47 | goto:parameterLoop |
| 48 | ) |
| 49 | |
| 50 | if "%1" == "--sync-spirv-tools" ( |
| 51 | set sync-spirv-tools=1 |
| 52 | shift |
| 53 | goto:parameterLoop |
| 54 | ) |
| 55 | |
| 56 | if "%1" == "--build-glslang" ( |
| 57 | set sync-glslang=1 |
| 58 | set check-glslang-build-dependencies=1 |
| 59 | set build-glslang=1 |
| 60 | shift |
| 61 | goto:parameterLoop |
| 62 | ) |
| 63 | |
| 64 | if "%1" == "--build-spirv-tools" ( |
| 65 | set sync-spirv-tools=1 |
| 66 | REM glslang has the same needs as spirv-tools |
| 67 | set check-glslang-build-dependencies=1 |
| 68 | set build-spirv-tools=1 |
| 69 | shift |
| 70 | goto:parameterLoop |
| 71 | ) |
| 72 | |
| 73 | if "%1" == "--all" ( |
| 74 | set sync-glslang=1 |
| 75 | set sync-spirv-tools=1 |
| 76 | set build-glslang=1 |
| 77 | set build-spirv-tools=1 |
| 78 | set check-glslang-build-dependencies=1 |
| 79 | shift |
| 80 | goto:parameterLoop |
| 81 | ) |
| 82 | |
| 83 | echo Unrecognized options "%1" |
| 84 | goto:error |
| 85 | |
| 86 | :parameterContinue |
| 87 | |
| 88 | REM // ======== end Parameter parsing ======== // |
| 89 | |
| 90 | |
| 91 | REM // ======== Dependency checking ======== // |
| 92 | REM git is required for all paths |
| 93 | for %%X in (git.exe) do (set FOUND=%%~$PATH:X) |
| 94 | if not defined FOUND ( |
| 95 | echo Dependency check failed: |
| 96 | echo git.exe not found |
| 97 | echo Git for Windows can be downloaded here: https://git-scm.com/download/win |
| 98 | echo Install and ensure git.exe makes it into your PATH |
| 99 | set errorCode=1 |
| 100 | ) |
| 101 | |
| 102 | if %check-glslang-build-dependencies% equ 1 ( |
| 103 | for %%X in (cmake.exe) do (set FOUND=%%~$PATH:X) |
| 104 | if not defined FOUND ( |
| 105 | echo Dependency check failed: |
| 106 | echo cmake.exe not found |
| 107 | echo Get CNake 2.8 for Windows here: http://www.cmake.org/cmake/resources/software.html |
| 108 | echo Install and ensure each makes it into your PATH, default is "C:\Program Files (x86)\CMake\bin" |
| 109 | set errorCode=1 |
| 110 | ) |
| 111 | ) |
| 112 | |
| 113 | |
| 114 | REM goto:main |
| 115 | |
| 116 | REM // ======== end Dependency checking ======== // |
| 117 | |
| 118 | :main |
| 119 | |
| 120 | if %errorCode% neq 0 (goto:error) |
| 121 | |
| 122 | REM Read the target versions from external file, which is shared with Linux script |
| 123 | |
| 124 | if not exist glslang_revision ( |
| 125 | echo. |
| 126 | echo Missing glslang_revision file! Place it next to this script with target version in it. |
| 127 | set errorCode=1 |
| 128 | goto:error |
| 129 | ) |
| 130 | |
| 131 | if not exist spirv-tools_revision ( |
| 132 | echo. |
| 133 | echo Missing spirv-tools_revision file! Place it next to this script with target version in it. |
| 134 | set errorCode=1 |
| 135 | goto:error |
| 136 | ) |
| 137 | |
| 138 | set /p GLSLANG_REVISION= < glslang_revision |
| 139 | set /p SPIRV_TOOLS_REVISION= < spirv-tools_revision |
| 140 | echo GLSLANG_REVISION=%GLSLANG_REVISION% |
| 141 | echo SPIRV_TOOLS_REVISION=%SPIRV_TOOLS_REVISION% |
| 142 | |
| 143 | |
| 144 | echo Creating and/or updating glslang, spirv-tools in %BASE_DIR% |
| 145 | |
| 146 | if %sync-glslang% equ 1 ( |
| 147 | if exist %GLSLANG_DIR% ( |
| 148 | rd /S /Q %GLSLANG_DIR% |
| 149 | ) |
| 150 | if not exist %GLSLANG_DIR% ( |
| 151 | call:create_glslang |
| 152 | ) |
| 153 | if %errorCode% neq 0 (goto:error) |
| 154 | call:update_glslang |
| 155 | if %errorCode% neq 0 (goto:error) |
| 156 | ) |
| 157 | |
| 158 | if %sync-spirv-tools% equ 1 ( |
| 159 | if exist %SPIRV_TOOLS_DIR% ( |
| 160 | rd /S /Q %SPIRV_TOOLS_DIR% |
| 161 | ) |
| 162 | if %errorlevel% neq 0 (goto:error) |
| 163 | if not exist %SPIRV_TOOLS_DIR% ( |
| 164 | call:create_spirv-tools |
| 165 | ) |
| 166 | if %errorCode% neq 0 (goto:error) |
| 167 | call:update_spirv-tools |
| 168 | if %errorCode% neq 0 (goto:error) |
| 169 | ) |
| 170 | |
| 171 | if %build-glslang% equ 1 ( |
| 172 | call:build_glslang |
| 173 | if %errorCode% neq 0 (goto:error) |
| 174 | ) |
| 175 | |
| 176 | if %build-spirv-tools% equ 1 ( |
| 177 | call:build_spirv-tools |
| 178 | if %errorCode% neq 0 (goto:error) |
| 179 | ) |
| 180 | |
| 181 | echo. |
| 182 | echo Exiting |
| 183 | goto:finish |
| 184 | |
| 185 | :error |
| 186 | echo. |
| 187 | echo Halting due to error |
| 188 | goto:finish |
| 189 | |
| 190 | :finish |
| 191 | if not "%cd%\" == "%BUILD_DIR%" ( cd %BUILD_DIR% ) |
| 192 | endlocal |
| 193 | goto:eof |
| 194 | |
| 195 | |
| 196 | |
| 197 | REM // ======== Functions ======== // |
| 198 | |
| 199 | :create_glslang |
| 200 | echo. |
| 201 | echo Creating local glslang repository %GLSLANG_DIR%) |
| 202 | mkdir %GLSLANG_DIR% |
| 203 | cd %GLSLANG_DIR% |
| 204 | git clone https://github.com/KhronosGroup/glslang.git . |
| 205 | git checkout %GLSLANG_REVISION% |
| 206 | if not exist %GLSLANG_DIR%\SPIRV ( |
| 207 | echo glslang source download failed! |
| 208 | set errorCode=1 |
| 209 | ) |
| 210 | goto:eof |
| 211 | |
| 212 | :update_glslang |
| 213 | echo. |
| 214 | echo Updating %GLSLANG_DIR% |
| 215 | cd %GLSLANG_DIR% |
| 216 | git fetch --all |
| 217 | git checkout %GLSLANG_REVISION% |
| Karl Schultz | db27d51 | 2016-07-07 10:41:25 -0600 | [diff] [blame] | 218 | REM Special case for this particular revision: |
| 219 | REM Pull in a patch that fixes a compilation issue with g++ 5.3 |
| 220 | REM See https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues/681 |
| 221 | if "%GLSLANG_REVISION%" == "4678ca9dacfec7a084dbc69bbe568bdad6889f1b" ( |
| 222 | git checkout %GLSLANG_REVISION% -B temp1610 |
| 223 | git cherry-pick 880bf36cacee1cfce7d5d94991eb18c9e2d59d39 |
| 224 | ) |
| Mark Lobodzinski | 0e39375 | 2016-05-04 09:19:54 -0600 | [diff] [blame] | 225 | goto:eof |
| 226 | |
| 227 | :create_spirv-tools |
| 228 | echo. |
| 229 | echo Creating local spirv-tools repository %SPIRV_TOOLS_DIR%) |
| 230 | mkdir %SPIRV_TOOLS_DIR% |
| 231 | cd %SPIRV_TOOLS_DIR% |
| Peter Lohrmann | 18c06a2 | 2016-02-16 15:20:58 -0800 | [diff] [blame] | 232 | git clone https://github.com/KhronosGroup/SPIRV-Tools.git . |
| Mark Lobodzinski | 0e39375 | 2016-05-04 09:19:54 -0600 | [diff] [blame] | 233 | git checkout %SPIRV_TOOLS_REVISION% |
| 234 | if not exist %SPIRV_TOOLS_DIR%\source ( |
| 235 | echo spirv-tools source download failed! |
| 236 | set errorCode=1 |
| 237 | ) |
| Greg Fischer | 04d0a56 | 2016-06-17 12:19:46 -0600 | [diff] [blame] | 238 | mkdir %SPIRV_TOOLS_DIR%\external |
| 239 | mkdir %SPIRV_TOOLS_DIR%\external\spirv-headers |
| 240 | cd %SPIRV_TOOLS_DIR%\external\spirv-headers |
| 241 | git clone https://github.com/KhronosGroup/SPIRV-HEADERS.git . |
| 242 | if not exist %SPIRV_TOOLS_DIR%\external\spirv-headers\README.md ( |
| 243 | echo spirv-headers download failed! |
| 244 | set errorCode=1 |
| 245 | ) |
| Mark Lobodzinski | 0e39375 | 2016-05-04 09:19:54 -0600 | [diff] [blame] | 246 | goto:eof |
| Mark Young | 1ef2330 | 2016-01-13 13:47:16 -0700 | [diff] [blame] | 247 | |
| Mark Lobodzinski | 0e39375 | 2016-05-04 09:19:54 -0600 | [diff] [blame] | 248 | :update_spirv-tools |
| 249 | echo. |
| 250 | echo Updating %SPIRV_TOOLS_DIR% |
| 251 | cd %SPIRV_TOOLS_DIR% |
| 252 | git fetch --all |
| 253 | git checkout %SPIRV_TOOLS_REVISION% |
| Greg Fischer | 04d0a56 | 2016-06-17 12:19:46 -0600 | [diff] [blame] | 254 | if not exist %SPIRV_TOOLS_DIR%\external\spirv-headers\README.md ( |
| 255 | mkdir %SPIRV_TOOLS_DIR%\external |
| 256 | mkdir %SPIRV_TOOLS_DIR%\external\spirv-headers |
| 257 | cd %SPIRV_TOOLS_DIR%\external\spirv-headers |
| 258 | git clone https://github.com/KhronosGroup/SPIRV-HEADERS.git . |
| 259 | goto:eof |
| 260 | ) |
| 261 | cd %SPIRV_TOOLS_DIR%\external\spirv-headers |
| 262 | git fetch --all |
| 263 | git pull |
| Mark Lobodzinski | 0e39375 | 2016-05-04 09:19:54 -0600 | [diff] [blame] | 264 | goto:eof |
| Mark Young | c2f1021 | 2016-01-13 13:47:16 -0700 | [diff] [blame] | 265 | |
| Mark Lobodzinski | 0e39375 | 2016-05-04 09:19:54 -0600 | [diff] [blame] | 266 | :build_glslang |
| 267 | echo. |
| 268 | echo Building %GLSLANG_DIR% |
| 269 | cd %GLSLANG_DIR% |
| 270 | |
| 271 | REM Cleanup any old directories lying around. |
| 272 | if exist build32 ( |
| 273 | rmdir /s /q build32 |
| 274 | ) |
| 275 | if exist build ( |
| 276 | rmdir /s /q build |
| 277 | ) |
| 278 | |
| 279 | echo Making 32-bit glslang |
| 280 | echo ************************* |
| 281 | mkdir build32 |
| 282 | set GLSLANG_BUILD_DIR=%GLSLANG_DIR%\build32 |
| 283 | cd %GLSLANG_BUILD_DIR% |
| 284 | |
| 285 | echo Generating 32-bit Glslang CMake files for Visual Studio %VS_VERSION% -DCMAKE_INSTALL_PREFIX=install .. |
| 286 | cmake -G "Visual Studio %VS_VERSION%" -DCMAKE_INSTALL_PREFIX=install .. |
| 287 | |
| 288 | echo Building 32-bit Glslang: MSBuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Debug |
| 289 | msbuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Debug /verbosity:quiet |
| 290 | |
| 291 | REM Check for existence of one lib, even though we should check for all results |
| 292 | if not exist %GLSLANG_BUILD_DIR%\glslang\Debug\glslang.lib ( |
| 293 | echo. |
| 294 | echo glslang 32-bit Debug build failed! |
| 295 | set errorCode=1 |
| 296 | ) |
| 297 | echo Building Glslang: MSBuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Release |
| 298 | msbuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Release /verbosity:quiet |
| 299 | |
| 300 | REM Check for existence of one lib, even though we should check for all results |
| 301 | if not exist %GLSLANG_BUILD_DIR%\glslang\Release\glslang.lib ( |
| 302 | echo. |
| 303 | echo glslang 32-bit Release build failed! |
| 304 | set errorCode=1 |
| 305 | ) |
| 306 | |
| 307 | cd .. |
| 308 | |
| 309 | echo Making 64-bit glslang |
| 310 | echo ************************* |
| 311 | mkdir build |
| 312 | set GLSLANG_BUILD_DIR=%GLSLANG_DIR%\build |
| 313 | cd %GLSLANG_BUILD_DIR% |
| 314 | |
| 315 | echo Generating 64-bit Glslang CMake files for Visual Studio %VS_VERSION% -DCMAKE_INSTALL_PREFIX=install .. |
| 316 | cmake -G "Visual Studio %VS_VERSION% Win64" -DCMAKE_INSTALL_PREFIX=install .. |
| 317 | |
| 318 | echo Building 64-bit Glslang: MSBuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug |
| 319 | msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet |
| 320 | |
| 321 | REM Check for existence of one lib, even though we should check for all results |
| 322 | if not exist %GLSLANG_BUILD_DIR%\glslang\Debug\glslang.lib ( |
| 323 | echo. |
| 324 | echo glslang 64-bit Debug build failed! |
| 325 | set errorCode=1 |
| 326 | ) |
| 327 | echo Building Glslang: MSBuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release |
| 328 | msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet |
| 329 | |
| 330 | REM Check for existence of one lib, even though we should check for all results |
| 331 | if not exist %GLSLANG_BUILD_DIR%\glslang\Release\glslang.lib ( |
| 332 | echo. |
| 333 | echo glslang 64-bit Release build failed! |
| 334 | set errorCode=1 |
| 335 | ) |
| 336 | goto:eof |
| 337 | |
| 338 | :build_spirv-tools |
| 339 | echo. |
| 340 | echo Building %SPIRV_TOOLS_DIR% |
| 341 | cd %SPIRV_TOOLS_DIR% |
| 342 | |
| 343 | REM Cleanup any old directories lying around. |
| 344 | if exist build32 ( |
| 345 | rmdir /s /q build32 |
| 346 | ) |
| 347 | if exist build ( |
| 348 | rmdir /s /q build |
| 349 | ) |
| 350 | |
| 351 | echo Making 32-bit spirv-tools |
| 352 | echo ************************* |
| 353 | mkdir build32 |
| 354 | set SPIRV_TOOLS_BUILD_DIR=%SPIRV_TOOLS_DIR%\build32 |
| 355 | |
| 356 | cd %SPIRV_TOOLS_BUILD_DIR% |
| 357 | |
| 358 | echo Generating 32-bit spirv-tools CMake files for Visual Studio %VS_VERSION% .. |
| 359 | cmake -G "Visual Studio %VS_VERSION%" .. |
| 360 | |
| 361 | echo Building 32-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Debug |
| 362 | msbuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Debug /verbosity:quiet |
| 363 | |
| 364 | REM Check for existence of one lib, even though we should check for all results |
| 365 | if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Debug\SPIRV-Tools.lib ( |
| 366 | echo. |
| 367 | echo spirv-tools 32-bit Debug build failed! |
| 368 | set errorCode=1 |
| 369 | ) |
| 370 | |
| 371 | echo Building 32-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Release |
| 372 | msbuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Release /verbosity:quiet |
| 373 | |
| 374 | REM Check for existence of one lib, even though we should check for all results |
| 375 | if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Release\SPIRV-Tools.lib ( |
| 376 | echo. |
| 377 | echo spirv-tools 32-bit Release build failed! |
| 378 | set errorCode=1 |
| 379 | ) |
| 380 | |
| 381 | cd .. |
| 382 | |
| 383 | echo Making 64-bit spirv-tools |
| 384 | echo ************************* |
| 385 | mkdir build |
| 386 | set SPIRV_TOOLS_BUILD_DIR=%SPIRV_TOOLS_DIR%\build |
| 387 | cd %SPIRV_TOOLS_BUILD_DIR% |
| 388 | |
| 389 | echo Generating 64-bit spirv-tools CMake files for Visual Studio %VS_VERSION% .. |
| 390 | cmake -G "Visual Studio %VS_VERSION% Win64" .. |
| 391 | |
| 392 | echo Building 64-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug |
| 393 | msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet |
| 394 | |
| 395 | REM Check for existence of one lib, even though we should check for all results |
| 396 | if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Debug\SPIRV-Tools.lib ( |
| 397 | echo. |
| 398 | echo spirv-tools 64-bit Debug build failed! |
| 399 | set errorCode=1 |
| 400 | ) |
| 401 | |
| 402 | echo Building 64-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release |
| 403 | msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet |
| 404 | |
| 405 | REM Check for existence of one lib, even though we should check for all results |
| 406 | if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Release\SPIRV-Tools.lib ( |
| 407 | echo. |
| 408 | echo spirv-tools 64-bit Release build failed! |
| 409 | set errorCode=1 |
| 410 | ) |
| 411 | goto:eof |