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