0028824: Possibility to build OCCT 7.1.0 and above using Visual Studio 2008
[occt.git] / adm / templates / env.bat
1 @echo off
2
3 rem Use:
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:
8 rem   vc8 win32 Release
9
10 set "SCRIPTROOT=%~dp0"
11 set "SCRIPTROOT=%SCRIPTROOT:~0,-1%"
12
13 rem ----- Reset values to defaults -----
14 set "CASDEB="
15 set "VCVER=vc10"
16 set "ARCH=64"
17 set "VCVARS="
18 set "HAVE_TBB=false"
19 set "HAVE_OPENCL=false"
20 set "HAVE_FREEIMAGE=false"
21 set "HAVE_FFMPEG=false"
22 set "HAVE_GL2PS=false"
23 set "HAVE_VTK=false"
24 set "HAVE_GLES2=false"
25 set "HAVE_D3D=false"
26 set "HAVE_ZLIB=false"
27 set "HAVE_LIBLZMA=false"
28 set "CSF_OPT_INC="
29 set "CSF_OPT_LIB32="
30 set "CSF_OPT_LIB64="
31 set "CSF_OPT_BIN32="
32 set "CSF_OPT_BIN64="
33
34 if not ["%CASROOT%"] == [""] if exist "%SCRIPTROOT%\%CASROOT%" set "CASROOT=%SCRIPTROOT%\%CASROOT%"
35 if     ["%CASROOT%"] == [""] set "CASROOT=%SCRIPTROOT%"
36
37 rem ----- Load local settings -----
38 if exist "%CASROOT%\custom.bat" (
39   call "%CASROOT%\custom.bat" %1 %2 %3 %4 %5
40 )
41
42 rem ----- Read script arguments (override local settings) -----
43 if not ["%1"]    == [""]      set "VCVER=%1"
44 if not ["%2"]    == [""]      set "ARCH=%2"
45 if /I ["%ARCH%"] == ["win32"] set "ARCH=32"
46 if /I ["%ARCH%"] == ["win64"] set "ARCH=64"
47 if /I ["%3"]     == ["debug"] set "CASDEB=d"
48 if /I ["%3"]     == ["d"]     set "CASDEB=d"
49 if /I ["%3"]     == ["i"]     set "CASDEB=i"
50 if /I ["%3"]     == ["relwithdeb"] set "CASDEB=i"
51
52 rem Decode VCVER variable and define related ones:
53 rem
54 rem VCFMT - "vc" followed by full version number of Visual Studio toolset
55 rem         (same as VCVER without optional suffix "-uwp")
56 rem VCLIB - name of folder contining binaries
57 rem         (same as VCVER except without third version in number)
58 rem VCPROP - name of required Visual Studion Workload (starting with VS 2017)
59 rem
60 rem Note that for VS before 2015 (vc14) always
61 rem VCFMT=VCLIB=VCVER and VCPROP=NativeDesktop
62
63 rem Since VS 2017, environment variables like VS100COMNTOOLS are not defined 
64 rem any more, we can only use vswhere.exe tool to find Visual Studio.
65 rem Add path to vswhere.exe
66 set "PATH=%PATH%;%ProgramFiles(x86)%\Microsoft Visual Studio\Installer"
67
68 rem for vc10-12, interpretation is trivial
69 set VCFMT=%VCVER%
70 set VCLIB=%VCVER:~0,4%
71 set VCPROP=NativeDesktop
72 rem vc14 and later can have optional suffix "-uwp"
73 if "%VCVER:~-4%" == "-uwp" (
74   set VCFMT=%VCVER:~0,-4%
75   set VCLIB=%VCLIB%-uwp
76   set VCPROP=Universal
77 )
78 rem echo VCVER=%VCVER% VCFMT=%VCFMT% VCLIB=%VCLIB% VCPROP=%VCPROP%
79
80 rem ----- Parsing of Visual Studio platform -----
81 set "VisualStudioExpressName=VCExpress"
82
83 if not "%DevEnvDir%" == "" (
84   rem If DevEnvDir is already defined (e.g. in custom.bat), use that value
85 ) else if /I "%VCFMT%" == "vc9" (
86   set "DevEnvDir=%VS90COMNTOOLS%..\IDE"
87 ) else if /I "%VCFMT%" == "vc10" (
88   set "DevEnvDir=%VS100COMNTOOLS%..\IDE"
89 ) else if /I "%VCFMT%" == "vc11" (
90   set "DevEnvDir=%VS110COMNTOOLS%..\IDE"
91   rem Visual Studio Express starting from VS 2012 is called "for Windows Desktop"
92   rem and has a new name for executable - WDExpress
93   set "VisualStudioExpressName=WDExpress"
94 ) else if /I "%VCFMT%" == "vc12" (
95   set "DevEnvDir=%VS120COMNTOOLS%..\IDE"
96   set "VisualStudioExpressName=WDExpress"
97 ) else if /I "%VCFMT%" == "vc14" (
98   set "DevEnvDir=%VS140COMNTOOLS%..\IDE"
99 ) else if /I "%VCFMT%" == "vc141" (
100   for /f "usebackq delims=" %%i in (`vswhere.exe -version "[15.0,15.99]" -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
101     set "DevEnvDir=%%i\Common7\IDE\"
102   )
103 ) else if /I "%VCFMT%" == "gcc" (
104   rem MinGW
105 ) else (
106   echo Error: first argument ^(%VCVER%^) should specify supported version of Visual C++, 
107   echo one of: 
108   echo vc9   = VS 2008 ^(SP1^)
109   echo vc10  = VS 2010 ^(SP3^)
110   echo vc11  = VS 2012 ^(SP3^)
111   echo vc12  = VS 2013 ^(SP3^)
112   echo vc14  = VS 2015
113   echo vc141 = VS 2017
114   exit /B
115 )
116
117 rem ----- Parsing vcvarsall for qt samples and define PlatformToolset -----
118 if /I "%VCFMT%" == "vc9" (
119   set "VCVARS=%VS90COMNTOOLS%..\..\VC\vcvarsall.bat"
120   set "VCPlatformToolSet=v90"
121 ) else if /I "%VCFMT%" == "vc10" (
122   set "VCVARS=%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"
123   set "VCPlatformToolSet=v100"
124 ) else if /I "%VCFMT%" == "vc11" (
125   set "VCVARS=%VS110COMNTOOLS%..\..\VC\vcvarsall.bat"
126   set "VCPlatformToolSet=v110"
127 ) else if /I "%VCFMT%" == "vc12" (
128   set "VCVARS=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat"
129   set "VCPlatformToolSet=v120"
130 ) else if /I "%VCFMT%" == "vc14" (
131   set "VCVARS=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat"
132   set "VCPlatformToolSet=v140"
133 ) else if /I "%VCFMT%" == "vc141" (
134   for /f "usebackq delims=" %%i in (`vswhere.exe -version "[15.0,15.99]" -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
135     set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
136   )
137   set "VCPlatformToolSet=v141"
138 ) else if /I "%VCFMT%" == "gcc" (
139   rem MinGW
140 ) else (
141   echo Error: wrong VS identifier
142   exit /B
143 )
144
145 set "CSF_OPT_LIB32D=%CSF_OPT_LIB32%"
146 set "CSF_OPT_LIB64D=%CSF_OPT_LIB64%"
147 set "CSF_OPT_BIN32D=%CSF_OPT_BIN32%"
148 set "CSF_OPT_BIN64D=%CSF_OPT_BIN64%"
149 set "CSF_OPT_LIB32I=%CSF_OPT_LIB32%"
150 set "CSF_OPT_LIB64I=%CSF_OPT_LIB64%"
151 set "CSF_OPT_BIN32I=%CSF_OPT_BIN32%"
152 set "CSF_OPT_BIN64I=%CSF_OPT_BIN64%"
153
154 rem ----- Optional 3rd-parties should be enabled by HAVE macros -----
155 set "CSF_OPT_CMPL="
156 set "PRODUCTS_DEFINES="
157 if ["%HAVE_TBB%"]       == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_TBB"       & set "CSF_DEFINES=HAVE_TBB;%CSF_DEFINES%"
158 if ["%HAVE_OPENCL%"]    == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_OPENCL"    & set "CSF_DEFINES=HAVE_OPENCL;%CSF_DEFINES%"
159 if ["%HAVE_GL2PS%"]     == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_GL2PS"     & set "CSF_DEFINES=HAVE_GL2PS;%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
168 rem Eliminate VS warning
169 if ["%CSF_DEFINES%"]  == [""] set "CSF_DEFINES=;"
170
171 rem ----- Optional 3rd-parties should be enabled by HAVE macros -----
172 if not ["%PRODUCTS_DEFINES%"] == [""] set "CSF_OPT_CMPL=%CSF_OPT_CMPL% %PRODUCTS_DEFINES%"
173
174 rem ----- Colect 3rd-parties additional include paths into compiler options -----
175 for %%a in ("%CSF_OPT_INC:;=";"%") do (
176   set "anItem=%%~a"
177   if not ["%%~a"] == [""] call :concatCmplInc %%~a
178 )
179
180 rem ----- Colect 3rd-parties additional library paths (32-bit) into linker options -----
181 set "OPT_LIB32="
182 for %%a in ("%CSF_OPT_LIB32:;=";"%") do (
183   set "anItem=%%~a"
184   if not ["%%~a"] == [""] call :concatLib32 %%~a
185 )
186
187 rem ----- Colect 3rd-parties additional library paths (64-bit) into linker options -----
188 set "OPT_LIB64="
189 for %%a in ("%CSF_OPT_LIB64:;=";"%") do (
190   set "anItem=%%~a"
191   if not ["%%~a"] == [""] call :concatLib64 %%~a
192 )
193
194 set "CSF_OPT_LNK32=%CSF_OPT_LNK32% %OPT_LIB32%"
195 set "CSF_OPT_LNK64=%CSF_OPT_LNK64% %OPT_LIB64%"
196 set "CSF_OPT_LNK32D=%CSF_OPT_LNK32D% %OPT_LIB32%"
197 set "CSF_OPT_LNK64D=%CSF_OPT_LNK64D% %OPT_LIB64%"
198 set "CSF_OPT_LNK32I=%CSF_OPT_LNK32I% %OPT_LIB32%"
199 set "CSF_OPT_LNK64I=%CSF_OPT_LNK64I% %OPT_LIB64%"
200
201 rem ----- Default paths to sub-folders (can be different in install env) -----
202 if "%CSF_OCCTIncludePath%" == "" set "CSF_OCCTIncludePath=%CASROOT%\inc"
203 if "%CSF_OCCTResourcePath%" == "" set "CSF_OCCTResourcePath=%CASROOT%\src"
204 if "%CSF_OCCTSamplesPath%" == "" set "CSF_OCCTSamplesPath=%CASROOT%\samples"
205 if "%CSF_OCCTDataPath%" == "" set "CSF_OCCTDataPath=%CASROOT%\data"
206 if "%CSF_OCCTTestsPath%" == "" set "CSF_OCCTTestsPath=%CASROOT%\tests"
207 if "%CSF_OCCTBinPath%" == "" set "CSF_OCCTBinPath=%CASROOT%\win%ARCH%\%VCLIB%\bin%CASDEB%"
208 if "%CSF_OCCTLibPath%" == "" set "CSF_OCCTLibPath=%CASROOT%\win%ARCH%\%VCLIB%\lib%CASDEB%"
209
210 rem ----- Set path to 3rd party and OCCT libraries -----
211 set "PATH=%CSF_OCCTBinPath%;%PATH%"
212 if ["%CASDEB%"] == [""] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32%;%PATH%"
213 if ["%CASDEB%"] == [""] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64%;%PATH%"
214 if ["%CASDEB%"] == ["d"] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32D%;%PATH%"
215 if ["%CASDEB%"] == ["d"] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64D%;%PATH%"
216 if ["%CASDEB%"] == ["i"] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32I%;%PATH%"
217 if ["%CASDEB%"] == ["i"] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64I%;%PATH%"
218
219 rem ----- Set envoronment variables used by OCCT -----
220 set CSF_LANGUAGE=us
221 set MMGT_CLEAR=1
222 set "CSF_SHMessage=%CSF_OCCTResourcePath%\SHMessage"
223 set "CSF_MDTVTexturesDirectory=%CSF_OCCTResourcePath%\Textures"
224 set "CSF_ShadersDirectory=%CSF_OCCTResourcePath%\Shaders"
225 set "CSF_XSMessage=%CSF_OCCTResourcePath%\XSMessage"
226 set "CSF_TObjMessage=%CSF_OCCTResourcePath%\TObj"
227 set "CSF_StandardDefaults=%CSF_OCCTResourcePath%\StdResource"
228 set "CSF_PluginDefaults=%CSF_OCCTResourcePath%\StdResource"
229 set "CSF_XCAFDefaults=%CSF_OCCTResourcePath%\StdResource"
230 set "CSF_TObjDefaults=%CSF_OCCTResourcePath%\StdResource"
231 set "CSF_StandardLiteDefaults=%CSF_OCCTResourcePath%\StdResource"
232 set "CSF_IGESDefaults=%CSF_OCCTResourcePath%\XSTEPResource"
233 set "CSF_STEPDefaults=%CSF_OCCTResourcePath%\XSTEPResource"
234 set "CSF_XmlOcafResource=%CSF_OCCTResourcePath%\XmlOcafResource"
235 set "CSF_MIGRATION_TYPES=%CSF_OCCTResourcePath%\StdResource\MigrationSheet.txt"
236
237 rem Draw Harness special stuff
238 if exist "%CSF_OCCTResourcePath%\DrawResources\DrawDefault" (
239   set "DRAWDEFAULT=%CSF_OCCTResourcePath%\DrawResources\DrawDefault"
240 )
241 if exist "%CSF_OCCTResourcePath%\DrawResources" (
242   set "DRAWHOME=%CSF_OCCTResourcePath%\DrawResources"
243   set "CSF_DrawPluginDefaults=%DRAWHOME%"
244 )
245 goto :eof
246
247 :concatCmplInc
248 set "CSF_OPT_CMPL=%CSF_OPT_CMPL% -I%1"
249 goto :eof
250
251 :concatLib32
252 rem Compiler options for Code::Blocks: -L for gcc/mingw and /LIBPATH for msvc
253 rem set "OPT_LIB32=%OPT_LIB32% /LIBPATH:%1"
254 set "OPT_LIB32=%OPT_LIB32% -L%1"
255 goto :eof
256
257 :concatLib64
258 rem Compiler options for Code::Blocks: -L for gcc/mingw and /LIBPATH for msvc
259 rem set "OPT_LIB64=%OPT_LIB64% /LIBPATH:%1"
260 set "OPT_LIB64=%OPT_LIB64% -L%1"
261 goto :eof