| @echo off |
| REM Update source for glslang, spirv-tools |
| |
| REM Determine the appropriate CMake strings for the current version of Visual Studio |
| echo Determining VS version |
| python .\determine_vs_version.py > vsversion.tmp |
| set /p VS_VERSION=< vsversion.tmp |
| echo Detected Visual Studio Version as %VS_VERSION% |
| |
| REM Cleanup the file we used to collect the VS version output since it's no longer needed. |
| del /Q /F vsversion.tmp |
| |
| setlocal EnableDelayedExpansion |
| set errorCode=0 |
| set BUILD_DIR=%~dp0 |
| set BASE_DIR=%BUILD_DIR%external |
| set GLSLANG_DIR=%BASE_DIR%\glslang |
| set SPIRV_TOOLS_DIR=%BASE_DIR%\spirv-tools |
| |
| REM // ======== Parameter parsing ======== // |
| |
| if "%1" == "" ( |
| echo usage: update_external_sources.bat [options] |
| echo. |
| echo Available options: |
| echo --sync-glslang just pull glslang_revision |
| echo --sync-spirv-tools just pull spirv-tools_revision |
| echo --build-glslang pulls glslang_revision, configures CMake, builds Release and Debug |
| echo --build-spirv-tools pulls spirv-tools_revision, configures CMake, builds Release and Debug |
| echo --all sync and build glslang, LunarGLASS, spirv-tools |
| goto:finish |
| ) |
| |
| set sync-glslang=0 |
| set sync-spirv-tools=0 |
| set build-glslang=0 |
| set build-spirv-tools=0 |
| set check-glslang-build-dependencies=0 |
| |
| :parameterLoop |
| |
| if "%1"=="" goto:parameterContinue |
| |
| if "%1" == "--sync-glslang" ( |
| set sync-glslang=1 |
| shift |
| goto:parameterLoop |
| ) |
| |
| if "%1" == "--sync-spirv-tools" ( |
| set sync-spirv-tools=1 |
| shift |
| goto:parameterLoop |
| ) |
| |
| if "%1" == "--build-glslang" ( |
| set sync-glslang=1 |
| set check-glslang-build-dependencies=1 |
| set build-glslang=1 |
| shift |
| goto:parameterLoop |
| ) |
| |
| if "%1" == "--build-spirv-tools" ( |
| set sync-spirv-tools=1 |
| REM glslang has the same needs as spirv-tools |
| set check-glslang-build-dependencies=1 |
| set build-spirv-tools=1 |
| shift |
| goto:parameterLoop |
| ) |
| |
| if "%1" == "--all" ( |
| set sync-glslang=1 |
| set sync-spirv-tools=1 |
| set build-glslang=1 |
| set build-spirv-tools=1 |
| set check-glslang-build-dependencies=1 |
| shift |
| goto:parameterLoop |
| ) |
| |
| echo Unrecognized options "%1" |
| goto:error |
| |
| :parameterContinue |
| |
| REM // ======== end Parameter parsing ======== // |
| |
| |
| REM // ======== Dependency checking ======== // |
| REM git is required for all paths |
| for %%X in (git.exe) do (set FOUND=%%~$PATH:X) |
| if not defined FOUND ( |
| echo Dependency check failed: |
| echo git.exe not found |
| echo Git for Windows can be downloaded here: https://git-scm.com/download/win |
| echo Install and ensure git.exe makes it into your PATH |
| set errorCode=1 |
| ) |
| |
| if %check-glslang-build-dependencies% equ 1 ( |
| for %%X in (cmake.exe) do (set FOUND=%%~$PATH:X) |
| if not defined FOUND ( |
| echo Dependency check failed: |
| echo cmake.exe not found |
| echo Get CNake 2.8 for Windows here: http://www.cmake.org/cmake/resources/software.html |
| echo Install and ensure each makes it into your PATH, default is "C:\Program Files (x86)\CMake\bin" |
| set errorCode=1 |
| ) |
| ) |
| |
| |
| REM goto:main |
| |
| REM // ======== end Dependency checking ======== // |
| |
| :main |
| |
| if %errorCode% neq 0 (goto:error) |
| |
| REM Read the target versions from external file, which is shared with Linux script |
| |
| if not exist glslang_revision ( |
| echo. |
| echo Missing glslang_revision file! Place it next to this script with target version in it. |
| set errorCode=1 |
| goto:error |
| ) |
| |
| if not exist spirv-tools_revision ( |
| echo. |
| echo Missing spirv-tools_revision file! Place it next to this script with target version in it. |
| set errorCode=1 |
| goto:error |
| ) |
| |
| set /p GLSLANG_REVISION= < glslang_revision |
| set /p SPIRV_TOOLS_REVISION= < spirv-tools_revision |
| set /p SPIRV_HEADERS_REVISION= < spirv-headers_revision |
| echo GLSLANG_REVISION=%GLSLANG_REVISION% |
| echo SPIRV_TOOLS_REVISION=%SPIRV_TOOLS_REVISION% |
| echo SPIRV_HEADERS_REVISION=%SPIRV_HEADERS_REVISION% |
| |
| |
| echo Creating and/or updating glslang, spirv-tools in %BASE_DIR% |
| |
| if %sync-glslang% equ 1 ( |
| if exist %GLSLANG_DIR% ( |
| rd /S /Q %GLSLANG_DIR% |
| ) |
| if not exist %GLSLANG_DIR% ( |
| call:create_glslang |
| ) |
| if %errorCode% neq 0 (goto:error) |
| call:update_glslang |
| if %errorCode% neq 0 (goto:error) |
| ) |
| |
| if %sync-spirv-tools% equ 1 ( |
| if exist %SPIRV_TOOLS_DIR% ( |
| rd /S /Q %SPIRV_TOOLS_DIR% |
| ) |
| if %errorlevel% neq 0 (goto:error) |
| if not exist %SPIRV_TOOLS_DIR% ( |
| call:create_spirv-tools |
| ) |
| if %errorCode% neq 0 (goto:error) |
| call:update_spirv-tools |
| if %errorCode% neq 0 (goto:error) |
| ) |
| |
| if %build-glslang% equ 1 ( |
| call:build_glslang |
| if %errorCode% neq 0 (goto:error) |
| ) |
| |
| if %build-spirv-tools% equ 1 ( |
| call:build_spirv-tools |
| if %errorCode% neq 0 (goto:error) |
| ) |
| |
| echo. |
| echo Exiting |
| goto:finish |
| |
| :error |
| echo. |
| echo Halting due to error |
| goto:finish |
| |
| :finish |
| if not "%cd%\" == "%BUILD_DIR%" ( cd %BUILD_DIR% ) |
| endlocal |
| goto:eof |
| |
| |
| |
| REM // ======== Functions ======== // |
| |
| :create_glslang |
| echo. |
| echo Creating local glslang repository %GLSLANG_DIR%) |
| mkdir %GLSLANG_DIR% |
| cd %GLSLANG_DIR% |
| git clone https://github.com/KhronosGroup/glslang.git . |
| git checkout %GLSLANG_REVISION% |
| if not exist %GLSLANG_DIR%\SPIRV ( |
| echo glslang source download failed! |
| set errorCode=1 |
| ) |
| goto:eof |
| |
| :update_glslang |
| echo. |
| echo Updating %GLSLANG_DIR% |
| cd %GLSLANG_DIR% |
| git fetch --all |
| git checkout %GLSLANG_REVISION% |
| goto:eof |
| |
| :create_spirv-tools |
| echo. |
| echo Creating local spirv-tools repository %SPIRV_TOOLS_DIR%) |
| mkdir %SPIRV_TOOLS_DIR% |
| cd %SPIRV_TOOLS_DIR% |
| git clone https://github.com/KhronosGroup/SPIRV-Tools.git . |
| git checkout %SPIRV_TOOLS_REVISION% |
| if not exist %SPIRV_TOOLS_DIR%\source ( |
| echo spirv-tools source download failed! |
| set errorCode=1 |
| ) |
| mkdir %SPIRV_TOOLS_DIR%\external |
| mkdir %SPIRV_TOOLS_DIR%\external\spirv-headers |
| cd %SPIRV_TOOLS_DIR%\external\spirv-headers |
| git clone https://github.com/KhronosGroup/SPIRV-HEADERS.git . |
| git checkout %SPIRV_HEADERS_REVISION% |
| if not exist %SPIRV_TOOLS_DIR%\external\spirv-headers\README.md ( |
| echo spirv-headers download failed! |
| set errorCode=1 |
| ) |
| goto:eof |
| |
| :update_spirv-tools |
| echo. |
| echo Updating %SPIRV_TOOLS_DIR% |
| cd %SPIRV_TOOLS_DIR% |
| git fetch --all |
| git checkout %SPIRV_TOOLS_REVISION% |
| cd %SPIRV_TOOLS_DIR%\external\spirv-headers |
| git fetch --all |
| git checkout %SPIRV_HEADERS_REVISION% |
| goto:eof |
| |
| :build_glslang |
| echo. |
| echo Building %GLSLANG_DIR% |
| cd %GLSLANG_DIR% |
| |
| REM Cleanup any old directories lying around. |
| if exist build32 ( |
| rmdir /s /q build32 |
| ) |
| if exist build ( |
| rmdir /s /q build |
| ) |
| |
| echo Making 32-bit glslang |
| echo ************************* |
| mkdir build32 |
| set GLSLANG_BUILD_DIR=%GLSLANG_DIR%\build32 |
| cd %GLSLANG_BUILD_DIR% |
| |
| echo Generating 32-bit Glslang CMake files for Visual Studio %VS_VERSION% -DCMAKE_INSTALL_PREFIX=install .. |
| cmake -G "Visual Studio %VS_VERSION%" -DCMAKE_INSTALL_PREFIX=install .. |
| |
| echo Building 32-bit Glslang: MSBuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Debug |
| msbuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Debug /verbosity:quiet |
| |
| REM Check for existence of one lib, even though we should check for all results |
| if not exist %GLSLANG_BUILD_DIR%\glslang\Debug\glslangd.lib ( |
| echo. |
| echo glslang 32-bit Debug build failed! |
| set errorCode=1 |
| ) |
| echo Building Glslang: MSBuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Release |
| msbuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Release /verbosity:quiet |
| |
| REM Check for existence of one lib, even though we should check for all results |
| if not exist %GLSLANG_BUILD_DIR%\glslang\Release\glslang.lib ( |
| echo. |
| echo glslang 32-bit Release build failed! |
| set errorCode=1 |
| ) |
| |
| cd .. |
| |
| echo Making 64-bit glslang |
| echo ************************* |
| mkdir build |
| set GLSLANG_BUILD_DIR=%GLSLANG_DIR%\build |
| cd %GLSLANG_BUILD_DIR% |
| |
| echo Generating 64-bit Glslang CMake files for Visual Studio %VS_VERSION% -DCMAKE_INSTALL_PREFIX=install .. |
| cmake -G "Visual Studio %VS_VERSION% Win64" -DCMAKE_INSTALL_PREFIX=install .. |
| |
| echo Building 64-bit Glslang: MSBuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug |
| msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet |
| |
| REM Check for existence of one lib, even though we should check for all results |
| if not exist %GLSLANG_BUILD_DIR%\glslang\Debug\glslangd.lib ( |
| echo. |
| echo glslang 64-bit Debug build failed! |
| set errorCode=1 |
| ) |
| echo Building Glslang: MSBuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release |
| msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet |
| |
| REM Check for existence of one lib, even though we should check for all results |
| if not exist %GLSLANG_BUILD_DIR%\glslang\Release\glslang.lib ( |
| echo. |
| echo glslang 64-bit Release build failed! |
| set errorCode=1 |
| ) |
| goto:eof |
| |
| :build_spirv-tools |
| echo. |
| echo Building %SPIRV_TOOLS_DIR% |
| cd %SPIRV_TOOLS_DIR% |
| |
| REM Cleanup any old directories lying around. |
| if exist build32 ( |
| rmdir /s /q build32 |
| ) |
| if exist build ( |
| rmdir /s /q build |
| ) |
| |
| echo Making 32-bit spirv-tools |
| echo ************************* |
| mkdir build32 |
| set SPIRV_TOOLS_BUILD_DIR=%SPIRV_TOOLS_DIR%\build32 |
| |
| cd %SPIRV_TOOLS_BUILD_DIR% |
| |
| echo Generating 32-bit spirv-tools CMake files for Visual Studio %VS_VERSION% .. |
| cmake -G "Visual Studio %VS_VERSION%" .. |
| |
| echo Building 32-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Debug |
| msbuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Debug /verbosity:quiet |
| |
| REM Check for existence of one lib, even though we should check for all results |
| if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Debug\SPIRV-Tools.lib ( |
| echo. |
| echo spirv-tools 32-bit Debug build failed! |
| set errorCode=1 |
| ) |
| |
| echo Building 32-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Release |
| msbuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Release /verbosity:quiet |
| |
| REM Check for existence of one lib, even though we should check for all results |
| if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Release\SPIRV-Tools.lib ( |
| echo. |
| echo spirv-tools 32-bit Release build failed! |
| set errorCode=1 |
| ) |
| |
| cd .. |
| |
| echo Making 64-bit spirv-tools |
| echo ************************* |
| mkdir build |
| set SPIRV_TOOLS_BUILD_DIR=%SPIRV_TOOLS_DIR%\build |
| cd %SPIRV_TOOLS_BUILD_DIR% |
| |
| echo Generating 64-bit spirv-tools CMake files for Visual Studio %VS_VERSION% .. |
| cmake -G "Visual Studio %VS_VERSION% Win64" .. |
| |
| echo Building 64-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug |
| msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet |
| |
| REM Check for existence of one lib, even though we should check for all results |
| if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Debug\SPIRV-Tools.lib ( |
| echo. |
| echo spirv-tools 64-bit Debug build failed! |
| set errorCode=1 |
| ) |
| |
| echo Building 64-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release |
| msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet |
| |
| REM Check for existence of one lib, even though we should check for all results |
| if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Release\SPIRV-Tools.lib ( |
| echo. |
| echo spirv-tools 64-bit Release build failed! |
| set errorCode=1 |
| ) |
| goto:eof |