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