4 rem - first argument specifies version of Visual Studio (vc8, vc9, or vc10),
5 rem - second argument specifies architecture (win32 or win64),
6 rem - third argument specifies build mode (Debug or Release)
7 rem Default options are:
10 set "SCRIPTROOT=%~dp0"
11 set "SCRIPTROOT=%SCRIPTROOT:~0,-1%"
13 rem ----- Reset values to defaults -----
19 set "HAVE_OPENCL=false"
20 set "HAVE_FREETYPE=true"
21 set "HAVE_FREEIMAGE=false"
22 set "HAVE_FFMPEG=false"
24 set "HAVE_GLES2=false"
27 set "HAVE_LIBLZMA=false"
28 set "HAVE_RAPIDJSON=false"
29 set "HAVE_OPENVR=false"
36 set "CSF_DEFINES=%CSF_DEFINES_EXTRA%"
38 if not ["%CASROOT%"] == [""] if exist "%SCRIPTROOT%\%CASROOT%" set "CASROOT=%SCRIPTROOT%\%CASROOT%"
39 if ["%CASROOT%"] == [""] set "CASROOT=%SCRIPTROOT%"
41 rem ----- Load local settings -----
42 if exist "%CASROOT%\custom.bat" (
43 call "%CASROOT%\custom.bat" %1 %2 %3 %4 %5
46 rem ----- Read script arguments (override local settings) -----
47 if not ["%1"] == [""] set "VCVER=%1"
48 if not ["%2"] == [""] set "ARCH=%2"
49 if /I ["%ARCH%"] == ["win32"] set "ARCH=32"
50 if /I ["%ARCH%"] == ["win64"] set "ARCH=64"
51 if /I ["%3"] == ["debug"] set "CASDEB=d"
52 if /I ["%3"] == ["d"] set "CASDEB=d"
53 if /I ["%3"] == ["i"] set "CASDEB=i"
54 if /I ["%3"] == ["relwithdeb"] set "CASDEB=i"
56 rem Decode VCVER variable and define related ones:
58 rem VCFMT - "vc" followed by full version number of Visual Studio toolset
59 rem (same as VCVER without optional suffix "-uwp")
60 rem VCLIB - name of folder containing binaries
61 rem (same as VCVER except without third version in number)
62 rem VCPROP - name of required Visual Studio Workload (starting with VS 2017)
64 rem Note that for VS before 2015 (vc14) always
65 rem VCFMT=VCLIB=VCVER and VCPROP=NativeDesktop
67 rem Since VS 2017, environment variables like VS100COMNTOOLS are not defined
68 rem any more, we can only use vswhere.exe tool to find Visual Studio.
69 rem Add path to vswhere.exe
70 set "PATH=%PATH%;%ProgramFiles(x86)%\Microsoft Visual Studio\Installer"
72 rem for vc10-12, interpretation is trivial
74 set VCLIB=%VCVER:~0,4%
75 set VCPROP=NativeDesktop
76 rem vc14 and later can have optional suffix "-uwp"
77 if "%VCVER:~-4%" == "-uwp" (
78 set VCFMT=%VCVER:~0,-4%
82 if "%VCFMT%" == "vclang" (
85 rem echo VCVER=%VCVER% VCFMT=%VCFMT% VCLIB=%VCLIB% VCPROP=%VCPROP%
87 rem ----- Parsing of Visual Studio platform -----
88 set "VisualStudioExpressName=VCExpress"
90 if not "%DevEnvDir%" == "" (
91 rem If DevEnvDir is already defined (e.g. in custom.bat), use that value
92 ) else if /I "%VCFMT%" == "vc9" (
93 set "DevEnvDir=%VS90COMNTOOLS%..\IDE"
94 ) else if /I "%VCFMT%" == "vc10" (
95 set "DevEnvDir=%VS100COMNTOOLS%..\IDE"
96 ) else if /I "%VCFMT%" == "vc11" (
97 set "DevEnvDir=%VS110COMNTOOLS%..\IDE"
98 rem Visual Studio Express starting from VS 2012 is called "for Windows Desktop"
99 rem and has a new name for executable - WDExpress
100 set "VisualStudioExpressName=WDExpress"
101 ) else if /I "%VCFMT%" == "vc12" (
102 set "DevEnvDir=%VS120COMNTOOLS%..\IDE"
103 set "VisualStudioExpressName=WDExpress"
104 ) else if /I "%VCFMT%" == "vc14" (
105 set "DevEnvDir=%VS140COMNTOOLS%..\IDE"
106 ) else if /I "%VCFMT%" == "vc141" (
107 for /f "usebackq delims=" %%i in (`vswhere.exe -version "[15.0,15.99]" -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
108 set "DevEnvDir=%%i\Common7\IDE\"
110 ) else if /I "%VCFMT%" == "vc142" (
111 for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
112 set "DevEnvDir=%%i\Common7\IDE\"
114 ) else if /I "%VCFMT%" == "vclang" (
115 for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
116 set "DevEnvDir=%%i\Common7\IDE\"
118 ) else if /I "%VCFMT%" == "gcc" (
121 echo Error: first argument ^(%VCVER%^) should specify supported version of Visual C++,
123 echo vc9 = VS 2008 ^(SP1^)
124 echo vc10 = VS 2010 ^(SP3^)
125 echo vc11 = VS 2012 ^(SP3^)
126 echo vc12 = VS 2013 ^(SP3^)
130 echo vclang = VS 2019 with ClangCL toolset
134 rem ----- Parsing vcvarsall for qt samples and define PlatformToolset -----
135 if /I "%VCFMT%" == "vc9" (
136 set "VCVARS=%VS90COMNTOOLS%..\..\VC\vcvarsall.bat"
137 set "VCPlatformToolSet=v90"
138 ) else if /I "%VCFMT%" == "vc10" (
139 set "VCVARS=%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"
140 set "VCPlatformToolSet=v100"
141 ) else if /I "%VCFMT%" == "vc11" (
142 set "VCVARS=%VS110COMNTOOLS%..\..\VC\vcvarsall.bat"
143 set "VCPlatformToolSet=v110"
144 ) else if /I "%VCFMT%" == "vc12" (
145 set "VCVARS=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat"
146 set "VCPlatformToolSet=v120"
147 ) else if /I "%VCFMT%" == "vc14" (
148 set "VCVARS=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat"
149 set "VCPlatformToolSet=v140"
150 ) else if /I "%VCFMT%" == "vc141" (
151 for /f "usebackq delims=" %%i in (`vswhere.exe -version "[15.0,15.99]" -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
152 set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
154 set "VCPlatformToolSet=v141"
155 ) else if /I "%VCFMT%" == "vc142" (
156 for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
157 set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
159 set "VCPlatformToolSet=v142"
160 ) else if /I "%VCFMT%" == "vclang" (
161 for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
162 set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
164 set "VCPlatformToolSet=ClangCL"
165 ) else if /I "%VCFMT%" == "gcc" (
168 echo Error: wrong VS identifier
172 set "CSF_OPT_LIB32D=%CSF_OPT_LIB32%"
173 set "CSF_OPT_LIB64D=%CSF_OPT_LIB64%"
174 set "CSF_OPT_BIN32D=%CSF_OPT_BIN32%"
175 set "CSF_OPT_BIN64D=%CSF_OPT_BIN64%"
176 set "CSF_OPT_LIB32I=%CSF_OPT_LIB32%"
177 set "CSF_OPT_LIB64I=%CSF_OPT_LIB64%"
178 set "CSF_OPT_BIN32I=%CSF_OPT_BIN32%"
179 set "CSF_OPT_BIN64I=%CSF_OPT_BIN64%"
181 rem ----- Optional 3rd-parties should be enabled by HAVE macros -----
183 set "PRODUCTS_DEFINES="
184 if ["%HAVE_TBB%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_TBB" & set "CSF_DEFINES=HAVE_TBB;%CSF_DEFINES%"
185 if ["%HAVE_OPENCL%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_OPENCL" & set "CSF_DEFINES=HAVE_OPENCL;%CSF_DEFINES%"
186 if ["%HAVE_FREETYPE%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_FREEIMAGE" & set "CSF_DEFINES=HAVE_FREETYPE;%CSF_DEFINES%"
187 if ["%HAVE_FREEIMAGE%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_FREEIMAGE" & set "CSF_DEFINES=HAVE_FREEIMAGE;%CSF_DEFINES%"
188 if ["%HAVE_FFMPEG%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_FFMPEG" & set "CSF_DEFINES=HAVE_FFMPEG;%CSF_DEFINES%"
189 if ["%HAVE_VTK%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_VTK" & set "CSF_DEFINES=HAVE_VTK;%CSF_DEFINES%"
190 if ["%HAVE_GLES2%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_GLES2_EXT" & set "CSF_DEFINES=HAVE_GLES2_EXT;%CSF_DEFINES%"
191 if ["%HAVE_D3D%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_D3D" & set "CSF_DEFINES=HAVE_D3D;%CSF_DEFINES%"
192 if ["%HAVE_ZLIB%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_ZLIB" & set "CSF_DEFINES=HAVE_ZLIB;%CSF_DEFINES%"
193 if ["%HAVE_LIBLZMA%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_LIBLZMA" & set "CSF_DEFINES=HAVE_LIBLZMA;%CSF_DEFINES%"
194 if ["%HAVE_RAPIDJSON%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_RAPIDJSON" & set "CSF_DEFINES=HAVE_RAPIDJSON;%CSF_DEFINES%"
195 if ["%HAVE_OPENVR%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_OPENVR" & set "CSF_DEFINES=HAVE_OPENVR;%CSF_DEFINES%"
196 if ["%HAVE_E57%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_E57" & set "CSF_DEFINES=HAVE_E57;%CSF_DEFINES%"
198 rem Eliminate VS warning
199 if ["%CSF_DEFINES%"] == [""] set "CSF_DEFINES=;"
201 rem ----- Optional 3rd-parties should be enabled by HAVE macros -----
202 if not ["%PRODUCTS_DEFINES%"] == [""] set "CSF_OPT_CMPL=%CSF_OPT_CMPL% %PRODUCTS_DEFINES%"
204 rem ----- Collect 3rd-parties additional include paths into compiler options -----
205 for %%a in ("%CSF_OPT_INC:;=";"%") do (
207 if not ["%%~a"] == [""] call :concatCmplInc %%~a
210 rem ----- Collect 3rd-parties additional library paths (32-bit) into linker options -----
212 for %%a in ("%CSF_OPT_LIB32:;=";"%") do (
214 if not ["%%~a"] == [""] call :concatLib32 %%~a
217 rem ----- Collect 3rd-parties additional library paths (64-bit) into linker options -----
219 for %%a in ("%CSF_OPT_LIB64:;=";"%") do (
221 if not ["%%~a"] == [""] call :concatLib64 %%~a
224 set "CSF_OPT_LNK32=%CSF_OPT_LNK32% %OPT_LIB32%"
225 set "CSF_OPT_LNK64=%CSF_OPT_LNK64% %OPT_LIB64%"
226 set "CSF_OPT_LNK32D=%CSF_OPT_LNK32D% %OPT_LIB32%"
227 set "CSF_OPT_LNK64D=%CSF_OPT_LNK64D% %OPT_LIB64%"
228 set "CSF_OPT_LNK32I=%CSF_OPT_LNK32I% %OPT_LIB32%"
229 set "CSF_OPT_LNK64I=%CSF_OPT_LNK64I% %OPT_LIB64%"
231 rem ----- Default paths to sub-folders (can be different in install env) -----
232 if "%CSF_OCCTIncludePath%" == "" set "CSF_OCCTIncludePath=%CASROOT%\inc"
233 if "%CSF_OCCTResourcePath%" == "" set "CSF_OCCTResourcePath=%CASROOT%\src"
234 if "%CSF_OCCTSamplesPath%" == "" set "CSF_OCCTSamplesPath=%CASROOT%\samples"
235 if "%CSF_OCCTDataPath%" == "" set "CSF_OCCTDataPath=%CASROOT%\data"
236 if "%CSF_OCCTTestsPath%" == "" set "CSF_OCCTTestsPath=%CASROOT%\tests"
237 if "%CSF_OCCTBinPath%" == "" set "CSF_OCCTBinPath=%CASROOT%\win%ARCH%\%VCLIB%\bin%CASDEB%"
238 if "%CSF_OCCTLibPath%" == "" set "CSF_OCCTLibPath=%CASROOT%\win%ARCH%\%VCLIB%\lib%CASDEB%"
240 rem ----- Set path to 3rd party and OCCT libraries -----
241 set "PATH=%CSF_OCCTBinPath%;%PATH%"
242 if ["%CASDEB%"] == [""] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32%;%PATH%"
243 if ["%CASDEB%"] == [""] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64%;%PATH%"
244 if ["%CASDEB%"] == ["d"] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32D%;%PATH%"
245 if ["%CASDEB%"] == ["d"] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64D%;%PATH%"
246 if ["%CASDEB%"] == ["i"] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32I%;%PATH%"
247 if ["%CASDEB%"] == ["i"] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64I%;%PATH%"
249 rem ----- Set environment variables used by OCCT -----
252 set "CSF_SHMessage=%CSF_OCCTResourcePath%\SHMessage"
253 set "CSF_MDTVTexturesDirectory=%CSF_OCCTResourcePath%\Textures"
254 set "CSF_ShadersDirectory=%CSF_OCCTResourcePath%\Shaders"
255 set "CSF_XSMessage=%CSF_OCCTResourcePath%\XSMessage"
256 set "CSF_TObjMessage=%CSF_OCCTResourcePath%\TObj"
257 set "CSF_StandardDefaults=%CSF_OCCTResourcePath%\StdResource"
258 set "CSF_PluginDefaults=%CSF_OCCTResourcePath%\StdResource"
259 set "CSF_XCAFDefaults=%CSF_OCCTResourcePath%\StdResource"
260 set "CSF_TObjDefaults=%CSF_OCCTResourcePath%\StdResource"
261 set "CSF_StandardLiteDefaults=%CSF_OCCTResourcePath%\StdResource"
262 set "CSF_IGESDefaults=%CSF_OCCTResourcePath%\XSTEPResource"
263 set "CSF_STEPDefaults=%CSF_OCCTResourcePath%\XSTEPResource"
264 set "CSF_XmlOcafResource=%CSF_OCCTResourcePath%\XmlOcafResource"
265 set "CSF_MIGRATION_TYPES=%CSF_OCCTResourcePath%\StdResource\MigrationSheet.txt"
267 rem Draw Harness special stuff
268 if exist "%CSF_OCCTResourcePath%\DrawResources\DrawDefault" (
269 set "DRAWDEFAULT=%CSF_OCCTResourcePath%\DrawResources\DrawDefault"
271 if exist "%CSF_OCCTResourcePath%\DrawResources" (
272 set "DRAWHOME=%CSF_OCCTResourcePath%\DrawResources"
273 set "CSF_DrawPluginDefaults=%DRAWHOME%"
278 set "CSF_OPT_CMPL=%CSF_OPT_CMPL% -I%1"
282 rem Compiler options for Code::Blocks: -L for gcc/mingw and /LIBPATH for msvc
283 rem set "OPT_LIB32=%OPT_LIB32% /LIBPATH:%1"
284 set "OPT_LIB32=%OPT_LIB32% -L%1"
288 rem Compiler options for Code::Blocks: -L for gcc/mingw and /LIBPATH for msvc
289 rem set "OPT_LIB64=%OPT_LIB64% /LIBPATH:%1"
290 set "OPT_LIB64=%OPT_LIB64% -L%1"