From c9db7ceff2546e0fc2967bafa279cf352d30c510 Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Fri, 25 May 2018 21:46:42 -0600 Subject: make.bat: Add support for building with ninja. ninja is an alternative to msbuild designed for fast rebuilds. However there is no IDE support, builds only from the command line. Comparison between msbuild and ninja for a full build, build time in seconds. Full Clean Build msbuild 867.5 Ninja 801.2 Difference -66.3 (-7.6%) Minor Change msbuild 43.0 Ninja 14.9 Difference -28.1 (-64.4%) No Changes msbuild 23.0 Ninja 6.1 Difference -16.9 (-73.5%) --- build_files/cmake/platform/platform_win32.cmake | 2 ++ build_files/windows/build_msbuild.cmd | 4 +-- build_files/windows/build_ninja.cmd | 16 +++++++++++ build_files/windows/configure_msbuild.cmd | 2 ++ build_files/windows/configure_ninja.cmd | 35 +++++++++++++++++++++++++ make.bat | 16 ++++++++--- 6 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 build_files/windows/build_ninja.cmd create mode 100644 build_files/windows/configure_ninja.cmd diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index ef3ef7b6517..3520ac9c075 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -119,6 +119,8 @@ set(CMAKE_INSTALL_OPENMP_LIBRARIES ${WITH_OPENMP}) set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .) include(InstallRequiredSystemLibraries) +remove_cc_flag("/MDd" "/MD") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd /MP") diff --git a/build_files/windows/build_msbuild.cmd b/build_files/windows/build_msbuild.cmd index 37bd9abfe71..49958ed67c5 100644 --- a/build_files/windows/build_msbuild.cmd +++ b/build_files/windows/build_msbuild.cmd @@ -1,5 +1,5 @@ if "%NOBUILD%"=="1" goto EOF - +echo %TIME% > buildtime.txt msbuild ^ %BUILD_DIR%\Blender.sln ^ /target:build ^ @@ -22,5 +22,5 @@ msbuild ^ echo Error during install phase exit /b 1 ) - +echo %TIME% >>buildtime.txt :EOF \ No newline at end of file diff --git a/build_files/windows/build_ninja.cmd b/build_files/windows/build_ninja.cmd new file mode 100644 index 00000000000..f6b266e206d --- /dev/null +++ b/build_files/windows/build_ninja.cmd @@ -0,0 +1,16 @@ +if "%NOBUILD%"=="1" goto EOF +set HAS_ERROR= +cd %BUILD_DIR% +echo %TIME% > buildtime.txt +ninja install +if errorlevel 1 ( + set HAS_ERROR=1 + ) +echo %TIME% >>buildtime.txt +cd %BLENDER_DIR% + +if "%HAS_ERROR%" == "1" ( + echo Error during build, see %BUILD_DIR%\Build.log for details + 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 index 28884ce2fd7..135b7933ab2 100644 --- a/build_files/windows/configure_msbuild.cmd +++ b/build_files/windows/configure_msbuild.cmd @@ -42,6 +42,7 @@ if "%MUST_CONFIGURE%"=="1" ( echo call "%VCVARS%" %BUILD_ARCH% > %BUILD_DIR%\rebuild.cmd echo "%CMAKE%" . >> %BUILD_DIR%\rebuild.cmd +echo echo %%TIME%% ^> buildtime.txt >> %BUILD_DIR%\rebuild.cmd echo msbuild ^ %BUILD_DIR%\Blender.sln ^ /target:build ^ @@ -55,3 +56,4 @@ echo msbuild ^ /property:Configuration=%BUILD_TYPE% ^ /verbosity:minimal ^ /p:platform=%MSBUILD_PLATFORM% >> %BUILD_DIR%\rebuild.cmd +echo echo %%TIME%% ^>^> buildtime.txt >> %BUILD_DIR%\rebuild.cmd \ No newline at end of file diff --git a/build_files/windows/configure_ninja.cmd b/build_files/windows/configure_ninja.cmd new file mode 100644 index 00000000000..13797543bcc --- /dev/null +++ b/build_files/windows/configure_ninja.cmd @@ -0,0 +1,35 @@ +set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Ninja" %TESTS_CMAKE_ARGS% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% +:DetectionComplete +if NOT "%verbose%" == "" ( + echo BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% +) + +if NOT EXIST %BUILD_DIR%\nul ( + mkdir %BUILD_DIR% +) + +if "%MUST_CLEAN%"=="1" ( + echo Cleaning %BUILD_DIR% + cd %BUILD_DIR% + %CMAKE% cmake --build . --config Clean +) + +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% + + if %ERRORLEVEL% NEQ 0 ( + echo "Configuration Failed" + exit /b 1 + ) +) + +echo call "%VCVARS%" %BUILD_ARCH% > %BUILD_DIR%\rebuild.cmd +echo echo %%TIME%% ^> buildtime.txt >> %BUILD_DIR%\rebuild.cmd +echo ninja install >> %BUILD_DIR%\rebuild.cmd +echo echo %%TIME%% ^>^> buildtime.txt >> %BUILD_DIR%\rebuild.cmd \ No newline at end of file diff --git a/make.bat b/make.bat index ee65f4ad6c1..577f820438b 100644 --- a/make.bat +++ b/make.bat @@ -52,10 +52,18 @@ if errorlevel 1 goto EOF call "%BLENDER_DIR%\build_files\windows\check_submodules.cmd" if errorlevel 1 goto EOF -call "%BLENDER_DIR%\build_files\windows\configure_msbuild.cmd" -if errorlevel 1 goto EOF +if "%BUILD_WITH_NINJA%" == "" ( + call "%BLENDER_DIR%\build_files\windows\configure_msbuild.cmd" + if errorlevel 1 goto EOF -call "%BLENDER_DIR%\build_files\windows\build_msbuild.cmd" -if errorlevel 1 goto EOF + call "%BLENDER_DIR%\build_files\windows\build_msbuild.cmd" + if errorlevel 1 goto EOF +) else ( + call "%BLENDER_DIR%\build_files\windows\configure_ninja.cmd" + if errorlevel 1 goto EOF + + call "%BLENDER_DIR%\build_files\windows\build_ninja.cmd" + if errorlevel 1 goto EOF +) :EOF \ No newline at end of file -- cgit v1.2.3