diff --git a/CMakeLists.txt b/CMakeLists.txt index 15656f24..10ecc2a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,14 @@ -cmake_minimum_required(VERSION 3.2) +cmake_minimum_required(VERSION 3.5) project(draco C CXX) set(draco_root "${CMAKE_CURRENT_SOURCE_DIR}") +set(draco_src_root "${draco_root}/src/draco") set(draco_build_dir "${CMAKE_BINARY_DIR}") include("${draco_root}/cmake/compiler_flags.cmake") # Draco requires C++11 support. -require_cxx_flag_nomsvc("-std=c++11") +require_cxx_flag_nomsvc("-std=c++11" YES) option(ENABLE_POINT_CLOUD_COMPRESSION "" ON) option(ENABLE_MESH_COMPRESSION "" ON) @@ -35,6 +36,7 @@ if (ENABLE_MESH_COMPRESSION) endif () endif () + # Turn on more compiler warnings. if (ENABLE_EXTRA_WARNINGS) if (MSVC) @@ -136,10 +138,17 @@ else () set(ENABLE_TESTS OFF) message("Tests disabled: Google test CMakeLists.txt does not exist.") else () + if (APPLE AND BUILD_SHARED_LIBS) + # Silence an RPATH warning emitted during processing of Googletest + # cmake files. + set(CMAKE_MACOSX_RPATH 1) + endif () + set(DRACO_TEST_DATA_DIR "${draco_root}/testdata") configure_file("${draco_root}/cmake/draco_test_config.h.cmake" "${draco_build_dir}/testing/draco_test_config.h") - add_subdirectory("${GTEST_SOURCE_DIR}" "${GTEST_BUILD_DIR}") + add_subdirectory("${GTEST_SOURCE_DIR}" "${GTEST_BUILD_DIR}" + EXCLUDE_FROM_ALL) endif () include_directories("${GTEST_SOURCE_DIR}") @@ -147,314 +156,398 @@ else () endif () # Draco source file listing variables. -set(draco_compression_attributes_decoder_sources - "${draco_root}/compression/attributes/attributes_decoder.cc" - "${draco_root}/compression/attributes/attributes_decoder.h" - "${draco_root}/compression/attributes/kd_tree_attributes_decoder.cc" - "${draco_root}/compression/attributes/kd_tree_attributes_decoder.h" - "${draco_root}/compression/attributes/kd_tree_attributes_shared.h" - "${draco_root}/compression/attributes/mesh_attribute_indices_encoding_data.h" - "${draco_root}/compression/attributes/mesh_traversal_sequencer.h" - "${draco_root}/compression/attributes/normal_compression_utils.h" - "${draco_root}/compression/attributes/sequential_attribute_decoder.cc" - "${draco_root}/compression/attributes/sequential_attribute_decoder.h" - "${draco_root}/compression/attributes/sequential_attribute_decoders_controller.cc" - "${draco_root}/compression/attributes/sequential_attribute_decoders_controller.h" - "${draco_root}/compression/attributes/sequential_integer_attribute_decoder.cc" - "${draco_root}/compression/attributes/sequential_integer_attribute_decoder.h" - "${draco_root}/compression/attributes/sequential_normal_attribute_decoder.cc" - "${draco_root}/compression/attributes/sequential_normal_attribute_decoder.h" - "${draco_root}/compression/attributes/sequential_quantization_attribute_decoder.cc" - "${draco_root}/compression/attributes/sequential_quantization_attribute_decoder.h") - -set(draco_compression_attributes_encoder_sources - "${draco_root}/compression/attributes/attributes_encoder.cc" - "${draco_root}/compression/attributes/attributes_encoder.h" - "${draco_root}/compression/attributes/kd_tree_attributes_encoder.cc" - "${draco_root}/compression/attributes/kd_tree_attributes_encoder.h" - "${draco_root}/compression/attributes/linear_sequencer.h" - "${draco_root}/compression/attributes/mesh_attribute_indices_encoding_observer.h" - "${draco_root}/compression/attributes/points_sequencer.h" - "${draco_root}/compression/attributes/sequential_attribute_encoder.cc" - "${draco_root}/compression/attributes/sequential_attribute_encoder.h" - "${draco_root}/compression/attributes/sequential_attribute_encoders_controller.cc" - "${draco_root}/compression/attributes/sequential_attribute_encoders_controller.h" - "${draco_root}/compression/attributes/sequential_integer_attribute_encoder.cc" - "${draco_root}/compression/attributes/sequential_integer_attribute_encoder.h" - "${draco_root}/compression/attributes/sequential_normal_attribute_encoder.cc" - "${draco_root}/compression/attributes/sequential_normal_attribute_encoder.h" - "${draco_root}/compression/attributes/sequential_quantization_attribute_encoder.cc" - "${draco_root}/compression/attributes/sequential_quantization_attribute_encoder.h") - -set(draco_compression_attributes_pred_schemes_sources - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_interface.h" - "${draco_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme.h" - "${draco_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h" - "${draco_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram.h" - "${draco_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram.h" - "${draco_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram.h" - "${draco_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" - "${draco_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_difference.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_factory.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_transform.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform.h") - -set(draco_compression_config_sources - "${draco_root}/compression/config/compression_shared.h" - "${draco_root}/compression/config/encoder_options.cc" - "${draco_root}/compression/config/encoder_options.h" - "${draco_root}/compression/config/encoding_features.h") +set(draco_attributes_sources + "${draco_src_root}/attributes/attribute_octahedron_transform.cc" + "${draco_src_root}/attributes/attribute_octahedron_transform.h" + "${draco_src_root}/attributes/attribute_quantization_transform.cc" + "${draco_src_root}/attributes/attribute_quantization_transform.h" + "${draco_src_root}/attributes/attribute_transform.cc" + "${draco_src_root}/attributes/attribute_transform.h" + "${draco_src_root}/attributes/attribute_transform_data.h" + "${draco_src_root}/attributes/attribute_transform_type.h" + "${draco_src_root}/attributes/geometry_attribute.cc" + "${draco_src_root}/attributes/geometry_attribute.h" + "${draco_src_root}/attributes/geometry_indices.h" + "${draco_src_root}/attributes/point_attribute.cc" + "${draco_src_root}/attributes/point_attribute.h") + +set(draco_compression_attributes_dec_sources + "${draco_src_root}/compression/attributes/attributes_decoder.cc" + "${draco_src_root}/compression/attributes/attributes_decoder.h" + "${draco_src_root}/compression/attributes/kd_tree_attributes_decoder.cc" + "${draco_src_root}/compression/attributes/kd_tree_attributes_decoder.h" + "${draco_src_root}/compression/attributes/kd_tree_attributes_shared.h" + "${draco_src_root}/compression/attributes/mesh_attribute_indices_encoding_data.h" + "${draco_src_root}/compression/attributes/mesh_traversal_sequencer.h" + "${draco_src_root}/compression/attributes/normal_compression_utils.h" + "${draco_src_root}/compression/attributes/sequential_attribute_decoder.cc" + "${draco_src_root}/compression/attributes/sequential_attribute_decoder.h" + "${draco_src_root}/compression/attributes/sequential_attribute_decoders_controller.cc" + "${draco_src_root}/compression/attributes/sequential_attribute_decoders_controller.h" + "${draco_src_root}/compression/attributes/sequential_integer_attribute_decoder.cc" + "${draco_src_root}/compression/attributes/sequential_integer_attribute_decoder.h" + "${draco_src_root}/compression/attributes/sequential_normal_attribute_decoder.cc" + "${draco_src_root}/compression/attributes/sequential_normal_attribute_decoder.h" + "${draco_src_root}/compression/attributes/sequential_quantization_attribute_decoder.cc" + "${draco_src_root}/compression/attributes/sequential_quantization_attribute_decoder.h") + +set(draco_compression_attributes_enc_sources + "${draco_src_root}/compression/attributes/attributes_encoder.cc" + "${draco_src_root}/compression/attributes/attributes_encoder.h" + "${draco_src_root}/compression/attributes/kd_tree_attributes_encoder.cc" + "${draco_src_root}/compression/attributes/kd_tree_attributes_encoder.h" + "${draco_src_root}/compression/attributes/linear_sequencer.h" + "${draco_src_root}/compression/attributes/mesh_attribute_indices_encoding_observer.h" + "${draco_src_root}/compression/attributes/points_sequencer.h" + "${draco_src_root}/compression/attributes/sequential_attribute_encoder.cc" + "${draco_src_root}/compression/attributes/sequential_attribute_encoder.h" + "${draco_src_root}/compression/attributes/sequential_attribute_encoders_controller.cc" + "${draco_src_root}/compression/attributes/sequential_attribute_encoders_controller.h" + "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoder.cc" + "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoder.h" + "${draco_src_root}/compression/attributes/sequential_normal_attribute_encoder.cc" + "${draco_src_root}/compression/attributes/sequential_normal_attribute_encoder.h" + "${draco_src_root}/compression/attributes/sequential_quantization_attribute_encoder.cc" + "${draco_src_root}/compression/attributes/sequential_quantization_attribute_encoder.h") + +set(draco_compression_attributes_pred_schemes_dec_sources + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_factory.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_interface.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h") + +set(draco_compression_attributes_pred_schemes_enc_sources + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.cc" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_factory.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_interface.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h") + +set(draco_enc_config_sources + "${draco_src_root}/compression/config/compression_shared.h" + "${draco_src_root}/compression/config/draco_options.h" + "${draco_src_root}/compression/config/encoder_options.h" + "${draco_src_root}/compression/config/encoding_features.h") + +set(draco_dec_config_sources + "${draco_src_root}/compression/config/compression_shared.h" + "${draco_src_root}/compression/config/decoder_options.h" + "${draco_src_root}/compression/config/draco_options.h") set(draco_compression_decode_sources - "${draco_root}/compression/decode.cc" - "${draco_root}/compression/decode.h") + "${draco_src_root}/compression/decode.cc" + "${draco_src_root}/compression/decode.h") set(draco_compression_encode_sources - "${draco_root}/compression/encode.cc" - "${draco_root}/compression/encode.h") - -set(draco_compression_mesh_decoder_sources - "${draco_root}/compression/mesh/mesh_decoder.cc" - "${draco_root}/compression/mesh/mesh_decoder.h" - "${draco_root}/compression/mesh/mesh_decoder_helpers.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_decoder.cc" - "${draco_root}/compression/mesh/mesh_edgebreaker_decoder.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_decoder_impl.cc" - "${draco_root}/compression/mesh/mesh_edgebreaker_decoder_impl.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_decoder_impl_interface.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_shared.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_traversal_decoder.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_traversal_valence_decoder.h" - "${draco_root}/compression/mesh/mesh_sequential_decoder.cc" - "${draco_root}/compression/mesh/mesh_sequential_decoder.h") - -set(draco_compression_mesh_encoder_sources - "${draco_root}/compression/mesh/mesh_edgebreaker_encoder.cc" - "${draco_root}/compression/mesh/mesh_edgebreaker_encoder.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_encoder_impl.cc" - "${draco_root}/compression/mesh/mesh_edgebreaker_encoder_impl.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_encoder_impl_interface.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_shared.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_traversal_encoder.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_traversal_predictive_encoder.h" - "${draco_root}/compression/mesh/mesh_edgebreaker_traversal_valence_encoder.h" - "${draco_root}/compression/mesh/mesh_encoder.cc" - "${draco_root}/compression/mesh/mesh_encoder.h" - "${draco_root}/compression/mesh/mesh_encoder_helpers.h" - "${draco_root}/compression/mesh/mesh_sequential_encoder.cc" - "${draco_root}/compression/mesh/mesh_sequential_encoder.h") - -set(draco_compression_point_cloud_decoder_sources - "${draco_root}/compression/point_cloud/point_cloud_decoder.cc" - "${draco_root}/compression/point_cloud/point_cloud_decoder.h" - "${draco_root}/compression/point_cloud/point_cloud_kd_tree_decoder.cc" - "${draco_root}/compression/point_cloud/point_cloud_kd_tree_decoder.h" - "${draco_root}/compression/point_cloud/point_cloud_sequential_decoder.cc" - "${draco_root}/compression/point_cloud/point_cloud_sequential_decoder.h") - -set(draco_compression_point_cloud_encoder_sources - "${draco_root}/compression/point_cloud/point_cloud_encoder.cc" - "${draco_root}/compression/point_cloud/point_cloud_encoder.h" - "${draco_root}/compression/point_cloud/point_cloud_kd_tree_encoder.cc" - "${draco_root}/compression/point_cloud/point_cloud_kd_tree_encoder.h" - "${draco_root}/compression/point_cloud/point_cloud_sequential_encoder.cc" - "${draco_root}/compression/point_cloud/point_cloud_sequential_encoder.h") + "${draco_src_root}/compression/encode.cc" + "${draco_src_root}/compression/encode.h" + "${draco_src_root}/compression/encode_base.h" + "${draco_src_root}/compression/expert_encode.cc" + "${draco_src_root}/compression/expert_encode.h") + +set(draco_compression_mesh_dec_sources + "${draco_src_root}/compression/mesh/mesh_decoder.cc" + "${draco_src_root}/compression/mesh/mesh_decoder.h" + "${draco_src_root}/compression/mesh/mesh_decoder_helpers.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder.cc" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl.cc" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_decoder_impl_interface.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_shared.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_decoder.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_valence_decoder.h" + "${draco_src_root}/compression/mesh/mesh_sequential_decoder.cc" + "${draco_src_root}/compression/mesh/mesh_sequential_decoder.h") + +set(draco_compression_mesh_enc_sources + "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder.cc" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl.cc" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoder_impl_interface.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_shared.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_encoder.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_predictive_encoder.h" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_traversal_valence_encoder.h" + "${draco_src_root}/compression/mesh/mesh_encoder.cc" + "${draco_src_root}/compression/mesh/mesh_encoder.h" + "${draco_src_root}/compression/mesh/mesh_encoder_helpers.h" + "${draco_src_root}/compression/mesh/mesh_sequential_encoder.cc" + "${draco_src_root}/compression/mesh/mesh_sequential_encoder.h") + +set(draco_compression_point_cloud_dec_sources + "${draco_src_root}/compression/point_cloud/point_cloud_decoder.cc" + "${draco_src_root}/compression/point_cloud/point_cloud_decoder.h" + "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_decoder.cc" + "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_decoder.h" + "${draco_src_root}/compression/point_cloud/point_cloud_sequential_decoder.cc" + "${draco_src_root}/compression/point_cloud/point_cloud_sequential_decoder.h") + +set(draco_compression_point_cloud_enc_sources + "${draco_src_root}/compression/point_cloud/point_cloud_encoder.cc" + "${draco_src_root}/compression/point_cloud/point_cloud_encoder.h" + "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoder.cc" + "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoder.h" + "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.cc" + "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoder.h") set(draco_core_sources - "${draco_root}/core/adaptive_rans_bit_coding_shared.h" - "${draco_root}/core/adaptive_rans_bit_decoder.h" - "${draco_root}/core/adaptive_rans_bit_decoder.cc" - "${draco_root}/core/adaptive_rans_bit_encoder.h" - "${draco_root}/core/adaptive_rans_bit_encoder.cc" - "${draco_root}/core/ans.h" - "${draco_root}/core/bit_coder.cc" - "${draco_root}/core/bit_coder.h" - "${draco_root}/core/bit_utils.h" - "${draco_root}/core/cycle_timer.cc" - "${draco_root}/core/cycle_timer.h" - "${draco_root}/core/data_buffer.cc" - "${draco_root}/core/data_buffer.h" - "${draco_root}/core/decoder_buffer.cc" - "${draco_root}/core/decoder_buffer.h" - "${draco_root}/core/direct_bit_decoder.h" - "${draco_root}/core/direct_bit_decoder.cc" - "${draco_root}/core/direct_bit_encoder.h" - "${draco_root}/core/direct_bit_encoder.cc" - "${draco_root}/core/divide.cc" - "${draco_root}/core/divide.h" - "${draco_root}/core/draco_index_type.h" - "${draco_root}/core/draco_index_type_vector.h" - "${draco_root}/core/draco_types.cc" - "${draco_root}/core/draco_types.h" - "${draco_root}/core/encoder_buffer.cc" - "${draco_root}/core/encoder_buffer.h" - "${draco_root}/core/folded_integer_bit_decoder.h" - "${draco_root}/core/folded_integer_bit_encoder.h" - "${draco_root}/core/hash_utils.cc" - "${draco_root}/core/hash_utils.h" - "${draco_root}/core/macros.h" - "${draco_root}/core/math_utils.h" - "${draco_root}/core/options.cc" - "${draco_root}/core/options.h" - "${draco_root}/core/quantization_utils.cc" - "${draco_root}/core/quantization_utils.h" - "${draco_root}/core/rans_bit_decoder.h" - "${draco_root}/core/rans_bit_decoder.cc" - "${draco_root}/core/rans_bit_encoder.h" - "${draco_root}/core/rans_bit_encoder.cc" - "${draco_root}/core/rans_symbol_coding.h" - "${draco_root}/core/rans_symbol_decoder.h" - "${draco_root}/core/rans_symbol_encoder.h" - "${draco_root}/core/shannon_entropy.h" - "${draco_root}/core/shannon_entropy.cc" - "${draco_root}/core/symbol_bit_decoder.h" - "${draco_root}/core/symbol_bit_decoder.cc" - "${draco_root}/core/symbol_bit_encoder.h" - "${draco_root}/core/symbol_bit_encoder.cc" - "${draco_root}/core/symbol_decoding.cc" - "${draco_root}/core/symbol_decoding.h" - "${draco_root}/core/symbol_encoding.cc" - "${draco_root}/core/symbol_encoding.h" - "${draco_root}/core/varint_decoding.h" - "${draco_root}/core/varint_encoding.h" - "${draco_root}/core/vector_d.h") + "${draco_src_root}/core/ans.h" + "${draco_src_root}/core/bit_utils.h" + "${draco_src_root}/core/cycle_timer.cc" + "${draco_src_root}/core/cycle_timer.h" + "${draco_src_root}/core/data_buffer.cc" + "${draco_src_root}/core/data_buffer.h" + "${draco_src_root}/core/decoder_buffer.cc" + "${draco_src_root}/core/decoder_buffer.h" + "${draco_src_root}/core/divide.cc" + "${draco_src_root}/core/divide.h" + "${draco_src_root}/core/draco_index_type.h" + "${draco_src_root}/core/draco_index_type_vector.h" + "${draco_src_root}/core/draco_types.cc" + "${draco_src_root}/core/draco_types.h" + "${draco_src_root}/core/encoder_buffer.cc" + "${draco_src_root}/core/encoder_buffer.h" + "${draco_src_root}/core/hash_utils.cc" + "${draco_src_root}/core/hash_utils.h" + "${draco_src_root}/core/macros.h" + "${draco_src_root}/core/math_utils.h" + "${draco_src_root}/core/options.cc" + "${draco_src_root}/core/options.h" + "${draco_src_root}/core/quantization_utils.cc" + "${draco_src_root}/core/quantization_utils.h" + "${draco_src_root}/core/rans_symbol_coding.h" + "${draco_src_root}/core/rans_symbol_decoder.h" + "${draco_src_root}/core/rans_symbol_encoder.h" + "${draco_src_root}/core/shannon_entropy.cc" + "${draco_src_root}/core/shannon_entropy.h" + "${draco_src_root}/core/status.h" + "${draco_src_root}/core/statusor.h" + "${draco_src_root}/core/symbol_coding_utils.cc" + "${draco_src_root}/core/symbol_coding_utils.h" + "${draco_src_root}/core/symbol_decoding.cc" + "${draco_src_root}/core/symbol_decoding.h" + "${draco_src_root}/core/symbol_encoding.cc" + "${draco_src_root}/core/symbol_encoding.h" + "${draco_src_root}/core/varint_decoding.h" + "${draco_src_root}/core/varint_encoding.h" + "${draco_src_root}/core/vector_d.h") + +set(draco_core_bit_coders_sources + "${draco_src_root}/core/bit_coders/adaptive_rans_bit_coding_shared.h" + "${draco_src_root}/core/bit_coders/adaptive_rans_bit_decoder.cc" + "${draco_src_root}/core/bit_coders/adaptive_rans_bit_decoder.h" + "${draco_src_root}/core/bit_coders/adaptive_rans_bit_encoder.cc" + "${draco_src_root}/core/bit_coders/adaptive_rans_bit_encoder.h" + "${draco_src_root}/core/bit_coders/direct_bit_decoder.cc" + "${draco_src_root}/core/bit_coders/direct_bit_decoder.h" + "${draco_src_root}/core/bit_coders/direct_bit_encoder.cc" + "${draco_src_root}/core/bit_coders/direct_bit_encoder.h" + "${draco_src_root}/core/bit_coders/folded_integer_bit_decoder.h" + "${draco_src_root}/core/bit_coders/folded_integer_bit_encoder.h" + "${draco_src_root}/core/bit_coders/rans_bit_decoder.cc" + "${draco_src_root}/core/bit_coders/rans_bit_decoder.h" + "${draco_src_root}/core/bit_coders/rans_bit_encoder.cc" + "${draco_src_root}/core/bit_coders/rans_bit_encoder.h" + "${draco_src_root}/core/bit_coders/symbol_bit_decoder.cc" + "${draco_src_root}/core/bit_coders/symbol_bit_decoder.h" + "${draco_src_root}/core/bit_coders/symbol_bit_encoder.cc" + "${draco_src_root}/core/bit_coders/symbol_bit_encoder.h") set(draco_io_sources - "${draco_root}/io/mesh_io.cc" - "${draco_root}/io/mesh_io.h" - "${draco_root}/io/obj_decoder.cc" - "${draco_root}/io/obj_decoder.h" - "${draco_root}/io/obj_encoder.cc" - "${draco_root}/io/obj_encoder.h" - "${draco_root}/io/parser_utils.cc" - "${draco_root}/io/parser_utils.h" - "${draco_root}/io/ply_decoder.cc" - "${draco_root}/io/ply_decoder.h" - "${draco_root}/io/ply_encoder.cc" - "${draco_root}/io/ply_encoder.h" - "${draco_root}/io/ply_property_reader.h" - "${draco_root}/io/ply_property_writer.h" - "${draco_root}/io/ply_reader.cc" - "${draco_root}/io/ply_reader.h" - "${draco_root}/io/point_cloud_io.cc" - "${draco_root}/io/point_cloud_io.h") + "${draco_src_root}/io/mesh_io.cc" + "${draco_src_root}/io/mesh_io.h" + "${draco_src_root}/io/obj_decoder.cc" + "${draco_src_root}/io/obj_decoder.h" + "${draco_src_root}/io/obj_encoder.cc" + "${draco_src_root}/io/obj_encoder.h" + "${draco_src_root}/io/parser_utils.cc" + "${draco_src_root}/io/parser_utils.h" + "${draco_src_root}/io/ply_decoder.cc" + "${draco_src_root}/io/ply_decoder.h" + "${draco_src_root}/io/ply_encoder.cc" + "${draco_src_root}/io/ply_encoder.h" + "${draco_src_root}/io/ply_property_reader.h" + "${draco_src_root}/io/ply_property_writer.h" + "${draco_src_root}/io/ply_reader.cc" + "${draco_src_root}/io/ply_reader.h" + "${draco_src_root}/io/point_cloud_io.cc" + "${draco_src_root}/io/point_cloud_io.h") set(draco_mesh_sources - "${draco_root}/mesh/corner_table.cc" - "${draco_root}/mesh/corner_table.h" - "${draco_root}/mesh/corner_table_indices.h" - "${draco_root}/mesh/corner_table_iterators.h" - "${draco_root}/mesh/corner_table_traversal_processor.h" - "${draco_root}/mesh/edgebreaker_observer.h" - "${draco_root}/mesh/edgebreaker_traverser.h" - "${draco_root}/mesh/mesh.cc" - "${draco_root}/mesh/mesh.h" - "${draco_root}/mesh/mesh_are_equivalent.cc" - "${draco_root}/mesh/mesh_are_equivalent.h" - "${draco_root}/mesh/mesh_attribute_corner_table.cc" - "${draco_root}/mesh/mesh_attribute_corner_table.h" - "${draco_root}/mesh/mesh_cleanup.cc" - "${draco_root}/mesh/mesh_cleanup.h" - "${draco_root}/mesh/mesh_indices.h" - "${draco_root}/mesh/mesh_misc_functions.cc" - "${draco_root}/mesh/mesh_misc_functions.h" - "${draco_root}/mesh/triangle_soup_mesh_builder.cc" - "${draco_root}/mesh/triangle_soup_mesh_builder.h") + "${draco_src_root}/mesh/corner_table.cc" + "${draco_src_root}/mesh/corner_table.h" + "${draco_src_root}/mesh/corner_table_indices.h" + "${draco_src_root}/mesh/corner_table_iterators.h" + "${draco_src_root}/mesh/corner_table_traversal_processor.h" + "${draco_src_root}/mesh/edgebreaker_observer.h" + "${draco_src_root}/mesh/edgebreaker_traverser.h" + "${draco_src_root}/mesh/mesh.cc" + "${draco_src_root}/mesh/mesh.h" + "${draco_src_root}/mesh/mesh_are_equivalent.cc" + "${draco_src_root}/mesh/mesh_are_equivalent.h" + "${draco_src_root}/mesh/mesh_attribute_corner_table.cc" + "${draco_src_root}/mesh/mesh_attribute_corner_table.h" + "${draco_src_root}/mesh/mesh_cleanup.cc" + "${draco_src_root}/mesh/mesh_cleanup.h" + "${draco_src_root}/mesh/mesh_indices.h" + "${draco_src_root}/mesh/mesh_misc_functions.cc" + "${draco_src_root}/mesh/mesh_misc_functions.h" + "${draco_src_root}/mesh/mesh_stripifier.cc" + "${draco_src_root}/mesh/mesh_stripifier.h" + "${draco_src_root}/mesh/triangle_soup_mesh_builder.cc" + "${draco_src_root}/mesh/triangle_soup_mesh_builder.h") set(draco_point_cloud_sources - "${draco_root}/point_cloud/geometry_attribute.cc" - "${draco_root}/point_cloud/geometry_attribute.h" - "${draco_root}/point_cloud/geometry_indices.h" - "${draco_root}/point_cloud/point_attribute.cc" - "${draco_root}/point_cloud/point_attribute.h" - "${draco_root}/point_cloud/point_cloud.cc" - "${draco_root}/point_cloud/point_cloud.h" - "${draco_root}/point_cloud/point_cloud_builder.cc" - "${draco_root}/point_cloud/point_cloud_builder.h") + "${draco_src_root}/point_cloud/point_cloud.cc" + "${draco_src_root}/point_cloud/point_cloud.h" + "${draco_src_root}/point_cloud/point_cloud_builder.cc" + "${draco_src_root}/point_cloud/point_cloud_builder.h") set(draco_points_common_sources - "${draco_root}/compression/point_cloud/algorithms/point_cloud_compression_method.h" - "${draco_root}/compression/point_cloud/algorithms/point_cloud_types.h" - "${draco_root}/compression/point_cloud/algorithms/quantize_points_3.h" - "${draco_root}/compression/point_cloud/algorithms/queuing_policy.h") - -set(draco_points_decoder_sources - "${draco_root}/compression/point_cloud/algorithms/float_points_tree_decoder.cc" - "${draco_root}/compression/point_cloud/algorithms/float_points_tree_decoder.h" - "${draco_root}/compression/point_cloud/algorithms/integer_points_kd_tree_decoder.cc" - "${draco_root}/compression/point_cloud/algorithms/integer_points_kd_tree_decoder.h") - -set(draco_points_encoder_sources - "${draco_root}/compression/point_cloud/algorithms/float_points_tree_encoder.cc" - "${draco_root}/compression/point_cloud/algorithms/float_points_tree_encoder.h" - "${draco_root}/compression/point_cloud/algorithms/integer_points_kd_tree_encoder.cc" - "${draco_root}/compression/point_cloud/algorithms/integer_points_kd_tree_encoder.h") - -set(draco_js_sources - "${draco_root}/javascript/emscripten/draco_glue_wrapper.cc" - "${draco_root}/javascript/emscripten/webidl_wrapper.cc") + "${draco_src_root}/compression/point_cloud/algorithms/point_cloud_compression_method.h" + "${draco_src_root}/compression/point_cloud/algorithms/point_cloud_types.h" + "${draco_src_root}/compression/point_cloud/algorithms/quantize_points_3.h" + "${draco_src_root}/compression/point_cloud/algorithms/queuing_policy.h") + +set(draco_points_dec_sources + "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.cc" + "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.h" + "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_decoder.cc" + "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_decoder.h") + +set(draco_points_enc_sources + "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.cc" + "${draco_src_root}/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.h" + "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_encoder.cc" + "${draco_src_root}/compression/point_cloud/algorithms/float_points_tree_encoder.h") + +set(draco_metadata_sources + "${draco_src_root}/metadata/geometry_metadata.cc" + "${draco_src_root}/metadata/geometry_metadata.h" + "${draco_src_root}/metadata/metadata.cc" + "${draco_src_root}/metadata/metadata.h") + +set(draco_metadata_enc_sources + "${draco_src_root}/metadata/metadata_encoder.cc" + "${draco_src_root}/metadata/metadata_encoder.h") + +set(draco_metadata_dec_sources + "${draco_src_root}/metadata/metadata_decoder.cc" + "${draco_src_root}/metadata/metadata_decoder.h") + +set(draco_js_dec_sources + "${draco_src_root}/javascript/emscripten/decoder_webidl_wrapper.cc" + "${draco_src_root}/javascript/emscripten/draco_decoder_glue_wrapper.cc") + +set(draco_js_enc_sources + "${draco_src_root}/javascript/emscripten/draco_encoder_glue_wrapper.cc" + "${draco_src_root}/javascript/emscripten/encoder_webidl_wrapper.cc") set(draco_test_sources - "${draco_root}/core/draco_tests.cc" - "${draco_root}/core/draco_test_base.h" - "${draco_root}/core/draco_test_utils.cc" - "${draco_root}/core/draco_test_utils.h" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_test.cc" - "${draco_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc" - "${draco_root}/compression/attributes/sequential_integer_attribute_encoding_test.cc" - "${draco_root}/compression/mesh/mesh_encoder_test.cc" - "${draco_root}/compression/mesh/mesh_edgebreaker_encoding_test.cc" - "${draco_root}/compression/point_cloud/point_cloud_kd_tree_encoding_test.cc" - "${draco_root}/compression/point_cloud/point_cloud_sequential_encoding_test.cc" - "${draco_root}/core/bit_coder_test.cc" - "${draco_root}/core/math_utils_test.cc" - "${draco_root}/core/quantization_utils_test.cc" - "${draco_root}/core/rans_coding_test.cc" - "${draco_root}/core/symbol_coding_test.cc" - "${draco_root}/core/vector_d_test.cc" - "${draco_root}/io/obj_decoder_test.cc" - "${draco_root}/io/ply_decoder_test.cc" - "${draco_root}/io/ply_reader_test.cc" - "${draco_root}/io/point_cloud_io_test.cc" - "${draco_root}/mesh/mesh_are_equivalent_test.cc" - "${draco_root}/mesh/mesh_cleanup_test.cc" - "${draco_root}/mesh/triangle_soup_mesh_builder_test.cc" - "${draco_root}/point_cloud/point_cloud_builder_test.cc") + "${draco_src_root}/attributes/point_attribute_test.cc" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_test.cc" + "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc" + "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoding_test.cc" + "${draco_src_root}/compression/decode_test.cc" + "${draco_src_root}/compression/encode_test.cc" + "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoding_test.cc" + "${draco_src_root}/compression/mesh/mesh_encoder_test.cc" + "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoding_test.cc" + "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoding_test.cc" + "${draco_src_root}/core/bit_coders/rans_coding_test.cc" + "${draco_src_root}/core/buffer_bit_coding_test.cc" + "${draco_src_root}/core/draco_test_base.h" + "${draco_src_root}/core/draco_test_utils.cc" + "${draco_src_root}/core/draco_test_utils.h" + "${draco_src_root}/core/draco_tests.cc" + "${draco_src_root}/core/math_utils_test.cc" + "${draco_src_root}/core/quantization_utils_test.cc" + "${draco_src_root}/core/status_test.cc" + "${draco_src_root}/core/symbol_coding_test.cc" + "${draco_src_root}/core/vector_d_test.cc" + "${draco_src_root}/io/obj_decoder_test.cc" + "${draco_src_root}/io/ply_decoder_test.cc" + "${draco_src_root}/io/ply_reader_test.cc" + "${draco_src_root}/io/point_cloud_io_test.cc" + "${draco_src_root}/mesh/mesh_are_equivalent_test.cc" + "${draco_src_root}/mesh/mesh_cleanup_test.cc" + "${draco_src_root}/mesh/triangle_soup_mesh_builder_test.cc" + "${draco_src_root}/metadata/metadata_encoder_test.cc" + "${draco_src_root}/metadata/metadata_test.cc" + "${draco_src_root}/point_cloud/point_cloud_builder_test.cc" + "${draco_src_root}/point_cloud/point_cloud_test.cc") set(draco_version_sources "${draco_build_dir}/draco_version.cc" "${draco_build_dir}/draco_version.h") -include_directories("${draco_root}") +include_directories("${draco_root}/src") # # Draco targets. # if (EMSCRIPTEN) # Draco js decoder. - add_compiler_flag_if_supported("-s ALLOW_MEMORY_GROWTH=1") - add_compiler_flag_if_supported("--memory-init-file 0") - add_compiler_flag_if_supported("-fno-omit-frame-pointer") - add_compiler_flag_if_supported("-s MODULARIZE=1") - add_compiler_flag_if_supported("-s EXPORT_NAME=\"'DracoModule'\"") + require_flag("-s ALLOW_MEMORY_GROWTH=1" YES) + require_flag("-Wno-almost-asm" YES) + require_flag("--memory-init-file 0" YES) + require_flag("-fno-omit-frame-pointer" YES) + require_flag("-s MODULARIZE=1" YES) if (ENABLE_EXTRA_SPEED) - add_compiler_flag_if_supported("--llvm-lto 1") + require_flag("--llvm-lto 1" YES) endif () - add_compiler_flag_if_supported("-s NO_FILESYSTEM=1") - add_compiler_flag_if_supported("-s ELIMINATE_DUPLICATE_FUNCTIONS=1") - add_compiler_flag_if_supported("-s EXPORTED_RUNTIME_METHODS=[]") - add_compiler_flag_if_supported("-s PRECISE_F32=1") + require_flag("-s NO_FILESYSTEM=1" YES) + require_flag("-s ELIMINATE_DUPLICATE_FUNCTIONS=1" YES) + require_flag("-s EXPORTED_RUNTIME_METHODS=[]" YES) + require_flag("-s PRECISE_F32=1" YES) if (ENABLE_WASM) - add_compiler_flag_if_supported("-s WASM=1") - add_compiler_flag_if_supported("-s BINARYEN_IMPRECISE=1") + require_flag("-s WASM=1" YES) + require_flag("-s BINARYEN_IMPRECISE=1" YES) endif () if (CMAKE_BUILD_TYPE STREQUAL "") @@ -462,134 +555,254 @@ if (EMSCRIPTEN) add_compiler_flag_if_supported("-O3") endif () - set(draco_js_idl "${draco_root}/javascript/emscripten/draco_web.idl") + set(draco_js_dec_idl + "${draco_src_root}/javascript/emscripten/draco_web_decoder.idl") + set(draco_js_enc_idl + "${draco_src_root}/javascript/emscripten/draco_web_encoder.idl") + + # Generate ${draco_build_dir}/glue_decoder.cpp at cmake generation time so it + # can be added to targets without cmake reporting errors. + execute_process(COMMAND ${PYTHON_EXECUTABLE} + $ENV{EMSCRIPTEN}/tools/webidl_binder.py + ${draco_js_dec_idl} + ${draco_build_dir}/glue_decoder + OUTPUT_FILE ${draco_build_dir}/glue_decoder.cpp) - # Generate ${draco_build_dir}/glue.cpp at cmake generation time so it can be - # added to targets without cmake reporting errors. execute_process(COMMAND ${PYTHON_EXECUTABLE} - $ENV{EMSCRIPTEN}/tools/webidl_binder.py ${draco_js_idl} - ${draco_build_dir}/glue - OUTPUT_FILE ${draco_build_dir}/glue.cpp) + $ENV{EMSCRIPTEN}/tools/webidl_binder.py + ${draco_js_enc_idl} + ${draco_build_dir}/glue_encoder + OUTPUT_FILE ${draco_build_dir}/glue_encoder.cpp) # Add a custom rule depending on the IDL to regenerate - # ${draco_build_dir}/glue.cpp as needed. - add_custom_command(OUTPUT ${draco_build_dir}/glue.cpp + # ${draco_build_dir}/glue_decoder.cpp as needed. + add_custom_command(OUTPUT ${draco_build_dir}/glue_decoder.cpp COMMAND ${PYTHON_EXECUTABLE} - $ENV{EMSCRIPTEN}/tools/webidl_binder.py ${draco_js_idl} - ${draco_build_dir}/glue - DEPENDS ${draco_js_idl} - COMMENT "Generating ${draco_build_dir}/glue.cpp." + $ENV{EMSCRIPTEN}/tools/webidl_binder.py + ${draco_js_dec_idl} + ${draco_build_dir}/glue_decoder + DEPENDS ${draco_js_dec_idl} + COMMENT "Generating ${draco_build_dir}/glue_decoder.cpp." WORKING_DIRECTORY ${draco_build_dir} VERBATIM) - # Add path to glue.cpp to draco include paths. + add_custom_command(OUTPUT ${draco_build_dir}/glue_encoder.cpp + COMMAND ${PYTHON_EXECUTABLE} + $ENV{EMSCRIPTEN}/tools/webidl_binder.py + ${draco_js_enc_idl} + ${draco_build_dir}/glue_encoder + DEPENDS ${draco_js_enc_idl} + COMMENT "Generating ${draco_build_dir}/glue_encoder.cpp." + WORKING_DIRECTORY ${draco_build_dir} + VERBATIM) + + # Add path to glue_decoder.cpp to draco include paths. include_directories("${draco_build_dir}") add_executable(draco_decoder - ${draco_compression_attributes_decoder_sources} + ${draco_attributes_sources} + ${draco_compression_attributes_dec_sources} + ${draco_compression_attributes_pred_schemes_dec_sources} ${draco_compression_decode_sources} - ${draco_compression_mesh_decoder_sources} - ${draco_compression_point_cloud_decoder_sources} + ${draco_compression_mesh_dec_sources} + ${draco_compression_point_cloud_dec_sources} ${draco_core_sources} + ${draco_core_bit_coders_sources} + ${draco_dec_config_sources} ${draco_io_sources} ${draco_mesh_sources} + ${draco_metadata_dec_sources} + ${draco_metadata_sources} ${draco_point_cloud_sources} - ${draco_points_decoder_sources} - ${draco_js_sources} + ${draco_points_dec_sources} + ${draco_js_dec_sources} ${draco_version_sources}) + append_link_flag_to_target(draco_decoder + "-s EXPORT_NAME=\"'DracoDecoderModule'\"") - # Make $draco_js_sources source files depend on glue.cpp. + add_executable(draco_encoder + ${draco_attributes_sources} + ${draco_compression_attributes_enc_sources} + ${draco_compression_attributes_pred_schemes_enc_sources} + ${draco_compression_encode_sources} + ${draco_compression_mesh_enc_sources} + ${draco_compression_point_cloud_enc_sources} + ${draco_core_sources} + ${draco_core_bit_coders_sources} + ${draco_enc_config_sources} + ${draco_io_sources} + ${draco_mesh_sources} + ${draco_metadata_enc_sources} + ${draco_metadata_sources} + ${draco_point_cloud_sources} + ${draco_points_enc_sources} + ${draco_js_enc_sources} + ${draco_version_sources}) + append_link_flag_to_target(draco_encoder + "-s EXPORT_NAME=\"'DracoEncoderModule'\"") + + # Make $draco_js_sources source files depend on glue_decoder.cpp. set_property(SOURCE ${draco_js_sources} APPEND PROPERTY OBJECT_DEPENDS - ${draco_build_dir}/glue.cpp) + ${draco_build_dir}/glue_decoder.cpp) em_link_pre_js(draco_decoder - "${draco_root}/javascript/emscripten/prepareCallbacks.js" - "${draco_root}/javascript/emscripten/version.js") + "${draco_src_root}/javascript/emscripten/prepareCallbacks.js" + "${draco_src_root}/javascript/emscripten/version.js") em_link_post_js(draco_decoder - "${draco_build_dir}/glue.js" - "${draco_root}/javascript/emscripten/finalize.js") + "${draco_build_dir}/glue_decoder.js" + "${draco_src_root}/javascript/emscripten/finalize.js") + + set_property(SOURCE ${draco_js_enc_sources} APPEND PROPERTY OBJECT_DEPENDS + ${draco_build_dir}/glue_encoder.cpp) + em_link_pre_js(draco_encoder + "${draco_src_root}/javascript/emscripten/prepareCallbacks.js" + "${draco_src_root}/javascript/emscripten/version.js") + em_link_post_js(draco_encoder + "${draco_build_dir}/glue_encoder.js" + "${draco_src_root}/javascript/emscripten/finalize.js") else () # Standard Draco libs, encoder and decoder. # Object collections that mirror the Draco directory structure. - add_library(draco_compression_attributes_decoder OBJECT - ${draco_compression_attributes_decoder_sources}) - add_library(draco_compression_attributes_encoder OBJECT - ${draco_compression_attributes_encoder_sources}) - add_library(draco_compression_attributes_pred_schemes OBJECT - ${draco_compression_attributes_pred_schemes_sources}) - add_library(draco_compression_config OBJECT - ${draco_compression_config_sources}) + add_library(draco_attributes OBJECT ${draco_attributes_sources}) + add_library(draco_compression_attributes_dec OBJECT + ${draco_compression_attributes_dec_sources}) + add_library(draco_compression_attributes_enc OBJECT + ${draco_compression_attributes_enc_sources}) + add_library(draco_compression_attributes_pred_schemes_dec OBJECT + ${draco_compression_attributes_pred_schemes_dec_sources}) + add_library(draco_compression_attributes_pred_schemes_enc OBJECT + ${draco_compression_attributes_pred_schemes_enc_sources}) + add_library(draco_enc_config OBJECT + ${draco_enc_config_sources}) + add_library(draco_dec_config OBJECT + ${draco_dec_config_sources}) add_library(draco_compression_decode OBJECT ${draco_compression_decode_sources}) add_library(draco_compression_encode OBJECT ${draco_compression_encode_sources}) - add_library(draco_compression_mesh_decoder OBJECT - ${draco_compression_mesh_decoder_sources}) - add_library(draco_compression_mesh_encoder OBJECT - ${draco_compression_mesh_encoder_sources}) - add_library(draco_compression_point_cloud_decoder OBJECT - ${draco_compression_point_cloud_decoder_sources}) - add_library(draco_compression_point_cloud_encoder OBJECT - ${draco_compression_point_cloud_encoder_sources}) + add_library(draco_compression_mesh_dec OBJECT + ${draco_compression_mesh_dec_sources}) + add_library(draco_compression_mesh_enc OBJECT + ${draco_compression_mesh_enc_sources}) + add_library(draco_compression_point_cloud_dec OBJECT + ${draco_compression_point_cloud_dec_sources}) + add_library(draco_compression_point_cloud_enc OBJECT + ${draco_compression_point_cloud_enc_sources}) add_library(draco_core OBJECT ${draco_core_sources}) + add_library(draco_core_bit_coders OBJECT ${draco_core_bit_coders_sources}) add_library(draco_io OBJECT ${draco_io_sources}) add_library(draco_mesh OBJECT ${draco_mesh_sources}) + add_library(draco_metadata_dec OBJECT ${draco_metadata_dec_sources}) + add_library(draco_metadata_enc OBJECT ${draco_metadata_enc_sources}) + add_library(draco_metadata OBJECT ${draco_metadata_sources}) add_library(draco_point_cloud OBJECT ${draco_point_cloud_sources}) - add_library(draco_points_decoder OBJECT + add_library(draco_points_dec OBJECT ${draco_points_common_sources} - ${draco_points_decoder_sources}) - add_library(draco_points_encoder OBJECT + ${draco_points_dec_sources}) + add_library(draco_points_enc OBJECT ${draco_points_common_sources} - ${draco_points_encoder_sources}) + ${draco_points_enc_sources}) # Library targets that consume the object collections. add_library(dracodec ${draco_version_sources} - $ + $ + $ $ - $ - $ + $ + $ $ + $ + $ $ $ + $ + $ $ - $) + $) add_library(dracoenc ${draco_version_sources} - $ - $ - $ + $ + $ + $ $ - $ - $ + $ + $ $ + $ + $ $ + $ + $ $ - $) + $) add_library(draco ${draco_version_sources} - $ - $ - $ - $ + $ + $ + $ + $ + $ + $ + $ $ $ - $ - $ - $ - $ + $ + $ + $ + $ $ + $ $ $ + $ + $ + $ $ - $ - $) + $ + $) + + if (BUILD_SHARED_LIBS) + set_target_properties(dracodec PROPERTIES SOVERSION 1) + set_target_properties(dracoenc PROPERTIES SOVERSION 1) + set_target_properties(draco PROPERTIES SOVERSION 1) + endif () + + if (NOT MSVC) + # Generate draco.pc. + + # Extract the version string. + file(STRINGS "${draco_src_root}/core/draco_version.h" draco_version + REGEX "kDracoVersion\\[\\]") + list(GET draco_version 0 draco_version) + string(REPLACE "static const char kDracoVersion[] = " "" draco_version + "${draco_version}") + string(REPLACE ";" "" draco_version "${draco_version}") + string(REPLACE "\"" "" draco_version "${draco_version}") + + set(prefix "${CMAKE_INSTALL_PREFIX}") + set(pkgconfig_file "${draco_build_dir}/draco.pc") + + # Write aom.pc. + file(WRITE "${pkgconfig_file}" "# draco pkg-config.\n") + file(APPEND "${pkgconfig_file}" "prefix=${prefix}\n") + file(APPEND "${pkgconfig_file}" "exec_prefix=${prefix}/bin\n") + file(APPEND "${pkgconfig_file}" "libdir=${prefix}/lib\n") + file(APPEND "${pkgconfig_file}" "includedir=${prefix}/include\n\n") + file(APPEND "${pkgconfig_file}" "Name: Draco\n") + file(APPEND "${pkgconfig_file}" "Description: 3D Compression.\n") + file(APPEND "${pkgconfig_file}" "Version: ${draco_version}\n") + file(APPEND "${pkgconfig_file}" "Requires:\n") + file(APPEND "${pkgconfig_file}" "Conflicts:\n") + file(APPEND "${pkgconfig_file}" "Libs: -L${prefix}/lib -ldraco\n") + file(APPEND "${pkgconfig_file}" "Cflags: -I${prefix}/include -std=c++11\n") + endif () # Draco app targets. - add_executable(draco_decoder "${draco_root}/tools/draco_decoder.cc") - target_link_libraries(draco_decoder PUBLIC dracodec) + add_executable(draco_decoder "${draco_src_root}/tools/draco_decoder.cc") + target_link_libraries(draco_decoder PRIVATE dracodec) add_executable(draco_encoder - "${draco_root}/tools/draco_encoder.cc") - target_link_libraries(draco_encoder PUBLIC draco) + "${draco_src_root}/tools/draco_encoder.cc") + target_link_libraries(draco_encoder PRIVATE draco) if (ENABLE_TESTS) add_executable(draco_tests ${draco_test_sources}) @@ -607,8 +820,17 @@ else () "${CMAKE_INSTALL_PREFIX}/include/draco/${file_directory}") endforeach() + if (NOT MSVC) + # Install our pkg-config file. + install(FILES "${draco_build_dir}/draco.pc" + DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") + endif () + # Add install rules for lib and executable targets. - install(TARGETS dracodec draco DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") + install(TARGETS dracodec dracoenc draco + DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") install(TARGETS draco_decoder draco_encoder DESTINATION "${CMAKE_INSTALL_PREFIX}/bin") + install(FILES "${draco_root}/cmake/FindDraco.cmake" + DESTINATION "${CMAKE_INSTALL_PREFIX}/include/draco/cmake") endif ()