From fa8b2d617152ee840ee924910cf3f20bf9c61277 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 10 May 2016 16:46:26 -0700 Subject: [PATCH 1/6] Add myself to the contributors list --- CONTRIBUTORS | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index fcc3f35e8d..67ecb280e0 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -23,6 +23,7 @@ # Please keep the list sorted. Arne Beer +Billy Robert O'Neal III Chris Kennelly Christopher Seymour David Coeurjolly From 60b59217359ecac2060637906e9eae14216a47d7 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 27 Apr 2016 18:44:39 -0700 Subject: [PATCH 2/6] Remove redundant MSVC++ /W3 triggering warnings This change looks for CMake's default setting for MSVC++, /W3 (and any other level should that change in the future), and removes it before adding /W4. This stops the build for MSVC++ emitting warnings about /W4 overriding /W3 earlier on the command line. --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c72252621..59405610e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,8 @@ include(CXXFeatureCheck) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # Turn compiler warnings up to 11 - add_cxx_compiler_flag(-W4) + string(REGEX REPLACE "[-/]W[1-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") add_definitions(-D_CRT_SECURE_NO_WARNINGS) # Link time optimisation From 9bb1ba6b76f6af2f32e2f146c3e97fdac67e8340 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 27 Apr 2016 18:47:03 -0700 Subject: [PATCH 3/6] Fix clobbering of default CMAKE_CXX_FLAGS_RELEASE BENCHMARK_ENABLE_LTO=true was completely replacing CMAKE_CXX_FLAGS_RELEASE; meaning neither CMake's release defaults nor user customizations were being applied. --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 59405610e3..4424527c66 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,10 +39,10 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # Link time optimisation if (BENCHMARK_ENABLE_LTO) - set(CMAKE_CXX_FLAGS_RELEASE "/GL") - set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "/LTCG") - set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/LTCG") - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL") + set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG") + set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG") + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") endif() else() # Try and enable C++11. Don't use C++14 because it doesn't work in some From d89ab075fd0b545f4c69732839e2a978df602abf Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 27 Apr 2016 18:48:43 -0700 Subject: [PATCH 4/6] Added support for CMake's other rel configs In addition to release, CMake supports RELWITHDEBINFO and MINSIZEREL build configurations. In particular, debug info is necessary for many profilers to do anything useful, making RELWITHDEBINFO important here. MINSIZEREL was added for completeness' sake. --- CMakeLists.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4424527c66..708fc7f657 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,19 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") + + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /GL") + string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO" CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO}") + set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") + string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO" CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}") + set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") + string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO" CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}") + set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") + + set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /GL") + set(CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL "${CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL} /LTCG") + set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /LTCG") + set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /LTCG") endif() else() # Try and enable C++11. Don't use C++14 because it doesn't work in some From 09edc486b851ab948cc859e2c4a85a189378b284 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 27 Apr 2016 18:49:17 -0700 Subject: [PATCH 5/6] Added GCC/Clang support for other rel configs --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 708fc7f657..f340fb3504 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,6 +71,8 @@ else() add_cxx_compiler_flag(-Wextra) add_cxx_compiler_flag(-Wshadow) add_cxx_compiler_flag(-Werror RELEASE) + add_cxx_compiler_flag(-Werror RELWITHDEBINFO) + add_cxx_compiler_flag(-Werror MINSIZEREL) add_cxx_compiler_flag(-pedantic) add_cxx_compiler_flag(-pedantic-errors) add_cxx_compiler_flag(-Wshorten-64-to-32) From 6f8a974c22dd0df80dca75193f05447ef45a66ee Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 10 May 2016 17:35:36 -0700 Subject: [PATCH 6/6] Use nanoseconds instead of duration MSVC++ before 2015 Update 2 has a bug in sleep_for where it tries to implicitly += the input with a nanoseconds variable. Work around this by using nanoseconds directly (which can be implicitly +='d with chrono::nanoseconds). --- test/benchmark_test.cc | 3 ++- test/options_test.cc | 11 ++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/test/benchmark_test.cc b/test/benchmark_test.cc index fa99559092..252602a75f 100644 --- a/test/benchmark_test.cc +++ b/test/benchmark_test.cc @@ -186,7 +186,8 @@ static void BM_ManualTiming(benchmark::State& state) { while (state.KeepRunning()) { auto start = std::chrono::high_resolution_clock::now(); // Simulate some useful workload with a sleep - std::this_thread::sleep_for(sleep_duration); + std::this_thread::sleep_for(std::chrono::duration_cast< + std::chrono::nanoseconds>(sleep_duration)); auto end = std::chrono::high_resolution_clock::now(); auto elapsed = diff --git a/test/options_test.cc b/test/options_test.cc index 4fe2d17ac7..4737caa2e4 100644 --- a/test/options_test.cc +++ b/test/options_test.cc @@ -9,14 +9,11 @@ void BM_basic(benchmark::State& state) { } void BM_basic_slow(benchmark::State& state) { - - int milliseconds = state.range_x(); - std::chrono::duration sleep_duration { - static_cast(milliseconds) - }; - + std::chrono::milliseconds sleep_duration(state.range_x()); while (state.KeepRunning()) { - std::this_thread::sleep_for(sleep_duration); + std::this_thread::sleep_for( + std::chrono::duration_cast(sleep_duration) + ); } }