CMakeLists.txt 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156
  1. # Copyright 2021 The Draco Authors
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not
  4. # use this file except in compliance with the License. You may obtain a copy of
  5. # the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  11. # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  12. # License for the specific language governing permissions and limitations under
  13. # the License.
  14. cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
  15. if(DRACO_TRANSCODER_SUPPORTED)
  16. set(CMAKE_CXX_STANDARD 17)
  17. endif()
  18. project(draco C CXX)
  19. if(NOT CMAKE_BUILD_TYPE)
  20. set(CMAKE_BUILD_TYPE Release)
  21. endif()
  22. set(draco_root "${CMAKE_CURRENT_SOURCE_DIR}")
  23. set(draco_src_root "${draco_root}/src/draco")
  24. set(draco_build "${CMAKE_BINARY_DIR}")
  25. if("${draco_root}" STREQUAL "${draco_build}")
  26. message(
  27. FATAL_ERROR
  28. "Building from within the Draco source tree is not supported.\n"
  29. "Hint: Run these commands\n"
  30. "$ rm -rf CMakeCache.txt CMakeFiles\n"
  31. "$ mkdir -p ../draco_build\n"
  32. "$ cd ../draco_build\n"
  33. "And re-run CMake from the draco_build directory.")
  34. endif()
  35. include(FindPythonInterp)
  36. include("${draco_root}/cmake/draco_build_definitions.cmake")
  37. include("${draco_root}/cmake/draco_cpu_detection.cmake")
  38. include("${draco_root}/cmake/draco_dependencies.cmake")
  39. include("${draco_root}/cmake/draco_emscripten.cmake")
  40. include("${draco_root}/cmake/draco_flags.cmake")
  41. include("${draco_root}/cmake/draco_helpers.cmake")
  42. include("${draco_root}/cmake/draco_install.cmake")
  43. include("${draco_root}/cmake/draco_intrinsics.cmake")
  44. include("${draco_root}/cmake/draco_options.cmake")
  45. include("${draco_root}/cmake/draco_sanitizer.cmake")
  46. include("${draco_root}/cmake/draco_targets.cmake")
  47. include("${draco_root}/cmake/draco_tests.cmake")
  48. include("${draco_root}/cmake/draco_variables.cmake")
  49. # C++ and linker flags.
  50. draco_track_configuration_variable(DRACO_CXX_FLAGS)
  51. draco_track_configuration_variable(DRACO_EXE_LINKER_FLAGS)
  52. # Sanitizer integration.
  53. draco_track_configuration_variable(DRACO_SANITIZE)
  54. # Generated source file directory.
  55. draco_track_configuration_variable(DRACO_GENERATED_SOURCES_DIRECTORY)
  56. # Controls use of std::mutex and absl::Mutex in ThreadPool.
  57. draco_track_configuration_variable(DRACO_THREADPOOL_USE_STD_MUTEX)
  58. if(DRACO_VERBOSE)
  59. draco_dump_cmake_flag_variables()
  60. draco_dump_tracked_configuration_variables()
  61. draco_dump_options()
  62. endif()
  63. # Compiler/linker flags must be lists, but come in from the environment as
  64. # strings. Break them up:
  65. if(NOT "${DRACO_CXX_FLAGS}" STREQUAL "")
  66. separate_arguments(DRACO_CXX_FLAGS)
  67. endif()
  68. if(NOT "${DRACO_EXE_LINKER_FLAGS}" STREQUAL "")
  69. separate_arguments(DRACO_EXE_LINKER_FLAGS)
  70. endif()
  71. draco_reset_target_lists()
  72. draco_setup_options()
  73. draco_set_build_definitions()
  74. draco_set_cxx_flags()
  75. draco_set_exe_linker_flags()
  76. draco_generate_features_h()
  77. # Draco source file listing variables.
  78. list(
  79. APPEND draco_attributes_sources
  80. "${draco_src_root}/attributes/attribute_octahedron_transform.cc"
  81. "${draco_src_root}/attributes/attribute_octahedron_transform.h"
  82. "${draco_src_root}/attributes/attribute_quantization_transform.cc"
  83. "${draco_src_root}/attributes/attribute_quantization_transform.h"
  84. "${draco_src_root}/attributes/attribute_transform.cc"
  85. "${draco_src_root}/attributes/attribute_transform.h"
  86. "${draco_src_root}/attributes/attribute_transform_data.h"
  87. "${draco_src_root}/attributes/attribute_transform_type.h"
  88. "${draco_src_root}/attributes/geometry_attribute.cc"
  89. "${draco_src_root}/attributes/geometry_attribute.h"
  90. "${draco_src_root}/attributes/geometry_indices.h"
  91. "${draco_src_root}/attributes/point_attribute.cc"
  92. "${draco_src_root}/attributes/point_attribute.h")
  93. list(
  94. APPEND
  95. draco_compression_attributes_dec_sources
  96. "${draco_src_root}/compression/attributes/attributes_decoder.cc"
  97. "${draco_src_root}/compression/attributes/attributes_decoder.h"
  98. "${draco_src_root}/compression/attributes/attributes_decoder_interface.h"
  99. "${draco_src_root}/compression/attributes/kd_tree_attributes_decoder.cc"
  100. "${draco_src_root}/compression/attributes/kd_tree_attributes_decoder.h"
  101. "${draco_src_root}/compression/attributes/kd_tree_attributes_shared.h"
  102. "${draco_src_root}/compression/attributes/mesh_attribute_indices_encoding_data.h"
  103. "${draco_src_root}/compression/attributes/normal_compression_utils.h"
  104. "${draco_src_root}/compression/attributes/point_d_vector.h"
  105. "${draco_src_root}/compression/attributes/sequential_attribute_decoder.cc"
  106. "${draco_src_root}/compression/attributes/sequential_attribute_decoder.h"
  107. "${draco_src_root}/compression/attributes/sequential_attribute_decoders_controller.cc"
  108. "${draco_src_root}/compression/attributes/sequential_attribute_decoders_controller.h"
  109. "${draco_src_root}/compression/attributes/sequential_integer_attribute_decoder.cc"
  110. "${draco_src_root}/compression/attributes/sequential_integer_attribute_decoder.h"
  111. "${draco_src_root}/compression/attributes/sequential_normal_attribute_decoder.cc"
  112. "${draco_src_root}/compression/attributes/sequential_normal_attribute_decoder.h"
  113. "${draco_src_root}/compression/attributes/sequential_quantization_attribute_decoder.cc"
  114. "${draco_src_root}/compression/attributes/sequential_quantization_attribute_decoder.h"
  115. )
  116. list(
  117. APPEND
  118. draco_compression_attributes_enc_sources
  119. "${draco_src_root}/compression/attributes/attributes_encoder.cc"
  120. "${draco_src_root}/compression/attributes/attributes_encoder.h"
  121. "${draco_src_root}/compression/attributes/kd_tree_attributes_encoder.cc"
  122. "${draco_src_root}/compression/attributes/kd_tree_attributes_encoder.h"
  123. "${draco_src_root}/compression/attributes/linear_sequencer.h"
  124. "${draco_src_root}/compression/attributes/points_sequencer.h"
  125. "${draco_src_root}/compression/attributes/sequential_attribute_encoder.cc"
  126. "${draco_src_root}/compression/attributes/sequential_attribute_encoder.h"
  127. "${draco_src_root}/compression/attributes/sequential_attribute_encoders_controller.cc"
  128. "${draco_src_root}/compression/attributes/sequential_attribute_encoders_controller.h"
  129. "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoder.cc"
  130. "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoder.h"
  131. "${draco_src_root}/compression/attributes/sequential_normal_attribute_encoder.cc"
  132. "${draco_src_root}/compression/attributes/sequential_normal_attribute_encoder.h"
  133. "${draco_src_root}/compression/attributes/sequential_quantization_attribute_encoder.cc"
  134. "${draco_src_root}/compression/attributes/sequential_quantization_attribute_encoder.h"
  135. )
  136. list(
  137. APPEND
  138. draco_compression_attributes_pred_schemes_dec_sources
  139. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h"
  140. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h"
  141. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h"
  142. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h"
  143. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h"
  144. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h"
  145. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h"
  146. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h"
  147. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h"
  148. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h"
  149. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h"
  150. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h"
  151. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h"
  152. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder.h"
  153. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h"
  154. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h"
  155. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h"
  156. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h"
  157. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_factory.h"
  158. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_interface.h"
  159. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h"
  160. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h"
  161. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h"
  162. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h"
  163. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h"
  164. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h"
  165. )
  166. list(
  167. APPEND
  168. draco_compression_attributes_pred_schemes_enc_sources
  169. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h"
  170. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h"
  171. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h"
  172. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h"
  173. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h"
  174. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h"
  175. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h"
  176. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h"
  177. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h"
  178. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h"
  179. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h"
  180. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h"
  181. "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h"
  182. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h"
  183. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder.h"
  184. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc"
  185. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h"
  186. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h"
  187. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h"
  188. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_factory.h"
  189. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_interface.h"
  190. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h"
  191. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h"
  192. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h"
  193. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h"
  194. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h"
  195. "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h"
  196. )
  197. list(
  198. APPEND
  199. draco_compression_bit_coders_sources
  200. "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_coding_shared.h"
  201. "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_decoder.cc"
  202. "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_decoder.h"
  203. "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_encoder.cc"
  204. "${draco_src_root}/compression/bit_coders/adaptive_rans_bit_encoder.h"
  205. "${draco_src_root}/compression/bit_coders/direct_bit_decoder.cc"
  206. "${draco_src_root}/compression/bit_coders/direct_bit_decoder.h"
  207. "${draco_src_root}/compression/bit_coders/direct_bit_encoder.cc"
  208. "${draco_src_root}/compression/bit_coders/direct_bit_encoder.h"
  209. "${draco_src_root}/compression/bit_coders/folded_integer_bit_decoder.h"
  210. "${draco_src_root}/compression/bit_coders/folded_integer_bit_encoder.h"
  211. "${draco_src_root}/compression/bit_coders/rans_bit_decoder.cc"
  212. "${draco_src_root}/compression/bit_coders/rans_bit_decoder.h"
  213. "${draco_src_root}/compression/bit_coders/rans_bit_encoder.cc"
  214. "${draco_src_root}/compression/bit_coders/rans_bit_encoder.h"
  215. "${draco_src_root}/compression/bit_coders/symbol_bit_decoder.cc"
  216. "${draco_src_root}/compression/bit_coders/symbol_bit_decoder.h"
  217. "${draco_src_root}/compression/bit_coders/symbol_bit_encoder.cc"
  218. "${draco_src_root}/compression/bit_coders/symbol_bit_encoder.h")
  219. list(
  220. APPEND draco_enc_config_sources
  221. "${draco_src_root}/compression/config/compression_shared.h"
  222. "${draco_src_root}/compression/config/draco_options.h"
  223. "${draco_src_root}/compression/config/encoder_options.h"
  224. "${draco_src_root}/compression/config/encoding_features.h")
  225. list(
  226. APPEND draco_dec_config_sources
  227. "${draco_src_root}/compression/config/compression_shared.h"
  228. "${draco_src_root}/compression/config/decoder_options.h"
  229. "${draco_src_root}/compression/config/draco_options.h")
  230. list(APPEND draco_compression_options_sources
  231. "${draco_src_root}/compression/draco_compression_options.cc"
  232. "${draco_src_root}/compression/draco_compression_options.h")
  233. list(APPEND draco_compression_decode_sources
  234. "${draco_src_root}/compression/decode.cc"
  235. "${draco_src_root}/compression/decode.h")
  236. list(
  237. APPEND draco_compression_encode_sources
  238. "${draco_src_root}/compression/encode.cc"
  239. "${draco_src_root}/compression/encode.h"
  240. "${draco_src_root}/compression/encode_base.h"
  241. "${draco_src_root}/compression/expert_encode.cc"
  242. "${draco_src_root}/compression/expert_encode.h")
  243. list(
  244. APPEND
  245. draco_compression_mesh_traverser_sources
  246. "${draco_src_root}/compression/mesh/traverser/depth_first_traverser.h"
  247. "${draco_src_root}/compression/mesh/traverser/max_prediction_degree_traverser.h"
  248. "${draco_src_root}/compression/mesh/traverser/mesh_attribute_indices_encoding_observer.h"
  249. "${draco_src_root}/compression/mesh/traverser/mesh_traversal_sequencer.h"
  250. "${draco_src_root}/compression/mesh/traverser/traverser_base.h")
  251. list(
  252. APPEND
  253. draco_compression_mesh_dec_sources
  254. "${draco_src_root}/compression/mesh/mesh_decoder.cc"
  255. "${draco_src_root}/compression/mesh/mesh_decoder.h"
  256. "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder.cc"
  257. "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder.h"
  258. "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl.cc"
  259. "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl.h"
  260. "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl_interface.h"
  261. "${draco_src_root}/compression/mesh/mesh_edgebreaker_shared.h"
  262. "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_decoder.h"
  263. "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h"
  264. "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_valence_decoder.h"
  265. "${draco_src_root}/compression/mesh/mesh_sequential_decoder.cc"
  266. "${draco_src_root}/compression/mesh/mesh_sequential_decoder.h")
  267. list(
  268. APPEND
  269. draco_compression_mesh_enc_sources
  270. "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder.cc"
  271. "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder.h"
  272. "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl.cc"
  273. "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl.h"
  274. "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl_interface.h"
  275. "${draco_src_root}/compression/mesh/mesh_edgebreaker_shared.h"
  276. "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_encoder.h"
  277. "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_predictive_encoder.h"
  278. "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_valence_encoder.h"
  279. "${draco_src_root}/compression/mesh/mesh_encoder.cc"
  280. "${draco_src_root}/compression/mesh/mesh_encoder.h"
  281. "${draco_src_root}/compression/mesh/mesh_sequential_encoder.cc"
  282. "${draco_src_root}/compression/mesh/mesh_sequential_encoder.h")
  283. list(
  284. APPEND
  285. draco_compression_point_cloud_dec_sources
  286. "${draco_src_root}/compression/point_cloud/point_cloud_decoder.cc"
  287. "${draco_src_root}/compression/point_cloud/point_cloud_decoder.h"
  288. "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_decoder.cc"
  289. "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_decoder.h"
  290. "${draco_src_root}/compression/point_cloud/point_cloud_sequential_decoder.cc"
  291. "${draco_src_root}/compression/point_cloud/point_cloud_sequential_decoder.h"
  292. )
  293. list(
  294. APPEND
  295. draco_compression_point_cloud_enc_sources
  296. "${draco_src_root}/compression/point_cloud/point_cloud_encoder.cc"
  297. "${draco_src_root}/compression/point_cloud/point_cloud_encoder.h"
  298. "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoder.cc"
  299. "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoder.h"
  300. "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.cc"
  301. "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.h"
  302. )
  303. list(
  304. APPEND draco_compression_entropy_sources
  305. "${draco_src_root}/compression/entropy/ans.h"
  306. "${draco_src_root}/compression/entropy/rans_symbol_coding.h"
  307. "${draco_src_root}/compression/entropy/rans_symbol_decoder.h"
  308. "${draco_src_root}/compression/entropy/rans_symbol_encoder.h"
  309. "${draco_src_root}/compression/entropy/shannon_entropy.cc"
  310. "${draco_src_root}/compression/entropy/shannon_entropy.h"
  311. "${draco_src_root}/compression/entropy/symbol_decoding.cc"
  312. "${draco_src_root}/compression/entropy/symbol_decoding.h"
  313. "${draco_src_root}/compression/entropy/symbol_encoding.cc"
  314. "${draco_src_root}/compression/entropy/symbol_encoding.h")
  315. list(
  316. APPEND draco_core_sources
  317. "${draco_src_root}/core/bit_utils.cc"
  318. "${draco_src_root}/core/bit_utils.h"
  319. "${draco_src_root}/core/bounding_box.cc"
  320. "${draco_src_root}/core/bounding_box.h"
  321. "${draco_src_root}/core/constants.h"
  322. "${draco_src_root}/core/cycle_timer.cc"
  323. "${draco_src_root}/core/cycle_timer.h"
  324. "${draco_src_root}/core/data_buffer.cc"
  325. "${draco_src_root}/core/data_buffer.h"
  326. "${draco_src_root}/core/decoder_buffer.cc"
  327. "${draco_src_root}/core/decoder_buffer.h"
  328. "${draco_src_root}/core/divide.cc"
  329. "${draco_src_root}/core/divide.h"
  330. "${draco_src_root}/core/draco_index_type.h"
  331. "${draco_src_root}/core/draco_index_type_vector.h"
  332. "${draco_src_root}/core/draco_types.cc"
  333. "${draco_src_root}/core/draco_types.h"
  334. "${draco_src_root}/core/draco_version.h"
  335. "${draco_src_root}/core/encoder_buffer.cc"
  336. "${draco_src_root}/core/encoder_buffer.h"
  337. "${draco_src_root}/core/hash_utils.cc"
  338. "${draco_src_root}/core/hash_utils.h"
  339. "${draco_src_root}/core/macros.h"
  340. "${draco_src_root}/core/math_utils.h"
  341. "${draco_src_root}/core/options.cc"
  342. "${draco_src_root}/core/options.h"
  343. "${draco_src_root}/core/quantization_utils.cc"
  344. "${draco_src_root}/core/quantization_utils.h"
  345. "${draco_src_root}/core/status.h"
  346. "${draco_src_root}/core/status_or.h"
  347. "${draco_src_root}/core/varint_decoding.h"
  348. "${draco_src_root}/core/varint_encoding.h"
  349. "${draco_src_root}/core/vector_d.h")
  350. list(
  351. APPEND draco_io_sources
  352. "${draco_src_root}/io/file_reader_factory.cc"
  353. "${draco_src_root}/io/file_reader_factory.h"
  354. "${draco_src_root}/io/file_reader_interface.h"
  355. "${draco_src_root}/io/file_utils.cc"
  356. "${draco_src_root}/io/file_utils.h"
  357. "${draco_src_root}/io/file_writer_factory.cc"
  358. "${draco_src_root}/io/file_writer_factory.h"
  359. "${draco_src_root}/io/file_writer_interface.h"
  360. "${draco_src_root}/io/file_writer_utils.h"
  361. "${draco_src_root}/io/file_writer_utils.cc"
  362. "${draco_src_root}/io/mesh_io.cc"
  363. "${draco_src_root}/io/mesh_io.h"
  364. "${draco_src_root}/io/obj_decoder.cc"
  365. "${draco_src_root}/io/obj_decoder.h"
  366. "${draco_src_root}/io/obj_encoder.cc"
  367. "${draco_src_root}/io/obj_encoder.h"
  368. "${draco_src_root}/io/parser_utils.cc"
  369. "${draco_src_root}/io/parser_utils.h"
  370. "${draco_src_root}/io/ply_decoder.cc"
  371. "${draco_src_root}/io/ply_decoder.h"
  372. "${draco_src_root}/io/ply_encoder.cc"
  373. "${draco_src_root}/io/ply_encoder.h"
  374. "${draco_src_root}/io/ply_property_reader.h"
  375. "${draco_src_root}/io/ply_property_writer.h"
  376. "${draco_src_root}/io/ply_reader.cc"
  377. "${draco_src_root}/io/ply_reader.h"
  378. "${draco_src_root}/io/stl_decoder.cc"
  379. "${draco_src_root}/io/stl_decoder.h"
  380. "${draco_src_root}/io/stl_encoder.cc"
  381. "${draco_src_root}/io/stl_encoder.h"
  382. "${draco_src_root}/io/point_cloud_io.cc"
  383. "${draco_src_root}/io/point_cloud_io.h"
  384. "${draco_src_root}/io/stdio_file_reader.cc"
  385. "${draco_src_root}/io/stdio_file_reader.h"
  386. "${draco_src_root}/io/stdio_file_writer.cc"
  387. "${draco_src_root}/io/stdio_file_writer.h")
  388. list(
  389. APPEND draco_mesh_sources
  390. "${draco_src_root}/mesh/corner_table.cc"
  391. "${draco_src_root}/mesh/corner_table.h"
  392. "${draco_src_root}/mesh/corner_table_iterators.h"
  393. "${draco_src_root}/mesh/mesh.cc"
  394. "${draco_src_root}/mesh/mesh.h"
  395. "${draco_src_root}/mesh/mesh_are_equivalent.cc"
  396. "${draco_src_root}/mesh/mesh_are_equivalent.h"
  397. "${draco_src_root}/mesh/mesh_attribute_corner_table.cc"
  398. "${draco_src_root}/mesh/mesh_attribute_corner_table.h"
  399. "${draco_src_root}/mesh/mesh_cleanup.cc"
  400. "${draco_src_root}/mesh/mesh_cleanup.h"
  401. "${draco_src_root}/mesh/mesh_features.cc"
  402. "${draco_src_root}/mesh/mesh_features.h"
  403. "${draco_src_root}/mesh/mesh_indices.h"
  404. "${draco_src_root}/mesh/mesh_misc_functions.cc"
  405. "${draco_src_root}/mesh/mesh_misc_functions.h"
  406. "${draco_src_root}/mesh/mesh_stripifier.cc"
  407. "${draco_src_root}/mesh/mesh_stripifier.h"
  408. "${draco_src_root}/mesh/triangle_soup_mesh_builder.cc"
  409. "${draco_src_root}/mesh/triangle_soup_mesh_builder.h"
  410. "${draco_src_root}/mesh/valence_cache.h")
  411. list(
  412. APPEND draco_point_cloud_sources
  413. "${draco_src_root}/point_cloud/point_cloud.cc"
  414. "${draco_src_root}/point_cloud/point_cloud.h"
  415. "${draco_src_root}/point_cloud/point_cloud_builder.cc"
  416. "${draco_src_root}/point_cloud/point_cloud_builder.h")
  417. list(
  418. APPEND
  419. draco_points_common_sources
  420. "${draco_src_root}/compression/point_cloud/algorithms/point_cloud_compression_method.h"
  421. "${draco_src_root}/compression/point_cloud/algorithms/point_cloud_types.h"
  422. "${draco_src_root}/compression/point_cloud/algorithms/quantize_points_3.h"
  423. "${draco_src_root}/compression/point_cloud/algorithms/queuing_policy.h")
  424. list(
  425. APPEND
  426. draco_points_dec_sources
  427. "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.cc"
  428. "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.h"
  429. "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_decoder.cc"
  430. "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_decoder.h"
  431. )
  432. list(
  433. APPEND
  434. draco_points_enc_sources
  435. "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.cc"
  436. "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.h"
  437. "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_encoder.cc"
  438. "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_encoder.h"
  439. )
  440. list(
  441. APPEND draco_metadata_sources
  442. "${draco_src_root}/metadata/geometry_metadata.cc"
  443. "${draco_src_root}/metadata/geometry_metadata.h"
  444. "${draco_src_root}/metadata/metadata.cc"
  445. "${draco_src_root}/metadata/metadata.h"
  446. "${draco_src_root}/metadata/property_attribute.cc"
  447. "${draco_src_root}/metadata/property_attribute.h"
  448. "${draco_src_root}/metadata/property_table.cc"
  449. "${draco_src_root}/metadata/property_table.h"
  450. "${draco_src_root}/metadata/structural_metadata.cc"
  451. "${draco_src_root}/metadata/structural_metadata.h"
  452. "${draco_src_root}/metadata/structural_metadata_schema.cc"
  453. "${draco_src_root}/metadata/structural_metadata_schema.h")
  454. list(APPEND draco_metadata_enc_sources
  455. "${draco_src_root}/metadata/metadata_encoder.cc"
  456. "${draco_src_root}/metadata/metadata_encoder.h")
  457. list(APPEND draco_metadata_dec_sources
  458. "${draco_src_root}/metadata/metadata_decoder.cc"
  459. "${draco_src_root}/metadata/metadata_decoder.h")
  460. list(APPEND draco_animation_sources
  461. "${draco_src_root}/animation/keyframe_animation.cc"
  462. "${draco_src_root}/animation/keyframe_animation.h")
  463. list(APPEND draco_animation_enc_sources
  464. "${draco_src_root}/animation/keyframe_animation_encoder.cc"
  465. "${draco_src_root}/animation/keyframe_animation_encoder.h")
  466. list(APPEND draco_animation_dec_sources
  467. "${draco_src_root}/animation/keyframe_animation_decoder.cc"
  468. "${draco_src_root}/animation/keyframe_animation_decoder.h")
  469. list(
  470. APPEND draco_js_dec_sources
  471. "${draco_src_root}/javascript/emscripten/decoder_webidl_wrapper.cc"
  472. "${draco_src_root}/javascript/emscripten/draco_decoder_glue_wrapper.cc"
  473. )
  474. list(
  475. APPEND draco_js_enc_sources
  476. "${draco_src_root}/javascript/emscripten/draco_encoder_glue_wrapper.cc"
  477. "${draco_src_root}/javascript/emscripten/encoder_webidl_wrapper.cc")
  478. list(
  479. APPEND
  480. draco_animation_js_dec_sources
  481. "${draco_src_root}/javascript/emscripten/animation_decoder_webidl_wrapper.cc"
  482. "${draco_src_root}/javascript/emscripten/draco_animation_decoder_glue_wrapper.cc"
  483. )
  484. list(
  485. APPEND
  486. draco_animation_js_enc_sources
  487. "${draco_src_root}/javascript/emscripten/animation_encoder_webidl_wrapper.cc"
  488. "${draco_src_root}/javascript/emscripten/draco_animation_encoder_glue_wrapper.cc"
  489. )
  490. list(APPEND draco_unity_plug_sources
  491. "${draco_src_root}/unity/draco_unity_plugin.cc"
  492. "${draco_src_root}/unity/draco_unity_plugin.h")
  493. list(APPEND draco_maya_plug_sources
  494. "${draco_src_root}/maya/draco_maya_plugin.cc"
  495. "${draco_src_root}/maya/draco_maya_plugin.h")
  496. if(DRACO_TRANSCODER_SUPPORTED)
  497. list(
  498. APPEND draco_animation_sources
  499. "${draco_src_root}/animation/animation.cc"
  500. "${draco_src_root}/animation/animation.h"
  501. "${draco_src_root}/animation/node_animation_data.h"
  502. "${draco_src_root}/animation/skin.cc"
  503. "${draco_src_root}/animation/skin.h")
  504. list(
  505. APPEND draco_io_sources
  506. "${draco_src_root}/io/gltf_decoder.cc"
  507. "${draco_src_root}/io/gltf_decoder.h"
  508. "${draco_src_root}/io/gltf_encoder.cc"
  509. "${draco_src_root}/io/gltf_encoder.h"
  510. "${draco_src_root}/io/gltf_utils.cc"
  511. "${draco_src_root}/io/gltf_utils.h"
  512. "${draco_src_root}/io/image_compression_options.h"
  513. "${draco_src_root}/io/scene_io.cc"
  514. "${draco_src_root}/io/scene_io.h"
  515. "${draco_src_root}/io/texture_io.cc"
  516. "${draco_src_root}/io/texture_io.h"
  517. "${draco_src_root}/io/tiny_gltf_utils.cc"
  518. "${draco_src_root}/io/tiny_gltf_utils.h")
  519. list(
  520. APPEND draco_material_sources
  521. "${draco_src_root}/material/material.cc"
  522. "${draco_src_root}/material/material.h"
  523. "${draco_src_root}/material/material_library.cc"
  524. "${draco_src_root}/material/material_library.h")
  525. list(
  526. APPEND draco_mesh_sources
  527. "${draco_src_root}/mesh/mesh_connected_components.h"
  528. "${draco_src_root}/mesh/mesh_splitter.cc"
  529. "${draco_src_root}/mesh/mesh_splitter.h"
  530. "${draco_src_root}/mesh/mesh_utils.cc"
  531. "${draco_src_root}/mesh/mesh_utils.h")
  532. list(
  533. APPEND draco_scene_sources
  534. "${draco_src_root}/scene/instance_array.cc"
  535. "${draco_src_root}/scene/instance_array.h"
  536. "${draco_src_root}/scene/light.cc"
  537. "${draco_src_root}/scene/light.h"
  538. "${draco_src_root}/scene/mesh_group.h"
  539. "${draco_src_root}/scene/scene.cc"
  540. "${draco_src_root}/scene/scene.h"
  541. "${draco_src_root}/scene/scene_are_equivalent.cc"
  542. "${draco_src_root}/scene/scene_are_equivalent.h"
  543. "${draco_src_root}/scene/scene_indices.h"
  544. "${draco_src_root}/scene/scene_node.h"
  545. "${draco_src_root}/scene/scene_utils.cc"
  546. "${draco_src_root}/scene/scene_utils.h"
  547. "${draco_src_root}/scene/trs_matrix.cc"
  548. "${draco_src_root}/scene/trs_matrix.h")
  549. list(
  550. APPEND draco_texture_sources
  551. "${draco_src_root}/texture/source_image.cc"
  552. "${draco_src_root}/texture/source_image.h"
  553. "${draco_src_root}/texture/texture.h"
  554. "${draco_src_root}/texture/texture_library.cc"
  555. "${draco_src_root}/texture/texture_library.h"
  556. "${draco_src_root}/texture/texture_map.cc"
  557. "${draco_src_root}/texture/texture_map.h"
  558. "${draco_src_root}/texture/texture_transform.cc"
  559. "${draco_src_root}/texture/texture_transform.h"
  560. "${draco_src_root}/texture/texture_utils.cc"
  561. "${draco_src_root}/texture/texture_utils.h")
  562. endif()
  563. #
  564. # Draco targets.
  565. #
  566. if(EMSCRIPTEN AND DRACO_JS_GLUE)
  567. # Draco decoder and encoder "executable" targets in various flavors for
  568. # Emscripten.
  569. if(DRACO_TRANSCODER_SUPPORTED)
  570. message(FATAL_ERROR "The transcoder is not supported in Emscripten.")
  571. endif()
  572. list(
  573. APPEND draco_decoder_src
  574. ${draco_attributes_sources}
  575. ${draco_compression_attributes_dec_sources}
  576. ${draco_compression_attributes_pred_schemes_dec_sources}
  577. ${draco_compression_bit_coders_sources}
  578. ${draco_compression_decode_sources}
  579. ${draco_compression_entropy_sources}
  580. ${draco_compression_mesh_traverser_sources}
  581. ${draco_compression_mesh_dec_sources}
  582. ${draco_compression_options_sources}
  583. ${draco_compression_point_cloud_dec_sources}
  584. ${draco_core_sources}
  585. ${draco_dec_config_sources}
  586. ${draco_js_dec_sources}
  587. ${draco_mesh_sources}
  588. ${draco_metadata_dec_sources}
  589. ${draco_metadata_sources}
  590. ${draco_point_cloud_sources}
  591. ${draco_points_dec_sources})
  592. list(
  593. APPEND draco_encoder_src
  594. ${draco_attributes_sources}
  595. ${draco_compression_attributes_enc_sources}
  596. ${draco_compression_attributes_pred_schemes_enc_sources}
  597. ${draco_compression_bit_coders_sources}
  598. ${draco_compression_encode_sources}
  599. ${draco_compression_entropy_sources}
  600. ${draco_compression_mesh_traverser_sources}
  601. ${draco_compression_mesh_enc_sources}
  602. ${draco_compression_options_sources}
  603. ${draco_compression_point_cloud_enc_sources}
  604. ${draco_core_sources}
  605. ${draco_enc_config_sources}
  606. ${draco_js_enc_sources}
  607. ${draco_mesh_sources}
  608. ${draco_metadata_enc_sources}
  609. ${draco_metadata_sources}
  610. ${draco_point_cloud_sources}
  611. ${draco_points_enc_sources})
  612. list(APPEND draco_js_dec_idl
  613. "${draco_src_root}/javascript/emscripten/draco_web_decoder.idl")
  614. list(APPEND draco_js_enc_idl
  615. "${draco_src_root}/javascript/emscripten/draco_web_encoder.idl")
  616. list(
  617. APPEND
  618. draco_animation_js_dec_idl
  619. "${draco_src_root}/javascript/emscripten/draco_animation_web_decoder.idl")
  620. list(
  621. APPEND
  622. draco_animation_js_enc_idl
  623. "${draco_src_root}/javascript/emscripten/draco_animation_web_encoder.idl")
  624. list(APPEND draco_pre_link_js_sources
  625. "${draco_src_root}/javascript/emscripten/prepareCallbacks.js"
  626. "${draco_src_root}/javascript/emscripten/version.js")
  627. list(APPEND draco_post_link_js_sources
  628. "${draco_src_root}/javascript/emscripten/finalize.js")
  629. list(APPEND draco_post_link_js_decoder_sources ${draco_post_link_js_sources}
  630. "${draco_src_root}/javascript/emscripten/decoder_functions.js")
  631. set(draco_decoder_glue_path "${draco_build}/glue_decoder")
  632. set(draco_encoder_glue_path "${draco_build}/glue_encoder")
  633. draco_generate_emscripten_glue(INPUT_IDL ${draco_js_dec_idl}
  634. OUTPUT_PATH ${draco_decoder_glue_path})
  635. draco_generate_emscripten_glue(INPUT_IDL ${draco_js_enc_idl}
  636. OUTPUT_PATH ${draco_encoder_glue_path})
  637. if(DRACO_DECODER_ATTRIBUTE_DEDUPLICATION)
  638. list(APPEND draco_decoder_features
  639. "DRACO_ATTRIBUTE_INDICES_DEDUPLICATION_SUPPORTED"
  640. "DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED")
  641. endif()
  642. draco_add_emscripten_executable(
  643. NAME draco_decoder
  644. SOURCES ${draco_decoder_src}
  645. DEFINES ${draco_defines}
  646. FEATURES ${draco_decoder_features}
  647. INCLUDES ${draco_include_paths}
  648. LINK_FLAGS "-sEXPORT_NAME=\"DracoDecoderModule\""
  649. GLUE_PATH ${draco_decoder_glue_path}
  650. PRE_LINK_JS_SOURCES ${draco_pre_link_js_sources}
  651. POST_LINK_JS_SOURCES ${draco_post_link_js_decoder_sources})
  652. draco_add_emscripten_executable(
  653. NAME draco_encoder
  654. SOURCES ${draco_encoder_src}
  655. DEFINES ${draco_defines}
  656. FEATURES DRACO_ATTRIBUTE_INDICES_DEDUPLICATION_SUPPORTED
  657. DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED
  658. INCLUDES ${draco_include_paths}
  659. LINK_FLAGS "-sEXPORT_NAME=\"DracoEncoderModule\""
  660. GLUE_PATH ${draco_encoder_glue_path}
  661. PRE_LINK_JS_SOURCES ${draco_pre_link_js_sources}
  662. POST_LINK_JS_SOURCES ${draco_post_link_js_sources})
  663. if(DRACO_ANIMATION_ENCODING)
  664. set(draco_anim_decoder_glue_path "${draco_build}/glue_animation_decoder")
  665. set(draco_anim_encoder_glue_path "${draco_build}/glue_animation_encoder")
  666. draco_generate_emscripten_glue(INPUT_IDL ${draco_animation_js_dec_idl}
  667. OUTPUT_PATH ${draco_anim_decoder_glue_path})
  668. draco_generate_emscripten_glue(INPUT_IDL ${draco_animation_js_enc_idl}
  669. OUTPUT_PATH ${draco_anim_encoder_glue_path})
  670. draco_add_emscripten_executable(
  671. NAME draco_animation_decoder
  672. SOURCES ${draco_animation_dec_sources} ${draco_animation_js_dec_sources}
  673. ${draco_animation_sources} ${draco_decoder_src}
  674. DEFINES ${draco_defines}
  675. INCLUDES ${draco_include_paths}
  676. LINK_FLAGS "-sEXPORT_NAME=\"DracoAnimationDecoderModule\""
  677. GLUE_PATH ${draco_anim_decoder_glue_path}
  678. PRE_LINK_JS_SOURCES ${draco_pre_link_js_sources}
  679. POST_LINK_JS_SOURCES ${draco_post_link_js_decoder_sources})
  680. draco_add_emscripten_executable(
  681. NAME draco_animation_encoder
  682. SOURCES ${draco_animation_enc_sources} ${draco_animation_js_enc_sources}
  683. ${draco_animation_sources} ${draco_encoder_src}
  684. DEFINES ${draco_defines}
  685. INCLUDES ${draco_include_paths}
  686. LINK_FLAGS "-sEXPORT_NAME=\"DracoAnimationEncoderModule\""
  687. GLUE_PATH ${draco_anim_encoder_glue_path}
  688. PRE_LINK_JS_SOURCES ${draco_pre_link_js_sources}
  689. POST_LINK_JS_SOURCES ${draco_post_link_js_sources})
  690. endif()
  691. else()
  692. # Standard Draco libs, encoder and decoder. Object collections that mirror the
  693. # Draco directory structure.
  694. draco_add_library(
  695. NAME draco_attributes
  696. TYPE OBJECT
  697. SOURCES ${draco_attributes_sources}
  698. DEFINES ${draco_defines}
  699. INCLUDES ${draco_include_paths})
  700. draco_add_library(
  701. NAME draco_compression_attributes_dec OBJECT
  702. ${draco_compression_attributes_dec_sources}
  703. TYPE OBJECT
  704. SOURCES ${draco_compression_attributes_dec_sources}
  705. DEFINES ${draco_defines}
  706. INCLUDES ${draco_include_paths})
  707. draco_add_library(
  708. NAME draco_compression_attributes_enc
  709. TYPE OBJECT
  710. SOURCES ${draco_compression_attributes_enc_sources}
  711. DEFINES ${draco_defines}
  712. INCLUDES ${draco_include_paths})
  713. draco_add_library(
  714. NAME draco_compression_attributes_pred_schemes_dec
  715. TYPE OBJECT
  716. SOURCES ${draco_compression_attributes_pred_schemes_dec_sources})
  717. draco_add_library(
  718. NAME draco_compression_attributes_pred_schemes_enc
  719. TYPE OBJECT
  720. SOURCES ${draco_compression_attributes_pred_schemes_enc_sources}
  721. DEFINES ${draco_defines}
  722. INCLUDES ${draco_include_paths})
  723. draco_add_library(
  724. NAME draco_compression_bit_coders
  725. TYPE OBJECT
  726. SOURCES ${draco_compression_bit_coders_sources}
  727. DEFINES ${draco_defines}
  728. INCLUDES ${draco_include_paths})
  729. draco_add_library(
  730. NAME draco_enc_config
  731. TYPE OBJECT
  732. SOURCES ${draco_enc_config_sources}
  733. DEFINES ${draco_defines}
  734. INCLUDES ${draco_include_paths})
  735. draco_add_library(
  736. NAME draco_dec_config
  737. TYPE OBJECT
  738. SOURCES ${draco_dec_config_sources}
  739. DEFINES ${draco_defines}
  740. INCLUDES ${draco_include_paths})
  741. draco_add_library(
  742. NAME draco_compression_decode
  743. TYPE OBJECT
  744. SOURCES ${draco_compression_decode_sources}
  745. DEFINES ${draco_defines}
  746. INCLUDES ${draco_include_paths})
  747. draco_add_library(
  748. NAME draco_compression_encode
  749. TYPE OBJECT
  750. SOURCES ${draco_compression_encode_sources}
  751. DEFINES ${draco_defines}
  752. INCLUDES ${draco_include_paths})
  753. draco_add_library(
  754. NAME draco_compression_entropy
  755. TYPE OBJECT
  756. SOURCES ${draco_compression_entropy_sources}
  757. DEFINES ${draco_defines}
  758. INCLUDES ${draco_include_paths})
  759. draco_add_library(
  760. NAME draco_compression_mesh_traverser
  761. TYPE OBJECT
  762. SOURCES ${draco_compression_mesh_traverser_sources}
  763. DEFINES ${draco_defines}
  764. INCLUDES ${draco_include_paths})
  765. draco_add_library(
  766. NAME draco_compression_mesh_dec
  767. TYPE OBJECT
  768. SOURCES ${draco_compression_mesh_dec_sources}
  769. DEFINES ${draco_defines}
  770. INCLUDES ${draco_include_paths})
  771. draco_add_library(
  772. NAME draco_compression_mesh_enc
  773. TYPE OBJECT
  774. SOURCES ${draco_compression_mesh_enc_sources}
  775. DEFINES ${draco_defines}
  776. INCLUDES ${draco_include_paths})
  777. draco_add_library(
  778. NAME draco_compression_options
  779. TYPE OBJECT
  780. SOURCES ${draco_compression_options_sources}
  781. DEFINES ${draco_defines}
  782. INCLUDES ${draco_include_paths})
  783. draco_add_library(
  784. NAME draco_compression_point_cloud_dec
  785. TYPE OBJECT
  786. SOURCES ${draco_compression_point_cloud_dec_sources}
  787. DEFINES ${draco_defines}
  788. INCLUDES ${draco_include_paths})
  789. draco_add_library(
  790. NAME draco_compression_point_cloud_enc
  791. TYPE OBJECT
  792. SOURCES ${draco_compression_point_cloud_enc_sources}
  793. DEFINES ${draco_defines}
  794. INCLUDES ${draco_include_paths})
  795. draco_add_library(
  796. NAME draco_core
  797. TYPE OBJECT
  798. SOURCES ${draco_core_sources}
  799. DEFINES ${draco_defines}
  800. INCLUDES ${draco_include_paths})
  801. draco_add_library(
  802. NAME draco_io
  803. TYPE OBJECT
  804. SOURCES ${draco_io_sources}
  805. DEFINES ${draco_defines}
  806. INCLUDES ${draco_include_paths})
  807. draco_add_library(
  808. NAME draco_mesh
  809. TYPE OBJECT
  810. SOURCES ${draco_mesh_sources}
  811. DEFINES ${draco_defines}
  812. INCLUDES ${draco_include_paths})
  813. draco_add_library(
  814. NAME draco_metadata_dec
  815. TYPE OBJECT
  816. SOURCES ${draco_metadata_dec_sources}
  817. DEFINES ${draco_defines}
  818. INCLUDES ${draco_include_paths})
  819. draco_add_library(
  820. NAME draco_metadata_enc
  821. TYPE OBJECT
  822. SOURCES ${draco_metadata_enc_sources}
  823. DEFINES ${draco_defines}
  824. INCLUDES ${draco_include_paths})
  825. draco_add_library(
  826. NAME draco_metadata
  827. TYPE OBJECT
  828. SOURCES ${draco_metadata_sources}
  829. DEFINES ${draco_defines}
  830. INCLUDES ${draco_include_paths})
  831. draco_add_library(
  832. NAME draco_animation_dec
  833. TYPE OBJECT
  834. SOURCES ${draco_animation_dec_sources}
  835. DEFINES ${draco_defines}
  836. INCLUDES ${draco_include_paths})
  837. draco_add_library(
  838. NAME draco_animation_enc
  839. TYPE OBJECT
  840. SOURCES ${draco_animation_enc_sources}
  841. DEFINES ${draco_defines}
  842. INCLUDES ${draco_include_paths})
  843. draco_add_library(
  844. NAME draco_animation
  845. TYPE OBJECT
  846. SOURCES ${draco_animation_sources}
  847. DEFINES ${draco_defines}
  848. INCLUDES ${draco_include_paths})
  849. draco_add_library(
  850. NAME draco_point_cloud
  851. TYPE OBJECT
  852. SOURCES ${draco_point_cloud_sources}
  853. DEFINES ${draco_defines}
  854. INCLUDES ${draco_include_paths})
  855. draco_add_library(
  856. NAME draco_points_dec
  857. TYPE OBJECT
  858. SOURCES ${draco_points_common_sources} ${draco_points_dec_sources}
  859. DEFINES ${draco_defines}
  860. INCLUDES ${draco_include_paths})
  861. draco_add_library(
  862. NAME draco_points_enc
  863. TYPE OBJECT
  864. SOURCES ${draco_points_common_sources} ${draco_points_enc_sources}
  865. DEFINES ${draco_defines}
  866. INCLUDES ${draco_include_paths})
  867. if(DRACO_TRANSCODER_SUPPORTED)
  868. if(MSVC)
  869. # TODO(https://github.com/google/draco/issues/826)
  870. set_source_files_properties("${draco_src_root}/io/gltf_decoder.cc"
  871. PROPERTIES COMPILE_OPTIONS "/Od")
  872. endif()
  873. draco_add_library(
  874. NAME draco_material
  875. TYPE OBJECT
  876. SOURCES ${draco_material_sources}
  877. DEFINES ${draco_defines}
  878. INCLUDES ${draco_include_paths})
  879. draco_add_library(
  880. NAME draco_scene
  881. TYPE OBJECT
  882. SOURCES ${draco_scene_sources}
  883. DEFINES ${draco_defines}
  884. INCLUDES ${draco_include_paths})
  885. draco_add_library(
  886. NAME draco_texture
  887. TYPE OBJECT
  888. SOURCES ${draco_texture_sources}
  889. DEFINES ${draco_defines}
  890. INCLUDES ${draco_include_paths})
  891. endif()
  892. list(
  893. APPEND draco_object_library_deps
  894. draco_attributes
  895. draco_compression_attributes_dec
  896. draco_compression_attributes_enc
  897. draco_compression_attributes_pred_schemes_dec
  898. draco_compression_attributes_pred_schemes_enc
  899. draco_compression_bit_coders
  900. draco_compression_decode
  901. draco_compression_encode
  902. draco_compression_entropy
  903. draco_compression_mesh_dec
  904. draco_compression_mesh_enc
  905. draco_compression_options
  906. draco_compression_point_cloud_dec
  907. draco_compression_point_cloud_enc
  908. draco_core
  909. draco_dec_config
  910. draco_enc_config
  911. draco_io
  912. draco_mesh
  913. draco_metadata
  914. draco_metadata_dec
  915. draco_metadata_enc
  916. draco_animation
  917. draco_animation_dec
  918. draco_animation_enc
  919. draco_point_cloud
  920. draco_points_dec
  921. draco_points_enc)
  922. if(DRACO_TRANSCODER_SUPPORTED)
  923. list(APPEND draco_object_library_deps draco_material draco_scene
  924. draco_texture)
  925. endif()
  926. # Library targets that consume the object collections.
  927. if(MSVC)
  928. # In order to produce a DLL and import library the Windows tools require
  929. # that the exported symbols are part of the DLL target. The unfortunate side
  930. # effect of this is that a single configuration cannot output both the
  931. # static library and the DLL: This results in an either/or situation.
  932. # Windows users of the draco build can have a DLL and an import library, or
  933. # they can have a static library; they cannot have both from a single
  934. # configuration of the build.
  935. if(BUILD_SHARED_LIBS)
  936. set(draco_lib_type SHARED)
  937. else()
  938. set(draco_lib_type STATIC)
  939. endif()
  940. draco_add_library(
  941. NAME draco
  942. OUTPUT_NAME draco
  943. TYPE ${draco_lib_type}
  944. DEFINES ${draco_defines}
  945. INCLUDES ${draco_include_paths}
  946. OBJLIB_DEPS ${draco_object_library_deps}
  947. LIB_DEPS ${draco_lib_deps})
  948. add_library(draco::draco ALIAS draco)
  949. else()
  950. draco_add_library(
  951. NAME draco_static
  952. OUTPUT_NAME draco
  953. TYPE STATIC
  954. DEFINES ${draco_defines}
  955. INCLUDES ${draco_include_paths}
  956. OBJLIB_DEPS ${draco_object_library_deps}
  957. LIB_DEPS ${draco_lib_deps})
  958. if(BUILD_SHARED_LIBS)
  959. draco_add_library(
  960. NAME draco_shared
  961. SOURCES "${draco_src_root}/core/draco_version.h"
  962. OUTPUT_NAME draco
  963. TYPE SHARED
  964. DEFINES ${draco_defines}
  965. INCLUDES ${draco_include_paths}
  966. LIB_DEPS draco_static)
  967. add_library(draco::draco ALIAS draco_shared)
  968. set_target_properties(draco_shared PROPERTIES EXPORT_NAME draco)
  969. else()
  970. add_library(draco::draco ALIAS draco_static)
  971. set_target_properties(draco_static PROPERTIES EXPORT_NAME draco)
  972. endif()
  973. endif()
  974. if(DRACO_UNITY_PLUGIN)
  975. if(IOS)
  976. set(unity_decoder_lib_type STATIC)
  977. else()
  978. set(unity_decoder_lib_type MODULE)
  979. endif()
  980. draco_add_library(
  981. NAME draco_unity_plugin
  982. TYPE OBJECT
  983. SOURCES ${draco_unity_plug_sources}
  984. DEFINES ${draco_defines}
  985. INCLUDES ${draco_include_paths})
  986. draco_add_library(
  987. NAME dracodec_unity
  988. TYPE ${unity_decoder_lib_type}
  989. DEFINES ${draco_defines}
  990. INCLUDES ${draco_include_paths}
  991. OBJLIB_DEPS draco_unity_plugin
  992. LIB_DEPS ${draco_plugin_dependency})
  993. # For Mac, we need to build a .bundle for the unity plugin.
  994. if(APPLE)
  995. set_target_properties(dracodec_unity PROPERTIES BUNDLE true)
  996. endif()
  997. endif()
  998. if(DRACO_MAYA_PLUGIN)
  999. draco_add_library(
  1000. NAME draco_maya_plugin
  1001. TYPE OBJECT
  1002. SOURCES ${draco_maya_plug_sources}
  1003. DEFINES ${draco_defines}
  1004. INCLUDES ${draco_include_paths})
  1005. draco_add_library(
  1006. NAME draco_maya_wrapper
  1007. TYPE MODULE
  1008. DEFINES ${draco_defines}
  1009. INCLUDES ${draco_include_paths}
  1010. OBJLIB_DEPS draco_maya_plugin
  1011. LIB_DEPS ${draco_plugin_dependency})
  1012. # For Mac, we need to build a .bundle for the plugin.
  1013. if(APPLE)
  1014. set_target_properties(draco_maya_wrapper PROPERTIES BUNDLE true)
  1015. endif()
  1016. endif()
  1017. # Draco app targets.
  1018. draco_add_executable(
  1019. NAME draco_decoder
  1020. SOURCES "${draco_src_root}/tools/draco_decoder.cc" ${draco_io_sources}
  1021. DEFINES ${draco_defines}
  1022. INCLUDES ${draco_include_paths}
  1023. LIB_DEPS ${draco_dependency})
  1024. draco_add_executable(
  1025. NAME draco_encoder
  1026. SOURCES "${draco_src_root}/tools/draco_encoder.cc" ${draco_io_sources}
  1027. DEFINES ${draco_defines}
  1028. INCLUDES ${draco_include_paths}
  1029. LIB_DEPS ${draco_dependency})
  1030. if(DRACO_TRANSCODER_SUPPORTED)
  1031. draco_add_executable(
  1032. NAME draco_transcoder
  1033. SOURCES "${draco_src_root}/tools/draco_transcoder.cc"
  1034. "${draco_src_root}/tools/draco_transcoder_lib.cc"
  1035. "${draco_src_root}/tools/draco_transcoder_lib.h"
  1036. ${draco_io_sources}
  1037. DEFINES ${draco_defines}
  1038. INCLUDES ${draco_include_paths}
  1039. LIB_DEPS ${draco_dependency})
  1040. if(DRACO_SIMPLIFIER_SUPPORTED)
  1041. draco_add_executable(
  1042. NAME draco_simplifier
  1043. SOURCES ${draco_pipeline_proto_header}
  1044. "${draco_src_root}/tools/draco_simplifier.cc"
  1045. "${draco_src_root}/tools/draco_simplifier_lib.cc"
  1046. "${draco_src_root}/tools/draco_simplifier_lib.h"
  1047. ${draco_io_sources}
  1048. DEFINES ${draco_defines}
  1049. INCLUDES ${draco_include_paths}
  1050. LIB_DEPS ${draco_dependency})
  1051. endif()
  1052. endif()
  1053. draco_setup_install_target()
  1054. draco_setup_test_targets()
  1055. endif()
  1056. if(DRACO_VERBOSE)
  1057. draco_dump_cmake_flag_variables()
  1058. draco_dump_tracked_configuration_variables()
  1059. draco_dump_options()
  1060. endif()