2 REM This batch file does an out-of-source CMake build in ../build_windows
3 REM This is for users who like to configure & build Blender with a single command.
4 setlocal EnableDelayedExpansion
5 setlocal ENABLEEXTENSIONS
7 set BLENDER_DIR_NOSPACES=%BLENDER_DIR: =%
8 if not "%BLENDER_DIR%"=="%BLENDER_DIR_NOSPACES%" (
9 echo There are spaces detected in the build path "%BLENDER_DIR%", this is currently not supported, exiting....
12 set BUILD_DIR=%BLENDER_DIR%..\build_windows
13 set BUILD_TYPE=Release
14 rem reset all variables so they do not get accidentally get carried over from previous builds
15 set BUILD_DIR_OVERRRIDE=
39 REM Build Configurations
40 ) else if "%1" == "noge" (
41 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DWITH_GAMEENGINE=OFF -DWITH_PLAYER=OFF
43 ) else if "%1" == "builddir" (
44 set BUILD_DIR_OVERRRIDE="%BLENDER_DIR%..\%2"
46 ) else if "%1" == "with_tests" (
47 set TESTS_CMAKE_ARGS=-DWITH_GTESTS=On
48 ) else if "%1" == "full" (
50 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
51 -C"%BLENDER_DIR%\build_files\cmake\config\blender_full.cmake"
52 ) else if "%1" == "lite" (
54 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
55 -C"%BLENDER_DIR%\build_files\cmake\config\blender_lite.cmake"
56 ) else if "%1" == "cycles" (
58 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
59 -C"%BLENDER_DIR%\build_files\cmake\config\cycles_standalone.cmake"
60 ) else if "%1" == "headless" (
62 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
63 -C"%BLENDER_DIR%\build_files\cmake\config\blender_headless.cmake"
64 ) else if "%1" == "bpy" (
66 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
67 -C"%BLENDER_DIR%\build_files\cmake\config\bpy_module.cmake"
68 ) else if "%1" == "release" (
70 ) else if "%1" == "x86" (
72 ) else if "%1" == "x64" (
74 ) else if "%1" == "2017" (
76 set BUILD_VS_YEAR=2017
77 ) else if "%1" == "2015" (
79 set BUILD_VS_YEAR=2015
80 ) else if "%1" == "2013" (
82 set BUILD_VS_YEAR=2013
83 ) else if "%1" == "packagename" (
84 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
86 ) else if "%1" == "nobuild" (
88 ) else if "%1" == "showhash" (
89 for /f "delims=" %%i in ('git rev-parse HEAD') do echo Branch_hash=%%i
90 cd release/datafiles/locale
91 for /f "delims=" %%i in ('git rev-parse HEAD') do echo Locale_hash=%%i
93 cd release/scripts/addons
94 for /f "delims=" %%i in ('git rev-parse HEAD') do echo Addons_Hash=%%i
97 REM Non-Build Commands
98 ) else if "%1" == "update" (
101 git submodule update --remote
103 ) else if "%1" == "clean" (
106 echo Command "%1" unknown, aborting!
113 if "%BUILD_ARCH%"=="" (
114 if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
115 set WINDOWS_ARCH= Win64
117 ) else if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
118 set WINDOWS_ARCH= Win64
124 ) else if "%BUILD_ARCH%"=="x64" (
125 set WINDOWS_ARCH= Win64
126 ) else if "%BUILD_ARCH%"=="x86" (
130 if "%BUILD_VS_VER%"=="" (
132 set BUILD_VS_YEAR=2013
135 if "%BUILD_ARCH%"=="x64" (
136 set MSBUILD_PLATFORM=x64
137 ) else if "%BUILD_ARCH%"=="x86" (
138 set MSBUILD_PLATFORM=win32
142 if "%target%"=="Release" (
143 rem for vc12 check for both cuda 7.5 and 8
144 if "%CUDA_PATH%"=="" (
145 echo Cuda Not found, aborting!
148 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
149 -C"%BLENDER_DIR%\build_files\cmake\config\blender_release.cmake"
153 REM Detect MSVC Installation for 2013-2015
154 if DEFINED VisualStudioVersion goto msvc_detect_finally
155 set VALUE_NAME=ProductDir
157 set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
158 for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO set MSVC_VC_DIR=%%C
159 if DEFINED MSVC_VC_DIR goto msvc_detect_finally
161 set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
162 for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO set MSVC_VC_DIR=%%C
163 if DEFINED MSVC_VC_DIR goto msvc_detect_finally
165 if DEFINED MSVC_VC_DIR call "%MSVC_VC_DIR%\vcvarsall.bat"
166 if DEFINED MSVC_VC_DIR goto sanity_checks
168 rem MSVC Build environment 2017 and up.
169 for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SXS\VS7" /v %BUILD_VS_VER%.0 2^>nul`) DO set MSVC_VS_DIR=%%C
170 if DEFINED MSVC_VS_DIR goto msvc_detect_finally_2017
172 for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\sxs\vs7" /v %BUILD_VS_VER%.0 2^>nul`) DO set MSVC_VS_DIR=%%C
173 if DEFINED MSVC_VS_DIR goto msvc_detect_finally_2017
174 :msvc_detect_finally_2017
175 if DEFINED MSVC_VS_DIR call "%MSVC_VS_DIR%\Common7\Tools\VsDevCmd.bat"
180 if %ERRORLEVEL% NEQ 0 (
181 if "%BUILD_VS_VER%"=="12" (
182 rem vs12 not found, try vs14
183 echo Visual Studio 2013 not found, trying Visual Studio 2015.
185 set BUILD_VS_YEAR=2015
188 echo Error: "MSBuild" command not in the PATH.
189 echo You must have MSVC installed and run this from the "Developer Command Prompt"
190 echo ^(available from Visual Studio's Start menu entry^), aborting!
196 set BUILD_DIR=%BUILD_DIR%_%TARGET%%BUILD_NGE%_%BUILD_ARCH%_vc%BUILD_VS_VER%_%BUILD_TYPE%
197 if NOT "%BUILD_DIR_OVERRRIDE%"=="" (
198 set BUILD_DIR=%BUILD_DIR_OVERRRIDE%
202 if %ERRORLEVEL% NEQ 0 (
203 echo Error: "CMake" command not in the PATH.
204 echo You must have CMake installed and added to your PATH, aborting!
207 if NOT EXIST %BLENDER_DIR%..\lib\nul (
208 echo Error: Path to libraries not found "%BLENDER_DIR%..\lib\"
209 echo This is needed for building, aborting!
213 echo Error: Convenience target not set
214 echo This is required for building, aborting!
219 set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%WINDOWS_ARCH%" %TESTS_CMAKE_ARGS%
220 if NOT EXIST %BUILD_DIR%\nul (
223 if "%MUST_CLEAN%"=="1" (
224 echo Cleaning %BUILD_DIR%
226 %BUILD_DIR%\Blender.sln ^
228 /property:Configuration=%BUILD_TYPE% ^
230 /p:platform=%MSBUILD_PLATFORM%
232 if %ERRORLEVEL% NEQ 0 (
233 echo Cleaned "%BUILD_DIR%"
237 REM Only configure on first run or when called with nobuild
238 if NOT EXIST %BUILD_DIR%\Blender.sln set MUST_CONFIGURE=1
239 if "%NOBUILD%"=="1" set MUST_CONFIGURE=1
241 if "%MUST_CONFIGURE%"=="1" (
248 if %ERRORLEVEL% NEQ 0 (
249 echo "Configuration Failed"
253 if DEFINED MSVC_VC_DIR echo call "%MSVC_VC_DIR%\vcvarsall.bat" > %BUILD_DIR%\rebuild.cmd
254 if DEFINED MSVC_VS_DIR echo call "%MSVC_VS_DIR%\Common7\Tools\VsDevCmd.bat" > %BUILD_DIR%\rebuild.cmd
255 echo cmake . >> %BUILD_DIR%\rebuild.cmd
257 %BUILD_DIR%\Blender.sln ^
259 /property:Configuration=%BUILD_TYPE% ^
262 /p:platform=%MSBUILD_PLATFORM% ^
263 /flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log >> %BUILD_DIR%\rebuild.cmd
265 %BUILD_DIR%\INSTALL.vcxproj ^
266 /property:Configuration=%BUILD_TYPE% ^
268 /p:platform=%MSBUILD_PLATFORM% >> %BUILD_DIR%\rebuild.cmd
270 if "%NOBUILD%"=="1" goto EOF
273 %BUILD_DIR%\Blender.sln ^
275 /property:Configuration=%BUILD_TYPE% ^
278 /p:platform=%MSBUILD_PLATFORM% ^
279 /flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log
281 if %ERRORLEVEL% NEQ 0 (
287 %BUILD_DIR%\INSTALL.vcxproj ^
288 /property:Configuration=%BUILD_TYPE% ^
290 /p:platform=%MSBUILD_PLATFORM%
293 echo At any point you can optionally modify your build configuration by editing:
294 echo "%BUILD_DIR%\CMakeCache.txt", then run "rebuild.cmd" in the build folder to build with the changes applied.
296 echo Blender successfully built, run from: "%BUILD_DIR%\bin\%BUILD_TYPE%\blender.exe"
301 echo Convenience targets
302 echo - release ^(identical to the official blender.org builds^)
303 echo - full ^(same as release minus the cuda kernels^)
309 echo Utilities ^(not associated with building^)
310 echo - clean ^(Target must be set^)
312 echo - nobuild ^(only generate project files^)
313 echo - showhash ^(Show git hashes of source tree^)
315 echo Configuration options
316 echo - with_tests ^(enable building unit tests^)
317 echo - noge ^(disable building game enginge and player^)
318 echo - debug ^(Build an unoptimized debuggable build^)
319 echo - packagename [newname] ^(override default cpack package name^)
320 echo - buildir [newdir] ^(override default build folder^)
321 echo - x86 ^(override host auto-detect and build 32 bit code^)
322 echo - x64 ^(override host auto-detect and build 64 bit code^)
323 echo - 2013 ^(build with visual studio 2013^)
324 echo - 2015 ^(build with visual studio 2015^) [EXPERIMENTAL]