[Bf-blender-cvs] [fbfcc5a544a] tmp_libupdate_34: Make OpenImageIO and OpenEXR dynamic libraries work on Linux / macOS

Brecht Van Lommel noreply at git.blender.org
Wed Aug 24 20:22:22 CEST 2022


Commit: fbfcc5a544a1dc4c593235d85ae3b98728c7427c
Author: Brecht Van Lommel
Date:   Wed Aug 24 16:21:56 2022 +0200
Branches: tmp_libupdate_34
https://developer.blender.org/rBfbfcc5a544a1dc4c593235d85ae3b98728c7427c

Make OpenImageIO and OpenEXR dynamic libraries work on Linux / macOS

I tried to make the mechanism for setting the right environment for oslc and
idiff a bit more generic, hopefully did not break Windows.

===================================================================

M	build_files/build_environment/cmake/alembic.cmake
M	build_files/build_environment/cmake/harvest.cmake
M	build_files/build_environment/cmake/openimageio.cmake
M	build_files/build_environment/cmake/osl.cmake
M	build_files/build_environment/cmake/usd.cmake
M	build_files/cmake/macros.cmake
M	build_files/cmake/platform/platform_apple.cmake
M	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	intern/cycles/kernel/osl/shaders/CMakeLists.txt
M	tests/python/CMakeLists.txt

===================================================================

diff --git a/build_files/build_environment/cmake/alembic.cmake b/build_files/build_environment/cmake/alembic.cmake
index cb56816c2ed..7d253ff52b6 100644
--- a/build_files/build_environment/cmake/alembic.cmake
+++ b/build_files/build_environment/cmake/alembic.cmake
@@ -42,6 +42,5 @@ endif()
 
 add_dependencies(
   external_alembic
-  external_openexr
   external_imath
 )
diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake
index 845ddab9ce9..8f38f0b79bd 100644
--- a/build_files/build_environment/cmake/harvest.cmake
+++ b/build_files/build_environment/cmake/harvest.cmake
@@ -115,7 +115,7 @@ harvest(brotli/lib brotli/lib "*.a")
 harvest(boost/include boost/include "*")
 harvest_rpath_lib(boost/lib boost/lib "*${SHAREDLIBEXT}*")
 harvest(imath/include imath/include "*.h")
-harvest(imath/lib imath/lib "*.a")
+harvest_rpath_lib(imath/lib imath/lib "*${SHAREDLIBEXT}*")
 harvest(ffmpeg/include ffmpeg/include "*.h")
 harvest(ffmpeg/lib ffmpeg/lib "*.a")
 harvest(fftw3/include fftw3/include "*.h")
@@ -178,12 +178,12 @@ harvest(opencolorio/include opencolorio/include "*.h")
 harvest(opencolorio/lib opencolorio/lib "*.a")
 harvest(opencolorio/lib/static opencolorio/lib "*.a")
 harvest(openexr/include openexr/include "*.h")
-harvest(openexr/lib openexr/lib "*.a")
-harvest(openimageio/bin openimageio/bin "idiff")
-harvest(openimageio/bin openimageio/bin "maketx")
-harvest(openimageio/bin openimageio/bin "oiiotool")
+harvest_rpath_lib(openexr/lib openexr/lib "*${SHAREDLIBEXT}*")
+harvest_rpath_bin(openimageio/bin openimageio/bin "idiff")
+harvest_rpath_bin(openimageio/bin openimageio/bin "maketx")
+harvest_rpath_bin(openimageio/bin openimageio/bin "oiiotool")
 harvest(openimageio/include openimageio/include "*")
-harvest(openimageio/lib openimageio/lib "*.a")
+harvest_rpath_lib(openimageio/lib openimageio/lib "*${SHAREDLIBEXT}*")
 harvest(openimagedenoise/include openimagedenoise/include "*")
 harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
 harvest(embree/include embree/include "*.h")
diff --git a/build_files/build_environment/cmake/openimageio.cmake b/build_files/build_environment/cmake/openimageio.cmake
index 45bf057484c..33ab3d51b3a 100644
--- a/build_files/build_environment/cmake/openimageio.cmake
+++ b/build_files/build_environment/cmake/openimageio.cmake
@@ -78,9 +78,9 @@ set(OPENIMAGEIO_EXTRA_ARGS
   -DJPEG_LIBRARY=${LIBDIR}/jpeg/lib/${JPEG_LIBRARY}
   -DJPEG_INCLUDE_DIR=${LIBDIR}/jpeg/include
   ${OPENJPEG_FLAGS}
-  -DOPENEXR_ILMTHREAD_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmThread${OPENEXR_VERSION_POSTFIX}${LIBEXT}
-  -DOPENEXR_IEX_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}Iex${OPENEXR_VERSION_POSTFIX}${LIBEXT}
-  -DOPENEXR_ILMIMF_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${LIBEXT}
+  -DOPENEXR_ILMTHREAD_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmThread${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
+  -DOPENEXR_IEX_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}Iex${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
+  -DOPENEXR_ILMIMF_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
   -DSTOP_ON_WARNING=OFF
   -DUSE_EXTERNAL_PUGIXML=ON
   -DPUGIXML_LIBRARY=${LIBDIR}/pugixml/lib/${LIBPREFIX}pugixml${LIBEXT}
diff --git a/build_files/build_environment/cmake/osl.cmake b/build_files/build_environment/cmake/osl.cmake
index 78c8f973a33..0c82bbbba4b 100644
--- a/build_files/build_environment/cmake/osl.cmake
+++ b/build_files/build_environment/cmake/osl.cmake
@@ -6,7 +6,7 @@ if(WIN32)
 else()
   set(OSL_CMAKE_CXX_STANDARD_LIBRARIES)
   set(OSL_FLEX_BISON)
-  set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO${LIBEXT};${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO_Util${LIBEXT};${LIBDIR}/png/lib/${LIBPREFIX}png16${LIBEXT};${LIBDIR}/jpeg/lib/${LIBPREFIX}jpeg${LIBEXT};${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${LIBEXT};${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${LIBEXT}")
+  set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/OpenImageIO${SHAREDLIBEXT};${LIBDIR}/png/lib/${LIBPREFIX}png16${LIBEXT};${LIBDIR}/jpeg/lib/${LIBPREFIX}jpeg${LIBEXT};${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${LIBEXT};${LIBDIR}/openexr/lib/IlmImf${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}")
 endif()
 
 set(OSL_EXTRA_ARGS
diff --git a/build_files/build_environment/cmake/usd.cmake b/build_files/build_environment/cmake/usd.cmake
index 207a1f9911a..106aee09379 100644
--- a/build_files/build_environment/cmake/usd.cmake
+++ b/build_files/build_environment/cmake/usd.cmake
@@ -38,7 +38,7 @@ set(USD_EXTRA_ARGS
   ${USD_PLATFORM_FLAGS}
   -DOPENSUBDIV_ROOT_DIR=${LIBDIR}/opensubdiv
   -DOpenImageIO_ROOT=${LIBDIR}/openimageio
-  -DOPENEXR_LIBRARIES=${LIBDIR}/imath/lib/imath${OPENEXR_VERSION_POSTFIX}${LIBEXT}
+  -DOPENEXR_LIBRARIES=${LIBDIR}/imath/lib/${LIBPREFIX}Imath${OPENEXR_VERSION_POSTFIX}${LIBEXT}
   -DOPENEXR_INCLUDE_DIR=${LIBDIR}/imath/include
   -DOPENVDB_LOCATION=${LIBDIR}/openvdb
   -DPXR_ENABLE_PYTHON_SUPPORT=ON
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 43d6f06cc12..ea14e5c0730 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -1224,6 +1224,24 @@ macro(without_system_libs_end)
   endif()
 endmacro()
 
+# Utility to gather and install precompiled shared libraries.
+macro(add_bundled_libraries library_dir)
+  if(EXISTS ${LIBDIR})
+    set(_library_dir ${LIBDIR}/${library_dir})
+    if(WIN32)
+      file(GLOB _all_library_versions ${_library_dir}/*\.dll)
+    elseif(APPLE)
+      file(GLOB _all_library_versions ${_library_dir}/*\.dylib*)
+    else()
+      file(GLOB _all_library_versions ${_library_dir}/*\.so*)
+    endif()
+    list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_all_library_versions})
+    list(APPEND PLATFORM_BUNDLED_LIBRARY_DIRS ${_library_dir})
+    unset(_all_library_versions)
+    unset(_library_dir)
+ endif()
+endmacro()
+
 macro(windows_install_shared_manifest)
   set(options OPTIONAL DEBUG RELEASE ALL)
   set(oneValueArgs)
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index 19994c31862..1ec64f2747f 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -21,18 +21,6 @@ function(print_found_status
   endif()
 endfunction()
 
-# Utility to install precompiled shared libraries.
-macro(add_bundled_libraries library)
-  if(EXISTS ${LIBDIR})
-    set(_library_dir ${LIBDIR}/${library}/lib)
-    file(GLOB _all_library_versions ${_library_dir}/*\.dylib*)
-    list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_all_library_versions})
-    list(APPEND PLATFORM_BUNDLED_LIBRARY_DIRS ${_library_dir})
-    unset(_all_library_versions)
-    unset(_library_dir)
- endif()
-endmacro()
-
 # ------------------------------------------------------------------------
 # Find system provided libraries.
 
@@ -94,7 +82,7 @@ endif()
 if(WITH_USD)
   find_package(USD)
   if(USD_FOUND)
-    add_bundled_libraries(usd)
+    add_bundled_libraries(usd/lib)
   else()
     message(STATUS "USD not found, disabling WITH_USD")
     set(WITH_USD OFF)
@@ -103,7 +91,7 @@ endif()
 
 if(WITH_OPENSUBDIV)
   find_package(OpenSubdiv)
-  add_bundled_libraries(opensubdiv)
+  add_bundled_libraries(opensubdiv/lib)
 endif()
 
 if(WITH_CODEC_SNDFILE)
@@ -169,6 +157,8 @@ list(APPEND FREETYPE_LIBRARIES
 
 if(WITH_IMAGE_OPENEXR)
   find_package(OpenEXR)
+  add_bundled_libraries(openexr/lib)
+  add_bundled_libraries(imath/lib)
 endif()
 
 if(WITH_CODEC_FFMPEG)
@@ -289,7 +279,7 @@ if(WITH_BOOST)
   set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
   set(BOOST_DEFINITIONS)
 
-  add_bundled_libraries(boost)
+  add_bundled_libraries(boost/lib)
 
   mark_as_advanced(Boost_LIBRARIES)
   mark_as_advanced(Boost_INCLUDE_DIRS)
@@ -320,6 +310,7 @@ if(WITH_OPENIMAGEIO)
   )
   set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
   set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff")
+  add_bundled_libraries(openimageio/lib)
 endif()
 
 if(WITH_OPENCOLORIO)
@@ -340,7 +331,7 @@ if(WITH_OPENVDB)
     unset(BLOSC_LIBRARIES CACHE)
   endif()
   set(OPENVDB_DEFINITIONS)
-  add_bundled_libraries(openvdb)
+  add_bundled_libraries(openvdb/lib)
 endif()
 
 if(WITH_NANOVDB)
@@ -415,7 +406,7 @@ endif()
 if(WITH_TBB)
   find_package(TBB)
   if(TBB_FOUND)
-    add_bundled_libraries(tbb)
+    add_bundled_libraries(tbb/lib)
   else()
     message(WARNING "TBB not found, disabling WITH_TBB")
     set(WITH_TBB OFF)
@@ -442,7 +433,7 @@ if(WITH_OPENMP)
     set(OpenMP_LIBRARY_DIR "${LIBDIR}/openmp/lib/")
     set(OpenMP_LINKER_FLAGS "-L'${OpenMP_LIBRARY_DIR}' -lomp")
     set(OpenMP_LIBRARY "${OpenMP_LIBRARY_DIR}/libomp.dylib")
-    add_bundled_libraries(openmp)
+    add_bundled_libraries(openmp/lib)
   endif()
 endif()
 
@@ -552,6 +543,12 @@ if(PLATFORM_BUNDLED_LIBRARIES)
   # different.
   set(CMAKE_SKIP_BUILD_RPATH FALSE)
   list(APPEND CMAKE_BUILD_RPATH ${PLATFORM_BUNDLED_LIBRARY_DIRS})
+
+  # Environment variables to run precompiled executables that needed libraries.
+  list(JOIN PLATFORM_BUNDLED_LIBRARY_DIRS ":" _library_paths)
+  set(PLATFORM_ENV_BUILD "DYLD_LIBRARY_PATH=\"${_library_paths};${DYLD_LIBRARY_PATH}\"")
+  set(PLATFORM_ENV_INSTALL "DYLD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/lib/;$DYLD_LIBRARY_PATH")
+  unset(_library_paths)
 endif()
 
 # Same as `CFBundleIdentifier` in Info.plist.
diff --git a/build_files/cmake/platform/platform_old_libs_update.cmake b/build_files/cmake/platform/platform_old_libs_update.cmake
index cf77c8fcd68..77dc61c77b4 100644
--- a/build_files/cmake/platform/platform_old_libs_update.cmake
+++ b/build_files/cmake/platform/platform_old_libs_update.cmake
@@ -53,6 +53,8 @@ if(UNIX AND
   message(STATUS "Auto updating CMake configuration for Blender 3.4 libraries")
   unset_cache_variables("^BLOSC")
   unset_cache_variables("^BOOST")
+  unset_cache_variables("^OPENEXR")
+  unset_cache_variables("^OPENIMAGEIO")
   unset_cache_variables("^OPENSUBDIV")
   unset_cache_variables("^OPENVDB")
   unset_cache_variables("^TBB")
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index 86cb9fa50fa..c19724ceb99 100644

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list