diff options
Diffstat (limited to 'build_files')
25 files changed, 411 insertions, 100 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index 9756ad28454..c7d8de22890 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -128,6 +128,7 @@ if(NOT WIN32 OR ENABLE_MINGW64) include(cmake/ogg.cmake) include(cmake/vorbis.cmake) include(cmake/theora.cmake) + include(cmake/opus.cmake) include(cmake/vpx.cmake) include(cmake/x264.cmake) include(cmake/xvidcore.cmake) @@ -157,4 +158,9 @@ if(UNIX) include(cmake/sqlite.cmake) endif() +if(UNIX AND NOT APPLE) + include(cmake/libglu.cmake) + include(cmake/mesa.cmake) +endif() + include(cmake/harvest.cmake) diff --git a/build_files/build_environment/cmake/check_software.cmake b/build_files/build_environment/cmake/check_software.cmake index 30dea754e20..f5774551879 100644 --- a/build_files/build_environment/cmake/check_software.cmake +++ b/build_files/build_environment/cmake/check_software.cmake @@ -17,10 +17,16 @@ # ***** END GPL LICENSE BLOCK ***** if(UNIX) + if(APPLE) + set(_libtoolize_name glibtoolize) + else() + set(_libtoolize_name libtoolize) + endif() + set(_required_software autoconf automake - libtoolize + ${_libtoolize_name} nasm yasm tclsh diff --git a/build_files/build_environment/cmake/ffmpeg.cmake b/build_files/build_environment/cmake/ffmpeg.cmake index 27d817e8948..9ff52914f53 100644 --- a/build_files/build_environment/cmake/ffmpeg.cmake +++ b/build_files/build_environment/cmake/ffmpeg.cmake @@ -16,10 +16,10 @@ # # ***** END GPL LICENSE BLOCK ***** -set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include") -set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib") +set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/opus/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include") +set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/opus/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib") set(FFMPEG_EXTRA_FLAGS --pkg-config-flags=--static --extra-cflags=${FFMPEG_CFLAGS} --extra-ldflags=${FFMPEG_LDFLAGS}) -set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}) +set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}:${mingw_LIBDIR}/vpx/lib/pkgconfig:${mingw_LIBDIR}/theora/lib/pkgconfig:${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/opus/lib/pkgconfig:) if(WIN32) set(FFMPEG_ENV set ${FFMPEG_ENV} &&) @@ -73,6 +73,7 @@ ExternalProject_Add(external_ffmpeg --disable-libgsm --disable-libspeex --enable-libvpx + --enable-libopus --prefix=${LIBDIR}/ffmpeg --enable-libtheora --enable-libvorbis @@ -130,6 +131,7 @@ add_dependencies( external_openjpeg external_xvidcore external_x264 + external_opus external_vpx external_theora external_vorbis diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index 526e72e2e33..cc596b2c786 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -192,6 +192,7 @@ harvest(theora/lib ffmpeg/lib "*.a") harvest(tiff/include tiff/include "*.h") harvest(tiff/lib tiff/lib "*.a") harvest(vorbis/lib ffmpeg/lib "*.a") +harvest(opus/lib ffmpeg/lib "*.a") harvest(vpx/lib ffmpeg/lib "*.a") harvest(webp/lib ffmpeg/lib "*.a") harvest(x264/lib ffmpeg/lib "*.a") @@ -199,4 +200,9 @@ harvest(xvidcore/lib ffmpeg/lib "*.a") harvest(embree/include embree/include "*.h") harvest(embree/lib embree/lib "*.a") +if(UNIX AND NOT APPLE) + harvest(libglu/lib mesa/lib "*.so*") + harvest(mesa/lib mesa/lib "*.so*") +endif() + endif() diff --git a/build_files/build_environment/cmake/libglu.cmake b/build_files/build_environment/cmake/libglu.cmake new file mode 100644 index 00000000000..d1b7647eca3 --- /dev/null +++ b/build_files/build_environment/cmake/libglu.cmake @@ -0,0 +1,40 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ***** END GPL LICENSE BLOCK ***** + +set(LIBGLU_CFLAGS "-static-libgcc") +set(LIBGLU_CXXFLAGS "-static-libgcc -static-libstdc++ -Bstatic -lstdc++ -Bdynamic -l:libstdc++.a") +set(LIBGLU_LDFLAGS "-pthread -static-libgcc -static-libstdc++ -Bstatic -lstdc++ -Bdynamic -l:libstdc++.a") + +set(LIBGLU_EXTRA_FLAGS + CFLAGS=${LIBGLU_CFLAGS} + CXXFLAGS=${LIBGLU_CXXFLAGS} + LDFLAGS=${LIBGLU_LDFLAGS} +) + +ExternalProject_Add(external_libglu + URL ${LIBGLU_URI} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH MD5=${LIBGLU_HASH} + PREFIX ${BUILD_DIR}/libglu + CONFIGURE_COMMAND ${CONFIGURE_ENV} && + cd ${BUILD_DIR}/libglu/src/external_libglu/ && + ${CONFIGURE_COMMAND_NO_TARGET} --prefix=${LIBDIR}/libglu ${LIBGLU_EXTRA_FLAGS} + BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/libglu/src/external_libglu/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/libglu/src/external_libglu/ && make install + INSTALL_DIR ${LIBDIR}/libglu +) diff --git a/build_files/build_environment/cmake/mesa.cmake b/build_files/build_environment/cmake/mesa.cmake new file mode 100644 index 00000000000..6994d1c5813 --- /dev/null +++ b/build_files/build_environment/cmake/mesa.cmake @@ -0,0 +1,54 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ***** END GPL LICENSE BLOCK ***** + +set(MESA_CFLAGS "-static-libgcc") +set(MESA_CXXFLAGS "-static-libgcc -static-libstdc++ -Bstatic -lstdc++ -Bdynamic -l:libstdc++.a") +set(MESA_LDFLAGS "-L${LIBDIR}/zlib/lib -pthread -static-libgcc -static-libstdc++ -Bstatic -lstdc++ -Bdynamic -l:libstdc++.a -l:libz_pic.a") + +set(MESA_EXTRA_FLAGS + CFLAGS=${MESA_CFLAGS} + CXXFLAGS=${MESA_CXXFLAGS} + LDFLAGS=${MESA_LDFLAGS} + --enable-glx=gallium-xlib + --with-gallium-drivers=swrast + --disable-dri + --disable-gbm + --disable-egl + --disable-gles1 + --disable-gles2 + --disable-llvm-shared-libs + --with-llvm-prefix=${LIBDIR}/llvm +) + +ExternalProject_Add(external_mesa + URL ${MESA_URI} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH MD5=${MESA_HASH} + PREFIX ${BUILD_DIR}/mesa + CONFIGURE_COMMAND ${CONFIGURE_ENV} && + cd ${BUILD_DIR}/mesa/src/external_mesa/ && + ${CONFIGURE_COMMAND_NO_TARGET} --prefix=${LIBDIR}/mesa ${MESA_EXTRA_FLAGS} + BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/mesa/src/external_mesa/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/mesa/src/external_mesa/ && make install + INSTALL_DIR ${LIBDIR}/mesa +) + +add_dependencies( + external_mesa + ll +) diff --git a/build_files/build_environment/cmake/opus.cmake b/build_files/build_environment/cmake/opus.cmake new file mode 100644 index 00000000000..abaad94fa28 --- /dev/null +++ b/build_files/build_environment/cmake/opus.cmake @@ -0,0 +1,35 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ***** END GPL LICENSE BLOCK ***** + +ExternalProject_Add(external_opus + URL ${OPUS_URI} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH SHA256=${OPUS_HASH} + PREFIX ${BUILD_DIR}/opus + CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/opus/src/external_opus/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/opus + --disable-shared + --enable-static + --with-pic + BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/opus/src/external_opus/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/opus/src/external_opus/ && make install + INSTALL_DIR ${LIBDIR}/opus +) + +if(MSVC) + set_target_properties(external_opus PROPERTIES FOLDER Mingw) +endif() diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index c3b713096d6..1c9e5c5a4f6 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -192,6 +192,10 @@ set(VPX_VERSION 1.7.0) set(VPX_URI https://github.com/webmproject/libvpx/archive/v${VPX_VERSION}/libvpx-v${VPX_VERSION}.tar.gz) set(VPX_HASH 1fec931eb5c94279ad219a5b6e0202358e94a93a90cfb1603578c326abfc1238) +set(OPUS_VERSION 1.3.1) +set(OPUS_URI https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz) +set(OPUS_HASH 65b58e1e25b2a114157014736a3d9dfeaad8d41be1c8179866f144a2fb44ff9d) + set(X264_URI http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20180811-2245-stable.tar.bz2) set(X264_HASH ae8a868a0e236a348b35d79f3ee80294b169d1195408b689f9851383661ed7aa) @@ -306,3 +310,11 @@ set(EMBREE_HASH 3d4a1147002ff43939d45140aa9d6fb8) set(OIDN_VERSION 1.0.0) set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.zip) set(OIDN_HASH 19fe67b0164e8f020ac8a4f520defe60) + +set(LIBGLU_VERSION 9.0.1) +set(LIBGLU_URI ftp://ftp.freedesktop.org/pub/mesa/glu/glu-${LIBGLU_VERSION}.tar.xz) +set(LIBGLU_HASH 151aef599b8259efe9acd599c96ea2a3) + +set(MESA_VERSION 18.3.1) +set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa//mesa-${MESA_VERSION}.tar.xz) +set(MESA_HASH d60828056d77bfdbae0970f9b15fb1be) diff --git a/build_files/build_environment/cmake/vpx.cmake b/build_files/build_environment/cmake/vpx.cmake index 1c3a7081b59..741493859e2 100644 --- a/build_files/build_environment/cmake/vpx.cmake +++ b/build_files/build_environment/cmake/vpx.cmake @@ -49,6 +49,8 @@ ExternalProject_Add(external_vpx --disable-avx2 --disable-unit-tests --disable-examples + --enable-vp8 + --enable-vp9 ${VPX_EXTRA_FLAGS} BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make -j${MAKE_THREADS} INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make install diff --git a/build_files/build_environment/install_deps.sh b/build_files/build_environment/install_deps.sh index f594add3a5b..fd3ebe241a2 100755 --- a/build_files/build_environment/install_deps.sh +++ b/build_files/build_environment/install_deps.sh @@ -431,6 +431,9 @@ X264_VERSION_MIN=0.118 VPX_USE=false VPX_VERSION_MIN=0.9.7 VPX_DEV="" +OPUS_USE=false +OPUS_VERSION_MIN=1.1.1 +OPUS_DEV="" MP3LAME_USE=false MP3LAME_DEV="" OPENJPEG_USE=false @@ -2754,6 +2757,10 @@ compile_FFmpeg() { extra="$extra --enable-libvpx" fi + if [ "$OPUS_USE" = true ]; then + extra="$extra --enable-libopus" + fi + if [ "$MP3LAME_USE" = true ]; then extra="$extra --enable-libmp3lame" fi @@ -2991,6 +2998,14 @@ install_DEB() { install_packages_DEB $VPX_DEV VPX_USE=true fi + + PRINT "" + OPUS_DEV="libopus-dev" + check_package_version_ge_DEB $OPUS_DEV $OPUS_VERSION_MIN + if [ $? -eq 0 ]; then + install_packages_DEB $OPUS_DEV + OPUS_USE=true + fi fi # Check cmake/glew versions and disable features for older distros. @@ -3601,8 +3616,17 @@ install_RPM() { install_packages_RPM $VPX_DEV VPX_USE=true fi + PRINT "" install_packages_RPM libspnav-devel + + PRINT "" + OPUS_DEV="libopus-devel" + check_package_version_ge_RPM $OPUS_DEV $OPUS_VERSION_MIN + if [ $? -eq 0 ]; then + install_packages_RPM $OPUS_DEV + OPUS_USE=true + fi fi PRINT "" @@ -4077,6 +4101,14 @@ install_ARCH() { install_packages_ARCH $VPX_DEV VPX_USE=true fi + + PRINT "" + OPUS_DEV="opus" + check_package_version_ge_ARCH $OPUS_DEV $OPUS_VERSION_MIN + if [ $? -eq 0 ]; then + install_packages_ARCH $OPUS_DEV + OPUS_USE=true + fi fi @@ -4633,6 +4665,10 @@ print_info_ffmpeglink() { _packages="$_packages $VPX_DEV" fi + if [ "$OPUS_USE" = true ]; then + _packages="$_packages $OPUS_DEV" + fi + if [ "$MP3LAME_USE" = true ]; then _packages="$_packages $MP3LAME_DEV" fi diff --git a/build_files/buildbot/buildbot_utils.py b/build_files/buildbot/buildbot_utils.py index 6891b91aa1e..eded6646671 100644 --- a/build_files/buildbot/buildbot_utils.py +++ b/build_files/buildbot/buildbot_utils.py @@ -20,6 +20,7 @@ import argparse import os +import re import subprocess import sys @@ -27,6 +28,7 @@ class Builder: def __init__(self, name, branch): self.name = name self.branch = branch + self.is_release_branch = re.match("^blender-v(.*)-release$", branch) is not None # Buildbot runs from build/ directory self.blender_dir = os.path.abspath(os.path.join('..', 'blender.git')) diff --git a/build_files/buildbot/config/blender_linux.cmake b/build_files/buildbot/config/blender_linux.cmake index 6806684e88b..2047c28deb9 100644 --- a/build_files/buildbot/config/blender_linux.cmake +++ b/build_files/buildbot/config/blender_linux.cmake @@ -2,33 +2,20 @@ include("${CMAKE_CURRENT_LIST_DIR}/../../cmake/config/blender_release.cmake") -# For libc-2.24 we are using chroot which runs on a 64bit system. -# There we can not use CPU bitness check since it is always 64bit. So instead -# we check for a specific libraries. -# -# Other builders we are running in a bare virtual machine, and the libraries -# are installed to /opt/. -# We assume that only 64bit builders exists in such configuration. -if(EXISTS "/lib/x86_64-linux-gnu/libc-2.24.so") - message(STATUS "Building in GLibc-2.24 environment") - set(LIBDIR_NAME "linux_x86_64") -elseif(EXISTS "/lib/i386-linux-gnu//libc-2.24.so") - message(STATUS "Building in GLibc-2.24 environment") - set(LIBDIR_NAME "linux_i686") -else() - message(STATUS "Building in generic 64bit environment") - set(LIBDIR_NAME "linux_x86_64") -endif() +message(STATUS "Building in CentOS 7 64bit environment") +set(LIBDIR_NAME "linux_centos7_x86_64") # Default to only build Blender set(WITH_BLENDER ON CACHE BOOL "" FORCE) # ######## Linux-specific build options ######## # Options which are specific to Linux-only platforms + set(WITH_DOC_MANPAGE OFF CACHE BOOL "" FORCE) # ######## Official release-specific build options ######## # Options which are specific to Linux release builds only + set(WITH_JACK_DYNLOAD ON CACHE BOOL "" FORCE) set(WITH_SDL_DYNLOAD ON CACHE BOOL "" FORCE) set(WITH_SYSTEM_GLEW OFF CACHE BOOL "" FORCE) @@ -40,7 +27,7 @@ set(WITH_PYTHON_INSTALL_REQUESTS ON CACHE BOOL "" FORCE) # ######## Release environment specific settings ######## -set(LIBDIR "/opt/blender-deps/${LIBDIR_NAME}" CACHE BOOL "" FORCE) +set(LIBDIR "${CMAKE_CURRENT_LIST_DIR}/../../../../lib/${LIBDIR_NAME}" CACHE STRING "" FORCE) # Platform specific configuration, to ensure static linking against everything. diff --git a/build_files/buildbot/slave_pack.py b/build_files/buildbot/slave_pack.py index a7729843a0e..5bef2b81739 100644 --- a/build_files/buildbot/slave_pack.py +++ b/build_files/buildbot/slave_pack.py @@ -32,8 +32,9 @@ def get_package_name(builder, platform=None): package_name = 'blender-' + info.full_version if platform: package_name += '-' + platform - if builder.branch != 'master' and info.is_development_build: - package_name = builder.branch + "-" + package_name + if not (builder.branch == 'master' or builder.is_release_branch): + if info.is_development_build: + package_name = builder.branch + "-" + package_name return package_name @@ -47,6 +48,7 @@ def create_buildbot_upload_zip(builder, package_files): try: z = zipfile.ZipFile(buildbot_upload_zip, "w", compression=zipfile.ZIP_STORED) for filepath, filename in package_files: + print("Packaged", filename) z.write(filepath, arcname=filename) z.close() except Exception as ex: @@ -147,20 +149,6 @@ def pack_linux(builder): py_target = os.path.join(builder.install_dir, info.version) buildbot_utils.call(builder.command_prefix + ['find', py_target, '-iname', '*.so', '-exec', 'strip', '-s', '{}', ';']) - # Copy all specific files which are too specific to be copied by - # the CMake rules themselves - print("Copying extra scripts and libs...") - - extra = '/' + os.path.join('home', 'sources', 'release-builder', 'extra') - mesalibs = os.path.join(extra, 'mesalibs' + str(builder.bits) + '.tar.bz2') - software_gl = os.path.join(builder.blender_dir, 'release', 'bin', 'blender-softwaregl') - icons = os.path.join(builder.blender_dir, 'release', 'freedesktop', 'icons') - - os.system('tar -xpf %s -C %s' % (mesalibs, builder.install_dir)) - os.system('cp %s %s' % (software_gl, builder.install_dir)) - os.system('cp -r %s %s' % (icons, builder.install_dir)) - os.system('chmod 755 %s' % (os.path.join(builder.install_dir, 'blender-softwaregl'))) - # Construct package name platform_name = 'linux-' + blender_glibc + '-' + blender_arch package_name = get_package_name(builder, platform_name) diff --git a/build_files/buildbot/slave_update.py b/build_files/buildbot/slave_update.py index 39f449b87bc..36a7ae31c84 100644 --- a/build_files/buildbot/slave_update.py +++ b/build_files/buildbot/slave_update.py @@ -28,4 +28,4 @@ if __name__ == "__main__": # Run make update which handles all libraries and submodules. make_update = os.path.join(builder.blender_dir, "build_files", "utils", "make_update.py") - buildbot_utils.call([sys.executable, make_update, '--no-blender', "--use-tests"]) + buildbot_utils.call([sys.executable, make_update, '--no-blender', "--use-tests", "--use-centos-libraries"]) diff --git a/build_files/cmake/Modules/GTestTesting.cmake b/build_files/cmake/Modules/GTestTesting.cmake index 1c98a6456b8..a93e829e6b0 100644 --- a/build_files/cmake/Modules/GTestTesting.cmake +++ b/build_files/cmake/Modules/GTestTesting.cmake @@ -48,6 +48,14 @@ macro(BLENDER_SRC_GTEST_EX NAME SRC EXTRA_LIBS DO_ADD_TEST) if(WITH_OPENMP_STATIC) target_link_libraries(${TARGET_NAME} ${OpenMP_LIBRARIES}) endif() + + get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(GENERATOR_IS_MULTI_CONFIG) + string(REPLACE "\${BUILD_TYPE}" "$<CONFIG>" TEST_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) + else() + string(REPLACE "\${BUILD_TYPE}" "" TEST_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) + endif() + set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTS_OUTPUT_DIR}" RUNTIME_OUTPUT_DIRECTORY_RELEASE "${TESTS_OUTPUT_DIR}" diff --git a/build_files/cmake/config/blender_full.cmake b/build_files/cmake/config/blender_full.cmake index 403d38f6a05..4c47c4c4dba 100644 --- a/build_files/cmake/config/blender_full.cmake +++ b/build_files/cmake/config/blender_full.cmake @@ -49,6 +49,7 @@ set(WITH_PYTHON_INSTALL ON CACHE BOOL "" FORCE) set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE) set(WITH_RAYOPTIMIZATION ON CACHE BOOL "" FORCE) set(WITH_SDL ON CACHE BOOL "" FORCE) +set(WITH_TBB ON CACHE BOOL "" FORCE) set(WITH_X11_XINPUT ON CACHE BOOL "" FORCE) set(WITH_X11_XF86VMODE ON CACHE BOOL "" FORCE) diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake index 37cbfa27972..6d0f160c764 100644 --- a/build_files/cmake/config/blender_lite.cmake +++ b/build_files/cmake/config/blender_lite.cmake @@ -54,5 +54,6 @@ set(WITH_OPENVDB OFF CACHE BOOL "" FORCE) set(WITH_QUADRIFLOW OFF CACHE BOOL "" FORCE) set(WITH_RAYOPTIMIZATION OFF CACHE BOOL "" FORCE) set(WITH_SDL OFF CACHE BOOL "" FORCE) +set(WITH_TBB OFF CACHE BOOL "" FORCE) set(WITH_X11_XINPUT OFF CACHE BOOL "" FORCE) set(WITH_X11_XF86VMODE OFF CACHE BOOL "" FORCE) diff --git a/build_files/cmake/config/blender_release.cmake b/build_files/cmake/config/blender_release.cmake index cb338f40a7b..cf849519c83 100644 --- a/build_files/cmake/config/blender_release.cmake +++ b/build_files/cmake/config/blender_release.cmake @@ -50,6 +50,7 @@ set(WITH_PYTHON_INSTALL ON CACHE BOOL "" FORCE) set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE) set(WITH_RAYOPTIMIZATION ON CACHE BOOL "" FORCE) set(WITH_SDL ON CACHE BOOL "" FORCE) +set(WITH_TBB ON CACHE BOOL "" FORCE) set(WITH_X11_XINPUT ON CACHE BOOL "" FORCE) set(WITH_X11_XF86VMODE ON CACHE BOOL "" FORCE) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index e159dd9e5ee..c3025be34ba 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -460,13 +460,16 @@ function(setup_liblinks target_link_libraries(${target} ${OSL_LIBRARIES}) endif() if(WITH_OPENVDB) - target_link_libraries(${target} ${OPENVDB_LIBRARIES} ${TBB_LIBRARIES} ${BLOSC_LIBRARIES}) + target_link_libraries(${target} ${OPENVDB_LIBRARIES} ${BLOSC_LIBRARIES}) endif() if(WITH_OPENIMAGEIO) target_link_libraries(${target} ${OPENIMAGEIO_LIBRARIES}) endif() if(WITH_OPENIMAGEDENOISE) - target_link_libraries(${target} ${OPENIMAGEDENOISE_LIBRARIES} ${TBB_LIBRARIES}) + target_link_libraries(${target} ${OPENIMAGEDENOISE_LIBRARIES}) + endif() + if(WITH_TBB) + target_link_libraries(${target} ${TBB_LIBRARIES}) endif() if(WITH_OPENCOLORIO) target_link_libraries(${target} ${OPENCOLORIO_LIBRARIES}) @@ -1209,7 +1212,9 @@ macro(openmp_delayload ) if(MSVC) if(WITH_OPENMP) - if(MSVC_VERSION EQUAL 1800) + if(MSVC_CLANG) + set(OPENMP_DLL_NAME "libomp") + elseif(MSVC_VERSION EQUAL 1800) set(OPENMP_DLL_NAME "vcomp120") else() set(OPENMP_DLL_NAME "vcomp140") diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index 249546dd216..3ae3b2b66b5 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -157,7 +157,7 @@ if(WITH_CODEC_FFMPEG) avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc - vorbis vorbisenc vorbisfile ogg + vorbis vorbisenc vorbisfile ogg opus vpx swresample) set(FFMPEG_LIBPATH ${FFMPEG}/lib) endif() @@ -313,9 +313,7 @@ endif() if(WITH_OPENVDB) set(OPENVDB ${LIBDIR}/openvdb) set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include) - set(TBB_INCLUDE_DIRS ${LIBDIR}/tbb/include) - set(TBB_LIBRARIES ${LIBDIR}/tbb/lib/libtbb.a) - set(OPENVDB_LIBRARIES openvdb blosc ${TBB_LIBRARIES}) + set(OPENVDB_LIBRARIES openvdb blosc) set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib) set(OPENVDB_DEFINITIONS) endif() @@ -386,14 +384,25 @@ endif() if(WITH_OPENIMAGEDENOISE) find_package(OpenImageDenoise) - find_package(TBB) if(NOT OPENIMAGEDENOISE_FOUND) set(WITH_OPENIMAGEDENOISE OFF) message(STATUS "OpenImageDenoise not found") - elseif(NOT TBB_FOUND) + endif() +endif() + +if(WITH_TBB) + find_package(TBB) +endif() + +if(NOT WITH_TBB OR NOT TBB_FOUND) + if(WITH_OPENIMAGEDENOISE) + message(STATUS "TBB not found, disabling OpenImageDenoise") set(WITH_OPENIMAGEDENOISE OFF) - message(STATUS "TBB not found") + endif() + if(WITH_OPENVDB) + message(STATUS "TBB not found, disabling OpenVDB") + set(WITH_OPENVDB OFF) endif() endif() diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index 1b3f9cf3fad..c48780ebd6a 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -22,14 +22,30 @@ # Detect precompiled library directory if(NOT DEFINED LIBDIR) + # Path to a locally compiled libraries. set(LIBDIR_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}) string(TOLOWER ${LIBDIR_NAME} LIBDIR_NAME) - set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_NAME}) -else() - message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}") + set(LIBDIR_NATIVE_ABI ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_NAME}) + + # Path to precompiled libraries with known CentOS 7 ABI. + set(LIBDIR_CENTOS7_ABI ${CMAKE_SOURCE_DIR}/../lib/linux_centos7_x86_64) + + # Choose the best suitable libraries. + if(EXISTS ${LIBDIR_NATIVE_ABI}) + set(LIBDIR ${LIBDIR_NATIVE_ABI}) + elseif(EXISTS ${LIBDIR_CENTOS7_ABI}) + set(LIBDIR ${LIBDIR_CENTOS7_ABI}) + set(WITH_CXX11_ABI OFF) + endif() + + # Avoid namespace pollustion. + unset(LIBDIR_NATIVE_ABI) + unset(LIBDIR_CENTOS7_ABI) endif() if(EXISTS ${LIBDIR}) + message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}") + file(GLOB LIB_SUBDIRS ${LIBDIR}/*) # NOTE: Make sure "proper" compiled zlib comes first before the one # which is a part of OpenCollada. They have different ABI, and we @@ -244,13 +260,8 @@ endif() if(WITH_OPENVDB) find_package_wrapper(OpenVDB) - find_package_wrapper(TBB) find_package_wrapper(Blosc) - if(NOT TBB_FOUND) - set(WITH_OPENVDB OFF) - set(WITH_OPENVDB_BLOSC OFF) - message(STATUS "TBB not found, disabling OpenVDB") - elseif(NOT OPENVDB_FOUND) + if(NOT OPENVDB_FOUND) set(WITH_OPENVDB OFF) set(WITH_OPENVDB_BLOSC OFF) message(STATUS "OpenVDB not found, disabling it") @@ -416,6 +427,21 @@ if(WITH_OPENSUBDIV) endif() endif() +if(WITH_TBB) + find_package_wrapper(TBB) +endif() + +if(NOT WITH_TBB OR NOT TBB_FOUND) + if(WITH_OPENIMAGEDENOISE) + message(STATUS "TBB not found, disabling OpenImageDenoise") + set(WITH_OPENIMAGEDENOISE OFF) + endif() + if(WITH_OPENVDB) + message(STATUS "TBB not found, disabling OpenVDB") + set(WITH_OPENVDB OFF) + endif() +endif() + # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed if(HAIKU) list(APPEND PLATFORM_LINKLIBS -lnetwork) diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index b2277c440fe..ef7722b0aef 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -35,6 +35,22 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang") else() message("Unable to detect the Visual Studio redist directory, copying of the runtime dlls will not work, try running from the visual studio developer prompt.") endif() + # 1) CMake has issues detecting openmp support in clang-cl so we have to provide + # the right switches here. + # 2) While the /openmp switch *should* work, it currently doesn't as for clang 9.0.0 + if(WITH_OPENMP) + set(OPENMP_CUSTOM ON) + set(OPENMP_FOUND ON) + set(OpenMP_C_FLAGS "/clang:-fopenmp") + set(OpenMP_CXX_FLAGS "/clang:-fopenmp") + GET_FILENAME_COMPONENT(LLVMROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM;]" ABSOLUTE CACHE) + set(CLANG_OPENMP_DLL "${LLVMROOT}/bin/libomp.dll") + set(CLANG_OPENMP_LIB "${LLVMROOT}/lib/libomp.lib") + if(NOT EXISTS "${CLANG_OPENMP_DLL}") + message(FATAL_ERROR "Clang OpenMP library (${CLANG_OPENMP_DLL}) not found.") + endif() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \"${CLANG_OPENMP_LIB}\"") + endif() endif() set_property(GLOBAL PROPERTY USE_FOLDERS ${WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS}) @@ -96,7 +112,7 @@ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO") list(APPEND PLATFORM_LINKLIBS - ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 + ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 Comctl32 advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp ) @@ -475,25 +491,20 @@ endif() if(WITH_OPENVDB) set(BLOSC_LIBRARIES optimized ${LIBDIR}/blosc/lib/libblosc.lib debug ${LIBDIR}/blosc/lib/libblosc_d.lib) - set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib) - set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include) set(OPENVDB ${LIBDIR}/openVDB) set(OPENVDB_LIBPATH ${OPENVDB}/lib) - set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include ${TBB_INCLUDE_DIR}) - set(OPENVDB_LIBRARIES optimized ${OPENVDB_LIBPATH}/openvdb.lib debug ${OPENVDB_LIBPATH}/openvdb_d.lib ${TBB_LIBRARIES} ${BLOSC_LIBRARIES}) + set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include) + set(OPENVDB_LIBRARIES optimized ${OPENVDB_LIBPATH}/openvdb.lib debug ${OPENVDB_LIBPATH}/openvdb_d.lib ${BLOSC_LIBRARIES}) set(OPENVDB_DEFINITIONS -DNOMINMAX) endif() if(WITH_OPENIMAGEDENOISE) - set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib) - set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include) set(OPENIMAGEDENOISE ${LIBDIR}/OpenImageDenoise) set(OPENIMAGEDENOISE_LIBPATH ${LIBDIR}/OpenImageDenoise/lib) - set(OPENIMAGEDENOISE_INCLUDE_DIRS ${OPENIMAGEDENOISE}/include ${TBB_INCLUDE_DIR}) + set(OPENIMAGEDENOISE_INCLUDE_DIRS ${OPENIMAGEDENOISE}/include) set(OPENIMAGEDENOISE_LIBRARIES optimized ${OPENIMAGEDENOISE_LIBPATH}/OpenImageDenoise.lib ${OPENIMAGEDENOISE_LIBPATH}/common.lib ${OPENIMAGEDENOISE_LIBPATH}/mkldnn.lib - debug ${OPENIMAGEDENOISE_LIBPATH}/OpenImageDenoise_d.lib ${OPENIMAGEDENOISE_LIBPATH}/common_d.lib ${OPENIMAGEDENOISE_LIBPATH}/mkldnn_d.lib - ${TBB_LIBRARIES}) + debug ${OPENIMAGEDENOISE_LIBPATH}/OpenImageDenoise_d.lib ${OPENIMAGEDENOISE_LIBPATH}/common_d.lib ${OPENIMAGEDENOISE_LIBPATH}/mkldnn_d.lib) set(OPENIMAGEDENOISE_DEFINITIONS) endif() @@ -558,6 +569,21 @@ if(WITH_SYSTEM_AUDASPACE) set(AUDASPACE_PY_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-py.lib) endif() +if(WITH_TBB) + set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib) + set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include) + set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR}) +else() + if(WITH_OPENIMAGEDENOISE) + message(STATUS "TBB disabled, also disabling OpenImageDenoise") + set(WITH_OPENIMAGEDENOISE OFF) + endif() + if(WITH_OPENVDB) + message(STATUS "TBB disabled, also disabling OpenVDB") + set(WITH_OPENVDB OFF) + endif() +endif() + # used in many places so include globally, like OpenGL blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}") diff --git a/build_files/utils/make_test.py b/build_files/utils/make_test.py index a8a6afc43cc..309ab36ecdd 100755 --- a/build_files/utils/make_test.py +++ b/build_files/utils/make_test.py @@ -39,7 +39,8 @@ if make_utils.command_missing(git_command): sys.exit(1) # Test if we are building a specific release version. -release_version = make_utils.git_branch_release_version(git_command) +branch = make_utils.git_branch(git_command) +release_version = make_utils.git_branch_release_version(branch) lib_tests_dirpath = os.path.join('..', 'lib', "tests") if not os.path.exists(lib_tests_dirpath): diff --git a/build_files/utils/make_update.py b/build_files/utils/make_update.py index 3ecfa218432..ec72514fdfc 100755 --- a/build_files/utils/make_update.py +++ b/build_files/utils/make_update.py @@ -28,13 +28,17 @@ def parse_arguments(): parser.add_argument("--use-tests", action="store_true") parser.add_argument("--svn-command", default="svn") parser.add_argument("--git-command", default="git") + parser.add_argument("--use-centos-libraries", action="store_true") return parser.parse_args() +def get_blender_git_root(): + return check_output([args.git_command, "rev-parse", "--show-toplevel"]) + # Setup for precompiled libraries and tests from svn. def svn_update(args, release_version): svn_non_interactive = [args.svn_command, '--non-interactive'] - lib_dirpath = os.path.join('..', 'lib') + lib_dirpath = os.path.join(get_blender_git_root(), '..', 'lib') svn_url = make_utils.svn_libraries_base_url(release_version) # Checkout precompiled libraries @@ -45,6 +49,8 @@ def svn_update(args, release_version): # this script is bundled as part of the precompiled libraries. However it # is used by the buildbot. lib_platform = "win64_vc14" + elif args.use_centos_libraries: + lib_platform = "linux_centos7_x86_64" else: # No precompiled libraries for Linux. lib_platform = None @@ -81,10 +87,14 @@ def svn_update(args, release_version): if os.path.isdir(lib_dirpath): for dirname in os.listdir(lib_dirpath): + dirpath = os.path.join(lib_dirpath, dirname) + if dirname == ".svn": + # Cleanup must be run from svn root directory if it exists. + if not make_utils.command_missing(args.svn_command): + call(svn_non_interactive + ["cleanup", lib_dirpath]) continue - dirpath = os.path.join(lib_dirpath, dirname) svn_dirpath = os.path.join(dirpath, ".svn") svn_root_dirpath = os.path.join(lib_dirpath, ".svn") @@ -94,21 +104,23 @@ def svn_update(args, release_version): sys.stderr.write("svn not found, can't update libraries\n") sys.exit(1) - call(svn_non_interactive + ["cleanup", dirpath]) + # Cleanup to continue with interrupted downloads. + if os.path.exists(svn_dirpath): + call(svn_non_interactive + ["cleanup", dirpath]) + # Switch to appropriate branch and update. call(svn_non_interactive + ["switch", svn_url + dirname, dirpath]) call(svn_non_interactive + ["update", dirpath]) - -# Update blender repository. -def blender_update_skip(args): +# Test if git repo can be updated. +def git_update_skip(args, check_remote_exists=True): if make_utils.command_missing(args.git_command): sys.stderr.write("git not found, can't update code\n") sys.exit(1) # Abort if a rebase is still progress. - rebase_merge = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-merge']) - rebase_apply = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-apply']) - merge_head = check_output([args.git_command, 'rev-parse', '--git-path', 'MERGE_HEAD']) + rebase_merge = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-merge'], exit_on_error=False) + rebase_apply = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-apply'], exit_on_error=False) + merge_head = check_output([args.git_command, 'rev-parse', '--git-path', 'MERGE_HEAD'], exit_on_error=False) if os.path.exists(rebase_merge) or \ os.path.exists(rebase_apply) or \ os.path.exists(merge_head): @@ -120,49 +132,92 @@ def blender_update_skip(args): return "you have unstaged changes" # Test if there is an upstream branch configured - branch = check_output([args.git_command, "rev-parse", "--abbrev-ref", "HEAD"]) - remote = check_output([args.git_command, "config", "branch." + branch + ".remote"], exit_on_error=False) - if len(remote) == 0: - return "no remote branch to pull from" + if check_remote_exists: + branch = check_output([args.git_command, "rev-parse", "--abbrev-ref", "HEAD"]) + remote = check_output([args.git_command, "config", "branch." + branch + ".remote"], exit_on_error=False) + if len(remote) == 0: + return "no remote branch to pull from" - return None + return "" +# Update blender repository. def blender_update(args): print_stage("Updating Blender Git Repository") call([args.git_command, "pull", "--rebase"]) # Update submodules. -def submodules_update(args, release_version): +def submodules_update(args, release_version, branch): print_stage("Updating Submodules") if make_utils.command_missing(args.git_command): sys.stderr.write("git not found, can't update code\n") sys.exit(1) - call([args.git_command, "submodule", "update", "--init", "--recursive"]) + # Update submodules to latest master or appropriate release branch. if not release_version: - # Update submodules to latest master if not building a specific release. - # In that case submodules are set to a specific revision, which is checked - # out by running "git submodule update". - call([args.git_command, "submodule", "foreach", "git", "checkout", "master"]) - call([args.git_command, "submodule", "foreach", "git", "pull", "--rebase", "origin", "master"]) + branch = "master" + + submodules = [ + ("release/scripts/addons", branch), + ("release/scripts/addons_contrib", branch), + ("release/datafiles/locale", branch), + ("source/tools", branch), + ] + + # Initialize submodules only if needed. + for submodule_path, submodule_branch in submodules: + if not os.path.exists(os.path.join(submodule_path, ".git")): + call([args.git_command, "submodule", "update", "--init", "--recursive"]) + break + + # Checkout appropriate branch and pull changes. + skip_msg = "" + for submodule_path, submodule_branch in submodules: + cwd = os.getcwd() + try: + os.chdir(submodule_path) + msg = git_update_skip(args, check_remote_exists=False) + if msg: + skip_msg += submodule_path + " skipped: " + msg + "\n" + else: + if make_utils.git_branch(args.git_command) != submodule_branch: + call([args.git_command, "fetch", "origin"]) + call([args.git_command, "checkout", submodule_branch]) + call([args.git_command, "pull", "--rebase", "origin", submodule_branch]) + finally: + os.chdir(cwd) + + return skip_msg if __name__ == "__main__": args = parse_arguments() - blender_skipped = None + blender_skip_msg = "" + submodules_skip_msg = "" # Test if we are building a specific release version. - release_version = make_utils.git_branch_release_version(args.git_command) + branch = make_utils.git_branch(args.git_command) + release_version = make_utils.git_branch_release_version(branch) if not args.no_libraries: svn_update(args, release_version) if not args.no_blender: - blender_skipped = blender_update_skip(args) - if not blender_skipped: + blender_skip_msg = git_update_skip(args) + if blender_skip_msg: + blender_skip_msg = "Blender repository skipped: " + blender_skip_msg + "\n" + else: blender_update(args) if not args.no_submodules: - submodules_update(args, release_version) - - if blender_skipped: - print_stage("Blender repository skipped: " + blender_skipped) + submodules_skip_msg = submodules_update(args, release_version, branch) + + # Report any skipped repositories at the end, so it's not as easy to miss. + skip_msg = blender_skip_msg + submodules_skip_msg + if skip_msg: + print_stage(skip_msg.strip()) + + # For failed submodule update we throw an error, since not having correct + # submodules can make Blender throw errors. + # For Blender itself we don't and consider "make update" to be a command + # you can use while working on uncommitted code. + if submodules_skip_msg: + sys.exit(1) diff --git a/build_files/utils/make_utils.py b/build_files/utils/make_utils.py index 5fedd792149..7b21bc607a4 100755 --- a/build_files/utils/make_utils.py +++ b/build_files/utils/make_utils.py @@ -35,7 +35,7 @@ def check_output(cmd, exit_on_error=True): return output.strip() -def git_branch_release_version(git_command): +def git_branch(git_command): # Test if we are building a specific release version. try: branch = subprocess.check_output([git_command, "rev-parse", "--abbrev-ref", "HEAD"]) @@ -43,7 +43,9 @@ def git_branch_release_version(git_command): sys.stderr.write("Failed to get Blender git branch\n") sys.exit(1) - branch = branch.strip().decode('utf8') + return branch.strip().decode('utf8') + +def git_branch_release_version(branch): release_version = re.search("^blender-v(.*)-release$", branch) if release_version: release_version = release_version.group(1) |