xref: /aosp_15_r20/external/google-benchmark/test/CMakeLists.txt (revision dbb99499c3810fa1611fa2242a2fc446be01a57c)
1*dbb99499SAndroid Build Coastguard Worker# Enable the tests
2*dbb99499SAndroid Build Coastguard Worker
3*dbb99499SAndroid Build Coastguard Workerset(THREADS_PREFER_PTHREAD_FLAG ON)
4*dbb99499SAndroid Build Coastguard Worker
5*dbb99499SAndroid Build Coastguard Workerfind_package(Threads REQUIRED)
6*dbb99499SAndroid Build Coastguard Workerinclude(CheckCXXCompilerFlag)
7*dbb99499SAndroid Build Coastguard Worker
8*dbb99499SAndroid Build Coastguard Workeradd_cxx_compiler_flag(-Wno-unused-variable)
9*dbb99499SAndroid Build Coastguard Worker
10*dbb99499SAndroid Build Coastguard Worker# NOTE: Some tests use `<cassert>` to perform the test. Therefore we must
11*dbb99499SAndroid Build Coastguard Worker# strip -DNDEBUG from the default CMake flags in DEBUG mode.
12*dbb99499SAndroid Build Coastguard Workerstring(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
13*dbb99499SAndroid Build Coastguard Workerif( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
14*dbb99499SAndroid Build Coastguard Worker  add_definitions( -UNDEBUG )
15*dbb99499SAndroid Build Coastguard Worker  add_definitions(-DTEST_BENCHMARK_LIBRARY_HAS_NO_ASSERTIONS)
16*dbb99499SAndroid Build Coastguard Worker  # Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines.
17*dbb99499SAndroid Build Coastguard Worker  foreach (flags_var_to_scrub
18*dbb99499SAndroid Build Coastguard Worker      CMAKE_CXX_FLAGS_RELEASE
19*dbb99499SAndroid Build Coastguard Worker      CMAKE_CXX_FLAGS_RELWITHDEBINFO
20*dbb99499SAndroid Build Coastguard Worker      CMAKE_CXX_FLAGS_MINSIZEREL
21*dbb99499SAndroid Build Coastguard Worker      CMAKE_C_FLAGS_RELEASE
22*dbb99499SAndroid Build Coastguard Worker      CMAKE_C_FLAGS_RELWITHDEBINFO
23*dbb99499SAndroid Build Coastguard Worker      CMAKE_C_FLAGS_MINSIZEREL)
24*dbb99499SAndroid Build Coastguard Worker    string (REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " "
25*dbb99499SAndroid Build Coastguard Worker      "${flags_var_to_scrub}" "${${flags_var_to_scrub}}")
26*dbb99499SAndroid Build Coastguard Worker  endforeach()
27*dbb99499SAndroid Build Coastguard Workerendif()
28*dbb99499SAndroid Build Coastguard Worker
29*dbb99499SAndroid Build Coastguard Workerif (NOT BUILD_SHARED_LIBS)
30*dbb99499SAndroid Build Coastguard Worker  add_definitions(-DBENCHMARK_STATIC_DEFINE)
31*dbb99499SAndroid Build Coastguard Workerendif()
32*dbb99499SAndroid Build Coastguard Worker
33*dbb99499SAndroid Build Coastguard Workercheck_cxx_compiler_flag(-O3 BENCHMARK_HAS_O3_FLAG)
34*dbb99499SAndroid Build Coastguard Workerset(BENCHMARK_O3_FLAG "")
35*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_HAS_O3_FLAG)
36*dbb99499SAndroid Build Coastguard Worker  set(BENCHMARK_O3_FLAG "-O3")
37*dbb99499SAndroid Build Coastguard Workerendif()
38*dbb99499SAndroid Build Coastguard Worker
39*dbb99499SAndroid Build Coastguard Worker# NOTE: These flags must be added after find_package(Threads REQUIRED) otherwise
40*dbb99499SAndroid Build Coastguard Worker# they will break the configuration check.
41*dbb99499SAndroid Build Coastguard Workerif (DEFINED BENCHMARK_CXX_LINKER_FLAGS)
42*dbb99499SAndroid Build Coastguard Worker  list(APPEND CMAKE_EXE_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})
43*dbb99499SAndroid Build Coastguard Workerendif()
44*dbb99499SAndroid Build Coastguard Worker
45*dbb99499SAndroid Build Coastguard Workeradd_library(output_test_helper STATIC output_test_helper.cc output_test.h)
46*dbb99499SAndroid Build Coastguard Workertarget_link_libraries(output_test_helper PRIVATE benchmark::benchmark)
47*dbb99499SAndroid Build Coastguard Worker
48*dbb99499SAndroid Build Coastguard Workermacro(compile_benchmark_test name)
49*dbb99499SAndroid Build Coastguard Worker  add_executable(${name} "${name}.cc")
50*dbb99499SAndroid Build Coastguard Worker  target_link_libraries(${name} benchmark::benchmark ${CMAKE_THREAD_LIBS_INIT})
51*dbb99499SAndroid Build Coastguard Worker  if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "NVHPC")
52*dbb99499SAndroid Build Coastguard Worker  target_compile_options( ${name} PRIVATE --diag_suppress partial_override )
53*dbb99499SAndroid Build Coastguard Worker  endif()
54*dbb99499SAndroid Build Coastguard Workerendmacro(compile_benchmark_test)
55*dbb99499SAndroid Build Coastguard Worker
56*dbb99499SAndroid Build Coastguard Workermacro(compile_benchmark_test_with_main name)
57*dbb99499SAndroid Build Coastguard Worker  add_executable(${name} "${name}.cc")
58*dbb99499SAndroid Build Coastguard Worker  target_link_libraries(${name} benchmark::benchmark_main)
59*dbb99499SAndroid Build Coastguard Workerendmacro(compile_benchmark_test_with_main)
60*dbb99499SAndroid Build Coastguard Worker
61*dbb99499SAndroid Build Coastguard Workermacro(compile_output_test name)
62*dbb99499SAndroid Build Coastguard Worker  add_executable(${name} "${name}.cc" output_test.h)
63*dbb99499SAndroid Build Coastguard Worker  target_link_libraries(${name} output_test_helper benchmark::benchmark_main
64*dbb99499SAndroid Build Coastguard Worker          ${BENCHMARK_CXX_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
65*dbb99499SAndroid Build Coastguard Workerendmacro(compile_output_test)
66*dbb99499SAndroid Build Coastguard Worker
67*dbb99499SAndroid Build Coastguard Workermacro(benchmark_add_test)
68*dbb99499SAndroid Build Coastguard Worker  add_test(${ARGV})
69*dbb99499SAndroid Build Coastguard Worker  if(WIN32 AND BUILD_SHARED_LIBS)
70*dbb99499SAndroid Build Coastguard Worker    cmake_parse_arguments(TEST "" "NAME" "" ${ARGN})
71*dbb99499SAndroid Build Coastguard Worker    set_tests_properties(${TEST_NAME} PROPERTIES ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:$<TARGET_FILE_DIR:benchmark::benchmark>")
72*dbb99499SAndroid Build Coastguard Worker  endif()
73*dbb99499SAndroid Build Coastguard Workerendmacro(benchmark_add_test)
74*dbb99499SAndroid Build Coastguard Worker
75*dbb99499SAndroid Build Coastguard Worker# Demonstration executable
76*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(benchmark_test)
77*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME benchmark COMMAND benchmark_test --benchmark_min_time=0.01s)
78*dbb99499SAndroid Build Coastguard Worker
79*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(spec_arg_test)
80*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME spec_arg COMMAND spec_arg_test --benchmark_filter=BM_NotChosen)
81*dbb99499SAndroid Build Coastguard Worker
82*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(spec_arg_verbosity_test)
83*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME spec_arg_verbosity COMMAND spec_arg_verbosity_test --v=42)
84*dbb99499SAndroid Build Coastguard Worker
85*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(benchmark_setup_teardown_test)
86*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME benchmark_setup_teardown COMMAND benchmark_setup_teardown_test)
87*dbb99499SAndroid Build Coastguard Worker
88*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(filter_test)
89*dbb99499SAndroid Build Coastguard Workermacro(add_filter_test name filter expect)
90*dbb99499SAndroid Build Coastguard Worker  benchmark_add_test(NAME ${name} COMMAND filter_test --benchmark_min_time=0.01s --benchmark_filter=${filter} ${expect})
91*dbb99499SAndroid Build Coastguard Worker  benchmark_add_test(NAME ${name}_list_only COMMAND filter_test --benchmark_list_tests --benchmark_filter=${filter} ${expect})
92*dbb99499SAndroid Build Coastguard Workerendmacro(add_filter_test)
93*dbb99499SAndroid Build Coastguard Worker
94*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(benchmark_min_time_flag_time_test)
95*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME min_time_flag_time COMMAND benchmark_min_time_flag_time_test)
96*dbb99499SAndroid Build Coastguard Worker
97*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(benchmark_min_time_flag_iters_test)
98*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME min_time_flag_iters COMMAND benchmark_min_time_flag_iters_test)
99*dbb99499SAndroid Build Coastguard Worker
100*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_simple "Foo" 3)
101*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_simple_negative "-Foo" 2)
102*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_suffix "BM_.*" 4)
103*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_suffix_negative "-BM_.*" 1)
104*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_all ".*" 5)
105*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_all_negative "-.*" 0)
106*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_blank "" 5)
107*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_blank_negative "-" 0)
108*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_none "monkey" 0)
109*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_none_negative "-monkey" 5)
110*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_wildcard ".*Foo.*" 3)
111*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_wildcard_negative "-.*Foo.*" 2)
112*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_begin "^BM_.*" 4)
113*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_begin_negative "-^BM_.*" 1)
114*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_begin2 "^N" 1)
115*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_begin2_negative "-^N" 4)
116*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_end ".*Ba$" 1)
117*dbb99499SAndroid Build Coastguard Workeradd_filter_test(filter_regex_end_negative "-.*Ba$" 4)
118*dbb99499SAndroid Build Coastguard Worker
119*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(options_test)
120*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME options_benchmarks COMMAND options_test --benchmark_min_time=0.01s)
121*dbb99499SAndroid Build Coastguard Worker
122*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(basic_test)
123*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME basic_benchmark COMMAND basic_test --benchmark_min_time=0.01s)
124*dbb99499SAndroid Build Coastguard Worker
125*dbb99499SAndroid Build Coastguard Workercompile_output_test(repetitions_test)
126*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME repetitions_benchmark COMMAND repetitions_test --benchmark_min_time=0.01s --benchmark_repetitions=3)
127*dbb99499SAndroid Build Coastguard Worker
128*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(diagnostics_test)
129*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME diagnostics_test COMMAND diagnostics_test --benchmark_min_time=0.01s)
130*dbb99499SAndroid Build Coastguard Worker
131*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(skip_with_error_test)
132*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME skip_with_error_test COMMAND skip_with_error_test --benchmark_min_time=0.01s)
133*dbb99499SAndroid Build Coastguard Worker
134*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(donotoptimize_test)
135*dbb99499SAndroid Build Coastguard Worker# Enable errors for deprecated deprecations (DoNotOptimize(Tp const& value)).
136*dbb99499SAndroid Build Coastguard Workercheck_cxx_compiler_flag(-Werror=deprecated-declarations BENCHMARK_HAS_DEPRECATED_DECLARATIONS_FLAG)
137*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_HAS_DEPRECATED_DECLARATIONS_FLAG)
138*dbb99499SAndroid Build Coastguard Worker  target_compile_options (donotoptimize_test PRIVATE "-Werror=deprecated-declarations")
139*dbb99499SAndroid Build Coastguard Workerendif()
140*dbb99499SAndroid Build Coastguard Worker# Some of the issues with DoNotOptimize only occur when optimization is enabled
141*dbb99499SAndroid Build Coastguard Workercheck_cxx_compiler_flag(-O3 BENCHMARK_HAS_O3_FLAG)
142*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_HAS_O3_FLAG)
143*dbb99499SAndroid Build Coastguard Worker  set_target_properties(donotoptimize_test PROPERTIES COMPILE_FLAGS "-O3")
144*dbb99499SAndroid Build Coastguard Workerendif()
145*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME donotoptimize_test COMMAND donotoptimize_test --benchmark_min_time=0.01s)
146*dbb99499SAndroid Build Coastguard Worker
147*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(fixture_test)
148*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME fixture_test COMMAND fixture_test --benchmark_min_time=0.01s)
149*dbb99499SAndroid Build Coastguard Worker
150*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(register_benchmark_test)
151*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME register_benchmark_test COMMAND register_benchmark_test --benchmark_min_time=0.01s)
152*dbb99499SAndroid Build Coastguard Worker
153*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(map_test)
154*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME map_test COMMAND map_test --benchmark_min_time=0.01s)
155*dbb99499SAndroid Build Coastguard Worker
156*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(multiple_ranges_test)
157*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME multiple_ranges_test COMMAND multiple_ranges_test --benchmark_min_time=0.01s)
158*dbb99499SAndroid Build Coastguard Worker
159*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test(args_product_test)
160*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME args_product_test COMMAND args_product_test --benchmark_min_time=0.01s)
161*dbb99499SAndroid Build Coastguard Worker
162*dbb99499SAndroid Build Coastguard Workercompile_benchmark_test_with_main(link_main_test)
163*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME link_main_test COMMAND link_main_test --benchmark_min_time=0.01s)
164*dbb99499SAndroid Build Coastguard Worker
165*dbb99499SAndroid Build Coastguard Workercompile_output_test(reporter_output_test)
166*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME reporter_output_test COMMAND reporter_output_test --benchmark_min_time=0.01s)
167*dbb99499SAndroid Build Coastguard Worker
168*dbb99499SAndroid Build Coastguard Workercompile_output_test(templated_fixture_test)
169*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME templated_fixture_test COMMAND templated_fixture_test --benchmark_min_time=0.01s)
170*dbb99499SAndroid Build Coastguard Worker
171*dbb99499SAndroid Build Coastguard Workercompile_output_test(user_counters_test)
172*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME user_counters_test COMMAND user_counters_test --benchmark_min_time=0.01s)
173*dbb99499SAndroid Build Coastguard Worker
174*dbb99499SAndroid Build Coastguard Workercompile_output_test(perf_counters_test)
175*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME perf_counters_test COMMAND perf_counters_test --benchmark_min_time=0.01s --benchmark_perf_counters=CYCLES,INSTRUCTIONS)
176*dbb99499SAndroid Build Coastguard Worker
177*dbb99499SAndroid Build Coastguard Workercompile_output_test(internal_threading_test)
178*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME internal_threading_test COMMAND internal_threading_test --benchmark_min_time=0.01s)
179*dbb99499SAndroid Build Coastguard Worker
180*dbb99499SAndroid Build Coastguard Workercompile_output_test(report_aggregates_only_test)
181*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME report_aggregates_only_test COMMAND report_aggregates_only_test --benchmark_min_time=0.01s)
182*dbb99499SAndroid Build Coastguard Worker
183*dbb99499SAndroid Build Coastguard Workercompile_output_test(display_aggregates_only_test)
184*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME display_aggregates_only_test COMMAND display_aggregates_only_test --benchmark_min_time=0.01s)
185*dbb99499SAndroid Build Coastguard Worker
186*dbb99499SAndroid Build Coastguard Workercompile_output_test(user_counters_tabular_test)
187*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME user_counters_tabular_test COMMAND user_counters_tabular_test --benchmark_counters_tabular=true --benchmark_min_time=0.01s)
188*dbb99499SAndroid Build Coastguard Worker
189*dbb99499SAndroid Build Coastguard Workercompile_output_test(user_counters_thousands_test)
190*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME user_counters_thousands_test COMMAND user_counters_thousands_test --benchmark_min_time=0.01s)
191*dbb99499SAndroid Build Coastguard Worker
192*dbb99499SAndroid Build Coastguard Workercompile_output_test(memory_manager_test)
193*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME memory_manager_test COMMAND memory_manager_test --benchmark_min_time=0.01s)
194*dbb99499SAndroid Build Coastguard Worker
195*dbb99499SAndroid Build Coastguard Workercompile_output_test(profiler_manager_test)
196*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME profiler_manager_test COMMAND profiler_manager_test --benchmark_min_time=0.01s)
197*dbb99499SAndroid Build Coastguard Worker
198*dbb99499SAndroid Build Coastguard Worker# MSVC does not allow to set the language standard to C++98/03.
199*dbb99499SAndroid Build Coastguard Workerif(NOT (MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC"))
200*dbb99499SAndroid Build Coastguard Worker  compile_benchmark_test(cxx03_test)
201*dbb99499SAndroid Build Coastguard Worker  set_target_properties(cxx03_test
202*dbb99499SAndroid Build Coastguard Worker      PROPERTIES
203*dbb99499SAndroid Build Coastguard Worker      CXX_STANDARD 98
204*dbb99499SAndroid Build Coastguard Worker      CXX_STANDARD_REQUIRED YES)
205*dbb99499SAndroid Build Coastguard Worker  # libstdc++ provides different definitions within <map> between dialects. When
206*dbb99499SAndroid Build Coastguard Worker  # LTO is enabled and -Werror is specified GCC diagnoses this ODR violation
207*dbb99499SAndroid Build Coastguard Worker  # causing the test to fail to compile. To prevent this we explicitly disable
208*dbb99499SAndroid Build Coastguard Worker  # the warning.
209*dbb99499SAndroid Build Coastguard Worker  check_cxx_compiler_flag(-Wno-odr BENCHMARK_HAS_WNO_ODR)
210*dbb99499SAndroid Build Coastguard Worker  check_cxx_compiler_flag(-Wno-lto-type-mismatch BENCHMARK_HAS_WNO_LTO_TYPE_MISMATCH)
211*dbb99499SAndroid Build Coastguard Worker  # Cannot set_target_properties multiple times here because the warnings will
212*dbb99499SAndroid Build Coastguard Worker  # be overwritten on each call
213*dbb99499SAndroid Build Coastguard Worker  set (DISABLE_LTO_WARNINGS "")
214*dbb99499SAndroid Build Coastguard Worker  if (BENCHMARK_HAS_WNO_ODR)
215*dbb99499SAndroid Build Coastguard Worker    set(DISABLE_LTO_WARNINGS "${DISABLE_LTO_WARNINGS} -Wno-odr")
216*dbb99499SAndroid Build Coastguard Worker  endif()
217*dbb99499SAndroid Build Coastguard Worker  if (BENCHMARK_HAS_WNO_LTO_TYPE_MISMATCH)
218*dbb99499SAndroid Build Coastguard Worker    set(DISABLE_LTO_WARNINGS "${DISABLE_LTO_WARNINGS} -Wno-lto-type-mismatch")
219*dbb99499SAndroid Build Coastguard Worker  endif()
220*dbb99499SAndroid Build Coastguard Worker  set_target_properties(cxx03_test PROPERTIES LINK_FLAGS "${DISABLE_LTO_WARNINGS}")
221*dbb99499SAndroid Build Coastguard Worker  benchmark_add_test(NAME cxx03 COMMAND cxx03_test --benchmark_min_time=0.01s)
222*dbb99499SAndroid Build Coastguard Workerendif()
223*dbb99499SAndroid Build Coastguard Worker
224*dbb99499SAndroid Build Coastguard Workercompile_output_test(complexity_test)
225*dbb99499SAndroid Build Coastguard Workerbenchmark_add_test(NAME complexity_benchmark COMMAND complexity_test --benchmark_min_time=1000000x)
226*dbb99499SAndroid Build Coastguard Worker
227*dbb99499SAndroid Build Coastguard Worker###############################################################################
228*dbb99499SAndroid Build Coastguard Worker# GoogleTest Unit Tests
229*dbb99499SAndroid Build Coastguard Worker###############################################################################
230*dbb99499SAndroid Build Coastguard Worker
231*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_ENABLE_GTEST_TESTS)
232*dbb99499SAndroid Build Coastguard Worker  macro(compile_gtest name)
233*dbb99499SAndroid Build Coastguard Worker    add_executable(${name} "${name}.cc")
234*dbb99499SAndroid Build Coastguard Worker    target_link_libraries(${name} benchmark::benchmark
235*dbb99499SAndroid Build Coastguard Worker        gmock_main ${CMAKE_THREAD_LIBS_INIT})
236*dbb99499SAndroid Build Coastguard Worker  endmacro(compile_gtest)
237*dbb99499SAndroid Build Coastguard Worker
238*dbb99499SAndroid Build Coastguard Worker  macro(add_gtest name)
239*dbb99499SAndroid Build Coastguard Worker    compile_gtest(${name})
240*dbb99499SAndroid Build Coastguard Worker    benchmark_add_test(NAME ${name} COMMAND ${name})
241*dbb99499SAndroid Build Coastguard Worker    if(WIN32 AND BUILD_SHARED_LIBS)
242*dbb99499SAndroid Build Coastguard Worker      set_tests_properties(${name} PROPERTIES
243*dbb99499SAndroid Build Coastguard Worker        ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:$<TARGET_FILE_DIR:benchmark::benchmark>;PATH=path_list_prepend:$<TARGET_FILE_DIR:gmock_main>"
244*dbb99499SAndroid Build Coastguard Worker      )
245*dbb99499SAndroid Build Coastguard Worker    endif()
246*dbb99499SAndroid Build Coastguard Worker  endmacro()
247*dbb99499SAndroid Build Coastguard Worker
248*dbb99499SAndroid Build Coastguard Worker  add_gtest(benchmark_gtest)
249*dbb99499SAndroid Build Coastguard Worker  add_gtest(benchmark_name_gtest)
250*dbb99499SAndroid Build Coastguard Worker  add_gtest(benchmark_random_interleaving_gtest)
251*dbb99499SAndroid Build Coastguard Worker  add_gtest(commandlineflags_gtest)
252*dbb99499SAndroid Build Coastguard Worker  add_gtest(statistics_gtest)
253*dbb99499SAndroid Build Coastguard Worker  add_gtest(string_util_gtest)
254*dbb99499SAndroid Build Coastguard Worker  add_gtest(perf_counters_gtest)
255*dbb99499SAndroid Build Coastguard Worker  add_gtest(time_unit_gtest)
256*dbb99499SAndroid Build Coastguard Worker  add_gtest(min_time_parse_gtest)
257*dbb99499SAndroid Build Coastguard Workerendif(BENCHMARK_ENABLE_GTEST_TESTS)
258*dbb99499SAndroid Build Coastguard Worker
259*dbb99499SAndroid Build Coastguard Worker###############################################################################
260*dbb99499SAndroid Build Coastguard Worker# Assembly Unit Tests
261*dbb99499SAndroid Build Coastguard Worker###############################################################################
262*dbb99499SAndroid Build Coastguard Worker
263*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_ENABLE_ASSEMBLY_TESTS)
264*dbb99499SAndroid Build Coastguard Worker  if (NOT LLVM_FILECHECK_EXE)
265*dbb99499SAndroid Build Coastguard Worker    message(FATAL_ERROR "LLVM FileCheck is required when including this file")
266*dbb99499SAndroid Build Coastguard Worker  endif()
267*dbb99499SAndroid Build Coastguard Worker  include(AssemblyTests.cmake)
268*dbb99499SAndroid Build Coastguard Worker  add_filecheck_test(donotoptimize_assembly_test)
269*dbb99499SAndroid Build Coastguard Worker  add_filecheck_test(state_assembly_test)
270*dbb99499SAndroid Build Coastguard Worker  add_filecheck_test(clobber_memory_assembly_test)
271*dbb99499SAndroid Build Coastguard Workerendif()
272*dbb99499SAndroid Build Coastguard Worker
273*dbb99499SAndroid Build Coastguard Worker
274*dbb99499SAndroid Build Coastguard Worker
275*dbb99499SAndroid Build Coastguard Worker###############################################################################
276*dbb99499SAndroid Build Coastguard Worker# Code Coverage Configuration
277*dbb99499SAndroid Build Coastguard Worker###############################################################################
278*dbb99499SAndroid Build Coastguard Worker
279*dbb99499SAndroid Build Coastguard Worker# Add the coverage command(s)
280*dbb99499SAndroid Build Coastguard Workerif(CMAKE_BUILD_TYPE)
281*dbb99499SAndroid Build Coastguard Worker  string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
282*dbb99499SAndroid Build Coastguard Workerendif()
283*dbb99499SAndroid Build Coastguard Workerif (${CMAKE_BUILD_TYPE_LOWER} MATCHES "coverage")
284*dbb99499SAndroid Build Coastguard Worker  find_program(GCOV gcov)
285*dbb99499SAndroid Build Coastguard Worker  find_program(LCOV lcov)
286*dbb99499SAndroid Build Coastguard Worker  find_program(GENHTML genhtml)
287*dbb99499SAndroid Build Coastguard Worker  find_program(CTEST ctest)
288*dbb99499SAndroid Build Coastguard Worker  if (GCOV AND LCOV AND GENHTML AND CTEST AND HAVE_CXX_FLAG_COVERAGE)
289*dbb99499SAndroid Build Coastguard Worker    add_custom_command(
290*dbb99499SAndroid Build Coastguard Worker      OUTPUT ${CMAKE_BINARY_DIR}/lcov/index.html
291*dbb99499SAndroid Build Coastguard Worker      COMMAND ${LCOV} -q -z -d .
292*dbb99499SAndroid Build Coastguard Worker      COMMAND ${LCOV} -q --no-external -c -b "${CMAKE_SOURCE_DIR}" -d . -o before.lcov -i
293*dbb99499SAndroid Build Coastguard Worker      COMMAND ${CTEST} --force-new-ctest-process
294*dbb99499SAndroid Build Coastguard Worker      COMMAND ${LCOV} -q --no-external -c -b "${CMAKE_SOURCE_DIR}" -d . -o after.lcov
295*dbb99499SAndroid Build Coastguard Worker      COMMAND ${LCOV} -q -a before.lcov -a after.lcov --output-file final.lcov
296*dbb99499SAndroid Build Coastguard Worker      COMMAND ${LCOV} -q -r final.lcov "'${CMAKE_SOURCE_DIR}/test/*'" -o final.lcov
297*dbb99499SAndroid Build Coastguard Worker      COMMAND ${GENHTML} final.lcov -o lcov --demangle-cpp --sort -p "${CMAKE_BINARY_DIR}" -t benchmark
298*dbb99499SAndroid Build Coastguard Worker      DEPENDS filter_test benchmark_test options_test basic_test fixture_test cxx03_test complexity_test
299*dbb99499SAndroid Build Coastguard Worker      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
300*dbb99499SAndroid Build Coastguard Worker      COMMENT "Running LCOV"
301*dbb99499SAndroid Build Coastguard Worker    )
302*dbb99499SAndroid Build Coastguard Worker    add_custom_target(coverage
303*dbb99499SAndroid Build Coastguard Worker      DEPENDS ${CMAKE_BINARY_DIR}/lcov/index.html
304*dbb99499SAndroid Build Coastguard Worker      COMMENT "LCOV report at lcov/index.html"
305*dbb99499SAndroid Build Coastguard Worker    )
306*dbb99499SAndroid Build Coastguard Worker    message(STATUS "Coverage command added")
307*dbb99499SAndroid Build Coastguard Worker  else()
308*dbb99499SAndroid Build Coastguard Worker    if (HAVE_CXX_FLAG_COVERAGE)
309*dbb99499SAndroid Build Coastguard Worker      set(CXX_FLAG_COVERAGE_MESSAGE supported)
310*dbb99499SAndroid Build Coastguard Worker    else()
311*dbb99499SAndroid Build Coastguard Worker      set(CXX_FLAG_COVERAGE_MESSAGE unavailable)
312*dbb99499SAndroid Build Coastguard Worker    endif()
313*dbb99499SAndroid Build Coastguard Worker    message(WARNING
314*dbb99499SAndroid Build Coastguard Worker      "Coverage not available:\n"
315*dbb99499SAndroid Build Coastguard Worker      "  gcov: ${GCOV}\n"
316*dbb99499SAndroid Build Coastguard Worker      "  lcov: ${LCOV}\n"
317*dbb99499SAndroid Build Coastguard Worker      "  genhtml: ${GENHTML}\n"
318*dbb99499SAndroid Build Coastguard Worker      "  ctest: ${CTEST}\n"
319*dbb99499SAndroid Build Coastguard Worker      "  --coverage flag: ${CXX_FLAG_COVERAGE_MESSAGE}")
320*dbb99499SAndroid Build Coastguard Worker  endif()
321*dbb99499SAndroid Build Coastguard Workerendif()
322