Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2022-04-07 21:27:23 +0300
committerBrecht Van Lommel <brecht@blender.org>2022-04-29 20:03:06 +0300
commit060a50a5f72a0ccdb754bf155aa2ed394a1bcda5 (patch)
tree813b0d519df9f4bed79f5e267664204e874db2ee /intern/cycles/hydra
parent074a8558b7b320d7be78d436ab5473fd5b53ff56 (diff)
Cycles: refactor Hydra render delegate building
* Leave code for building the render delegate against other applications and their USD libraries to the Cycles repository, since this is not a great fit. In the Blender repository, always use Blender's USD libraries now that they include Hydra support. * Hide non-USD symbols from the hdCycles shared library, to avoid library version conflicts. * Share Apple framework linking between the standalone app and plugin. * Add cycles_hydra module, to be shared between the standalone app and plugin. * Bring external libs code in sync with standalone repo, adding various missing libraries. * Move some cmake include directories to the top level cycles source folder because we need to control their global order, to ensure we link against the correct headers with mixed Blender libraries and external USD libraries.
Diffstat (limited to 'intern/cycles/hydra')
-rw-r--r--intern/cycles/hydra/CMakeLists.txt128
-rw-r--r--intern/cycles/hydra/resources/apple_symbols.map1
-rw-r--r--intern/cycles/hydra/resources/linux_symbols.map8
3 files changed, 91 insertions, 46 deletions
diff --git a/intern/cycles/hydra/CMakeLists.txt b/intern/cycles/hydra/CMakeLists.txt
index 7b7ea43cfe5..17a7f897ac6 100644
--- a/intern/cycles/hydra/CMakeLists.txt
+++ b/intern/cycles/hydra/CMakeLists.txt
@@ -81,18 +81,18 @@ endif()
include_directories(${INC})
include_directories(SYSTEM ${INC_SYS})
-add_library(hdCyclesStatic STATIC
+add_library(cycles_hydra STATIC
${SRC_HD_CYCLES}
${INC_HD_CYCLES}
)
-target_compile_options(hdCyclesStatic
+target_compile_options(cycles_hydra
PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/wd4003 /wd4244 /wd4506>
$<$<CXX_COMPILER_ID:GNU>:-Wno-float-conversion -Wno-double-promotion -Wno-deprecated>
)
-target_compile_definitions(hdCyclesStatic
+target_compile_definitions(cycles_hydra
PRIVATE
GLOG_NO_ABBREVIATED_SEVERITIES=1
OSL_DEBUG=$<CONFIG:DEBUG>
@@ -100,57 +100,93 @@ target_compile_definitions(hdCyclesStatic
$<$<CXX_COMPILER_ID:MSVC>:NOMINMAX=1>
)
-target_link_libraries(hdCyclesStatic
+target_link_libraries(cycles_hydra
PUBLIC
- hd
- hgi
- hgiGL
+ ${USD_LIBRARIES}
PRIVATE
${LIB}
)
-set(HdCyclesPluginName hdCycles)
-add_library(${HdCyclesPluginName} SHARED
- plugin.h
- plugin.cpp
-)
-
-set_target_properties(${HdCyclesPluginName}
- PROPERTIES PREFIX ""
-)
-
-target_compile_definitions(${HdCyclesPluginName}
- PRIVATE
- MFB_PACKAGE_NAME=${HdCyclesPluginName}
- MFB_ALT_PACKAGE_NAME=${HdCyclesPluginName}
- GLOG_NO_ABBREVIATED_SEVERITIES=1
- OSL_DEBUG=$<CONFIG:DEBUG>
- TBB_USE_DEBUG=$<CONFIG:DEBUG>
- $<$<CXX_COMPILER_ID:MSVC>:NOMINMAX=1>
-)
-
-target_link_libraries(${HdCyclesPluginName}
- hdCyclesStatic
-)
+if(WITH_CYCLES_HYDRA_RENDER_DELEGATE)
+ set(HdCyclesPluginName hdCycles)
+ add_library(${HdCyclesPluginName} SHARED
+ plugin.h
+ plugin.cpp
+ )
-if(WITH_CYCLES_BLENDER)
- set(CYCLES_HYDRA_INSTALL_PATH "../")
-else()
- set(CYCLES_HYDRA_INSTALL_PATH ${CMAKE_INSTALL_PREFIX})
- # Put the root plugInfo.json one level up
- delayed_install("${CMAKE_CURRENT_SOURCE_DIR}" "plugInfo.json" ${CMAKE_INSTALL_PREFIX})
-endif()
+ set_target_properties(${HdCyclesPluginName}
+ PROPERTIES PREFIX ""
+ )
-delayed_install("" $<TARGET_FILE:${HdCyclesPluginName}> ${CYCLES_HYDRA_INSTALL_PATH})
+ target_compile_definitions(${HdCyclesPluginName}
+ PRIVATE
+ MFB_PACKAGE_NAME=${HdCyclesPluginName}
+ MFB_ALT_PACKAGE_NAME=${HdCyclesPluginName}
+ GLOG_NO_ABBREVIATED_SEVERITIES=1
+ OSL_DEBUG=$<CONFIG:DEBUG>
+ TBB_USE_DEBUG=$<CONFIG:DEBUG>
+ $<$<CXX_COMPILER_ID:MSVC>:NOMINMAX=1>
+ )
-set(PLUG_INFO_ROOT "..")
+ target_link_libraries(${HdCyclesPluginName}
+ cycles_hydra
+ )
-file(RELATIVE_PATH PLUG_INFO_LIBRARY_PATH "${CYCLES_HYDRA_INSTALL_PATH}/${HdCyclesPluginName}" "${CYCLES_HYDRA_INSTALL_PATH}/${HdCyclesPluginName}${CMAKE_SHARED_LIBRARY_SUFFIX}")
-file(RELATIVE_PATH PLUG_INFO_RESOURCE_PATH "${CYCLES_HYDRA_INSTALL_PATH}/${HdCyclesPluginName}" "${CYCLES_INSTALL_PATH}")
+ if(APPLE)
+ set_property(
+ TARGET
+ ${HdCyclesPluginName}
+ APPEND_STRING PROPERTY LINK_FLAGS
+ " -Wl,-exported_symbols_list,'${CMAKE_CURRENT_SOURCE_DIR}/resources/apple_symbols.map'"
+ )
+ elseif(UNIX)
+ set_property(
+ TARGET
+ ${HdCyclesPluginName}
+ APPEND_STRING PROPERTY LINK_FLAGS
+ " -Wl,--version-script='${CMAKE_CURRENT_SOURCE_DIR}/resources/linux_symbols.map'"
+ )
+ endif()
+
+
+ if(WITH_CYCLES_BLENDER)
+ # Install inside add-on
+ set(CYCLES_HYDRA_INSTALL_PATH ${CYCLES_INSTALL_PATH}/hydra)
+ else()
+ # Install next to cycles executable
+ set(CYCLES_HYDRA_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/hydra)
+ endif()
-configure_file(resources/plugInfo.json
- ${CMAKE_CURRENT_BINARY_DIR}/resources/plugInfo.json
- @ONLY
-)
+ # Put the root plugInfo.json one level up
+ delayed_install("${CMAKE_CURRENT_SOURCE_DIR}" "plugInfo.json" ${CYCLES_HYDRA_INSTALL_PATH})
+ delayed_install("" $<TARGET_FILE:${HdCyclesPluginName}> ${CYCLES_HYDRA_INSTALL_PATH})
+
+ set_target_properties(${HdCyclesPluginName}
+ PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+
+ set(PLUG_INFO_ROOT "..")
+
+ if(WITH_CYCLES_BLENDER)
+ # Full path not yet know at this point and RELATIVE_PATH requires
+ # absolute path as input. So just set manually.
+ set(PLUG_INFO_LIBRARY_PATH "../${HdCyclesPluginName}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ set(PLUG_INFO_RESOURCE_PATH "../..")
+ else()
+ file(RELATIVE_PATH
+ PLUG_INFO_LIBRARY_PATH
+ "${CYCLES_HYDRA_INSTALL_PATH}/${HdCyclesPluginName}"
+ "${CYCLES_HYDRA_INSTALL_PATH}/${HdCyclesPluginName}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ file(RELATIVE_PATH PLUG_INFO_RESOURCE_PATH
+ "${CYCLES_HYDRA_INSTALL_PATH}/${HdCyclesPluginName}"
+ "${CYCLES_INSTALL_PATH}")
+ endif()
+
+ configure_file(resources/plugInfo.json
+ ${CMAKE_CURRENT_BINARY_DIR}/resources/plugInfo.json
+ @ONLY
+ )
-delayed_install("${CMAKE_CURRENT_BINARY_DIR}/resources" "plugInfo.json" "${CYCLES_HYDRA_INSTALL_PATH}/${HdCyclesPluginName}/resources")
+ delayed_install("${CMAKE_CURRENT_BINARY_DIR}/resources" "plugInfo.json" "${CYCLES_HYDRA_INSTALL_PATH}/${HdCyclesPluginName}/resources")
+endif()
diff --git a/intern/cycles/hydra/resources/apple_symbols.map b/intern/cycles/hydra/resources/apple_symbols.map
new file mode 100644
index 00000000000..85be5ae55fe
--- /dev/null
+++ b/intern/cycles/hydra/resources/apple_symbols.map
@@ -0,0 +1 @@
+*PXR*
diff --git a/intern/cycles/hydra/resources/linux_symbols.map b/intern/cycles/hydra/resources/linux_symbols.map
new file mode 100644
index 00000000000..397422c9854
--- /dev/null
+++ b/intern/cycles/hydra/resources/linux_symbols.map
@@ -0,0 +1,8 @@
+/* Hide everything except USD / Hydra symbols, to avoid conflicts with other
+ * application using different library versions. */
+{
+global:
+ PXR*;
+local:
+ *;
+};