make.bat: refactor make.bat
authorRay Molenkamp <github@lazydodo.com>
Fri, 25 May 2018 23:57:13 +0000 (17:57 -0600)
committerRay Molenkamp <github@lazydodo.com>
Fri, 25 May 2018 23:57:13 +0000 (17:57 -0600)
make.bat was starting to become hard to maintain, this refactors it into separate batch files for each stage of the process.

-Improved detection of msvc2013/2015
-Improved failure handling.
-Added check for working msbuild and C++ compiler
-Added verbose switch to ease trouble shooting.
-Added Check if svn/cmake/git are in the path before using them
-Display the build configuration before asking to download the libraries
-Offer an option to recover an interrupted checkout of the libraries.
-Automatically check out sub-modules in-case they are missing.

19 files changed:
build_files/windows/autodetect_msvc.cmd [new file with mode: 0644]
build_files/windows/build_msbuild.cmd [new file with mode: 0644]
build_files/windows/check_libraries.cmd [new file with mode: 0644]
build_files/windows/check_spaces_in_path.cmd [new file with mode: 0644]
build_files/windows/check_submodules.cmd [new file with mode: 0644]
build_files/windows/configure_msbuild.cmd [new file with mode: 0644]
build_files/windows/detect_architecture.cmd [new file with mode: 0644]
build_files/windows/detect_msvc2013.cmd [new file with mode: 0644]
build_files/windows/detect_msvc2015.cmd [new file with mode: 0644]
build_files/windows/detect_msvc2017.cmd [new file with mode: 0644]
build_files/windows/detect_msvc_classic.cmd [new file with mode: 0644]
build_files/windows/find_dependencies.cmd [new file with mode: 0644]
build_files/windows/parse_arguments.cmd [new file with mode: 0644]
build_files/windows/reset_variables.cmd [new file with mode: 0644]
build_files/windows/set_build_dir.cmd [new file with mode: 0644]
build_files/windows/show_hashes.cmd [new file with mode: 0644]
build_files/windows/show_help.cmd [new file with mode: 0644]
build_files/windows/update_sources.cmd [new file with mode: 0644]
make.bat

diff --git a/build_files/windows/autodetect_msvc.cmd b/build_files/windows/autodetect_msvc.cmd
new file mode 100644 (file)
index 0000000..6fce382
--- /dev/null
@@ -0,0 +1,17 @@
+echo No explicit msvc version requested, autodetecting version.
+
+call "%~dp0\detect_msvc2013.cmd"
+if %ERRORLEVEL% EQU 0 goto DetectionComplete
+
+call "%~dp0\detect_msvc2015.cmd"
+if %ERRORLEVEL% EQU 0 goto DetectionComplete
+
+call "%~dp0\detect_msvc2017.cmd"
+if %ERRORLEVEL% EQU 0 goto DetectionComplete
+
+echo Compiler Detection failed. Use verbose switch for more information. 
+exit /b 1
+
+:DetectionComplete
+echo Compiler Detection successfull, detected VS%BUILD_VS_YEAR%
+exit /b 0
\ No newline at end of file
diff --git a/build_files/windows/build_msbuild.cmd b/build_files/windows/build_msbuild.cmd
new file mode 100644 (file)
index 0000000..37bd9ab
--- /dev/null
@@ -0,0 +1,26 @@
+if "%NOBUILD%"=="1" goto EOF
+
+msbuild ^
+       %BUILD_DIR%\Blender.sln ^
+       /target:build ^
+       /property:Configuration=%BUILD_TYPE% ^
+       /maxcpucount:2 ^
+       /verbosity:minimal ^
+       /p:platform=%MSBUILD_PLATFORM% ^
+       /flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log 
+       if errorlevel 1 (
+               echo Error during build, see %BUILD_DIR%\Build.log for details 
+               exit /b 1
+       )
+
+msbuild ^
+       %BUILD_DIR%\INSTALL.vcxproj ^
+       /property:Configuration=%BUILD_TYPE% ^
+       /verbosity:minimal ^
+       /p:platform=%MSBUILD_PLATFORM% 
+       if errorlevel 1 (
+               echo Error during install phase
+               exit /b 1
+       )
+
+:EOF
\ No newline at end of file
diff --git a/build_files/windows/check_libraries.cmd b/build_files/windows/check_libraries.cmd
new file mode 100644 (file)
index 0000000..c8aad7c
--- /dev/null
@@ -0,0 +1,54 @@
+if "%BUILD_VS_YEAR%"=="2013" set BUILD_VS_LIBDIRPOST=vc12
+if "%BUILD_VS_YEAR%"=="2015" set BUILD_VS_LIBDIRPOST=vc14
+if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc14
+
+if "%BUILD_ARCH%"=="x64" (
+       set BUILD_VS_SVNDIR=win64_%BUILD_VS_LIBDIRPOST%
+) else if "%BUILD_ARCH%"=="x86" (
+       set BUILD_VS_SVNDIR=windows_%BUILD_VS_LIBDIRPOST%
+)
+set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
+
+if NOT "%verbose%" == "" (
+       echo Library Directory = "%BUILD_VS_LIBDIR%"
+)
+if NOT EXIST %BUILD_VS_LIBDIR% (
+       rem libs not found, but svn is on the system
+       echo 
+       if not "%SVN%"=="" (
+               echo.
+               echo The required external libraries in %BUILD_VS_LIBDIR% are missing
+               echo.
+               set /p GetLibs= "Would you like to download them? (y/n)"
+               if /I "!GetLibs!"=="Y" (
+                       echo.
+                       echo Downloading %BUILD_VS_SVNDIR% libraries, please wait.
+                       echo.
+:RETRY                 
+                       "%SVN%" checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/%BUILD_VS_SVNDIR% %BUILD_VS_LIBDIR%
+                       if errorlevel 1 (
+                               set /p LibRetry= "Error during donwload, retry? y/n"
+                               if /I "!LibRetry!"=="Y" (
+                                       cd %BUILD_VS_LIBDIR%
+                                       "%SVN%" cleanup 
+                                       cd %BLENDER_DIR%
+                                       goto RETRY
+                               )
+                               echo.
+                               echo Error: Download of external libraries failed. 
+                               echo This is needed for building, please manually run 'svn cleanup' and 'svn update' in
+                               echo %BUILD_VS_LIBDIR% , until this is resolved you CANNOT make a successfull blender build
+                               echo.
+                               exit /b 1
+                       )
+               )
+       )
+)
+
+if NOT EXIST %BUILD_VS_LIBDIR% (
+       echo.
+       echo Error: Required libraries not found at "%BUILD_VS_LIBDIR%"
+       echo This is needed for building, aborting!
+       echo.
+       exit /b 1
+)
\ No newline at end of file
diff --git a/build_files/windows/check_spaces_in_path.cmd b/build_files/windows/check_spaces_in_path.cmd
new file mode 100644 (file)
index 0000000..2e9300a
--- /dev/null
@@ -0,0 +1,6 @@
+set BLENDER_DIR_NOSPACES=%BLENDER_DIR: =%
+
+if not "%BLENDER_DIR%"=="%BLENDER_DIR_NOSPACES%" (
+       echo There are spaces detected in the build path "%BLENDER_DIR%", this is currently not supported, exiting....
+       exit /b 1
+)
\ No newline at end of file
diff --git a/build_files/windows/check_submodules.cmd b/build_files/windows/check_submodules.cmd
new file mode 100644 (file)
index 0000000..c0c6414
--- /dev/null
@@ -0,0 +1,20 @@
+if NOT exist "%BLENDER_DIR%/source/tools" (
+       echo Checking out sub-modules 
+       if not "%GIT%" == "" (
+               "%GIT%" submodule update --init --recursive --progress
+               if errorlevel 1 goto FAIL
+               "%GIT%" submodule foreach git checkout master
+               if errorlevel 1 goto FAIL
+               "%GIT%" submodule foreach git pull --rebase origin master
+               if errorlevel 1 goto FAIL
+               goto EOF
+       ) else (
+               echo Blender submodules not found, and git not found in path to retrieve them.
+               goto FAIL
+       )
+)
+goto EOF
+
+:FAIL
+exit /b 1
+:EOF
\ No newline at end of file
diff --git a/build_files/windows/configure_msbuild.cmd b/build_files/windows/configure_msbuild.cmd
new file mode 100644 (file)
index 0000000..28884ce
--- /dev/null
@@ -0,0 +1,57 @@
+set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%WINDOWS_ARCH%" %TESTS_CMAKE_ARGS%
+
+if "%BUILD_ARCH%"=="x64" (
+       set MSBUILD_PLATFORM=x64
+) else if "%BUILD_ARCH%"=="x86" (
+       set MSBUILD_PLATFORM=win32
+)
+
+if NOT EXIST %BUILD_DIR%\nul (
+       mkdir %BUILD_DIR%
+)
+
+if "%MUST_CLEAN%"=="1" (
+       echo Cleaning %BUILD_DIR%
+       msbuild ^
+               %BUILD_DIR%\Blender.sln ^
+               /target:clean ^
+               /property:Configuration=%BUILD_TYPE% ^
+               /verbosity:minimal ^
+               /p:platform=%MSBUILD_PLATFORM%
+)
+
+if NOT EXIST %BUILD_DIR%\Blender.sln set MUST_CONFIGURE=1
+if "%NOBUILD%"=="1" set MUST_CONFIGURE=1
+
+if "%MUST_CONFIGURE%"=="1" (
+
+       if NOT "%verbose%" == "" (
+               echo %CMAKE% %BUILD_CMAKE_ARGS% -H%BLENDER_DIR% -B%BUILD_DIR% 
+       )
+
+       cmake ^
+               %BUILD_CMAKE_ARGS% ^
+               -H%BLENDER_DIR% ^
+               -B%BUILD_DIR% 
+
+       if %ERRORLEVEL% NEQ 0 (
+               echo "Configuration Failed"
+               exit /b 1
+       )
+)
+
+echo call "%VCVARS%" %BUILD_ARCH% > %BUILD_DIR%\rebuild.cmd
+echo "%CMAKE%" . >> %BUILD_DIR%\rebuild.cmd
+echo msbuild ^
+       %BUILD_DIR%\Blender.sln ^
+       /target:build ^
+       /property:Configuration=%BUILD_TYPE% ^
+       /maxcpucount:2 ^
+       /verbosity:minimal ^
+       /p:platform=%MSBUILD_PLATFORM% ^
+       /flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log >> %BUILD_DIR%\rebuild.cmd
+echo msbuild ^
+       %BUILD_DIR%\INSTALL.vcxproj ^
+       /property:Configuration=%BUILD_TYPE% ^
+       /verbosity:minimal ^
+       /p:platform=%MSBUILD_PLATFORM% >> %BUILD_DIR%\rebuild.cmd
diff --git a/build_files/windows/detect_architecture.cmd b/build_files/windows/detect_architecture.cmd
new file mode 100644 (file)
index 0000000..cd21166
--- /dev/null
@@ -0,0 +1,16 @@
+if "%BUILD_ARCH%"=="" (
+       if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
+               set WINDOWS_ARCH= Win64
+               set BUILD_ARCH=x64
+       ) else if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
+               set WINDOWS_ARCH= Win64
+               set BUILD_ARCH=x64
+       ) else (
+               set WINDOWS_ARCH=
+               set BUILD_ARCH=x86
+       )
+) else if "%BUILD_ARCH%"=="x64" (
+       set WINDOWS_ARCH= Win64
+) else if "%BUILD_ARCH%"=="x86" (
+       set WINDOWS_ARCH=
+)
diff --git a/build_files/windows/detect_msvc2013.cmd b/build_files/windows/detect_msvc2013.cmd
new file mode 100644 (file)
index 0000000..5688d31
--- /dev/null
@@ -0,0 +1,3 @@
+set BUILD_VS_VER=12
+set BUILD_VS_YEAR=2013
+call "%~dp0\detect_msvc_classic.cmd"
\ No newline at end of file
diff --git a/build_files/windows/detect_msvc2015.cmd b/build_files/windows/detect_msvc2015.cmd
new file mode 100644 (file)
index 0000000..0818d1d
--- /dev/null
@@ -0,0 +1,3 @@
+set BUILD_VS_VER=14
+set BUILD_VS_YEAR=2015
+call "%~dp0\detect_msvc_classic.cmd"
\ No newline at end of file
diff --git a/build_files/windows/detect_msvc2017.cmd b/build_files/windows/detect_msvc2017.cmd
new file mode 100644 (file)
index 0000000..6a82adb
--- /dev/null
@@ -0,0 +1,70 @@
+if NOT "%verbose%" == "" (
+       echo Detecting msvc 2017
+)
+set BUILD_VS_VER=15
+set ProgramFilesX86=%ProgramFiles(x86)%
+if not exist "%ProgramFilesX86%" set ProgramFilesX86=%ProgramFiles%
+
+set vs_where=%ProgramFilesX86%\Microsoft Visual Studio\Installer\vswhere.exe
+if not exist "%vs_where%" (
+       if NOT "%verbose%" == "" (
+               echo Visual Studio 2017 ^(15.2 or newer^) is not detected
+               goto FAIL
+       )
+)
+for /f "usebackq tokens=1* delims=: " %%i in (`"%vs_where%" -latest %VSWHERE_ARGS% -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64`) do (
+       if /i "%%i"=="installationPath" set VS_InstallDir=%%j
+)
+
+if "%VS_InstallDir%"=="" (
+       if NOT "%verbose%" == "" (
+               echo Visual Studio is detected but the "Desktop development with C++" workload has not been instlled
+               goto FAIL
+       )
+)
+
+set VCVARS=%VS_InstallDir%\VC\Auxiliary\Build\vcvarsall.bat
+if exist "%VCVARS%" (
+       call "%VCVARS%" %BUILD_ARCH%
+) else (
+       if NOT "%verbose%" == "" (
+               echo "%VCVARS%" not found
+       )
+       goto FAIL
+)
+
+rem try msbuild
+msbuild /version > NUL 
+if errorlevel 1 (
+       if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% msbuild not found
+       )
+       goto FAIL
+)
+
+if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% msbuild found 
+)
+
+REM try the c++ compiler
+cl 2> NUL 1>&2
+if errorlevel 1 (
+       if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler not found
+       )
+       goto FAIL
+)
+
+if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler found
+)
+
+if NOT "%verbose%" == "" (
+       echo Visual Studio 2017 is detected successfully  
+)
+goto EOF
+
+:FAIL
+exit /b 1 
+
+:EOF
diff --git a/build_files/windows/detect_msvc_classic.cmd b/build_files/windows/detect_msvc_classic.cmd
new file mode 100644 (file)
index 0000000..61bfcf9
--- /dev/null
@@ -0,0 +1,69 @@
+if NOT "%verbose%" == "" (
+       echo Detecting msvc %BUILD_VS_YEAR%
+)
+set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
+for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v ProductDir 2^>nul`) DO set MSVC_VC_DIR=%%C
+if DEFINED MSVC_VC_DIR (
+       if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% on Win64 detected at "%MSVC_VC_DIR%"
+       )
+       goto msvc_detect_finally
+)
+
+REM Check 32 bits
+set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
+for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v ProductDir 2^>nul`) DO set MSVC_VC_DIR=%%C
+if DEFINED MSVC_VC_DIR (
+       if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% on Win32 detected at "%MSVC_VC_DIR%"
+       )
+       goto msvc_detect_finally
+)
+if NOT "%verbose%" == "" (
+       echo Visual Studio %BUILD_VS_YEAR% not found. 
+)
+goto FAIL
+:msvc_detect_finally
+set VCVARS=%MSVC_VC_DIR%\vcvarsall.bat
+if not exist "%VCVARS%" (
+       echo "%VCVARS%" not found.
+       goto FAIL
+)
+
+call "%vcvars%" %BUILD_ARCH%
+
+rem try msbuild
+msbuild /version > NUL 
+if errorlevel 1 (
+       if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% msbuild not found
+       )
+       goto FAIL
+)
+
+if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% msbuild found 
+)
+
+REM try the c++ compiler
+cl 2> NUL 1>&2
+if errorlevel 1 (
+       if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler not found
+       )
+       goto FAIL
+)
+
+if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler found
+)
+goto DetectionComplete
+
+:FAIL
+exit /b 1
+
+:DetectionComplete
+if NOT "%verbose%" == "" (
+               echo Visual Studio %BUILD_VS_YEAR% Detected successfuly 
+)
+exit /b 0
diff --git a/build_files/windows/find_dependencies.cmd b/build_files/windows/find_dependencies.cmd
new file mode 100644 (file)
index 0000000..219e980
--- /dev/null
@@ -0,0 +1,13 @@
+REM find all dependencies and set the corresponding environement variables. 
+for %%X in (svn.exe) do (set SVN=%%~$PATH:X)
+for %%X in (cmake.exe) do (set CMAKE=%%~$PATH:X)
+for %%X in (git.exe) do (set GIT=%%~$PATH:X)
+if NOT "%verbose%" == "" (
+       echo svn   : %SVN%
+       echo cmake : %CMAKE%
+       echo git   : %GIT%
+)
+if "%CMAKE%" == "" (
+       echo Cmake not found in path, required for building, exiting...
+       exit /b 1
+)
\ No newline at end of file
diff --git a/build_files/windows/parse_arguments.cmd b/build_files/windows/parse_arguments.cmd
new file mode 100644 (file)
index 0000000..5a82bf3
--- /dev/null
@@ -0,0 +1,78 @@
+set BUILD_DIR=%BLENDER_DIR%..\build_windows
+set BUILD_TYPE=Release
+:argv_loop
+if NOT "%1" == "" (
+
+       REM Help Message
+       if "%1" == "help" (
+               set SHOW_HELP=1
+               goto EOF
+       )
+       REM Build Types
+       if "%1" == "debug" (
+               set BUILD_TYPE=Debug
+       REM Build Configurations
+       ) else if "%1" == "noge" (
+               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DWITH_GAMEENGINE=OFF -DWITH_PLAYER=OFF
+               set BUILD_NGE=_noge
+       ) else if "%1" == "builddir" (
+               set BUILD_DIR_OVERRRIDE="%BLENDER_DIR%..\%2"
+               shift /1
+       ) else if "%1" == "with_tests" (
+               set TESTS_CMAKE_ARGS=-DWITH_GTESTS=On
+       ) else if "%1" == "full" (
+               set TARGET=Full
+               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
+                   -C"%BLENDER_DIR%\build_files\cmake\config\blender_full.cmake"
+       ) else if "%1" == "lite" (
+               set TARGET=Lite
+               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\blender_lite.cmake"
+       ) else if "%1" == "cycles" (
+               set TARGET=Cycles
+               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\cycles_standalone.cmake"
+       ) else if "%1" == "headless" (
+               set TARGET=Headless
+               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\blender_headless.cmake"
+       ) else if "%1" == "bpy" (
+               set TARGET=Bpy
+               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\bpy_module.cmake"
+       ) else if "%1" == "release" (
+               set TARGET=Release
+       ) else if "%1" == "x86" (
+               set BUILD_ARCH=x86
+       ) else if "%1" == "x64" (
+               set BUILD_ARCH=x64
+       ) else if "%1" == "2017" (
+               set BUILD_VS_YEAR=2017
+       ) else if "%1" == "2017pre" (
+               set BUILD_VS_YEAR=2017
+               set VSWHERE_ARGS=-prerelease
+       ) else if "%1" == "2015" (
+               set BUILD_VS_YEAR=2015
+       ) else if "%1" == "2013" (
+               set BUILD_VS_YEAR=2013
+       ) else if "%1" == "packagename" (
+               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
+               shift /1
+       ) else if "%1" == "nobuild" (
+               set NOBUILD=1
+       ) else if "%1" == "showhash" (
+               SET BUILD_SHOW_HASHES=1
+       REM Non-Build Commands
+       ) else if "%1" == "update" (
+               SET BUILD_UPDATE=1
+       ) else if "%1" == "ninja" (
+               SET BUILD_WITH_NINJA=1
+       ) else if "%1" == "clean" (
+               set MUST_CLEAN=1
+       ) else if "%1" == "verbose" (
+               set VERBOSE=1
+       ) else (
+               echo Command "%1" unknown, aborting!
+               exit /b 1
+       )
+       shift /1
+       goto argv_loop
+)
+:EOF
+exit /b 0
\ No newline at end of file
diff --git a/build_files/windows/reset_variables.cmd b/build_files/windows/reset_variables.cmd
new file mode 100644 (file)
index 0000000..34af3ff
--- /dev/null
@@ -0,0 +1,23 @@
+rem reset all variables so they do not get accidentally get carried over from previous builds
+set BUILD_DIR_OVERRRIDE=
+set BUILD_CMAKE_ARGS=
+set BUILD_ARCH=
+set BUILD_VS_VER=
+set BUILD_VS_YEAR=
+set BUILD_VS_LIBDIRPOST=
+set BUILD_VS_LIBDIR=
+set BUILD_VS_SVNDIR=
+set BUILD_NGE=
+set KEY_NAME=
+set MSBUILD_PLATFORM=
+set MUST_CLEAN=
+set NOBUILD=
+set TARGET=
+set VERBOSE=
+set WINDOWS_ARCH=
+set TESTS_CMAKE_ARGS=
+set VSWHERE_ARGS=
+set BUILD_UPDATE=
+set BUILD_SHOW_HASHES=
+set SHOW_HELP=
+set BUILD_WITH_NINJA=
diff --git a/build_files/windows/set_build_dir.cmd b/build_files/windows/set_build_dir.cmd
new file mode 100644 (file)
index 0000000..8842a52
--- /dev/null
@@ -0,0 +1,4 @@
+set BUILD_DIR=%BUILD_DIR%_%TARGET%%BUILD_NGE%_%BUILD_ARCH%_vc%BUILD_VS_VER%_%BUILD_TYPE%
+if NOT "%BUILD_DIR_OVERRRIDE%"=="" (
+       set BUILD_DIR=%BUILD_DIR_OVERRRIDE%
+)
\ No newline at end of file
diff --git a/build_files/windows/show_hashes.cmd b/build_files/windows/show_hashes.cmd
new file mode 100644 (file)
index 0000000..ff03673
--- /dev/null
@@ -0,0 +1,12 @@
+if "%GIT%" == "" (
+       echo Git not found, cannot show hashes.
+       goto EOF
+)
+cd "%BLENDER_DIR%"
+for /f "delims=" %%i in ('%GIT% rev-parse HEAD') do echo Branch_hash=%%i
+cd "%BLENDER_DIR%/release/datafiles/locale"
+for /f "delims=" %%i in ('%GIT% rev-parse HEAD') do echo Locale_hash=%%i
+cd "%BLENDER_DIR%/release/scripts/addons"
+for /f "delims=" %%i in ('%GIT% rev-parse HEAD') do echo Addons_Hash=%%i
+cd "%BLENDER_DIR%"
+:EOF
\ No newline at end of file
diff --git a/build_files/windows/show_help.cmd b/build_files/windows/show_help.cmd
new file mode 100644 (file)
index 0000000..0524e8a
--- /dev/null
@@ -0,0 +1,29 @@
+echo.
+echo Convenience targets
+echo - release ^(identical to the official blender.org builds^)
+echo - full ^(same as release minus the cuda kernels^)
+echo - lite
+echo - headless
+echo - cycles
+echo - bpy
+echo.
+echo Utilities ^(not associated with building^)
+echo - clean ^(Target must be set^)
+echo - update
+echo - nobuild ^(only generate project files^)
+echo - showhash ^(Show git hashes of source tree^)
+echo.
+echo Configuration options
+echo - verbose ^(enable diagnostic output during configuration^)
+echo - with_tests ^(enable building unit tests^)
+echo - noge ^(disable building game enginge and player^)
+echo - debug ^(Build an unoptimized debuggable build^)
+echo - packagename [newname] ^(override default cpack package name^)
+echo - buildir [newdir] ^(override default build folder^)
+echo - x86 ^(override host auto-detect and build 32 bit code^)
+echo - x64 ^(override host auto-detect and build 64 bit code^)
+echo - 2013 ^(build with visual studio 2013^)
+echo - 2015 ^(build with visual studio 2015^) [EXPERIMENTAL]
+echo - 2017 ^(build with visual studio 2017^) [EXPERIMENTAL]
+echo - 2017pre ^(build with visual studio 2017 pre-release^) [EXPERIMENTAL]
+echo.
diff --git a/build_files/windows/update_sources.cmd b/build_files/windows/update_sources.cmd
new file mode 100644 (file)
index 0000000..22d93fa
--- /dev/null
@@ -0,0 +1,16 @@
+if "%SVN%" == "" (
+       echo svn not found, cannot update libraries
+       goto UPDATE_GIT
+)
+"%SVN%" up "%BLENDER_DIR%/../lib/*"
+
+:UPDATE_GIT
+
+if "%GIT%" == "" (
+       echo Git not found, cannot update code
+       goto EOF
+)
+"%GIT%" pull --rebase
+"%GIT%" submodule foreach git pull --rebase origin master
+
+:EOF
\ No newline at end of file
index b9186b3..fc5450c 100644 (file)
--- a/make.bat
+++ b/make.bat
@@ -4,394 +4,59 @@ REM This is for users who like to configure & build Blender with a single comman
 setlocal EnableDelayedExpansion
 setlocal ENABLEEXTENSIONS
 set BLENDER_DIR=%~dp0
-set BLENDER_DIR_NOSPACES=%BLENDER_DIR: =%
-for %%X in (svn.exe) do (set HAS_SVN=%%~$PATH:X)
-if not "%BLENDER_DIR%"=="%BLENDER_DIR_NOSPACES%" (
-       echo There are spaces detected in the build path "%BLENDER_DIR%", this is currently not supported, exiting....
-       goto EOF
-)
-REM Locate the 32 bit program files folder, %ProgramFiles(x86)% doesn't exist on x86
-set ProgramFilesX86=%ProgramFiles(x86)%
-if not exist "%ProgramFilesX86%" set ProgramFilesX86=%ProgramFiles%
-set BUILD_DIR=%BLENDER_DIR%..\build_windows
-set BUILD_TYPE=Release
-rem reset all variables so they do not get accidentally get carried over from previous builds
-set BUILD_DIR_OVERRRIDE=
-set BUILD_CMAKE_ARGS=
-set BUILD_ARCH=
-set BUILD_VS_VER=
-set BUILD_VS_YEAR=
-set BUILD_VS_LIBDIRPOST=
-set BUILD_VS_LIBDIR=
-set BUILD_VS_SVNDIR=
-set BUILD_NGE=
-set KEY_NAME=
-set MSBUILD_PLATFORM=
-set MUST_CLEAN=
-set NOBUILD=
-set TARGET=
-set WINDOWS_ARCH=
-set TESTS_CMAKE_ARGS=
-set VSWHERE_ARGS=
-:argv_loop
-if NOT "%1" == "" (
-
-       REM Help Message
-       if "%1" == "help" (
-               goto HELP
-       )
-
-       REM Build Types
-       if "%1" == "debug" (
-               set BUILD_TYPE=Debug
-       REM Build Configurations
-       ) else if "%1" == "noge" (
-               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DWITH_GAMEENGINE=OFF -DWITH_PLAYER=OFF
-               set BUILD_NGE=_noge
-       ) else if "%1" == "builddir" (
-               set BUILD_DIR_OVERRRIDE="%BLENDER_DIR%..\%2"
-               shift /1
-       ) else if "%1" == "with_tests" (
-               set TESTS_CMAKE_ARGS=-DWITH_GTESTS=On
-       ) else if "%1" == "full" (
-               set TARGET=Full
-               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
-                   -C"%BLENDER_DIR%\build_files\cmake\config\blender_full.cmake"
-       ) else if "%1" == "lite" (
-               set TARGET=Lite
-               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
-                   -C"%BLENDER_DIR%\build_files\cmake\config\blender_lite.cmake"
-       ) else if "%1" == "cycles" (
-               set TARGET=Cycles
-               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
-                   -C"%BLENDER_DIR%\build_files\cmake\config\cycles_standalone.cmake"
-       ) else if "%1" == "headless" (
-               set TARGET=Headless
-               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
-                   -C"%BLENDER_DIR%\build_files\cmake\config\blender_headless.cmake"
-       ) else if "%1" == "bpy" (
-               set TARGET=Bpy
-               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
-                   -C"%BLENDER_DIR%\build_files\cmake\config\bpy_module.cmake"
-       ) else if "%1" == "release" (
-               set TARGET=Release
-       ) else if "%1" == "x86" (
-               set BUILD_ARCH=x86
-       ) else if "%1" == "x64" (
-               set BUILD_ARCH=x64
-       ) else if "%1" == "2017" (
-               set BUILD_VS_VER=15
-               set BUILD_VS_YEAR=2017
-               set BUILD_VS_LIBDIRPOST=vc14
-       ) else if "%1" == "2017pre" (
-               set BUILD_VS_VER=15
-               set BUILD_VS_YEAR=2017
-               set BUILD_VS_LIBDIRPOST=vc14
-               set VSWHERE_ARGS=-prerelease
-       ) else if "%1" == "2015" (
-               set BUILD_VS_VER=14
-               set BUILD_VS_YEAR=2015
-               set BUILD_VS_LIBDIRPOST=vc14
-       ) else if "%1" == "2013" (
-               set BUILD_VS_VER=12
-               set BUILD_VS_YEAR=2013
-               set BUILD_VS_LIBDIRPOST=vc12
-       ) else if "%1" == "packagename" (
-               set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
-               shift /1
-       ) else if "%1" == "nobuild" (
-               set NOBUILD=1
-       ) else if "%1" == "showhash" (
-               for /f "delims=" %%i in ('git rev-parse HEAD') do echo Branch_hash=%%i
-               cd release/datafiles/locale
-               for /f "delims=" %%i in ('git rev-parse HEAD') do echo Locale_hash=%%i
-               cd %~dp0
-               cd release/scripts/addons
-               for /f "delims=" %%i in ('git rev-parse HEAD') do echo Addons_Hash=%%i
-               cd %~dp0
-               goto EOF
-       REM Non-Build Commands
-       ) else if "%1" == "update" (
-               svn up ../lib/*
-               git pull --rebase
-               git submodule foreach git pull --rebase origin master
-               goto EOF
-       ) else if "%1" == "clean" (
-               set MUST_CLEAN=1
-       ) else (
-               echo Command "%1" unknown, aborting!
-               goto EOF
-       )
-
-       shift /1
-       goto argv_loop
-)
-if "%BUILD_ARCH%"=="" (
-       if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
-               set WINDOWS_ARCH= Win64
-               set BUILD_ARCH=x64
-       ) else if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
-               set WINDOWS_ARCH= Win64
-               set BUILD_ARCH=x64
-       ) else (
-               set WINDOWS_ARCH=
-               set BUILD_ARCH=x86
-       )
-) else if "%BUILD_ARCH%"=="x64" (
-       set WINDOWS_ARCH= Win64
-) else if "%BUILD_ARCH%"=="x86" (
-       set WINDOWS_ARCH=
-)
-
-if "%BUILD_VS_VER%"=="" (
-       set BUILD_VS_VER=12
-       set BUILD_VS_YEAR=2013
-       set BUILD_VS_LIBDIRPOST=vc12
-)
-
-if "%BUILD_ARCH%"=="x64" (
-       set MSBUILD_PLATFORM=x64
-) else if "%BUILD_ARCH%"=="x86" (
-       set MSBUILD_PLATFORM=win32
-)
-
-
-if "%target%"=="Release" (
-       rem for vc12 check for both cuda 7.5 and 8
-       if "%CUDA_PATH%"=="" (
-               echo Cuda Not found, aborting!
-               goto EOF
-       )
-       set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
-       -C"%BLENDER_DIR%\build_files\cmake\config\blender_release.cmake"
-)
-
-if "%BUILD_VS_VER%"=="15" goto DetectMSVC2017
-:DetectMSVC
-REM Detect MSVC Installation for 2013-2015
-if DEFINED VisualStudioVersion goto msvc_detect_finally
-set VALUE_NAME=ProductDir
-REM Check 64 bits
-set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
-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
-if DEFINED MSVC_VC_DIR goto msvc_detect_finally
-REM Check 32 bits
-set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
-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
-if DEFINED MSVC_VC_DIR goto msvc_detect_finally
-goto sanity_checks
-:msvc_detect_finally
-if DEFINED MSVC_VC_DIR call "%MSVC_VC_DIR%\vcvarsall.bat"
-if DEFINED MSVC_VC_DIR goto sanity_checks
-:DetectMSVC2017
-rem MSVC Build environment 2017 and up.
-set vs_where=%ProgramFilesX86%\Microsoft Visual Studio\Installer\vswhere.exe
-if not exist "%vs_where%" (
-       echo Visual Studio 2017 ^(15.2 or newer^) is not detected
-       echo Exiting..
-       goto eof
-)
-for /f "usebackq tokens=1* delims=: " %%i in (`"%vs_where%" -latest %VSWHERE_ARGS% -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64`) do (
-       if /i "%%i"=="installationPath" set VS_InstallDir=%%j
-)
-
-if "%VS_InstallDir%"=="" (
-       echo Visual Studio is detected but the "Desktop development with C++" workload has not been instlled
-       echo exiting..
-       goto eof
-)
 
-set vcvars=%VS_InstallDir%\VC\Auxiliary\Build\vcvarsall.bat
-if exist "%vcvars%" call "%vcvars%" %BUILD_ARCH%
+call "%BLENDER_DIR%\build_files\windows\reset_variables.cmd"
 
-:sanity_checks
-REM Sanity Checks
-where /Q msbuild
-if %ERRORLEVEL% EQU 0 goto DetectionComplete
-if "%BUILD_VS_VER%"=="12" (
-       rem vs12 not found, try vs14
-       echo Visual Studio 2013 not found, trying Visual Studio 2015.
-       set BUILD_VS_VER=14
-       set BUILD_VS_YEAR=2015
-       set BUILD_VS_LIBDIRPOST=vc14
-       goto DetectMSVC
-)
-else
-(
-       if "%BUILD_VS_VER%"=="14" (
-               rem vs14 not found, try vs15
-               echo Visual Studio 2015 not found, trying Visual Studio 2017.
-               set BUILD_VS_VER=15
-               set BUILD_VS_YEAR=2017
-               set BUILD_VS_LIBDIRPOST=vc14
-               goto DetectMSVC2017
-       ) else 
-       (
-               echo Error: "MSBuild" command not in the PATH.
-               echo You must have MSVC installed and run this from the "Developer Command Prompt"
-               echo ^(available from Visual Studio's Start menu entry^), aborting!
-               goto EOF
-       )
-)
-:DetectionComplete
+call "%BLENDER_DIR%\build_files\windows\check_spaces_in_path.cmd"
+if errorlevel 1 goto EOF
 
+call "%BLENDER_DIR%\build_files\windows\parse_arguments.cmd" %*
+if errorlevel 1 goto EOF
 
-set BUILD_DIR=%BUILD_DIR%_%TARGET%%BUILD_NGE%_%BUILD_ARCH%_vc%BUILD_VS_VER%_%BUILD_TYPE%
-if NOT "%BUILD_DIR_OVERRRIDE%"=="" (
-       set BUILD_DIR=%BUILD_DIR_OVERRRIDE%
-)
+call "%BLENDER_DIR%\build_files\windows\find_dependencies.cmd"
+if errorlevel 1 goto EOF
 
-where /Q cmake
-if %ERRORLEVEL% NEQ 0 (
-       echo Error: "CMake" command not in the PATH.
-       echo You must have CMake installed and added to your PATH, aborting!
+if "%SHOW_HELP%" == "1" (
+       call "%BLENDER_DIR%\build_files\windows\show_help.cmd"
        goto EOF
 )
 
-if "%BUILD_ARCH%"=="x64" (
-       set BUILD_VS_SVNDIR=win64_%BUILD_VS_LIBDIRPOST%
-) else if "%BUILD_ARCH%"=="x86" (
-       set BUILD_VS_SVNDIR=windows_%BUILD_VS_LIBDIRPOST%
-)
-set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
-
-if NOT EXIST %BUILD_VS_LIBDIR% (
-       rem libs not found, but svn is on the system
-       if not "%HAS_SVN%"=="" (
-               echo.
-               echo The required external libraries in %BUILD_VS_LIBDIR% are missing
-               echo.
-               set /p GetLibs= "Would you like to download them? (y/n)"
-               if /I "!GetLibs!"=="Y" (
-                       echo.
-                       echo Downloading %BUILD_VS_SVNDIR% libraries, please wait.
-                       echo.
-                       svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/%BUILD_VS_SVNDIR% %BUILD_VS_LIBDIR%
-               )
-       )
-)
-
-if NOT EXIST %BUILD_VS_LIBDIR% (
-       echo Error: Path to libraries not found "%BUILD_VS_LIBDIR%"
-       echo This is needed for building, aborting!
+if "%BUILD_UPDATE%" == "1" (
+       call "%BLENDER_DIR%\build_files\windows\update_sources.cmd"
        goto EOF
 )
 
-if "%TARGET%"=="" (
-       echo Error: Convenience target not set
-       echo This is required for building, aborting!
-       echo .
-       goto HELP
-)
-
-set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%WINDOWS_ARCH%" %TESTS_CMAKE_ARGS%
-if NOT EXIST %BUILD_DIR%\nul (
-       mkdir %BUILD_DIR%
-)
-if "%MUST_CLEAN%"=="1" (
-       echo Cleaning %BUILD_DIR%
-       msbuild ^
-               %BUILD_DIR%\Blender.sln ^
-               /target:clean ^
-               /property:Configuration=%BUILD_TYPE% ^
-               /verbosity:minimal ^
-               /p:platform=%MSBUILD_PLATFORM%
+call "%BLENDER_DIR%\build_files\windows\detect_architecture.cmd" 
 
-       if %ERRORLEVEL% NEQ 0 (
-               echo Cleaned "%BUILD_DIR%"
+if "%BUILD_VS_YEAR%" == "" (
+       call "%BLENDER_DIR%\build_files\windows\autodetect_msvc.cmd"
+       if errorlevel 1 (
+               echo Visual Studio not found ^(try with the 'verbose' switch for more information^)
+               goto EOF
        )
-       goto EOF
-)
-REM Only configure on first run or when called with nobuild
-if NOT EXIST %BUILD_DIR%\Blender.sln set MUST_CONFIGURE=1
-if "%NOBUILD%"=="1" set MUST_CONFIGURE=1
-
-if "%MUST_CONFIGURE%"=="1" (
-       cmake ^
-               %BUILD_CMAKE_ARGS% ^
-               -H%BLENDER_DIR% ^
-               -B%BUILD_DIR% ^
-               %BUILD_CMAKE_ARGS%
-
-       if %ERRORLEVEL% NEQ 0 (
-               echo "Configuration Failed"
+) else (
+       call "%BLENDER_DIR%\build_files\windows\detect_msvc%BUILD_VS_YEAR%.cmd"
+       if errorlevel 1 (
+               echo Visual Studio %BUILD_VS_YEAR% not found ^(try with the 'verbose' switch for more information^)
                goto EOF
        )
 )
-if DEFINED MSVC_VC_DIR echo call "%MSVC_VC_DIR%\vcvarsall.bat" > %BUILD_DIR%\rebuild.cmd
-if DEFINED MSVC_VS_DIR echo call "%MSVC_VS_DIR%\Common7\Tools\VsDevCmd.bat" > %BUILD_DIR%\rebuild.cmd
-echo cmake . >> %BUILD_DIR%\rebuild.cmd
-echo msbuild ^
-       %BUILD_DIR%\Blender.sln ^
-       /target:build ^
-       /property:Configuration=%BUILD_TYPE% ^
-       /maxcpucount:2 ^
-       /verbosity:minimal ^
-       /p:platform=%MSBUILD_PLATFORM% ^
-       /flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log >> %BUILD_DIR%\rebuild.cmd
-echo msbuild ^
-       %BUILD_DIR%\INSTALL.vcxproj ^
-       /property:Configuration=%BUILD_TYPE% ^
-       /verbosity:minimal ^
-       /p:platform=%MSBUILD_PLATFORM% >> %BUILD_DIR%\rebuild.cmd
 
-if "%NOBUILD%"=="1" goto EOF
+call "%BLENDER_DIR%\build_files\windows\set_build_dir.cmd" 
 
-msbuild ^
-       %BUILD_DIR%\Blender.sln ^
-       /target:build ^
-       /property:Configuration=%BUILD_TYPE% ^
-       /maxcpucount:2 ^
-       /verbosity:minimal ^
-       /p:platform=%MSBUILD_PLATFORM% ^
-       /flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log
+echo Building blender with VS%BUILD_VS_YEAR% for %BUILD_ARCH% in %BUILD_DIR%
 
-if %ERRORLEVEL% NEQ 0 (
-       echo "Build Failed"
-       goto EOF
-)
+call "%BLENDER_DIR%\build_files\windows\check_libraries.cmd" 
+if errorlevel 1 goto EOF
+
+call "%BLENDER_DIR%\build_files\windows\check_submodules.cmd" 
+if errorlevel 1 goto EOF
 
-msbuild ^
-       %BUILD_DIR%\INSTALL.vcxproj ^
-       /property:Configuration=%BUILD_TYPE% ^
-       /verbosity:minimal ^
-       /p:platform=%MSBUILD_PLATFORM%
+call "%BLENDER_DIR%\build_files\windows\configure_msbuild.cmd" 
+if errorlevel 1 goto EOF
 
-echo.
-echo At any point you can optionally modify your build configuration by editing:
-echo "%BUILD_DIR%\CMakeCache.txt", then run "rebuild.cmd" in the build folder to build with the changes applied.
-echo.
-echo Blender successfully built, run from: "%BUILD_DIR%\bin\%BUILD_TYPE%\blender.exe"
-echo.
-goto EOF
-:HELP
-       echo.
-       echo Convenience targets
-       echo - release ^(identical to the official blender.org builds^)
-       echo - full ^(same as release minus the cuda kernels^)
-       echo - lite
-       echo - headless
-       echo - cycles
-       echo - bpy
-       echo.
-       echo Utilities ^(not associated with building^)
-       echo - clean ^(Target must be set^)
-       echo - update
-       echo - nobuild ^(only generate project files^)
-       echo - showhash ^(Show git hashes of source tree^)
-       echo.
-       echo Configuration options
-       echo - with_tests ^(enable building unit tests^)
-       echo - noge ^(disable building game enginge and player^)
-       echo - debug ^(Build an unoptimized debuggable build^)
-       echo - packagename [newname] ^(override default cpack package name^)
-       echo - buildir [newdir] ^(override default build folder^)
-       echo - x86 ^(override host auto-detect and build 32 bit code^)
-       echo - x64 ^(override host auto-detect and build 64 bit code^)
-       echo - 2013 ^(build with visual studio 2013^)
-       echo - 2015 ^(build with visual studio 2015^) [EXPERIMENTAL]
-       echo - 2017 ^(build with visual studio 2017^) [EXPERIMENTAL]
-       echo - 2017pre ^(build with visual studio 2017 pre-release^) [EXPERIMENTAL]
-       echo.
+call "%BLENDER_DIR%\build_files\windows\build_msbuild.cmd" 
+if errorlevel 1 goto EOF
 
 :EOF
+echo make2 done