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_FREEIMAGE=false"
21 set "HAVE_FFMPEG=false"
23 set "HAVE_GLES2=false"
26 set "HAVE_LIBLZMA=false"
27 set "HAVE_RAPIDJSON=false"
33 set "CSF_DEFINES=%CSF_DEFINES_EXTRA%"
35 if not ["%CASROOT%"] == [""] if exist "%SCRIPTROOT%\%CASROOT%" set "CASROOT=%SCRIPTROOT%\%CASROOT%"
36 if ["%CASROOT%"] == [""] set "CASROOT=%SCRIPTROOT%"
38 rem ----- Load local settings -----
39 if exist "%CASROOT%\custom.bat" (
40 call "%CASROOT%\custom.bat" %1 %2 %3 %4 %5
43 rem ----- Read script arguments (override local settings) -----
44 if not ["%1"] == [""] set "VCVER=%1"
45 if not ["%2"] == [""] set "ARCH=%2"
46 if /I ["%ARCH%"] == ["win32"] set "ARCH=32"
47 if /I ["%ARCH%"] == ["win64"] set "ARCH=64"
48 if /I ["%3"] == ["debug"] set "CASDEB=d"
49 if /I ["%3"] == ["d"] set "CASDEB=d"
50 if /I ["%3"] == ["i"] set "CASDEB=i"
51 if /I ["%3"] == ["relwithdeb"] set "CASDEB=i"
53 rem Decode VCVER variable and define related ones:
55 rem VCFMT - "vc" followed by full version number of Visual Studio toolset
56 rem (same as VCVER without optional suffix "-uwp")
57 rem VCLIB - name of folder contining binaries
58 rem (same as VCVER except without third version in number)
59 rem VCPROP - name of required Visual Studion Workload (starting with VS 2017)
61 rem Note that for VS before 2015 (vc14) always
62 rem VCFMT=VCLIB=VCVER and VCPROP=NativeDesktop
64 rem Since VS 2017, environment variables like VS100COMNTOOLS are not defined
65 rem any more, we can only use vswhere.exe tool to find Visual Studio.
66 rem Add path to vswhere.exe
67 set "PATH=%PATH%;%ProgramFiles(x86)%\Microsoft Visual Studio\Installer"
69 rem for vc10-12, interpretation is trivial
71 set VCLIB=%VCVER:~0,4%
72 set VCPROP=NativeDesktop
73 rem vc14 and later can have optional suffix "-uwp"
74 if "%VCVER:~-4%" == "-uwp" (
75 set VCFMT=%VCVER:~0,-4%
79 rem echo VCVER=%VCVER% VCFMT=%VCFMT% VCLIB=%VCLIB% VCPROP=%VCPROP%
81 rem ----- Parsing of Visual Studio platform -----
82 set "VisualStudioExpressName=VCExpress"
84 if not "%DevEnvDir%" == "" (
85 rem If DevEnvDir is already defined (e.g. in custom.bat), use that value
86 ) else if /I "%VCFMT%" == "vc9" (
87 set "DevEnvDir=%VS90COMNTOOLS%..\IDE"
88 ) else if /I "%VCFMT%" == "vc10" (
89 set "DevEnvDir=%VS100COMNTOOLS%..\IDE"
90 ) else if /I "%VCFMT%" == "vc11" (
91 set "DevEnvDir=%VS110COMNTOOLS%..\IDE"
92 rem Visual Studio Express starting from VS 2012 is called "for Windows Desktop"
93 rem and has a new name for executable - WDExpress
94 set "VisualStudioExpressName=WDExpress"
95 ) else if /I "%VCFMT%" == "vc12" (
96 set "DevEnvDir=%VS120COMNTOOLS%..\IDE"
97 set "VisualStudioExpressName=WDExpress"
98 ) else if /I "%VCFMT%" == "vc14" (
99 set "DevEnvDir=%VS140COMNTOOLS%..\IDE"
100 ) else if /I "%VCFMT%" == "vc141" (
101 for /f "usebackq delims=" %%i in (`vswhere.exe -version "[15.0,15.99]" -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
102 set "DevEnvDir=%%i\Common7\IDE\"
104 ) else if /I "%VCFMT%" == "gcc" (
107 echo Error: first argument ^(%VCVER%^) should specify supported version of Visual C++,
109 echo vc9 = VS 2008 ^(SP1^)
110 echo vc10 = VS 2010 ^(SP3^)
111 echo vc11 = VS 2012 ^(SP3^)
112 echo vc12 = VS 2013 ^(SP3^)
118 rem ----- Parsing vcvarsall for qt samples and define PlatformToolset -----
119 if /I "%VCFMT%" == "vc9" (
120 set "VCVARS=%VS90COMNTOOLS%..\..\VC\vcvarsall.bat"
121 set "VCPlatformToolSet=v90"
122 ) else if /I "%VCFMT%" == "vc10" (
123 set "VCVARS=%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"
124 set "VCPlatformToolSet=v100"
125 ) else if /I "%VCFMT%" == "vc11" (
126 set "VCVARS=%VS110COMNTOOLS%..\..\VC\vcvarsall.bat"
127 set "VCPlatformToolSet=v110"
128 ) else if /I "%VCFMT%" == "vc12" (
129 set "VCVARS=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat"
130 set "VCPlatformToolSet=v120"
131 ) else if /I "%VCFMT%" == "vc14" (
132 set "VCVARS=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat"
133 set "VCPlatformToolSet=v140"
134 ) else if /I "%VCFMT%" == "vc141" (
135 for /f "usebackq delims=" %%i in (`vswhere.exe -version "[15.0,15.99]" -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
136 set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
138 set "VCPlatformToolSet=v141"
139 ) else if /I "%VCFMT%" == "gcc" (
142 echo Error: wrong VS identifier
146 set "CSF_OPT_LIB32D=%CSF_OPT_LIB32%"
147 set "CSF_OPT_LIB64D=%CSF_OPT_LIB64%"
148 set "CSF_OPT_BIN32D=%CSF_OPT_BIN32%"
149 set "CSF_OPT_BIN64D=%CSF_OPT_BIN64%"
150 set "CSF_OPT_LIB32I=%CSF_OPT_LIB32%"
151 set "CSF_OPT_LIB64I=%CSF_OPT_LIB64%"
152 set "CSF_OPT_BIN32I=%CSF_OPT_BIN32%"
153 set "CSF_OPT_BIN64I=%CSF_OPT_BIN64%"
155 rem ----- Optional 3rd-parties should be enabled by HAVE macros -----
157 set "PRODUCTS_DEFINES="
158 if ["%HAVE_TBB%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_TBB" & set "CSF_DEFINES=HAVE_TBB;%CSF_DEFINES%"
159 if ["%HAVE_OPENCL%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_OPENCL" & set "CSF_DEFINES=HAVE_OPENCL;%CSF_DEFINES%"
160 if ["%HAVE_FREEIMAGE%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_FREEIMAGE" & set "CSF_DEFINES=HAVE_FREEIMAGE;%CSF_DEFINES%"
161 if ["%HAVE_FFMPEG%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_FFMPEG" & set "CSF_DEFINES=HAVE_FFMPEG;%CSF_DEFINES%"
162 if ["%HAVE_VTK%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_VTK" & set "CSF_DEFINES=HAVE_VTK;%CSF_DEFINES%"
163 if ["%HAVE_GLES2%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_GLES2" & set "CSF_DEFINES=HAVE_GLES2;%CSF_DEFINES%"
164 if ["%HAVE_D3D%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_D3D" & set "CSF_DEFINES=HAVE_D3D;%CSF_DEFINES%"
165 if ["%HAVE_ZLIB%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_ZLIB" & set "CSF_DEFINES=HAVE_ZLIB;%CSF_DEFINES%"
166 if ["%HAVE_LIBLZMA%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_LIBLZMA" & set "CSF_DEFINES=HAVE_LIBLZMA;%CSF_DEFINES%"
167 if ["%HAVE_RAPIDJSON%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_RAPIDJSON" & set "CSF_DEFINES=HAVE_RAPIDJSON;%CSF_DEFINES%"
169 rem Eliminate VS warning
170 if ["%CSF_DEFINES%"] == [""] set "CSF_DEFINES=;"
172 rem ----- Optional 3rd-parties should be enabled by HAVE macros -----
173 if not ["%PRODUCTS_DEFINES%"] == [""] set "CSF_OPT_CMPL=%CSF_OPT_CMPL% %PRODUCTS_DEFINES%"
175 rem ----- Colect 3rd-parties additional include paths into compiler options -----
176 for %%a in ("%CSF_OPT_INC:;=";"%") do (
178 if not ["%%~a"] == [""] call :concatCmplInc %%~a
181 rem ----- Colect 3rd-parties additional library paths (32-bit) into linker options -----
183 for %%a in ("%CSF_OPT_LIB32:;=";"%") do (
185 if not ["%%~a"] == [""] call :concatLib32 %%~a
188 rem ----- Colect 3rd-parties additional library paths (64-bit) into linker options -----
190 for %%a in ("%CSF_OPT_LIB64:;=";"%") do (
192 if not ["%%~a"] == [""] call :concatLib64 %%~a
195 set "CSF_OPT_LNK32=%CSF_OPT_LNK32% %OPT_LIB32%"
196 set "CSF_OPT_LNK64=%CSF_OPT_LNK64% %OPT_LIB64%"
197 set "CSF_OPT_LNK32D=%CSF_OPT_LNK32D% %OPT_LIB32%"
198 set "CSF_OPT_LNK64D=%CSF_OPT_LNK64D% %OPT_LIB64%"
199 set "CSF_OPT_LNK32I=%CSF_OPT_LNK32I% %OPT_LIB32%"
200 set "CSF_OPT_LNK64I=%CSF_OPT_LNK64I% %OPT_LIB64%"
202 rem ----- Default paths to sub-folders (can be different in install env) -----
203 if "%CSF_OCCTIncludePath%" == "" set "CSF_OCCTIncludePath=%CASROOT%\inc"
204 if "%CSF_OCCTResourcePath%" == "" set "CSF_OCCTResourcePath=%CASROOT%\src"
205 if "%CSF_OCCTSamplesPath%" == "" set "CSF_OCCTSamplesPath=%CASROOT%\samples"
206 if "%CSF_OCCTDataPath%" == "" set "CSF_OCCTDataPath=%CASROOT%\data"
207 if "%CSF_OCCTTestsPath%" == "" set "CSF_OCCTTestsPath=%CASROOT%\tests"
208 if "%CSF_OCCTBinPath%" == "" set "CSF_OCCTBinPath=%CASROOT%\win%ARCH%\%VCLIB%\bin%CASDEB%"
209 if "%CSF_OCCTLibPath%" == "" set "CSF_OCCTLibPath=%CASROOT%\win%ARCH%\%VCLIB%\lib%CASDEB%"
211 rem ----- Set path to 3rd party and OCCT libraries -----
212 set "PATH=%CSF_OCCTBinPath%;%PATH%"
213 if ["%CASDEB%"] == [""] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32%;%PATH%"
214 if ["%CASDEB%"] == [""] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64%;%PATH%"
215 if ["%CASDEB%"] == ["d"] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32D%;%PATH%"
216 if ["%CASDEB%"] == ["d"] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64D%;%PATH%"
217 if ["%CASDEB%"] == ["i"] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32I%;%PATH%"
218 if ["%CASDEB%"] == ["i"] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64I%;%PATH%"
220 rem ----- Set envoronment variables used by OCCT -----
223 set "CSF_SHMessage=%CSF_OCCTResourcePath%\SHMessage"
224 set "CSF_MDTVTexturesDirectory=%CSF_OCCTResourcePath%\Textures"
225 set "CSF_ShadersDirectory=%CSF_OCCTResourcePath%\Shaders"
226 set "CSF_XSMessage=%CSF_OCCTResourcePath%\XSMessage"
227 set "CSF_TObjMessage=%CSF_OCCTResourcePath%\TObj"
228 set "CSF_StandardDefaults=%CSF_OCCTResourcePath%\StdResource"
229 set "CSF_PluginDefaults=%CSF_OCCTResourcePath%\StdResource"
230 set "CSF_XCAFDefaults=%CSF_OCCTResourcePath%\StdResource"
231 set "CSF_TObjDefaults=%CSF_OCCTResourcePath%\StdResource"
232 set "CSF_StandardLiteDefaults=%CSF_OCCTResourcePath%\StdResource"
233 set "CSF_IGESDefaults=%CSF_OCCTResourcePath%\XSTEPResource"
234 set "CSF_STEPDefaults=%CSF_OCCTResourcePath%\XSTEPResource"
235 set "CSF_XmlOcafResource=%CSF_OCCTResourcePath%\XmlOcafResource"
236 set "CSF_MIGRATION_TYPES=%CSF_OCCTResourcePath%\StdResource\MigrationSheet.txt"
238 rem Draw Harness special stuff
239 if exist "%CSF_OCCTResourcePath%\DrawResources\DrawDefault" (
240 set "DRAWDEFAULT=%CSF_OCCTResourcePath%\DrawResources\DrawDefault"
242 if exist "%CSF_OCCTResourcePath%\DrawResources" (
243 set "DRAWHOME=%CSF_OCCTResourcePath%\DrawResources"
244 set "CSF_DrawPluginDefaults=%DRAWHOME%"
249 set "CSF_OPT_CMPL=%CSF_OPT_CMPL% -I%1"
253 rem Compiler options for Code::Blocks: -L for gcc/mingw and /LIBPATH for msvc
254 rem set "OPT_LIB32=%OPT_LIB32% /LIBPATH:%1"
255 set "OPT_LIB32=%OPT_LIB32% -L%1"
259 rem Compiler options for Code::Blocks: -L for gcc/mingw and /LIBPATH for msvc
260 rem set "OPT_LIB64=%OPT_LIB64% /LIBPATH:%1"
261 set "OPT_LIB64=%OPT_LIB64% -L%1"