@echo off REM Update source for glslang (and eventually LunarGLASS) setlocal EnableDelayedExpansion set errorCode=0 set BUILD_DIR=%~dp0 set BASE_DIR=%BUILD_DIR%.. set GLSLANG_DIR=%BASE_DIR%\glslang set LUNARGLASS_DIR=%BASE_DIR%\LunarGLASS 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-LunarGLASS just pull LunarGLASS_revision echo --build-glslang pulls glslang_revision, configures CMake, builds Release and Debug echo --build-LunarGLASS pulls LunarGLASS_revision, configures CMake, builds Release and Debug echo --all sync and build both glslang and LunarGLASS goto:finish ) set sync-glslang=0 set sync-LunarGLASS=0 set build-glslang=0 set build-LunarGLASS=0 set check-glslang-build-dependencies=0 set check-LunarGLASS-fetch-dependencies=0 set check-LunarGLASS-build-dependencies=0 :parameterLoop if "%1"=="" goto:parameterContinue if "%1" == "--sync-glslang" ( set sync-glslang=1 shift goto:parameterLoop ) if "%1" == "--sync-LunarGLASS" ( set sync-LunarGLASS=1 set check-LunarGLASS-fetch-dependencies=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-LunarGLASS" ( set sync-LunarGLASS=1 set check-LunarGLASS-fetch-dependencies=1 set check-LunarGLASS-build-dependencies=1 set build-LunarGLASS=1 shift goto:parameterLoop ) if "%1" == "--all" ( set sync-glslang=1 set sync-LunarGLASS=1 set build-glslang=1 set build-LunarGLASS=1 set check-LunarGLASS-fetch-dependencies=1 set check-glslang-build-dependencies=1 set check-LunarGLASS-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-LunarGLASS-fetch-dependencies% equ 1 ( for %%X in (svn.exe) do (set FOUND=%%~$PATH:X) if not defined FOUND ( echo Dependency check failed: echo svn.exe not found echo Get Subversion for Windows here: http://sourceforge.net/projects/win32svn/ echo Install and ensure svn.exe makes it into your PATH, default is "C:\Program Files (x86)\Subversion\bin" set errorCode=1 ) for %%X in (wget.exe) do (set FOUND=%%~$PATH:X) if not defined FOUND ( echo Dependency check failed: echo wget.exe not found echo Get wget for Windows here: http://gnuwin32.sourceforge.net/packages/wget.htm echo Easiest to select "Complete package, except sources" link which will install and setup PATH echo Install and ensure each makes it into your PATH, default is "C:\Program Files (x86)\GnuWin32\bin" set errorCode=1 ) for %%X in (gzip.exe) do (set FOUND=%%~$PATH:X) if not defined FOUND ( echo Dependency check failed: echo gzip.exe not found echo Get gzip for Windows here: http://gnuwin32.sourceforge.net/packages/gzip.htm echo Easiest to select "Complete package, except sources" link which will install and setup PATH echo Install and ensure each makes it into your PATH, default is "C:\Program Files (x86)\GnuWin32\bin" set errorCode=1 ) for %%X in (tar.exe) do (set FOUND=%%~$PATH:X) if not defined FOUND ( echo Dependency check failed: echo tar.exe not found echo Get tar for Windows here: http://gnuwin32.sourceforge.net/packages/gtar.htm echo Easiest to select Binaries/Setup link which will install and setup PATH echo Install and ensure each makes it into your PATH, default is "C:\Program Files (x86)\GnuWin32\bin" 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 ) ) if %check-LunarGLASS-build-dependencies% equ 1 ( for %%X in (python.exe) do (set FOUND=%%~$PATH:X) if not defined FOUND ( echo Dependency check failed: echo python.exe not found echo Get python 2.7x for Windows here: http://www.python.org/download/releases/2.7.6/ echo Install and ensure each makes it into your PATH, default is "C:\Python27" set errorCode=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 LunarGLASS_revision ( echo. echo Missing LunarGLASS_revision file! Place it next to this script with target version in it. set errorCode=1 goto:error ) 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 ) set /p LUNARGLASS_REVISION= < LunarGLASS_revision set /p GLSLANG_REVISION= < glslang_revision echo LUNARGLASS_REVISION=%LUNARGLASS_REVISION% echo GLSLANG_REVISION=%GLSLANG_REVISION% set /p LUNARGLASS_REVISION_R32= < LunarGLASS_revision_R32 echo LUNARGLASS_REVISION_R32=%LUNARGLASS_REVISION_R32% echo Creating and/or updating glslang and LunarGLASS in %BASE_DIR% if %sync-glslang% equ 1 ( 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-LunarGLASS% equ 1 ( rd /S /Q %LUNARGLASS_DIR% if not exist %LUNARGLASS_DIR% ( call:create_LunarGLASS ) if %errorCode% neq 0 (goto:error) call:update_LunarGLASS if %errorCode% neq 0 (goto:error) ) if %build-glslang% equ 1 ( call:build_glslang if %errorCode% neq 0 (goto:error) ) if %build-LunarGLASS% equ 1 ( call:build_LunarGLASS if %errorCode% neq 0 (goto:error) ) REM If we made it here, we are golden echo. echo Success 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 git@gitlab.khronos.org:GLSL/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_LunarGLASS REM Windows complains if it can't find the directory below, no need to call REM rd /S /Q %LUNARGLASS_DIR% echo. echo Creating local LunarGLASS repository %LUNARGLASS_DIR%) mkdir %LUNARGLASS_DIR% cd %LUNARGLASS_DIR% git clone https://github.com/LunarG/LunarGLASS.git . git checkout %LUNARGLASS_REVISION% cd Core\LLVM echo. echo Downloading LLVM archive... wget http://llvm.org/releases/3.4/llvm-3.4.src.tar.gz REM tar on windows can't filter through gzip, so the below line doesn't work REM tar --gzip -xf llvm-3.4.src.tar.gz echo. echo Unzipping the archive... echo gzip --decompress --verbose --keep llvm-3.4.src.tar.gz gzip --decompress --verbose --keep llvm-3.4.src.tar.gz echo. echo Extracting the archive... (this is slow) echo tar -xf llvm-3.4.src.tar tar -xf llvm-3.4.src.tar if not exist %LUNARGLASS_DIR%\Core\LLVM\llvm-3.4\lib ( echo . echo LLVM source download failed! echo Delete LunarGLASS directory and try again set errorCode=1 goto:eof ) echo. echo Syncing LunarGLASS source... cd %LUNARGLASS_DIR% REM put back the LunarGLASS github versions of some LLVM files git checkout -f . REM overwrite with private gitlab versions of some files svn checkout -r %LUNARGLASS_REVISION_R32% --force https://cvs.khronos.org/svn/repos/SPIRV/trunk/LunarGLASS/ . svn revert -R . if not exist %LUNARGLASS_DIR%\Frontends\SPIRV ( echo. echo LunarGLASS source download failed! set errorCode=1 ) goto:eof :update_LunarGLASS echo. echo Updating %LUNARGLASS_DIR% cd %LUNARGLASS_DIR% git fetch --all git checkout -f %LUNARGLASS_REVISION% . if not exist %LUNARGLASS_DIR%\.svn ( svn checkout -r %LUNARGLASS_REVISION_R32% --force https://cvs.khronos.org/svn/repos/SPIRV/trunk/LunarGLASS/ . ) svn update -r %LUNARGLASS_REVISION_R325 svn revert -R . goto:eof :build_glslang echo. echo Building %GLSLANG_DIR% cd %GLSLANG_DIR% mkdir build set GLSLANG_BUILD_DIR=%GLSLANG_DIR%\build cd %GLSLANG_BUILD_DIR% cmake -G"Visual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=install .. msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug REM Check for existence of one lib, even though we should check for all results if not exist %GLSLANG_BUILD_DIR%\glslang\Debug\glslang.lib ( echo. echo glslang Debug build failed! set errorCode=1 ) msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release 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 Release build failed! set errorCode=1 ) goto:eof :build_LunarGLASS echo. echo Building %LUNARGLASS_DIR% set LLVM_DIR=%LUNARGLASS_DIR%\Core\LLVM\llvm-3.4 cd %LLVM_DIR% mkdir build set LLVM_BUILD_DIR=%LLVM_DIR%\build cd %LLVM_BUILD_DIR% cmake -G"Visual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=install .. msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release REM Check for existence of one lib, even though we should check for all results if not exist %LLVM_BUILD_DIR%\lib\Release\LLVMCore.lib ( echo. echo LLVM Release build failed! set errorCode=1 goto:eof ) REM disable Debug build of LLVM until LunarGLASS cmake files are updated to REM handle Debug and Release builds of glslang simultaneously, instead of REM whatever last lands in "./build/install" REM msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug REM Check for existence of one lib, even though we should check for all results REM if not exist %LLVM_BUILD_DIR%\lib\Debug\LLVMCore.lib ( REM echo. REM echo LLVM Debug build failed! REM set errorCode=1 REM goto:eof REM ) cd %LUNARGLASS_DIR% mkdir build set LUNARGLASS_BUILD_DIR=%LUNARGLASS_DIR%\build cd %LUNARGLASS_BUILD_DIR% cmake -G"Visual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=install .. msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release REM Check for existence of one lib, even though we should check for all results if not exist %LUNARGLASS_BUILD_DIR%\Core\Release\core.lib ( echo. echo LunarGLASS build failed! set errorCode=1 goto:eof ) REM disable Debug build of LunarGLASS until its cmake file can be updated to REM handle Debug and Release builds of glslang simultaneously, instead of REM whatever last lands in "./build/install" REM msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug REM Check for existence of one lib, even though we should check for all results REM if not exist %LUNARGLASS_BUILD_DIR%\Core\Debug\core.lib ( REM echo. REM echo LunarGLASS build failed! REM set errorCode=1 REM goto:eof REM ) goto:eof