• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1@echo off
2REM Update source for glslang, spirv-tools
3
4REM Determine the appropriate CMake strings for the current version of Visual Studio
5echo Determining VS version
6python .\determine_vs_version.py > vsversion.tmp
7set /p VS_VERSION=< vsversion.tmp
8echo Detected Visual Studio Version as %VS_VERSION%
9
10REM Cleanup the file we used to collect the VS version output since it's no longer needed.
11del /Q /F vsversion.tmp
12
13setlocal EnableDelayedExpansion
14set errorCode=0
15set BUILD_DIR=%~dp0
16set BASE_DIR="%BUILD_DIR%external"
17set GLSLANG_DIR=%BASE_DIR%\glslang
18set SPIRV_TOOLS_DIR=%BASE_DIR%\spirv-tools
19
20REM // ======== 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
88REM // ======== end Parameter parsing ======== //
89
90
91REM // ======== 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
116REM // ======== end Dependency checking ======== //
117
118:main
119
120if %errorCode% neq 0 (goto:error)
121
122REM Read the target versions from external file, which is shared with Linux script
123
124if 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
131if 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
138set /p GLSLANG_REVISION= < glslang_revision
139set /p SPIRV_TOOLS_REVISION= < spirv-tools_revision
140set /p SPIRV_HEADERS_REVISION= < spirv-headers_revision
141echo GLSLANG_REVISION=%GLSLANG_REVISION%
142echo SPIRV_TOOLS_REVISION=%SPIRV_TOOLS_REVISION%
143echo SPIRV_HEADERS_REVISION=%SPIRV_HEADERS_REVISION%
144
145
146echo Creating and/or updating glslang, spirv-tools in %BASE_DIR%
147
148if %sync-glslang% equ 1 (
149   if exist %GLSLANG_DIR% (
150      rd /S /Q %GLSLANG_DIR%
151   )
152   if not exist %GLSLANG_DIR% (
153      call:create_glslang
154   )
155   if %errorCode% neq 0 (goto:error)
156   call:update_glslang
157   if %errorCode% neq 0 (goto:error)
158)
159
160if %sync-spirv-tools% equ 1 (
161   if exist %SPIRV_TOOLS_DIR% (
162      rd /S /Q %SPIRV_TOOLS_DIR%
163   )
164   if %errorlevel% neq 0 (goto:error)
165   if not exist %SPIRV_TOOLS_DIR% (
166      call:create_spirv-tools
167   )
168   if %errorCode% neq 0 (goto:error)
169   call:update_spirv-tools
170   if %errorCode% neq 0 (goto:error)
171)
172
173if %build-glslang% equ 1 (
174   call:build_glslang
175   if %errorCode% neq 0 (goto:error)
176)
177
178if %build-spirv-tools% equ 1 (
179   call:build_spirv-tools
180   if %errorCode% neq 0 (goto:error)
181)
182
183echo.
184echo Exiting
185goto:finish
186
187:error
188echo.
189echo Halting due to error
190goto:finish
191
192:finish
193if not "%cd%\" == "%BUILD_DIR%" ( cd %BUILD_DIR% )
194endlocal
195goto:eof
196
197
198
199REM // ======== Functions ======== //
200
201:create_glslang
202   echo.
203   echo Creating local glslang repository %GLSLANG_DIR%)
204   mkdir %GLSLANG_DIR%
205   cd %GLSLANG_DIR%
206   git clone https://github.com/KhronosGroup/glslang.git .
207   git checkout %GLSLANG_REVISION%
208   if not exist %GLSLANG_DIR%\SPIRV (
209      echo glslang source download failed!
210      set errorCode=1
211   )
212goto:eof
213
214:update_glslang
215   echo.
216   echo Updating %GLSLANG_DIR%
217   cd %GLSLANG_DIR%
218   git fetch --all
219   git checkout %GLSLANG_REVISION%
220goto:eof
221
222:create_spirv-tools
223   echo.
224   echo Creating local spirv-tools repository %SPIRV_TOOLS_DIR%)
225   mkdir %SPIRV_TOOLS_DIR%
226   cd %SPIRV_TOOLS_DIR%
227   git clone https://github.com/KhronosGroup/SPIRV-Tools.git .
228   git checkout %SPIRV_TOOLS_REVISION%
229   if not exist %SPIRV_TOOLS_DIR%\source (
230      echo spirv-tools source download failed!
231      set errorCode=1
232   )
233   mkdir %SPIRV_TOOLS_DIR%\external
234   mkdir %SPIRV_TOOLS_DIR%\external\spirv-headers
235   cd %SPIRV_TOOLS_DIR%\external\spirv-headers
236   git clone https://github.com/KhronosGroup/SPIRV-HEADERS.git .
237   git checkout %SPIRV_HEADERS_REVISION%
238   if not exist %SPIRV_TOOLS_DIR%\external\spirv-headers\README.md (
239      echo spirv-headers download failed!
240      set errorCode=1
241   )
242goto:eof
243
244:update_spirv-tools
245   echo.
246   echo Updating %SPIRV_TOOLS_DIR%
247   cd %SPIRV_TOOLS_DIR%
248   git fetch --all
249   git checkout %SPIRV_TOOLS_REVISION%
250   cd %SPIRV_TOOLS_DIR%\external\spirv-headers
251   git fetch --all
252   git checkout %SPIRV_HEADERS_REVISION%
253goto:eof
254
255:build_glslang
256   echo.
257   echo Building %GLSLANG_DIR%
258   cd  %GLSLANG_DIR%
259
260   REM Cleanup any old directories lying around.
261   if exist build32 (
262      rmdir /s /q build32
263   )
264   if exist build (
265      rmdir /s /q build
266   )
267
268   echo Making 32-bit glslang
269   echo *************************
270   mkdir build32
271   set GLSLANG_BUILD_DIR=%GLSLANG_DIR%\build32
272   cd %GLSLANG_BUILD_DIR%
273
274   echo Generating 32-bit Glslang CMake files for Visual Studio %VS_VERSION% -DCMAKE_INSTALL_PREFIX=install ..
275   cmake -G "Visual Studio %VS_VERSION%" -DCMAKE_INSTALL_PREFIX=install ..
276
277   echo Building 32-bit Glslang: MSBuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Debug
278   msbuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Debug /verbosity:quiet
279
280   REM Check for existence of one lib, even though we should check for all results
281   if not exist %GLSLANG_BUILD_DIR%\glslang\Debug\glslangd.lib (
282      echo.
283      echo glslang 32-bit Debug build failed!
284      set errorCode=1
285   )
286   echo Building Glslang: MSBuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Release
287   msbuild INSTALL.vcxproj /p:Platform=x86 /p:Configuration=Release /verbosity:quiet
288
289   REM Check for existence of one lib, even though we should check for all results
290   if not exist %GLSLANG_BUILD_DIR%\glslang\Release\glslang.lib (
291      echo.
292      echo glslang 32-bit Release build failed!
293      set errorCode=1
294   )
295
296   cd ..
297
298   echo Making 64-bit glslang
299   echo *************************
300   mkdir build
301   set GLSLANG_BUILD_DIR=%GLSLANG_DIR%\build
302   cd %GLSLANG_BUILD_DIR%
303
304   echo Generating 64-bit Glslang CMake files for Visual Studio %VS_VERSION% -DCMAKE_INSTALL_PREFIX=install ..
305   cmake -G "Visual Studio %VS_VERSION% Win64" -DCMAKE_INSTALL_PREFIX=install ..
306
307   echo Building 64-bit Glslang: MSBuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug
308   msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet
309
310   REM Check for existence of one lib, even though we should check for all results
311   if not exist %GLSLANG_BUILD_DIR%\glslang\Debug\glslangd.lib (
312      echo.
313      echo glslang 64-bit Debug build failed!
314      set errorCode=1
315   )
316   echo Building Glslang: MSBuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release
317   msbuild INSTALL.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet
318
319   REM Check for existence of one lib, even though we should check for all results
320   if not exist %GLSLANG_BUILD_DIR%\glslang\Release\glslang.lib (
321      echo.
322      echo glslang 64-bit Release build failed!
323      set errorCode=1
324   )
325goto:eof
326
327:build_spirv-tools
328   echo.
329   echo Building %SPIRV_TOOLS_DIR%
330   cd  %SPIRV_TOOLS_DIR%
331
332   REM Cleanup any old directories lying around.
333   if exist build32 (
334      rmdir /s /q build32
335   )
336   if exist build (
337      rmdir /s /q build
338   )
339
340   echo Making 32-bit spirv-tools
341   echo *************************
342   mkdir build32
343   set SPIRV_TOOLS_BUILD_DIR=%SPIRV_TOOLS_DIR%\build32
344
345   cd %SPIRV_TOOLS_BUILD_DIR%
346
347   echo Generating 32-bit spirv-tools CMake files for Visual Studio %VS_VERSION% ..
348   cmake -G "Visual Studio %VS_VERSION%" ..
349
350   echo Building 32-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Debug
351   msbuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Debug /verbosity:quiet
352
353   REM Check for existence of one lib, even though we should check for all results
354   if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Debug\SPIRV-Tools.lib (
355      echo.
356      echo spirv-tools 32-bit Debug build failed!
357      set errorCode=1
358   )
359
360   echo Building 32-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Release
361   msbuild ALL_BUILD.vcxproj /p:Platform=x86 /p:Configuration=Release /verbosity:quiet
362
363   REM Check for existence of one lib, even though we should check for all results
364   if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Release\SPIRV-Tools.lib (
365      echo.
366      echo spirv-tools 32-bit Release build failed!
367      set errorCode=1
368   )
369
370   cd ..
371
372   echo Making 64-bit spirv-tools
373   echo *************************
374   mkdir build
375   set SPIRV_TOOLS_BUILD_DIR=%SPIRV_TOOLS_DIR%\build
376   cd %SPIRV_TOOLS_BUILD_DIR%
377
378   echo Generating 64-bit spirv-tools CMake files for Visual Studio %VS_VERSION% ..
379   cmake -G "Visual Studio %VS_VERSION% Win64" ..
380
381   echo Building 64-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug
382   msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Debug /verbosity:quiet
383
384   REM Check for existence of one lib, even though we should check for all results
385   if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Debug\SPIRV-Tools.lib (
386      echo.
387      echo spirv-tools 64-bit Debug build failed!
388      set errorCode=1
389   )
390
391   echo Building 64-bit spirv-tools: MSBuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release
392   msbuild ALL_BUILD.vcxproj /p:Platform=x64 /p:Configuration=Release /verbosity:quiet
393
394   REM Check for existence of one lib, even though we should check for all results
395   if not exist %SPIRV_TOOLS_BUILD_DIR%\source\Release\SPIRV-Tools.lib (
396      echo.
397      echo spirv-tools 64-bit Release build failed!
398      set errorCode=1
399   )
400goto:eof
401