From 4bad4bfc6ae5a81c44038cb1259f44befbb3afe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Schmith=C3=BCsen?= Date: Thu, 11 Apr 2019 11:26:23 +0200 Subject: glTF: add Draco shared library for mesh compression. Draco is added as a library under extern/ and builds a shared library that is installed into the Python site-packages. This is then loaded by the glTF add-on to do mesh compression. Differential Revision: https://developer.blender.org/D4501 --- extern/draco/dracoenc/cmake/draco_features.cmake | 57 ++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 extern/draco/dracoenc/cmake/draco_features.cmake (limited to 'extern/draco/dracoenc/cmake/draco_features.cmake') diff --git a/extern/draco/dracoenc/cmake/draco_features.cmake b/extern/draco/dracoenc/cmake/draco_features.cmake new file mode 100644 index 00000000000..057b0b07ecd --- /dev/null +++ b/extern/draco/dracoenc/cmake/draco_features.cmake @@ -0,0 +1,57 @@ +if (NOT DRACO_CMAKE_DRACO_FEATURES_CMAKE_) +set(DRACO_CMAKE_DRACO_FEATURES_CMAKE_ 1) + +set(draco_features_file_name "${draco_build_dir}/draco/draco_features.h") +set(draco_features_list) + +# Macro that handles tracking of Draco preprocessor symbols for the purpose of +# producing draco_features.h. +# +# draco_enable_feature(FEATURE [TARGETS ]) +# 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}" + "// 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}" "#define ${feature}\n") + endforeach () + + file(APPEND "${draco_features_file_name}" "\n#endif // DRACO_FEATURES_H_") +endfunction () + +endif () # DRACO_CMAKE_DRACO_FEATURES_CMAKE_ -- cgit v1.2.3