This is intended to be used in the new exact mesh boolean algorithm by @howardt. The new `BLI_fixed_width_int.hh` header provides types like `Int256` and `UInt256` which are like e.g. `uint64_t` but with higher precision. The code supports many different integer sizes. The following operations are supported: * Addition * Subtraction * Multiplication * Comparisons * Negation * Conversion to and from other number types * Conversion to and from string (based on `GMP`) Division is not implemented. It could be implemented, but it's more complex and is not required for the new mesh boolean algorithm. Some alternatives to having a custom implementation have been discussed in https://devtalk.blender.org/t/fixed-length-multiprecision-arithmetic/29189/. Generally, the implementation is fairly straight forward. The main complexity is the addition/multiplication algorithm which isn't too complicated. It's nice to have control over this part as it allows us to optimize the code more if necessary. Also, from what I understand, we might be able to benefit from some special cases like multiplying a large integer with a smaller one. I tried some different ways to optimize this already, but so far the normal compiler optimization turned out to work best. Not sure if the same is true on windows though, as it doesn't have native support for an `int128` which helps the compiler understand what I'm doing. Alternatives I tried so far are using intrinsics directly (mainly `_addcarry_u64` and similar), writing inline assembly manually and copying the assembly output from the compiler. I assume the assembly implementation didn't help for me because it prohibited other compiler optimizations. Pull Request: https://projects.blender.org/blender/blender/pulls/119528
593 lines
13 KiB
CMake
593 lines
13 KiB
CMake
# SPDX-FileCopyrightText: 2006 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
if(HAVE_EXECINFO_H)
|
|
add_definitions(-DHAVE_EXECINFO_H)
|
|
endif()
|
|
|
|
set(INC
|
|
PUBLIC .
|
|
../../../intern/eigen
|
|
)
|
|
|
|
set(INC_SYS
|
|
../../../extern/wcwidth
|
|
../../../extern/json/include
|
|
|
|
${EIGEN3_INCLUDE_DIRS}
|
|
${ZLIB_INCLUDE_DIRS}
|
|
${ZSTD_INCLUDE_DIRS}
|
|
)
|
|
|
|
set(SRC
|
|
intern/BLI_array.c
|
|
intern/BLI_assert.c
|
|
intern/BLI_color.cc
|
|
intern/BLI_dial_2d.c
|
|
intern/BLI_dynstr.c
|
|
intern/BLI_filelist.cc
|
|
intern/BLI_ghash.c
|
|
intern/BLI_ghash_utils.cc
|
|
intern/BLI_heap.c
|
|
intern/BLI_heap_simple.c
|
|
intern/BLI_index_range.cc
|
|
intern/BLI_kdopbvh.c
|
|
intern/BLI_linklist.c
|
|
intern/BLI_linklist_lockfree.c
|
|
intern/BLI_memarena.c
|
|
intern/BLI_memblock.c
|
|
intern/BLI_memiter.c
|
|
intern/BLI_mempool.c
|
|
intern/BLI_mmap.c
|
|
intern/BLI_timer.c
|
|
intern/DLRB_tree.c
|
|
intern/array_store.cc
|
|
intern/array_store_utils.cc
|
|
intern/array_utils.c
|
|
intern/array_utils.cc
|
|
intern/astar.c
|
|
intern/atomic_disjoint_set.cc
|
|
intern/bit_ref.cc
|
|
intern/bit_span.cc
|
|
intern/bitmap.c
|
|
intern/bitmap_draw_2d.cc
|
|
intern/boxpack_2d.c
|
|
intern/buffer.c
|
|
intern/cache_mutex.cc
|
|
intern/compute_context.cc
|
|
intern/convexhull_2d.cc
|
|
intern/cpp_type.cc
|
|
intern/cpp_types.cc
|
|
intern/delaunay_2d.cc
|
|
intern/dot_export.cc
|
|
intern/dynlib.cc
|
|
intern/easing.c
|
|
intern/endian_switch.c
|
|
intern/expr_pylike_eval.c
|
|
intern/fileops.cc
|
|
intern/fileops_c.cc
|
|
intern/filereader_file.c
|
|
intern/filereader_gzip.c
|
|
intern/filereader_memory.c
|
|
intern/filereader_zstd.c
|
|
intern/fnmatch.c
|
|
intern/generic_vector_array.cc
|
|
intern/generic_virtual_array.cc
|
|
intern/generic_virtual_vector_array.cc
|
|
intern/gsqueue.c
|
|
intern/hash_md5.cc
|
|
intern/hash_mm2a.cc
|
|
intern/hash_mm3.cc
|
|
intern/hash_tables.cc
|
|
intern/implicit_sharing.cc
|
|
intern/index_mask.cc
|
|
intern/index_mask_expression.cc
|
|
intern/index_range.cc
|
|
intern/jitter_2d.c
|
|
intern/kdtree_1d.c
|
|
intern/kdtree_2d.c
|
|
intern/kdtree_3d.c
|
|
intern/kdtree_4d.c
|
|
intern/lasso_2d.cc
|
|
intern/lazy_threading.cc
|
|
intern/length_parameterize.cc
|
|
intern/listbase.cc
|
|
intern/math_base.c
|
|
intern/math_base_inline.c
|
|
intern/math_base_safe_inline.c
|
|
intern/math_basis_types.cc
|
|
intern/math_bits_inline.c
|
|
intern/math_boolean.cc
|
|
intern/math_color.c
|
|
intern/math_color_blend_inline.c
|
|
intern/math_color_inline.c
|
|
intern/math_geom.cc
|
|
intern/math_geom_inline.c
|
|
intern/math_interp.cc
|
|
intern/math_matrix.c
|
|
intern/math_matrix.cc
|
|
intern/math_rotation.c
|
|
intern/math_rotation.cc
|
|
intern/math_solvers.c
|
|
intern/math_statistics.c
|
|
intern/math_time.c
|
|
intern/math_vec.cc
|
|
intern/math_vector.c
|
|
intern/math_vector_inline.c
|
|
intern/memory_utils.c
|
|
intern/mesh_boolean.cc
|
|
intern/mesh_intersect.cc
|
|
intern/noise.c
|
|
intern/noise.cc
|
|
intern/offset_indices.cc
|
|
intern/ordered_edge.cc
|
|
intern/path_util.cc
|
|
intern/polyfill_2d.c
|
|
intern/polyfill_2d_beautify.c
|
|
intern/quadric.c
|
|
intern/rand.cc
|
|
intern/rct.c
|
|
intern/resource_scope.cc
|
|
intern/scanfill.c
|
|
intern/scanfill_utils.c
|
|
intern/serialize.cc
|
|
intern/session_uid.c
|
|
intern/smaa_textures.c
|
|
intern/sort.c
|
|
intern/sort_utils.c
|
|
intern/stack.c
|
|
intern/storage.cc
|
|
intern/string.c
|
|
intern/string_cursor_utf8.c
|
|
intern/string_ref.cc
|
|
intern/string_search.cc
|
|
intern/string_utf8.cc
|
|
intern/string_utils.cc
|
|
intern/system.c
|
|
intern/task_graph.cc
|
|
intern/task_iterator.c
|
|
intern/task_pool.cc
|
|
intern/task_range.cc
|
|
intern/task_scheduler.cc
|
|
intern/tempfile.c
|
|
intern/threads.cc
|
|
intern/time.c
|
|
intern/timecode.c
|
|
intern/timeit.cc
|
|
intern/uuid.cc
|
|
intern/uvproject.cc
|
|
intern/vector.cc
|
|
intern/virtual_array.cc
|
|
intern/voxel.c
|
|
intern/winstuff.cc
|
|
intern/winstuff_dir.cc
|
|
intern/winstuff_registration.cc
|
|
# Private headers.
|
|
intern/BLI_mempool_private.h
|
|
|
|
# Header as source (included in C files above).
|
|
intern/kdtree_impl.h
|
|
intern/list_sort_impl.h
|
|
|
|
|
|
BLI_alloca.h
|
|
BLI_allocator.hh
|
|
BLI_any.hh
|
|
BLI_array.h
|
|
BLI_array.hh
|
|
BLI_array_store.h
|
|
BLI_array_store_utils.h
|
|
BLI_array_utils.h
|
|
BLI_array_utils.hh
|
|
BLI_asan.h
|
|
BLI_assert.h
|
|
BLI_astar.h
|
|
BLI_atomic_disjoint_set.hh
|
|
BLI_binary_search.hh
|
|
BLI_bit_group_vector.hh
|
|
BLI_bit_ref.hh
|
|
BLI_bit_span.hh
|
|
BLI_bit_span_ops.hh
|
|
BLI_bit_vector.hh
|
|
BLI_bitmap.h
|
|
BLI_bitmap_draw_2d.h
|
|
BLI_blenlib.h
|
|
BLI_bounds.hh
|
|
BLI_bounds_types.hh
|
|
BLI_boxpack_2d.h
|
|
BLI_buffer.h
|
|
BLI_cache_mutex.hh
|
|
BLI_color.hh
|
|
BLI_color_mix.hh
|
|
BLI_compiler_attrs.h
|
|
BLI_compiler_compat.h
|
|
BLI_compiler_typecheck.h
|
|
BLI_compute_context.hh
|
|
BLI_console.h
|
|
BLI_convexhull_2d.h
|
|
BLI_cpp_type.hh
|
|
BLI_cpp_type_make.hh
|
|
BLI_cpp_types.hh
|
|
BLI_cpp_types_make.hh
|
|
BLI_delaunay_2d.hh
|
|
BLI_devirtualize_parameters.hh
|
|
BLI_dial_2d.h
|
|
BLI_disjoint_set.hh
|
|
BLI_dlrbTree.h
|
|
BLI_dot_export.hh
|
|
BLI_dot_export_attribute_enums.hh
|
|
BLI_dynlib.h
|
|
BLI_dynstr.h
|
|
BLI_easing.h
|
|
BLI_endian_defines.h
|
|
BLI_endian_switch.h
|
|
BLI_endian_switch_inline.h
|
|
BLI_enumerable_thread_specific.hh
|
|
BLI_expr_pylike_eval.h
|
|
BLI_fileops.h
|
|
BLI_fileops.hh
|
|
BLI_fileops_types.h
|
|
BLI_filereader.h
|
|
BLI_fixed_width_int.hh
|
|
BLI_fixed_width_int_str.hh
|
|
BLI_fnmatch.h
|
|
BLI_function_ref.hh
|
|
BLI_generic_array.hh
|
|
BLI_generic_pointer.hh
|
|
BLI_generic_span.hh
|
|
BLI_generic_value_map.hh
|
|
BLI_generic_vector_array.hh
|
|
BLI_generic_virtual_array.hh
|
|
BLI_generic_virtual_vector_array.hh
|
|
BLI_ghash.h
|
|
BLI_gsqueue.h
|
|
BLI_hash.h
|
|
BLI_hash.hh
|
|
BLI_hash_md5.hh
|
|
BLI_hash_mm2a.hh
|
|
BLI_hash_mm3.hh
|
|
BLI_hash_tables.hh
|
|
BLI_heap.h
|
|
BLI_heap_simple.h
|
|
BLI_implicit_sharing.h
|
|
BLI_implicit_sharing.hh
|
|
BLI_implicit_sharing_ptr.hh
|
|
BLI_index_mask.hh
|
|
BLI_index_mask_fwd.hh
|
|
BLI_index_mask_expression.hh
|
|
BLI_index_range.hh
|
|
BLI_inplace_priority_queue.hh
|
|
BLI_iterator.h
|
|
BLI_jitter_2d.h
|
|
BLI_kdopbvh.h
|
|
BLI_kdtree.h
|
|
BLI_kdtree_impl.h
|
|
BLI_lasso_2d.hh
|
|
BLI_lazy_threading.hh
|
|
BLI_length_parameterize.hh
|
|
BLI_linear_allocator.hh
|
|
BLI_linear_allocator_chunked_list.hh
|
|
BLI_link_utils.h
|
|
BLI_linklist.h
|
|
BLI_linklist_lockfree.h
|
|
BLI_linklist_stack.h
|
|
BLI_listbase.h
|
|
BLI_listbase_wrapper.hh
|
|
BLI_map.hh
|
|
BLI_map_slots.hh
|
|
BLI_math_angle_types.hh
|
|
BLI_math_axis_angle.hh
|
|
BLI_math_axis_angle_types.hh
|
|
BLI_math_base.h
|
|
BLI_math_base.hh
|
|
BLI_math_base_safe.h
|
|
BLI_math_basis_types.hh
|
|
BLI_math_bits.h
|
|
BLI_math_boolean.hh
|
|
BLI_math_color.h
|
|
BLI_math_color.hh
|
|
BLI_math_color_blend.h
|
|
BLI_math_euler.hh
|
|
BLI_math_euler_types.hh
|
|
BLI_math_geom.h
|
|
BLI_math_inline.h
|
|
BLI_math_interp.hh
|
|
BLI_math_matrix.h
|
|
BLI_math_matrix.hh
|
|
BLI_math_matrix_types.hh
|
|
BLI_math_mpq.hh
|
|
BLI_math_numbers.hh
|
|
BLI_math_quaternion.hh
|
|
BLI_math_quaternion_types.hh
|
|
BLI_math_rotation.h
|
|
BLI_math_rotation.hh
|
|
BLI_math_rotation_legacy.hh
|
|
BLI_math_rotation_types.hh
|
|
BLI_math_solvers.h
|
|
BLI_math_statistics.h
|
|
BLI_math_time.h
|
|
BLI_math_vector.h
|
|
BLI_math_vector.hh
|
|
BLI_math_vector_mpq_types.hh
|
|
BLI_math_vector_types.hh
|
|
BLI_memarena.h
|
|
BLI_memblock.h
|
|
BLI_memiter.h
|
|
BLI_memory_utils.h
|
|
BLI_memory_utils.hh
|
|
BLI_mempool.h
|
|
BLI_mesh_boolean.hh
|
|
BLI_mesh_intersect.hh
|
|
BLI_mmap.h
|
|
BLI_multi_value_map.hh
|
|
BLI_noise.h
|
|
BLI_noise.hh
|
|
BLI_offset_indices.hh
|
|
BLI_offset_span.hh
|
|
BLI_ordered_edge.hh
|
|
BLI_parameter_pack_utils.hh
|
|
BLI_path_util.h
|
|
BLI_polyfill_2d.h
|
|
BLI_polyfill_2d_beautify.h
|
|
BLI_pool.hh
|
|
BLI_probing_strategies.hh
|
|
BLI_quadric.h
|
|
BLI_rand.h
|
|
BLI_rand.hh
|
|
BLI_random_access_iterator_mixin.hh
|
|
BLI_range.h
|
|
BLI_rect.h
|
|
BLI_resource_scope.hh
|
|
BLI_scanfill.h
|
|
BLI_serialize.hh
|
|
BLI_session_uid.h
|
|
BLI_set.hh
|
|
BLI_set_slots.hh
|
|
BLI_shared_cache.hh
|
|
BLI_simd.h
|
|
BLI_smaa_textures.h
|
|
BLI_sort.h
|
|
BLI_sort.hh
|
|
BLI_sort_utils.h
|
|
BLI_span.hh
|
|
BLI_stack.h
|
|
BLI_stack.hh
|
|
BLI_strict_flags.h
|
|
BLI_string.h
|
|
BLI_string_cursor_utf8.h
|
|
BLI_string_ref.hh
|
|
BLI_string_search.hh
|
|
BLI_string_utf8.h
|
|
BLI_string_utf8_symbols.h
|
|
BLI_string_utils.hh
|
|
BLI_struct_equality_utils.hh
|
|
BLI_sub_frame.hh
|
|
BLI_sys_types.h
|
|
BLI_system.h
|
|
BLI_task.h
|
|
BLI_task.hh
|
|
BLI_tempfile.h
|
|
BLI_threads.h
|
|
BLI_time.h
|
|
BLI_time_utildefines.h
|
|
BLI_timecode.h
|
|
BLI_timeit.hh
|
|
BLI_timer.h
|
|
BLI_unique_sorted_indices.hh
|
|
BLI_unroll.hh
|
|
BLI_utildefines.h
|
|
BLI_utildefines_iter.h
|
|
BLI_utildefines_stack.h
|
|
BLI_utildefines_variadic.h
|
|
BLI_utility_mixins.hh
|
|
BLI_uuid.h
|
|
BLI_uvproject.h
|
|
BLI_vector.hh
|
|
BLI_vector_list.hh
|
|
BLI_vector_set.hh
|
|
BLI_vector_set_slots.hh
|
|
BLI_virtual_array.hh
|
|
BLI_virtual_array_fwd.hh
|
|
BLI_virtual_vector_array.hh
|
|
BLI_voxel.h
|
|
BLI_winstuff.h
|
|
BLI_winstuff_com.hh
|
|
|
|
# Without these files listed, they aren't known to CMake.
|
|
../../../extern/json/include/json.hpp
|
|
)
|
|
|
|
set(LIB
|
|
PUBLIC bf::dna
|
|
PRIVATE bf::extern::fmtlib
|
|
bf_intern_eigen
|
|
PRIVATE bf::intern::guardedalloc
|
|
extern_wcwidth
|
|
PRIVATE bf::intern::atomic
|
|
PRIVATE extern_fmtlib
|
|
${ZLIB_LIBRARIES}
|
|
${ZSTD_LIBRARIES}
|
|
)
|
|
|
|
if(NOT WITH_PYTHON_MODULE)
|
|
list(APPEND SRC
|
|
intern/BLI_args.c
|
|
|
|
BLI_args.h
|
|
)
|
|
endif()
|
|
|
|
if(WITH_MEM_VALGRIND)
|
|
add_definitions(-DWITH_MEM_VALGRIND)
|
|
endif()
|
|
|
|
if(WITH_TBB)
|
|
add_definitions(-DWITH_TBB)
|
|
|
|
list(APPEND INC_SYS
|
|
${TBB_INCLUDE_DIRS}
|
|
)
|
|
|
|
list(APPEND LIB
|
|
${TBB_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
if(WITH_GMP)
|
|
add_definitions(-DWITH_GMP)
|
|
|
|
list(APPEND INC_SYS
|
|
${GMP_INCLUDE_DIRS}
|
|
)
|
|
|
|
list(APPEND LIB
|
|
${GMP_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
if(WITH_BLENDER_THUMBNAILER)
|
|
# Needed for querying the `thumbnailer .dll` in `winstuff.c`.
|
|
add_definitions(-DWITH_BLENDER_THUMBNAILER)
|
|
endif()
|
|
list(APPEND INC
|
|
../../../intern/utfconv
|
|
)
|
|
list(APPEND LIB
|
|
bf_intern_utfconv
|
|
dxgi
|
|
)
|
|
list(APPEND SRC
|
|
intern/system_win32.c
|
|
)
|
|
endif()
|
|
|
|
|
|
if(APPLE)
|
|
list(APPEND SRC
|
|
intern/storage_apple.mm
|
|
)
|
|
endif()
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
list(APPEND LIB
|
|
bf_intern_libc_compat
|
|
)
|
|
endif()
|
|
|
|
# no need to compile object files for inline headers.
|
|
set_source_files_properties(
|
|
intern/math_base_inline.c
|
|
intern/math_base_safe_inline.c
|
|
intern/math_bits_inline.c
|
|
intern/math_color_blend_inline.c
|
|
intern/math_color_inline.c
|
|
intern/math_geom_inline.c
|
|
intern/math_vector_inline.c
|
|
PROPERTIES HEADER_FILE_ONLY TRUE
|
|
)
|
|
|
|
blender_add_lib(bf_blenlib "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
|
|
add_library(bf::blenlib ALIAS bf_blenlib)
|
|
|
|
if(WITH_GTESTS)
|
|
set(TEST_SRC
|
|
tests/BLI_any_test.cc
|
|
tests/BLI_array_store_test.cc
|
|
tests/BLI_array_test.cc
|
|
tests/BLI_array_utils_test.cc
|
|
tests/BLI_binary_search_test.cc
|
|
tests/BLI_bit_group_vector_test.cc
|
|
tests/BLI_bit_ref_test.cc
|
|
tests/BLI_bit_span_test.cc
|
|
tests/BLI_bit_vector_test.cc
|
|
tests/BLI_bitmap_test.cc
|
|
tests/BLI_bounds_test.cc
|
|
tests/BLI_color_test.cc
|
|
tests/BLI_convexhull_2d_test.cc
|
|
tests/BLI_cpp_type_test.cc
|
|
tests/BLI_delaunay_2d_test.cc
|
|
tests/BLI_disjoint_set_test.cc
|
|
tests/BLI_expr_pylike_eval_test.cc
|
|
tests/BLI_fileops_test.cc
|
|
tests/BLI_fixed_width_int_test.cc
|
|
tests/BLI_function_ref_test.cc
|
|
tests/BLI_generic_array_test.cc
|
|
tests/BLI_generic_span_test.cc
|
|
tests/BLI_generic_vector_array_test.cc
|
|
tests/BLI_ghash_test.cc
|
|
tests/BLI_hash_mm2a_test.cc
|
|
tests/BLI_heap_simple_test.cc
|
|
tests/BLI_heap_test.cc
|
|
tests/BLI_implicit_sharing_test.cc
|
|
tests/BLI_index_mask_test.cc
|
|
tests/BLI_index_mask_expression_test.cc
|
|
tests/BLI_index_range_test.cc
|
|
tests/BLI_inplace_priority_queue_test.cc
|
|
tests/BLI_kdopbvh_test.cc
|
|
tests/BLI_kdtree_test.cc
|
|
tests/BLI_length_parameterize_test.cc
|
|
tests/BLI_linear_allocator_chunked_list_test.cc
|
|
tests/BLI_linear_allocator_test.cc
|
|
tests/BLI_linklist_lockfree_test.cc
|
|
tests/BLI_listbase_test.cc
|
|
tests/BLI_map_test.cc
|
|
tests/BLI_math_base_safe_test.cc
|
|
tests/BLI_math_base_test.cc
|
|
tests/BLI_math_bits_test.cc
|
|
tests/BLI_math_color_test.cc
|
|
tests/BLI_math_geom_test.cc
|
|
tests/BLI_math_interp_test.cc
|
|
tests/BLI_math_matrix_test.cc
|
|
tests/BLI_math_matrix_types_test.cc
|
|
tests/BLI_math_rotation_test.cc
|
|
tests/BLI_math_rotation_types_test.cc
|
|
tests/BLI_math_solvers_test.cc
|
|
tests/BLI_math_time_test.cc
|
|
tests/BLI_math_vector_test.cc
|
|
tests/BLI_math_vector_types_test.cc
|
|
tests/BLI_memiter_test.cc
|
|
tests/BLI_memory_utils_test.cc
|
|
tests/BLI_mesh_boolean_test.cc
|
|
tests/BLI_mesh_intersect_test.cc
|
|
tests/BLI_multi_value_map_test.cc
|
|
tests/BLI_path_util_test.cc
|
|
tests/BLI_polyfill_2d_test.cc
|
|
tests/BLI_pool_test.cc
|
|
tests/BLI_random_access_iterator_mixin_test.cc
|
|
tests/BLI_ressource_strings.h
|
|
tests/BLI_serialize_test.cc
|
|
tests/BLI_session_uid_test.cc
|
|
tests/BLI_set_test.cc
|
|
tests/BLI_span_test.cc
|
|
tests/BLI_stack_cxx_test.cc
|
|
tests/BLI_stack_test.cc
|
|
tests/BLI_string_ref_test.cc
|
|
tests/BLI_string_search_test.cc
|
|
tests/BLI_string_test.cc
|
|
tests/BLI_string_utf8_test.cc
|
|
tests/BLI_string_utils_test.cc
|
|
tests/BLI_task_graph_test.cc
|
|
tests/BLI_task_test.cc
|
|
tests/BLI_tempfile_test.cc
|
|
tests/BLI_unique_sorted_indices_test.cc
|
|
tests/BLI_utildefines_test.cc
|
|
tests/BLI_uuid_test.cc
|
|
tests/BLI_vector_set_test.cc
|
|
tests/BLI_vector_test.cc
|
|
tests/BLI_virtual_array_test.cc
|
|
|
|
tests/BLI_exception_safety_test_utils.hh
|
|
)
|
|
set(TEST_INC
|
|
../imbuf
|
|
)
|
|
set(TEST_LIB
|
|
bf_blenlib
|
|
)
|
|
blender_add_test_suite_executable(BLI "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB};${TEST_LIB}")
|
|
|
|
add_subdirectory(tests/performance)
|
|
endif()
|