@@ -22,42 +22,81 @@ if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
2222 endforeach ()
2323endif ()
2424
25- check_cxx_compiler_flag (-O3 BENCHMARK_HAS_O3_FLAG )
26- set (BENCHMARK_O3_FLAG "" )
27- if (BENCHMARK_HAS_O3_FLAG)
28- set (BENCHMARK_O3_FLAG "-O3" )
29- endif ()
30-
3125# NOTE: These flags must be added after find_package(Threads REQUIRED) otherwise
3226# they will break the configuration check.
3327if (DEFINED BENCHMARK_CXX_LINKER_FLAGS)
3428 list (APPEND CMAKE_EXE_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS} )
3529endif ()
3630
3731add_library (output_test_helper STATIC output_test_helper.cc output_test.h )
32+ target_link_libraries (output_test_helper benchmark )
33+
34+ function (add_benchmark_test target )
35+ cmake_parse_arguments (ARG
36+ "EXCLUDE_FROM_TEST;OUTPUT_TEST;GTEST_TEST"
37+ "SOURCE;REQUIRES"
38+ "COMPILE_FLAGS;LINK_FLAGS;LIBRARIES;TEST_ARGS"
39+ ${ARGN} )
40+ if (NOT BENCHMARK_ENABLE_GTEST_TESTS AND ARG_GTEST_TEST)
41+ return ()
42+ endif ()
43+ if (ARG_REQUIRES)
44+ if (NOT ${ARG_REQUIRES} )
45+ return ()
46+ endif ()
47+ endif ()
3848
39- macro (compile_benchmark_test name )
40- add_executable (${name} "${name} .cc" )
41- target_link_libraries (${name} benchmark ${CMAKE_THREAD_LIBS_INIT} )
42- endmacro (compile_benchmark_test )
43-
49+ # Create the test executable
50+ if (NOT ARG_SOURCE)
51+ set (ARG_SOURCE "${target} .cc" )
52+ endif ()
53+ add_executable (${target} ${ARG_SOURCE} )
54+ set_target_properties (${target}
55+ PROPERTIES
56+ COMPILE_FLAGS "${ARG_COMPILE_FLAGS} "
57+ LINK_FLAGS "${ARG_LINK_FLAGS} " )
58+ target_link_libraries (${target} benchmark ${ARG_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} )
59+
60+ # Handle specifics for each different type of test. ex. output tests, gtests, ect.
61+ if (ARG_OUTPUT_TEST)
62+ target_link_libraries (${target} output_test_helper ${BENCHMARK_CXX_LIBRARIES} )
63+ elseif (ARG_GTEST_TEST)
64+ if (TARGET googletest)
65+ add_dependencies (${target} googletest )
66+ endif ()
67+ if (GTEST_INCLUDE_DIRS)
68+ target_include_directories (${target} PRIVATE ${GTEST_INCLUDE_DIRS} )
69+ endif ()
70+ target_link_libraries (${target} ${GTEST_BOTH_LIBRARIES} )
71+ endif ()
4472
45- macro (compile_output_test name )
46- add_executable (${name} "${name} .cc" output_test.h )
47- target_link_libraries (${name} output_test_helper benchmark
48- ${BENCHMARK_CXX_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} )
49- endmacro (compile_output_test )
73+ # Unless otherwise specified, supply default arguments to each benchmark test.
74+ if (NOT ARG_TEST_ARGS AND NOT ARG_GTEST_TEST)
75+ set (ARG_TEST_ARGS --benchmark_min_time=0.01)
76+ endif ()
5077
51- # Demonstration executable
52- compile_benchmark_test (benchmark_test )
53- add_test (benchmark benchmark_test --benchmark_min_time=0.01 )
78+ if (NOT ARG_EXCLUDE_FROM_TEST)
79+ add_test (${target} ${target} ${ARG_TEST_ARGS} )
80+ endif ()
81+ endfunction (add_benchmark_test )
82+
83+ function (add_benchmark_tests )
84+ cmake_parse_arguments (ARG "" "" "OPTIONS" ${ARGN} )
85+ set (TEST_TARGETS ${ARG_UNPARSED_ARGUMENTS} )
86+ foreach (target ${TEST_TARGETS} )
87+ add_benchmark_test (${target}
88+ ${ARG_OPTIONS} )
89+ endforeach ()
90+ endfunction ()
5491
55- compile_benchmark_test (filter_test )
92+ ###############################################################################
93+ # Filter Tests
94+ ###############################################################################
95+ add_benchmark_test (filter_test EXCLUDE_FROM_TEST )
5696macro (add_filter_test name filter expect )
5797 add_test (${name} filter_test --benchmark_min_time=0.01 --benchmark_filter=${filter} ${expect} )
5898 add_test (${name} _list_only filter_test --benchmark_list_tests --benchmark_filter=${filter} ${expect} )
5999endmacro (add_filter_test )
60-
61100add_filter_test (filter_simple "Foo" 3 )
62101add_filter_test (filter_suffix "BM_.*" 4 )
63102add_filter_test (filter_regex_all ".*" 5 )
@@ -68,107 +107,82 @@ add_filter_test(filter_regex_begin "^BM_.*" 4)
68107add_filter_test (filter_regex_begin2 "^N" 1 )
69108add_filter_test (filter_regex_end ".*Ba$" 1 )
70109
71- compile_benchmark_test (options_test )
72- add_test (options_benchmarks options_test --benchmark_min_time=0.01 )
73-
74- compile_benchmark_test (basic_test )
75- add_test (basic_benchmark basic_test --benchmark_min_time=0.01 )
76-
77- compile_benchmark_test (diagnostics_test )
78- add_test (diagnostics_test diagnostics_test --benchmark_min_time=0.01 )
79-
80- compile_benchmark_test (skip_with_error_test )
81- add_test (skip_with_error_test skip_with_error_test --benchmark_min_time=0.01 )
82-
83- compile_benchmark_test (donotoptimize_test )
84- # Some of the issues with DoNotOptimize only occur when optimization is enabled
110+ ###############################################################################
111+ # Basic Benchmark Tests
112+ ###############################################################################
113+ add_benchmark_tests (
114+ benchmark_test
115+ options_test
116+ diagnostics_test
117+ skip_with_error_test
118+ donotoptimize_test
119+ fixture_test
120+ register_benchmark_test
121+ map_test
122+ multiple_ranges_test
123+ )
124+ add_benchmark_test (basic_benchmark SOURCE basic_test.cc )
125+ # Some of the issues with DoNotOptimize only occur when optimization is enabled.
126+ # Others only occur when they are disabled. Test both.
85127check_cxx_compiler_flag (-O3 BENCHMARK_HAS_O3_FLAG )
86- if (BENCHMARK_HAS_O3_FLAG)
87- set_target_properties (donotoptimize_test PROPERTIES COMPILE_FLAGS "-O3" )
128+ add_benchmark_test (donotoptimize_test_O3
129+ REQUIRES BENCHMARK_HAS_O3_FLAG
130+ SOURCE donotoptimize_test.cc
131+ COMPILE_FLAGS "-O3" )
132+ check_cxx_compiler_flag (-O0 BENCHMARK_HAS_O0_FLAG )
133+ add_benchmark_test (donotoptimize_test_O0
134+ REQUIRES BENCHMARK_HAS_O0_FLAG
135+ SOURCE donotoptimize_test.cc
136+ COMPILE_FLAGS "-O0" )
137+ add_benchmark_tests (
138+ reporter_output_test
139+ templated_fixture_test
140+ user_counters_test
141+ OPTIONS
142+ OUTPUT_TEST
143+ )
144+ add_benchmark_test (
145+ user_counters_tabular_test
146+ OUTPUT_TEST
147+ TEST_ARGS --benchmark_counters_tabular=true --benchmark_min_time=0.01
148+ )
149+
150+ # libstdc++ provides different definitions within <map> between dialects. When
151+ # LTO is enabled and -Werror is specified GCC diagnoses this ODR violation
152+ # causing the test to fail to compile. To prevent this we explicitly disable
153+ # the warning.
154+ check_cxx_compiler_flag (-Wno-odr BENCHMARK_HAS_WNO_ODR )
155+ if (BENCHMARK_ENABLE_LTO AND BENCHMARK_HAS_WNO_ODR)
156+ set (LINK_FLAGS "-Wno-odr" )
88157endif ()
89- add_test (donotoptimize_test donotoptimize_test --benchmark_min_time=0.01 )
90-
91- compile_benchmark_test (fixture_test )
92- add_test (fixture_test fixture_test --benchmark_min_time=0.01 )
93-
94- compile_benchmark_test (register_benchmark_test )
95- add_test (register_benchmark_test register_benchmark_test --benchmark_min_time=0.01 )
96-
97- compile_benchmark_test (map_test )
98- add_test (map_test map_test --benchmark_min_time=0.01 )
99-
100- compile_benchmark_test (multiple_ranges_test )
101- add_test (multiple_ranges_test multiple_ranges_test --benchmark_min_time=0.01 )
102-
103- compile_output_test (reporter_output_test )
104- add_test (reporter_output_test reporter_output_test --benchmark_min_time=0.01 )
105-
106- compile_output_test (templated_fixture_test )
107- add_test (templated_fixture_test templated_fixture_test --benchmark_min_time=0.01 )
108-
109- compile_output_test (user_counters_test )
110- add_test (user_counters_test user_counters_test --benchmark_min_time=0.01 )
111-
112- compile_output_test (user_counters_tabular_test )
113- add_test (user_counters_tabular_test user_counters_tabular_test --benchmark_counters_tabular=true --benchmark_min_time=0.01 )
114-
115158check_cxx_compiler_flag (-std=c++03 BENCHMARK_HAS_CXX03_FLAG )
116- if (BENCHMARK_HAS_CXX03_FLAG)
117- compile_benchmark_test (cxx03_test )
118- set_target_properties (cxx03_test
119- PROPERTIES
120- COMPILE_FLAGS "-std=c++03" )
121- # libstdc++ provides different definitions within <map> between dialects. When
122- # LTO is enabled and -Werror is specified GCC diagnoses this ODR violation
123- # causing the test to fail to compile. To prevent this we explicitly disable
124- # the warning.
125- check_cxx_compiler_flag (-Wno-odr BENCHMARK_HAS_WNO_ODR )
126- if (BENCHMARK_ENABLE_LTO AND BENCHMARK_HAS_WNO_ODR)
127- set_target_properties (cxx03_test
128- PROPERTIES
129- LINK_FLAGS "-Wno-odr" )
130- endif ()
131- add_test (cxx03 cxx03_test --benchmark_min_time=0.01 )
132- endif ()
159+ add_benchmark_test (cxx03_test
160+ REQUIRES BENCHMARK_HAS_CXX03_FLAG
161+ COMPILE_FLAGS "-std=c++03"
162+ LINK_FLAGS "${LINK_FLAGS} " )
133163
134164# Attempt to work around flaky test failures when running on Appveyor servers.
135165if (DEFINED ENV{APPVEYOR})
136166 set (COMPLEXITY_MIN_TIME "0.5" )
137167else ()
138168 set (COMPLEXITY_MIN_TIME "0.01" )
139169endif ()
140- compile_output_test (complexity_test )
141- add_test (complexity_benchmark complexity_test --benchmark_min_time=${COMPLEXITY_MIN_TIME} )
170+ add_benchmark_test (complexity_test OUTPUT_TEST
171+ TEST_ARGS --benchmark_min_time=${COMPLEXITY_MIN_TIME} )
172+
142173
143174###############################################################################
144- # GoogleTest Unit Tests
175+ # GTEST Unit Tests
145176###############################################################################
146-
147- if (BENCHMARK_ENABLE_GTEST_TESTS)
148- macro (compile_gtest name )
149- add_executable (${name} "${name} .cc" )
150- if (TARGET googletest)
151- add_dependencies (${name} googletest )
152- endif ()
153- if (GTEST_INCLUDE_DIRS)
154- target_include_directories (${name} PRIVATE ${GTEST_INCLUDE_DIRS} )
155- endif ()
156- target_link_libraries (${name} benchmark
157- ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} )
158- endmacro (compile_gtest )
159-
160- macro (add_gtest name )
161- compile_gtest (${name} )
162- add_test (${name} ${name} )
163- endmacro ()
164-
165- add_gtest (statistics_test )
166- endif (BENCHMARK_ENABLE_GTEST_TESTS )
177+ add_benchmark_tests (
178+ statistics_test
179+ OPTIONS
180+ GTEST_TEST
181+ )
167182
168183###############################################################################
169184# Assembly Unit Tests
170185###############################################################################
171-
172186if (BENCHMARK_ENABLE_ASSEMBLY_TESTS)
173187 if (NOT LLVM_FILECHECK_EXE)
174188 message (FATAL_ERROR "LLVM FileCheck is required when including this file" )
@@ -179,8 +193,6 @@ if (BENCHMARK_ENABLE_ASSEMBLY_TESTS)
179193 add_filecheck_test (clobber_memory_assembly_test )
180194endif ()
181195
182-
183-
184196###############################################################################
185197# Code Coverage Configuration
186198###############################################################################
0 commit comments