summaryrefslogtreecommitdiff
path: root/libs/assimp/contrib/draco/cmake/draco_options.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'libs/assimp/contrib/draco/cmake/draco_options.cmake')
-rw-r--r--libs/assimp/contrib/draco/cmake/draco_options.cmake239
1 files changed, 239 insertions, 0 deletions
diff --git a/libs/assimp/contrib/draco/cmake/draco_options.cmake b/libs/assimp/contrib/draco/cmake/draco_options.cmake
new file mode 100644
index 0000000..832bfb6
--- /dev/null
+++ b/libs/assimp/contrib/draco/cmake/draco_options.cmake
@@ -0,0 +1,239 @@
+if(DRACO_CMAKE_DRACO_OPTIONS_CMAKE_)
+ return()
+endif() # DRACO_CMAKE_DRACO_OPTIONS_CMAKE_
+set(DRACO_CMAKE_DRACO_OPTIONS_CMAKE_)
+
+set(draco_features_file_name "${draco_build}/draco/draco_features.h")
+set(draco_features_list)
+
+# Simple wrapper for CMake's builtin option command that tracks draco's build
+# options in the list variable $draco_options.
+macro(draco_option)
+ unset(option_NAME)
+ unset(option_HELPSTRING)
+ unset(option_VALUE)
+ unset(optional_args)
+ unset(multi_value_args)
+ set(single_value_args NAME HELPSTRING VALUE)
+ cmake_parse_arguments(option "${optional_args}" "${single_value_args}"
+ "${multi_value_args}" ${ARGN})
+
+ if(NOT (option_NAME AND option_HELPSTRING AND DEFINED option_VALUE))
+ message(FATAL_ERROR "draco_option: NAME HELPSTRING and VALUE required.")
+ endif()
+
+ option(${option_NAME} ${option_HELPSTRING} ${option_VALUE})
+
+ if(DRACO_VERBOSE GREATER 2)
+ message("--------- draco_option ---------\n" "option_NAME=${option_NAME}\n"
+ "option_HELPSTRING=${option_HELPSTRING}\n"
+ "option_VALUE=${option_VALUE}\n"
+ "------------------------------------------\n")
+ endif()
+
+ list(APPEND draco_options ${option_NAME})
+ list(REMOVE_DUPLICATES draco_options)
+endmacro()
+
+# Dumps the $draco_options list via CMake message command.
+macro(draco_dump_options)
+ foreach(option_name ${draco_options})
+ message("${option_name}: ${${option_name}}")
+ endforeach()
+endmacro()
+
+# Set default options.
+macro(draco_set_default_options)
+ draco_option(NAME DRACO_FAST HELPSTRING "Try to build faster libs." VALUE OFF)
+ draco_option(NAME DRACO_JS_GLUE HELPSTRING
+ "Enable JS Glue and JS targets when using Emscripten." VALUE ON)
+ draco_option(NAME DRACO_IE_COMPATIBLE HELPSTRING
+ "Enable support for older IE builds when using Emscripten." VALUE
+ OFF)
+ draco_option(NAME DRACO_MESH_COMPRESSION HELPSTRING "Enable mesh compression."
+ VALUE ON)
+ draco_option(NAME DRACO_POINT_CLOUD_COMPRESSION HELPSTRING
+ "Enable point cloud compression." VALUE ON)
+ draco_option(NAME DRACO_PREDICTIVE_EDGEBREAKER HELPSTRING
+ "Enable predictive edgebreaker." VALUE ON)
+ draco_option(NAME DRACO_STANDARD_EDGEBREAKER HELPSTRING
+ "Enable stand edgebreaker." VALUE ON)
+ draco_option(NAME DRACO_BACKWARDS_COMPATIBILITY HELPSTRING
+ "Enable backwards compatibility." VALUE ON)
+ draco_option(NAME DRACO_DECODER_ATTRIBUTE_DEDUPLICATION HELPSTRING
+ "Enable attribute deduping." VALUE OFF)
+ draco_option(NAME DRACO_TESTS HELPSTRING "Enables tests." VALUE OFF)
+ draco_option(NAME DRACO_WASM HELPSTRING "Enables WASM support." VALUE OFF)
+ draco_option(NAME DRACO_UNITY_PLUGIN HELPSTRING
+ "Build plugin library for Unity." VALUE OFF)
+ draco_option(NAME DRACO_ANIMATION_ENCODING HELPSTRING "Enable animation."
+ VALUE OFF)
+ draco_option(NAME DRACO_GLTF HELPSTRING "Support GLTF." VALUE OFF)
+ draco_option(NAME DRACO_MAYA_PLUGIN HELPSTRING
+ "Build plugin library for Maya." VALUE OFF)
+ draco_check_deprecated_options()
+endmacro()
+
+# Warns when a deprecated option is used and sets the option that replaced it.
+macro(draco_handle_deprecated_option)
+ unset(option_OLDNAME)
+ unset(option_NEWNAME)
+ unset(optional_args)
+ unset(multi_value_args)
+ set(single_value_args OLDNAME NEWNAME)
+ cmake_parse_arguments(option "${optional_args}" "${single_value_args}"
+ "${multi_value_args}" ${ARGN})
+
+ if("${${option_OLDNAME}}")
+ message(WARNING "${option_OLDNAME} is deprecated. Use ${option_NEWNAME}.")
+ set(${option_NEWNAME} ${${option_OLDNAME}})
+ endif()
+endmacro()
+
+# Checks for use of deprecated options.
+macro(draco_check_deprecated_options)
+ draco_handle_deprecated_option(OLDNAME ENABLE_EXTRA_SPEED NEWNAME DRACO_FAST)
+ draco_handle_deprecated_option(OLDNAME ENABLE_JS_GLUE NEWNAME DRACO_JS_GLUE)
+ draco_handle_deprecated_option(OLDNAME ENABLE_MESH_COMPRESSION NEWNAME
+ DRACO_MESH_COMPRESSION)
+ draco_handle_deprecated_option(OLDNAME ENABLE_POINT_CLOUD_COMPRESSION NEWNAME
+ DRACO_POINT_CLOUD_COMPRESSION)
+ draco_handle_deprecated_option(OLDNAME ENABLE_PREDICTIVE_EDGEBREAKER NEWNAME
+ DRACO_PREDICTIVE_EDGEBREAKER)
+ draco_handle_deprecated_option(OLDNAME ENABLE_STANDARD_EDGEBREAKER NEWNAME
+ DRACO_STANDARD_EDGEBREAKER)
+ draco_handle_deprecated_option(OLDNAME ENABLE_BACKWARDS_COMPATIBILITY NEWNAME
+ DRACO_BACKWARDS_COMPATIBILITY)
+ draco_handle_deprecated_option(OLDNAME ENABLE_DECODER_ATTRIBUTE_DEDUPLICATION
+ NEWNAME DRACO_DECODER_ATTRIBUTE_DEDUPLICATION)
+ draco_handle_deprecated_option(OLDNAME ENABLE_TESTS NEWNAME DRACO_TESTS)
+ draco_handle_deprecated_option(OLDNAME ENABLE_WASM NEWNAME DRACO_WASM)
+ draco_handle_deprecated_option(OLDNAME BUILD_UNITY_PLUGIN NEWNAME
+ DRACO_UNITY_PLUGIN)
+ draco_handle_deprecated_option(OLDNAME BUILD_ANIMATION_ENCODING NEWNAME
+ DRACO_ANIMATION_ENCODING)
+ draco_handle_deprecated_option(OLDNAME BUILD_FOR_GLTF NEWNAME DRACO_GLTF)
+ draco_handle_deprecated_option(OLDNAME BUILD_MAYA_PLUGIN NEWNAME
+ DRACO_MAYA_PLUGIN)
+ draco_handle_deprecated_option(OLDNAME BUILD_USD_PLUGIN NEWNAME
+ BUILD_SHARED_LIBS)
+
+endmacro()
+
+# Macro for setting Draco features based on user configuration. Features enabled
+# by this macro are Draco global.
+macro(draco_set_optional_features)
+ if(DRACO_GLTF)
+ # Override settings when building for GLTF.
+ draco_enable_feature(FEATURE "DRACO_MESH_COMPRESSION_SUPPORTED")
+ draco_enable_feature(FEATURE "DRACO_NORMAL_ENCODING_SUPPORTED")
+ draco_enable_feature(FEATURE "DRACO_STANDARD_EDGEBREAKER_SUPPORTED")
+ else()
+ if(DRACO_POINT_CLOUD_COMPRESSION)
+ draco_enable_feature(FEATURE "DRACO_POINT_CLOUD_COMPRESSION_SUPPORTED")
+ endif()
+ if(DRACO_MESH_COMPRESSION)
+ draco_enable_feature(FEATURE "DRACO_MESH_COMPRESSION_SUPPORTED")
+ draco_enable_feature(FEATURE "DRACO_NORMAL_ENCODING_SUPPORTED")
+
+ if(DRACO_STANDARD_EDGEBREAKER)
+ draco_enable_feature(FEATURE "DRACO_STANDARD_EDGEBREAKER_SUPPORTED")
+ endif()
+ if(DRACO_PREDICTIVE_EDGEBREAKER)
+ draco_enable_feature(FEATURE "DRACO_PREDICTIVE_EDGEBREAKER_SUPPORTED")
+ endif()
+ endif()
+
+ if(DRACO_BACKWARDS_COMPATIBILITY)
+ draco_enable_feature(FEATURE "DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED")
+ endif()
+
+
+ if(NOT EMSCRIPTEN)
+ # For now, enable deduplication for both encoder and decoder.
+ # TODO(ostava): Support for disabling attribute deduplication for the C++
+ # decoder is planned in future releases.
+ draco_enable_feature(FEATURE
+ DRACO_ATTRIBUTE_INDICES_DEDUPLICATION_SUPPORTED)
+ draco_enable_feature(FEATURE
+ DRACO_ATTRIBUTE_VALUES_DEDUPLICATION_SUPPORTED)
+ endif()
+ endif()
+
+ if(DRACO_UNITY_PLUGIN)
+ draco_enable_feature(FEATURE "DRACO_UNITY_PLUGIN")
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+ endif()
+
+ if(DRACO_MAYA_PLUGIN)
+ draco_enable_feature(FEATURE "DRACO_MAYA_PLUGIN")
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+ endif()
+
+endmacro()
+
+# Macro that handles tracking of Draco preprocessor symbols for the purpose of
+# producing draco_features.h.
+#
+# ~~~
+# draco_enable_feature(FEATURE <feature_name> [TARGETS <target_name>])
+# ~~~
+#
+# FEATURE is required. It should be a Draco preprocessor symbol. TARGETS is
+# optional. It can be one or more draco targets.
+#
+# When the TARGETS argument is not present the preproc symbol is added to
+# draco_features.h. When it is draco_features.h is unchanged, and
+# target_compile_options() is called for each target specified.
+macro(draco_enable_feature)
+ set(def_flags)
+ set(def_single_arg_opts FEATURE)
+ set(def_multi_arg_opts TARGETS)
+ cmake_parse_arguments(DEF "${def_flags}" "${def_single_arg_opts}"
+ "${def_multi_arg_opts}" ${ARGN})
+ if("${DEF_FEATURE}" STREQUAL "")
+ message(FATAL_ERROR "Empty FEATURE passed to draco_enable_feature().")
+ endif()
+
+ # Do nothing/return early if $DEF_FEATURE is already in the list.
+ list(FIND draco_features_list ${DEF_FEATURE} df_index)
+ if(NOT df_index EQUAL -1)
+ return()
+ endif()
+
+ list(LENGTH DEF_TARGETS df_targets_list_length)
+ if(${df_targets_list_length} EQUAL 0)
+ list(APPEND draco_features_list ${DEF_FEATURE})
+ else()
+ foreach(target ${DEF_TARGETS})
+ target_compile_definitions(${target} PRIVATE ${DEF_FEATURE})
+ endforeach()
+ endif()
+endmacro()
+
+# Function for generating draco_features.h.
+function(draco_generate_features_h)
+ file(WRITE "${draco_features_file_name}.new"
+ "// GENERATED FILE -- DO NOT EDIT\n\n" "#ifndef DRACO_FEATURES_H_\n"
+ "#define DRACO_FEATURES_H_\n\n")
+
+ foreach(feature ${draco_features_list})
+ file(APPEND "${draco_features_file_name}.new" "#define ${feature}\n")
+ endforeach()
+
+ file(APPEND "${draco_features_file_name}.new"
+ "\n#endif // DRACO_FEATURES_H_")
+
+ # Will replace ${draco_features_file_name} only if the file content has
+ # changed. This prevents forced Draco rebuilds after CMake runs.
+ configure_file("${draco_features_file_name}.new"
+ "${draco_features_file_name}")
+ file(REMOVE "${draco_features_file_name}.new")
+endfunction()
+
+# Sets default options for the build and processes user controlled options to
+# compute enabled features.
+macro(draco_setup_options)
+ draco_set_default_options()
+ draco_set_optional_features()
+endmacro()