[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