@echo off | |
REM Update source for glslang, LunarGLASS, spirv-tools | |
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 | |
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-LunarGLASS just pull LunarGLASS_revision | |
echo --sync-spirv-tools just pull spirv-tools_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 --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-LunarGLASS=0 | |
set sync-spirv-tools=0 | |
set build-glslang=0 | |
set build-LunarGLASS=0 | |
set build-spirv-tools=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" == "--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-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" == "--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-LunarGLASS=1 | |
set sync-spirv-tools=1 | |
set build-glslang=1 | |
set build-LunarGLASS=1 | |
set build-spirv-tools=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 | |
) | |
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 LUNARGLASS_REVISION= < LunarGLASS_revision | |
set /p GLSLANG_REVISION= < glslang_revision | |
set /p SPIRV_TOOLS_REVISION= < spirv-tools_revision | |
echo LUNARGLASS_REVISION=%LUNARGLASS_REVISION% | |
echo GLSLANG_REVISION=%GLSLANG_REVISION% | |
echo SPIRV_TOOLS_REVISION=%SPIRV_TOOLS_REVISION% | |
set /p LUNARGLASS_REVISION_R32= < LunarGLASS_revision_R32 | |
echo LUNARGLASS_REVISION_R32=%LUNARGLASS_REVISION_R32% | |
echo Creating and/or updating glslang, LunarGLASS, spirv-tools 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 %sync-spirv-tools% equ 1 ( | |
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-LunarGLASS% equ 1 ( | |
call:build_LunarGLASS | |
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 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 | |
:create_spirv-tools | |
echo. | |
echo Creating local spirv-tools repository %SPIRV_TOOLS_DIR%) | |
mkdir %SPIRV_TOOLS_DIR% | |
cd %SPIRV_TOOLS_DIR% | |
git clone git@gitlab.khronos.org:spirv/spirv-tools.git . | |
git checkout %SPIRV_TOOLS_REVISION% | |
if not exist %SPIRV_TOOLS_DIR%\source ( | |
echo spirv-tools source 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% | |
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 | |
:build_spirv-tools | |
echo. | |
echo Building %SPIRV_TOOLS_DIR% | |
cd %SPIRV_TOOLS_DIR% | |
mkdir build | |
set SPIRV_TOOLS_BUILD_DIR=%SPIRV_TOOLS_DIR%\build | |
cd %SPIRV_TOOLS_BUILD_DIR% | |
cmake -G "Visual Studio 12 2013 Win64" .. | |
msbuild ALL_BUILD.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 %SPIRV_TOOLS_BUILD_DIR%\Debug\SPIRV-Tools.lib ( | |
echo. | |
echo spirv-tools Debug build failed! | |
set errorCode=1 | |
) | |
msbuild ALL_BUILD.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 %SPIRV_TOOLS_BUILD_DIR%\Release\SPIRV-Tools.lib ( | |
echo. | |
echo spirv-tools Release build failed! | |
set errorCode=1 | |
) | |
goto:eof |