193 lines
5.4 KiB
Meson
193 lines
5.4 KiB
Meson
test_sources = [
|
|
'app/counter.cpp',
|
|
'app/doctest.cpp',
|
|
'app/nanobench.cpp',
|
|
'app/stacktrace.cpp',
|
|
'app/ui/periodic.cpp',
|
|
'app/ui/progress_bar.cpp',
|
|
'app/unordered_dense.cpp',
|
|
|
|
'bench/swap.cpp',
|
|
'bench/show_allocations.cpp',
|
|
'bench/quick_overall_map.cpp',
|
|
'bench/game_of_life.cpp',
|
|
'bench/find_random.cpp',
|
|
'bench/copy.cpp',
|
|
|
|
'fuzz/run.cpp',
|
|
|
|
'unit/assign_to_move.cpp',
|
|
'unit/assignment_combinations.cpp',
|
|
'unit/at.cpp',
|
|
'unit/bucket.cpp',
|
|
'unit/contains.cpp',
|
|
'unit/copy_and_assign_maps.cpp',
|
|
'unit/copyassignment.cpp',
|
|
'unit/count.cpp',
|
|
'unit/ctors.cpp',
|
|
'unit/custom_container_boost.cpp',
|
|
'unit/custom_container.cpp',
|
|
'unit/custom_hash.cpp',
|
|
'unit/deduction_guides.cpp',
|
|
'unit/diamond.cpp',
|
|
'unit/empty.cpp',
|
|
'unit/equal_range.cpp',
|
|
'unit/erase_if.cpp',
|
|
'unit/erase_range.cpp',
|
|
'unit/erase.cpp',
|
|
'unit/explicit.cpp',
|
|
'unit/extract.cpp',
|
|
'unit/fuzz_api.cpp',
|
|
'unit/fuzz_insert_erase.cpp',
|
|
'unit/fuzz_replace_map.cpp',
|
|
'unit/fuzz_string.cpp',
|
|
'unit/hash_char_types.cpp',
|
|
'unit/hash_smart_ptr.cpp',
|
|
'unit/hash_string_view.cpp',
|
|
'unit/hash.cpp',
|
|
'unit/include_only.cpp',
|
|
'unit/initializer_list.cpp',
|
|
'unit/insert_or_assign.cpp',
|
|
'unit/insert.cpp',
|
|
'unit/iterators_empty.cpp',
|
|
'unit/iterators_erase.cpp',
|
|
'unit/iterators_insert.cpp',
|
|
'unit/load_factor.cpp',
|
|
'unit/maps_of_maps.cpp',
|
|
'unit/max.cpp',
|
|
'unit/move_to_moved.cpp',
|
|
'unit/multiple_apis.cpp',
|
|
'unit/namespace.cpp',
|
|
'unit/not_copyable.cpp',
|
|
'unit/not_moveable.cpp',
|
|
'unit/pmr_move_with_allocators.cpp',
|
|
'unit/pmr.cpp',
|
|
'unit/rehash.cpp',
|
|
'unit/replace.cpp',
|
|
'unit/reserve_and_assign.cpp',
|
|
'unit/reserve.cpp',
|
|
'unit/segmented_vector.cpp',
|
|
'unit/set_or_map_types.cpp',
|
|
'unit/set.cpp',
|
|
'unit/std_hash.cpp',
|
|
'unit/swap.cpp',
|
|
'unit/transparent.cpp',
|
|
'unit/try_emplace.cpp',
|
|
'unit/tuple_hash.cpp',
|
|
'unit/unique_ptr.cpp',
|
|
'unit/unordered_set.cpp',
|
|
'unit/vectorofmaps.cpp',
|
|
'unit/windows_include.cpp',
|
|
]
|
|
|
|
# additional compile options
|
|
# see https://mesonbuild.com/Reference-tables.html
|
|
cpp_args = []
|
|
compiler = meson.get_compiler('cpp')
|
|
foreach arg : [
|
|
# gcc
|
|
'-Wno-stringop-overflow', # g++ error in fmtlib
|
|
'-Warith-conversion',
|
|
'-Wshadow=global',
|
|
'-Wno-array-bounds', # gcc 13 gives incorrect warning
|
|
|
|
# gcc / clang
|
|
'-Wconversion',
|
|
'-Wextra',
|
|
'-Wunreachable-code',
|
|
'-Wuninitialized',
|
|
'-pedantic-errors',
|
|
'-Wold-style-cast',
|
|
'-Wno-unused-function',
|
|
# '-Weffc++', doesn't work with fmt
|
|
|
|
# '-march=native',
|
|
]
|
|
if compiler.has_argument(arg)
|
|
cpp_args += [arg]
|
|
endif
|
|
endforeach
|
|
|
|
if compiler.get_id() == 'msvc'
|
|
add_global_arguments(
|
|
'/wd4189', # fmt: 'zero': local variable is initialized but not referenced, fixed in https://github.com/fmtlib/fmt/issues/2891
|
|
'/wd4251', # 'fmt::v8::ostream::file_': class 'fmt::v8::file' needs to have dll-interface to be used by clients of class 'fmt::v8::ostream'
|
|
language: 'cpp')
|
|
endif
|
|
|
|
# for include-what-you-use
|
|
#cpp_args += '-isystem'
|
|
#cpp_args += '/usr/lib64/clang/14.0.0/include/'
|
|
|
|
fmt_method = 'auto'
|
|
if get_option('cpp_args').contains('-m32')
|
|
# use builtin so we can compile it for 32bit.
|
|
# Can't use it as a default or sanitizer doesn't work...
|
|
fmt_method = 'builtin'
|
|
endif
|
|
|
|
# use e.g.
|
|
# CXX='ccache clang++' BOOST_ROOT=/home/martinus/dev/boost_1_81_0/ meson setup --buildtype release -Dcpp_std=c++17 build
|
|
opt_boost = dependency('boost', required: false)
|
|
link_args = []
|
|
if opt_boost.found()
|
|
add_global_arguments('-DANKERL_UNORDERED_DENSE_HAS_BOOST=1', language: 'cpp')
|
|
link_args += ['-lrt']
|
|
else
|
|
add_global_arguments('-DANKERL_UNORDERED_DENSE_HAS_BOOST=0', language: 'cpp')
|
|
endif
|
|
|
|
#opt_absl = dependency('absl_container', required: true, )
|
|
#if opt_boost.found()
|
|
# add_global_arguments('-DANKERL_UNORDERED_DENSE_HAS_ABSL=1', language: 'cpp')
|
|
#else
|
|
# add_global_arguments('-DANKERL_UNORDERED_DENSE_HAS_ABSL=0', language: 'cpp')
|
|
#endif
|
|
|
|
cpp_args += [
|
|
#'-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION',
|
|
#'-fsanitize-undefined-trap-on-error',
|
|
#'-fsanitize=undefined,address',
|
|
#'-fno-sanitize=thread',
|
|
#'-ftrivial-auto-var-init=pattern',
|
|
#'-g',
|
|
]
|
|
|
|
link_args += [
|
|
#'-fsanitize=undefined,address',
|
|
#'-fno-sanitize=thread'
|
|
#'-Wl,-shuffle-sections' # for benchmarking with mold linker
|
|
]
|
|
|
|
test_exe = executable(
|
|
'udm-test',
|
|
test_sources,
|
|
include_directories: incdir,
|
|
cpp_args: cpp_args,
|
|
link_args: link_args,
|
|
dependencies: [
|
|
dependency('threads'), # add dependency for threads (-lpthread, see https://mesonbuild.com/howtox.html),
|
|
|
|
# see what's in the [provide] sections for the dependency names
|
|
dependency('doctest'),
|
|
dependency('fmt', method: fmt_method),
|
|
|
|
# disable these two if you don't want them
|
|
#dependency('boost'),
|
|
#dependency('absl_container', default_options: ['warning_level=0', 'werror=false'])
|
|
# dependency('absl_hash', method: 'builtin', default_options: ['warning_level=0', 'werror=false'])
|
|
],
|
|
)
|
|
|
|
benchmark(
|
|
'bench',
|
|
test_exe,
|
|
args: ['-ns', '-ts=bench'],
|
|
verbose: true)
|
|
|
|
test(
|
|
'unit',
|
|
test_exe,
|
|
verbose: true)
|
|
|