From 857e4e04d89f30727d60e16c7320a72718a76d1a Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Fri, 25 May 2018 17:57:13 -0600 Subject: make.bat: refactor make.bat 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. --- make.bat | 401 ++++++--------------------------------------------------------- 1 file changed, 33 insertions(+), 368 deletions(-) (limited to 'make.bat') diff --git a/make.bat b/make.bat index b9186b3388c..fc5450c873d 100644 --- 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 -- cgit v1.2.3