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

CMakeLists.txt « hydra « cycles « intern - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: aa194fb936e625dfa2866ae12f142ea15bf2d677 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# SPDX-License-Identifier: Apache-2.0
# Copyright 2022 Blender Foundation

#####################################################################
# Cycles Hydra render delegate
#####################################################################

set(INC
  ..
)
set(INC_SYS
  ${USD_INCLUDE_DIRS}
  ${GLEW_INCLUDE_DIR}
)

set(LIB
  cycles_scene
  cycles_session
  cycles_graph
  ${CYCLES_GLEW_LIBRARIES}
)
cycles_external_libraries_append(LIB)

set(INC_HD_CYCLES
  attribute.h
  camera.h
  config.h
  curves.h
  field.h
  file_reader.h
  geometry.h
  geometry.inl
  instancer.h
  light.h
  material.h
  mesh.h
  node_util.h
  output_driver.h
  pointcloud.h
  render_buffer.h
  render_delegate.h
  render_pass.h
  session.h
  volume.h
)

set(SRC_HD_CYCLES
  attribute.cpp
  curves.cpp
  camera.cpp
  field.cpp
  file_reader.cpp
  instancer.cpp
  light.cpp
  material.cpp
  mesh.cpp
  node_util.cpp
  output_driver.cpp
  pointcloud.cpp
  render_buffer.cpp
  render_delegate.cpp
  render_pass.cpp
  session.cpp
  volume.cpp
)

add_definitions(${GL_DEFINITIONS})

if(WITH_OPENVDB)
  add_definitions(-DWITH_OPENVDB ${OPENVDB_DEFINITIONS})
  list(APPEND INC_SYS
    ${OPENVDB_INCLUDE_DIRS}
  )
endif()

# Blender libraries do not include hgiGL, so build without display driver then.
if(EXISTS ${USD_INCLUDE_DIR}/pxr/imaging/hgiGL)
  add_definitions(-DWITH_HYDRA_DISPLAY_DRIVER)
  list(APPEND SRC_HD_CYCLES display_driver.cpp)
  list(APPEND INC_HD_CYCLES display_driver.h)
endif()

include_directories(${INC})
include_directories(SYSTEM ${INC_SYS})

add_library(cycles_hydra STATIC
  ${SRC_HD_CYCLES}
  ${INC_HD_CYCLES}
)

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(cycles_hydra
  PRIVATE
  GLOG_NO_ABBREVIATED_SEVERITIES=1
  OSL_DEBUG=$<CONFIG:DEBUG>
  TBB_USE_DEBUG=$<CONFIG:DEBUG>
  $<$<CXX_COMPILER_ID:MSVC>:NOMINMAX=1>
)

target_link_libraries(cycles_hydra
  PUBLIC
  ${USD_LIBRARIES}
  PRIVATE
  ${LIB}
)

if(WITH_CYCLES_HYDRA_RENDER_DELEGATE)
  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}
    cycles_hydra
  )

  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()

  # 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")
endif()