Commit: 604c33e694375828b0f322010e8e4ac17b4b02f3 Author: Brecht Van Lommel Date: Tue Apr 19 18:09:05 2022 +0200 Branches: master https://developer.blender.org/rB604c33e694375828b0f322010e8e4ac17b4b02f3
Build: updates for Blender to build against new 3.2 libraries Building against the existing 3.1 libraries should continue to work, until the precompiled libraries are committed for all platforms. * Enable WebP by default. * Update Windows for new library file names. * Automatically clear outdated CMake cache variables when upgrading to new libraries. * Fix static library linking order issues on Linux for OpenEXR and OpenVDB. Implemented by Ray Molenkamp, Sybren Stüvel and Brecht Van Lommel. Ref T95206 =================================================================== M CMakeLists.txt M build_files/cmake/Modules/FindOpenEXR.cmake M build_files/cmake/config/blender_full.cmake M build_files/cmake/config/blender_lite.cmake M build_files/cmake/config/blender_release.cmake M build_files/cmake/platform/platform_apple.cmake A build_files/cmake/platform/platform_old_libs_update.cmake M build_files/cmake/platform/platform_unix.cmake M build_files/cmake/platform/platform_win32.cmake M extern/mantaflow/CMakeLists.txt M source/creator/CMakeLists.txt =================================================================== diff --git a/CMakeLists.txt b/CMakeLists.txt index cc39429742e..2cc9466c2ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -284,7 +284,7 @@ option(WITH_IMAGE_TIFF "Enable LibTIFF Support" ON) option(WITH_IMAGE_DDS "Enable DDS Image Support" ON) option(WITH_IMAGE_CINEON "Enable CINEON and DPX Image Support" ON) option(WITH_IMAGE_HDR "Enable HDR Image Support" ON) -option(WITH_IMAGE_WEBP "Enable WebP Image Support" OFF) +option(WITH_IMAGE_WEBP "Enable WebP Image Support" ON) # Audio/Video format support option(WITH_CODEC_AVI "Enable Blenders own AVI file support (raw/jpeg)" ON) @@ -302,7 +302,7 @@ option(WITH_USD "Enable Universal Scene Description (USD) Suppor option(WITH_OPENCOLLADA "Enable OpenCollada Support (http://www.opencollada.org)" ON) # Sound output -option(WITH_SDL "Enable SDL for sound and joystick support" ON) +option(WITH_SDL "Enable SDL for sound" ON) option(WITH_OPENAL "Enable OpenAL Support (http://www.openal.org)" ON) if(APPLE) option(WITH_COREAUDIO "Enable CoreAudio for audio support on macOS" ON) diff --git a/build_files/cmake/Modules/FindOpenEXR.cmake b/build_files/cmake/Modules/FindOpenEXR.cmake index f772ef4e1ff..9107b562711 100644 --- a/build_files/cmake/Modules/FindOpenEXR.cmake +++ b/build_files/cmake/Modules/FindOpenEXR.cmake @@ -85,9 +85,9 @@ STRING(REGEX REPLACE "([0-9]+)[.]([0-9]+).*" "\\1_\\2" _openexr_libs_ver ${OPENE IF(OPENEXR_VERSION VERSION_GREATER_EQUAL "3.0.0") SET(_openexr_FIND_COMPONENTS Iex - IlmThread OpenEXR OpenEXRCore + IlmThread ) ELSE() SET(_openexr_FIND_COMPONENTS diff --git a/build_files/cmake/config/blender_full.cmake b/build_files/cmake/config/blender_full.cmake index 9faa0118ae2..e09577ac802 100644 --- a/build_files/cmake/config/blender_full.cmake +++ b/build_files/cmake/config/blender_full.cmake @@ -30,6 +30,7 @@ set(WITH_IMAGE_HDR ON CACHE BOOL "" FORCE) set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE) set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE) set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE) +set(WITH_IMAGE_WEBP ON CACHE BOOL "" FORCE) set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE) set(WITH_INPUT_IME ON CACHE BOOL "" FORCE) set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE) diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake index 2d895f55c31..2f6057ee9c0 100644 --- a/build_files/cmake/config/blender_lite.cmake +++ b/build_files/cmake/config/blender_lite.cmake @@ -34,6 +34,7 @@ set(WITH_IMAGE_HDR OFF CACHE BOOL "" FORCE) set(WITH_IMAGE_OPENEXR OFF CACHE BOOL "" FORCE) set(WITH_IMAGE_OPENJPEG OFF CACHE BOOL "" FORCE) set(WITH_IMAGE_TIFF OFF CACHE BOOL "" FORCE) +set(WITH_IMAGE_WEBP OFF CACHE BOOL "" FORCE) set(WITH_INPUT_NDOF OFF CACHE BOOL "" FORCE) set(WITH_INTERNATIONAL OFF CACHE BOOL "" FORCE) set(WITH_JACK OFF CACHE BOOL "" FORCE) diff --git a/build_files/cmake/config/blender_release.cmake b/build_files/cmake/config/blender_release.cmake index 4e96975bd90..8ece5eec39e 100644 --- a/build_files/cmake/config/blender_release.cmake +++ b/build_files/cmake/config/blender_release.cmake @@ -31,6 +31,7 @@ set(WITH_IMAGE_HDR ON CACHE BOOL "" FORCE) set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE) set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE) set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE) +set(WITH_IMAGE_WEBP ON CACHE BOOL "" FORCE) set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE) set(WITH_INPUT_IME ON CACHE BOOL "" FORCE) set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE) diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index cdc9aa91a53..91d0b54e426 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -71,6 +71,7 @@ set(CMAKE_PREFIX_PATH ${LIB_SUBDIRS}) # Find precompiled libraries, and avoid system or user-installed ones. if(EXISTS ${LIBDIR}) + include(platform_old_libs_update) without_system_libs_begin() endif() diff --git a/build_files/cmake/platform/platform_old_libs_update.cmake b/build_files/cmake/platform/platform_old_libs_update.cmake new file mode 100644 index 00000000000..014aa198caf --- /dev/null +++ b/build_files/cmake/platform/platform_old_libs_update.cmake @@ -0,0 +1,37 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright 2022 Blender Foundation. All rights reserved. + +# Auto update existing CMake caches for new libraries + +function(unset_cache_variables pattern) + get_cmake_property(_cache_variables CACHE_VARIABLES) + foreach (_cache_variable ${_cache_variables}) + if("${_cache_variable}" MATCHES "${pattern}") + unset(${_cache_variable} CACHE) + endif() + endforeach() +endfunction() + +# Detect update from 3.1 to 3.2 libs. +if(UNIX AND + DEFINED OPENEXR_VERSION AND + OPENEXR_VERSION VERSION_LESS "3.0.0" AND + EXISTS ${LIBDIR}/imath) + message(STATUS "Auto updating CMake configuration for Blender 3.2 libraries") + + unset_cache_variables("^OPENIMAGEIO") + unset_cache_variables("^OPENEXR") + unset_cache_variables("^IMATH") + unset_cache_variables("^PNG") + unset_cache_variables("^USD") + unset_cache_variables("^WEBP") +endif() + +# Automatically set WebP on/off depending if libraries are available. +if(EXISTS ${LIBDIR}/webp) + if(WITH_OPENIMAGEIO) + set(WITH_IMAGE_WEBP ON CACHE BOOL "" FORCE) + endif() +else() + set(WITH_IMAGE_WEBP OFF) +endif() diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index cc168476d5d..6750c23d548 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -45,6 +45,9 @@ if(EXISTS ${LIBDIR}) # which is a part of OpenCollada. They have different ABI, and we # do need to use the official one. set(CMAKE_PREFIX_PATH ${LIBDIR}/zlib ${LIB_SUBDIRS}) + + include(platform_old_libs_update) + set(WITH_STATIC_LIBS ON) # OpenMP usually can't be statically linked into shared libraries, # due to not being compiled with position independent code. @@ -373,6 +376,7 @@ if(WITH_IMAGE_WEBP) find_package_wrapper(WebP) if(NOT WEBP_FOUND) set(WITH_IMAGE_WEBP OFF) + message(WARNING "WebP not found, disabling WITH_IMAGE_WEBP") endif() endif() @@ -394,6 +398,9 @@ if(WITH_OPENIMAGEIO) if(WITH_IMAGE_OPENEXR) list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}") endif() + if(WITH_IMAGE_WEBP) + list(APPEND OPENIMAGEIO_LIBRARIES "${WEBP_LIBRARIES}") + endif() if(NOT OPENIMAGEIO_FOUND) set(WITH_OPENIMAGEIO OFF) diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index b0dbc0d3264..c5d2049b292 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -262,6 +262,8 @@ if(NOT EXISTS "${LIBDIR}/") message(FATAL_ERROR "\n\nWindows requires pre-compiled libs at: '${LIBDIR}'. Please run `make update` in the blender source folder to obtain them.") endif() +include(platform_old_libs_update) + if(CMAKE_GENERATOR MATCHES "^Visual Studio.+" AND # Only supported in the VS IDE MSVC_VERSION GREATER_EQUAL 1924 AND # Supported for 16.4+ WITH_CLANG_TIDY # And Clang Tidy needs to be on @@ -343,13 +345,18 @@ if(WITH_FFTW3) set(FFTW3_LIBPATH ${FFTW3}/lib) endif() -windows_find_package(WebP) -if(NOT WEBP_FOUND) - if(EXISTS ${LIBDIR}/webp) - set(WEBP_INCLUDE_DIRS ${LIBDIR}/webp/include) - set(WEBP_ROOT_DIR ${LIBDIR}/webp) - set(WEBP_LIBRARIES ${LIBDIR}/webp/lib/webp.lib ${LIBDIR}/webp/lib/webpdemux.lib ${LIBDIR}/webp/lib/webpmux.lib) - set(WEBP_FOUND ON) +if(WITH_IMAGE_WEBP) + windows_find_package(WebP) + if(NOT WEBP_FOUND) + if(EXISTS ${LIBDIR}/webp) + set(WEBP_INCLUDE_DIRS ${LIBDIR}/webp/include) + set(WEBP_ROOT_DIR ${LIBDIR}/webp) + set(WEBP_LIBRARIES ${LIBDIR}/webp/lib/webp.lib ${LIBDIR}/webp/lib/webpdemux.lib ${LIBDIR}/webp/lib/webpmux.lib) + set(WEBP_FOUND ON) + else() + message(STATUS "WITH_IMAGE_WEBP is ON but WEBP libraries are not found, setting WITH_IMAGE_WEBP=OFF") + set(WITH_IMAGE_WEBP OFF) + endif() endif() endif() @@ -414,27 +421,60 @@ if(WITH_CODEC_FFMPEG) endif() if(WITH_IMAGE_OPENEXR) - windows_find_package(OpenEXR REQUIRED) + # Imath and OpenEXR have a single combined build option and include and library variables + # used by the rest of the build system. + set(IMATH_ROOT_DIR ${LIBDIR}/imath) + set(IMATH_VERSION "3.14") + windows_find_package(IMATH REQUIRED) + if(NOT IMATH_FOUND) + set(IMATH ${LIBDIR}/imath) + set(IMATH_INCLUDE_DIR ${IMATH}/include) + set(IMATH_INCLUDE_DIRS ${IMATH_INCLUDE_DIR} ${IMATH}/include/Imath) + set(IMATH_LIBPATH ${IMATH}/lib) + set(IMATH_LIBRARIES + optimized ${IMATH_LIBPATH}/Imath_s.lib + debug ${IMATH_LIBPATH}/Imath_s_d.lib + ) + endif() + set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr) + set(OPENEXR_VERSION "3.14") + windows_find_package(OPENEXR REQUIRED) if(NOT OpenEXR_FOUND) - set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr) - set(OPENEXR_VERSION "2.1") warn_hardcoded_paths(OpenEXR) set(OPENEXR ${LIBDIR}/openexr) set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include) - set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR) + set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${IMATH_INCLUDE_DIRS} ${OPENEXR}/include/OpenEXR) set(OPENEXR_LIBPATH ${OPENEXR}/lib) - set(OPENEXR_LIBRARIES - optimized ${OPENEXR_LIBPATH}/Iex_s.lib - optimized ${OPENEXR_LIBPATH}/Half_s.lib - optimized ${OPENEXR_LIBPATH}/IlmImf_s.lib - optimized ${OPENEXR_LIBPATH}/Imath_s.lib - optimized ${OPENEXR_LIBPATH}/IlmThread_s.lib - debug ${OPENEXR_LIBPATH}/Iex_s_d.lib - debug ${OPENEXR_LIBPATH}/Half_s_d.lib - debug ${OPENEXR_LIBPATH}/IlmImf_s_d.lib - debug ${OPENEXR_LIB @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs