[Bf-blender-cvs] [44e3e541f6b] draw-deferred-compilation-experiment: Build: updates for Blender to build against new 3.2 libraries

Brecht Van Lommel noreply at git.blender.org
Thu Apr 21 11:14:13 CEST 2022


Commit: 44e3e541f6b5a774d40909f71cf531d94914d812
Author: Brecht Van Lommel
Date:   Tue Apr 19 18:09:05 2022 +0200
Branches: draw-deferred-compilation-experiment
https://developer.blender.org/rB44e3e541f6b5a774d40909f71cf531d94914d812

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. @@



More information about the Bf-blender-cvs mailing list