Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package benchmark for openSUSE:Factory 
checked in at 2022-12-07 17:34:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/benchmark (Old)
 and      /work/SRC/openSUSE:Factory/.benchmark.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "benchmark"

Wed Dec  7 17:34:28 2022 rev:22 rq:1040615 version:1.7.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/benchmark/benchmark.changes      2022-08-24 
15:10:48.264483754 +0200
+++ /work/SRC/openSUSE:Factory/.benchmark.new.1835/benchmark.changes    
2022-12-07 17:35:37.080753663 +0100
@@ -1,0 +2,31 @@
+Mon Dec 05 08:36:46 UTC 2022 - [email protected]
+
+- Update to version 1.7.1:
+  * version bump for release
+  * [bazel] Build libpfm as a dependency to allow collection of perf counters 
(#1408)
+  * Add information for supported Python versions to setup.py (#1502)
+  * Partially revert "Do not depend on unversioned python binary (#1496)" 
(#1501)
+  * Do not depend on unversioned python binary (#1496)
+  * Fix Solaris compilation (#1499) (#1500)
+  * Support for QuRT OS (Hexagon RTOS) (#1497)
+  * bump cmake dep and docs (#1468)
+  * Bump pybind11 version to enable Python 3.11 wheel builds (#1489)
+  * Discuss sources of variance in the user guide (#1481)
+  * Stop using pandas.Timedelta (fixes #1482) (#1483)
+  * Eliminate usage of deprecated  API in sysinfo.cc (#1474)
+  * Enable aarch64 Linux wheel builds, use cibuildwheel action directly (#1472)
+  * Clean up test documentation formatting (#1475)
+  * use CMAKE_INSTALL_FULL in pkg-config file (#1473)
+  * Link error when use as static library on windows. (#1470)
+  * add debug option for enabling more output for failed cxxfeaturechecks 
(#1467)
+  * FIx typo in benchmark.h (#1465)
+  * run ClearRegisteredBenchmarks at exit (#1463)
+  * Avoid deprecation warning in NVHPC (#1459)
+  * Ensure we don't need benchmark installed to pass c++ feature checks (#1456)
+  * Explicitly cast int literals to int8_t in tests to silence 
implicit-conversion warnings (#1455)
+  * Fixed build issues on window (#1449)
+  * remove unnecessary generated include directory (#1451)
+  * Initialize help hook before actually parsing the command line (#1447)
+  * Remove stray comment and added missing header (#1444)
+
+-------------------------------------------------------------------

Old:
----
  benchmark-1.7.0.obscpio

New:
----
  benchmark-1.7.1.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ benchmark.spec ++++++
--- /var/tmp/diff_new_pack.3TQ9GM/_old  2022-12-07 17:35:37.980758591 +0100
+++ /var/tmp/diff_new_pack.3TQ9GM/_new  2022-12-07 17:35:37.984758612 +0100
@@ -19,7 +19,7 @@
 %define soname  lib%{name}
 %define sover   1
 Name:           benchmark
-Version:        1.7.0
+Version:        1.7.1
 Release:        0
 Summary:        A microbenchmark support library
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.3TQ9GM/_old  2022-12-07 17:35:38.016758788 +0100
+++ /var/tmp/diff_new_pack.3TQ9GM/_new  2022-12-07 17:35:38.020758810 +0100
@@ -1,7 +1,7 @@
 <services>
   <service name="obs_scm" mode="disabled">
-    <param name="revision">v1.7.0</param>
-    <param name="versionformat">1.7.0</param>
+    <param name="revision">v1.7.1</param>
+    <param name="versionformat">1.7.1</param>
     <param name="url">https://github.com/google/benchmark.git</param>
     <param name="scm">git</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.3TQ9GM/_old  2022-12-07 17:35:38.040758920 +0100
+++ /var/tmp/diff_new_pack.3TQ9GM/_new  2022-12-07 17:35:38.040758920 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/google/benchmark.git</param>
-              <param 
name="changesrevision">361e8d1cfe0c6c36d30b39f1b61302ece5507320</param></service></servicedata>
+              <param 
name="changesrevision">d572f4777349d43653b21d6c2fc63020ab326db2</param></service></servicedata>
 (No newline at EOF)
 

++++++ benchmark-1.7.0.obscpio -> benchmark-1.7.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/AUTHORS new/benchmark-1.7.1/AUTHORS
--- old/benchmark-1.7.0/AUTHORS 2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/AUTHORS 2022-11-11 15:01:03.000000000 +0100
@@ -50,7 +50,9 @@
 Oleksandr Sochka <[email protected]>
 Ori Livneh <[email protected]>
 Paul Redmond <[email protected]>
+Raghu Raja <[email protected]>
 Radoslav Yovchev <[email protected]>
+Rainer Orth <[email protected]>
 Roman Lebedev <[email protected]>
 Sayan Bhattacharjee <[email protected]>
 Shapr3D <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/BUILD.bazel 
new/benchmark-1.7.1/BUILD.bazel
--- old/benchmark-1.7.0/BUILD.bazel     2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/BUILD.bazel     2022-11-11 15:01:03.000000000 +0100
@@ -18,6 +18,14 @@
     visibility = [":__subpackages__"],
 )
 
+config_setting(
+    name = "perfcounters",
+    define_values = {
+        "pfm": "1",
+    },
+    visibility = [":__subpackages__"],
+)
+
 cc_library(
     name = "benchmark",
     srcs = glob(
@@ -29,7 +37,7 @@
     ),
     hdrs = [
         "include/benchmark/benchmark.h",
-        "include/benchmark/export.h", # From generate_export_header
+        "include/benchmark/export.h",
     ],
     linkopts = select({
         ":windows": ["-DEFAULTLIB:shlwapi.lib"],
@@ -41,13 +49,22 @@
     # Using `defines` (i.e. not `local_defines`) means that no
     # dependent rules need to bother about defining the macro.
     linkstatic = True,
-    defines = ["BENCHMARK_STATIC_DEFINE"],
+    defines = [
+        "BENCHMARK_STATIC_DEFINE",
+    ] + select({
+        ":perfcounters": ["HAVE_LIBPFM"],
+        "//conditions:default": [],
+    }),
+    deps = select({
+        ":perfcounters": ["@libpfm//:libpfm"],
+        "//conditions:default": [],
+    }),
 )
 
 cc_library(
     name = "benchmark_main",
     srcs = ["src/benchmark_main.cc"],
-    hdrs = ["include/benchmark/benchmark.h"],
+    hdrs = ["include/benchmark/benchmark.h", "include/benchmark/export.h"],
     strip_include_prefix = "include",
     visibility = ["//visibility:public"],
     deps = [":benchmark"],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/CMakeLists.txt 
new/benchmark-1.7.1/CMakeLists.txt
--- old/benchmark-1.7.0/CMakeLists.txt  2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/CMakeLists.txt  2022-11-11 15:01:03.000000000 +0100
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 3.5.1)
+cmake_minimum_required (VERSION 3.16.3)
 
 foreach(p
     CMP0048 # OK to clear PROJECT_VERSION on project()
@@ -6,6 +6,7 @@
     CMP0056 # export EXE_LINKER_FLAGS to try_run
     CMP0057 # Support no if() IN_LIST operator
     CMP0063 # Honor visibility properties for all targets
+    CMP0067 # Honor language standard in try_compile() source file signature
     CMP0077 # Allow option() overrides in importing projects
     )
   if(POLICY ${p})
@@ -13,7 +14,7 @@
   endif()
 endforeach()
 
-project (benchmark VERSION 1.7.0 LANGUAGES CXX)
+project (benchmark VERSION 1.7.1 LANGUAGES CXX)
 
 option(BENCHMARK_ENABLE_TESTING "Enable testing of the benchmark library." ON)
 option(BENCHMARK_ENABLE_EXCEPTIONS "Enable the use of exceptions in the 
benchmark library." ON)
@@ -138,6 +139,16 @@
 endif()
 
 if (MSVC)
+  set(BENCHMARK_CXX_STANDARD 14)
+else()
+  set(BENCHMARK_CXX_STANDARD 11)
+endif()
+
+set(CMAKE_CXX_STANDARD ${BENCHMARK_CXX_STANDARD})
+set(CMAKE_CXX_STANDARD_REQUIRED YES)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+if (MSVC)
   # Turn compiler warnings up to 11
   string(REGEX REPLACE "[-/]W[1-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
@@ -169,13 +180,6 @@
     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
-  # configurations.
-  add_cxx_compiler_flag(-std=c++11)
-  if (NOT HAVE_CXX_FLAG_STD_CXX11)
-    add_cxx_compiler_flag(-std=c++0x)
-  endif()
-
   # Turn compiler warnings up to 11
   add_cxx_compiler_flag(-Wall)
   add_cxx_compiler_flag(-Wextra)
@@ -223,7 +227,7 @@
   add_cxx_compiler_flag(-wd654)
   add_cxx_compiler_flag(-Wthread-safety)
   if (HAVE_CXX_FLAG_WTHREAD_SAFETY)
-    cxx_feature_check(THREAD_SAFETY_ATTRIBUTES)
+    cxx_feature_check(THREAD_SAFETY_ATTRIBUTES 
"-DINCLUDE_DIRECTORIES=${PROJECT_SOURCE_DIR}/include")
   endif()
 
   # On most UNIX like platforms g++ and clang++ define _GNU_SOURCE as a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/CONTRIBUTORS 
new/benchmark-1.7.1/CONTRIBUTORS
--- old/benchmark-1.7.0/CONTRIBUTORS    2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/CONTRIBUTORS    2022-11-11 15:01:03.000000000 +0100
@@ -73,6 +73,8 @@
 Paul Redmond <[email protected]>
 Pierre Phaneuf <[email protected]>
 Radoslav Yovchev <[email protected]>
+Rainer Orth <[email protected]>
+Raghu Raja <[email protected]>
 Raul Marin <[email protected]>
 Ray Glover <[email protected]>
 Robert Guo <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/WORKSPACE 
new/benchmark-1.7.1/WORKSPACE
--- old/benchmark-1.7.0/WORKSPACE       2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/WORKSPACE       2022-11-11 15:01:03.000000000 +0100
@@ -3,6 +3,27 @@
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
 
+
+http_archive(
+    name = "bazel_skylib",
+    urls = [
+        
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz";,
+        
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz";,
+    ],
+    sha256 = 
"f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728",
+)
+
+# https://github.com/bazelbuild/rules_foreign_cc/
+http_archive(
+    name = "rules_foreign_cc",
+    sha256 = 
"bcd0c5f46a49b85b384906daae41d277b3dc0ff27c7c752cc51e43048a58ec83",
+    strip_prefix = "rules_foreign_cc-0.7.1",
+    url = 
"https://github.com/bazelbuild/rules_foreign_cc/archive/0.7.1.tar.gz";,
+)
+
+load("@rules_foreign_cc//foreign_cc:repositories.bzl", 
"rules_foreign_cc_dependencies")
+rules_foreign_cc_dependencies()
+
 http_archive(
     name = "com_google_absl",
     sha256 = 
"f41868f7a938605c92936230081175d1eae87f6ea2c248f41077c8f88316f111",
@@ -16,12 +37,22 @@
     tag = "release-1.11.0",
 )
 
+# Downloaded from v4.9.0 tag at 
https://sourceforge.net/p/perfmon2/libpfm4/ref/master/tags/
+http_archive(
+    name = "libpfm",
+    build_file = "//tools:libpfm.BUILD.bazel",
+    sha256 = 
"5da5f8872bde14b3634c9688d980f68bda28b510268723cc12973eedbab9fecc",
+    type = "tar.gz",
+    strip_prefix = "libpfm-4.11.0",
+    urls = 
["https://sourceforge.net/projects/perfmon2/files/libpfm4/libpfm-4.11.0.tar.gz/download";],
+)
+
 http_archive(
     name = "pybind11",
     build_file = "@//bindings/python:pybind11.BUILD",
-    sha256 = 
"1eed57bc6863190e35637290f97a20c81cfe4d9090ac0a24f3bbf08f265eb71d",
-    strip_prefix = "pybind11-2.4.3",
-    urls = ["https://github.com/pybind/pybind11/archive/v2.4.3.tar.gz";],
+    sha256 = 
"eacf582fa8f696227988d08cfc46121770823839fe9e301a20fbce67e7cd70ec",
+    strip_prefix = "pybind11-2.10.0",
+    urls = ["https://github.com/pybind/pybind11/archive/v2.10.0.tar.gz";],
 )
 
 new_local_repository(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/benchmark-1.7.0/bindings/python/google_benchmark/__init__.py 
new/benchmark-1.7.1/bindings/python/google_benchmark/__init__.py
--- old/benchmark-1.7.0/bindings/python/google_benchmark/__init__.py    
2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/bindings/python/google_benchmark/__init__.py    
2022-11-11 15:01:03.000000000 +0100
@@ -26,6 +26,7 @@
   if __name__ == '__main__':
     benchmark.main()
 """
+import atexit
 
 from absl import app
 from google_benchmark import _benchmark
@@ -68,7 +69,7 @@
     "State",
 ]
 
-__version__ = "1.7.0"
+__version__ = "1.7.1"
 
 
 class __OptionMaker:
@@ -158,3 +159,4 @@
 # Methods for use with custom main function.
 initialize = _benchmark.Initialize
 run_benchmarks = _benchmark.RunSpecifiedBenchmarks
+atexit.register(_benchmark.ClearRegisteredBenchmarks)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/benchmark-1.7.0/bindings/python/google_benchmark/benchmark.cc 
new/benchmark-1.7.1/bindings/python/google_benchmark/benchmark.cc
--- old/benchmark-1.7.0/bindings/python/google_benchmark/benchmark.cc   
2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/bindings/python/google_benchmark/benchmark.cc   
2022-11-11 15:01:03.000000000 +0100
@@ -179,5 +179,6 @@
         py::return_value_policy::reference);
   m.def("RunSpecifiedBenchmarks",
         []() { benchmark::RunSpecifiedBenchmarks(); });
+  m.def("ClearRegisteredBenchmarks", benchmark::ClearRegisteredBenchmarks);
 };
 }  // namespace
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/cmake/CXXFeatureCheck.cmake 
new/benchmark-1.7.1/cmake/CXXFeatureCheck.cmake
--- old/benchmark-1.7.0/cmake/CXXFeatureCheck.cmake     2022-07-25 
13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/cmake/CXXFeatureCheck.cmake     2022-11-11 
15:01:03.000000000 +0100
@@ -17,6 +17,8 @@
 endif()
 set(__cxx_feature_check INCLUDED)
 
+option(CXXFEATURECHECK_DEBUG OFF)
+
 function(cxx_feature_check FILE)
   string(TOLOWER ${FILE} FILE)
   string(TOUPPER ${FILE} VAR)
@@ -27,17 +29,18 @@
     return()
   endif()
 
+  set(FEATURE_CHECK_CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})
   if (ARGC GREATER 1)
     message(STATUS "Enabling additional flags: ${ARGV1}")
-    list(APPEND BENCHMARK_CXX_LINKER_FLAGS ${ARGV1})
+    list(APPEND FEATURE_CHECK_CMAKE_FLAGS ${ARGV1})
   endif()
 
   if (NOT DEFINED COMPILE_${FEATURE})
-    message(STATUS "Performing Test ${FEATURE}")
     if(CMAKE_CROSSCOMPILING)
+      message(STATUS "Cross-compiling to test ${FEATURE}")
       try_compile(COMPILE_${FEATURE}
               ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp
-              CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS}
+              CMAKE_FLAGS ${FEATURE_CHECK_CMAKE_FLAGS}
               LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES}
               OUTPUT_VARIABLE COMPILE_OUTPUT_VAR)
       if(COMPILE_${FEATURE})
@@ -48,10 +51,10 @@
         set(RUN_${FEATURE} 1 CACHE INTERNAL "")
       endif()
     else()
-      message(STATUS "Performing Test ${FEATURE}")
+      message(STATUS "Compiling and running to test ${FEATURE}")
       try_run(RUN_${FEATURE} COMPILE_${FEATURE}
               ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp
-              CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS}
+              CMAKE_FLAGS ${FEATURE_CHECK_CMAKE_FLAGS}
               LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES}
               COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT_VAR)
     endif()
@@ -63,7 +66,11 @@
     add_definitions(-DHAVE_${VAR})
   else()
     if(NOT COMPILE_${FEATURE})
-      message(STATUS "Performing Test ${FEATURE} -- failed to compile: 
${COMPILE_OUTPUT_VAR}")
+      if(CXXFEATURECHECK_DEBUG)
+        message(STATUS "Performing Test ${FEATURE} -- failed to compile: 
${COMPILE_OUTPUT_VAR}")
+      else()
+        message(STATUS "Performing Test ${FEATURE} -- failed to compile")
+      endif()
     else()
       message(STATUS "Performing Test ${FEATURE} -- compiled but failed to 
run")
     endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/cmake/benchmark.pc.in 
new/benchmark-1.7.1/cmake/benchmark.pc.in
--- old/benchmark-1.7.0/cmake/benchmark.pc.in   2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/cmake/benchmark.pc.in   2022-11-11 15:01:03.000000000 
+0100
@@ -1,7 +1,7 @@
 prefix=@CMAKE_INSTALL_PREFIX@
 exec_prefix=${prefix}
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
 
 Name: @PROJECT_NAME@
 Description: Google microbenchmark framework
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/docs/dependencies.md 
new/benchmark-1.7.1/docs/dependencies.md
--- old/benchmark-1.7.0/docs/dependencies.md    2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/docs/dependencies.md    2022-11-11 15:01:03.000000000 
+0100
@@ -7,13 +7,15 @@
 * The last two Ubuntu LTS releases
 
 Currently, this means using build tool versions that are available for Ubuntu
-18.04 (Bionic Beaver), Ubuntu 20.04 (Focal Fossa), and Debian 11 (bullseye).
+Ubuntu 20.04 (Focal Fossa), Ubuntu 22.04 (Jammy Jellyfish) and Debian 11.4 
(bullseye).
 
-_Note, CI also runs ubuntu-16.04 and ubuntu-14.04 to ensure best effort support
-for older versions._
+_Note, CI also runs ubuntu-18.04 to attempt best effort support for older 
versions._
 
 ## cmake
-The current supported version is cmake 3.5.1 as of 2018-06-06.
+The current supported version is cmake 3.16.3 as of 2022-08-10.
+
+* _3.10.2 (ubuntu 18.04)_
+* 3.16.3 (ubuntu 20.04)
+* 3.18.4 (debian 11.4)
+* 3.22.1 (ubuntu 22.04)
 
-_Note, this version is also available for Ubuntu 14.04, an older Ubuntu LTS
-release, as `cmake3`._
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/docs/perf_counters.md 
new/benchmark-1.7.1/docs/perf_counters.md
--- old/benchmark-1.7.0/docs/perf_counters.md   2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/docs/perf_counters.md   2022-11-11 15:01:03.000000000 
+0100
@@ -12,16 +12,17 @@
 * The benchmark is run on an architecture featuring a Performance Monitoring
   Unit (PMU),
 * The benchmark is compiled with support for collecting counters. Currently,
-  this requires [libpfm](http://perfmon2.sourceforge.net/) be available at 
build
-  time
+  this requires [libpfm](http://perfmon2.sourceforge.net/), which is built as a
+  dependency via Bazel.
 
 The feature does not require modifying benchmark code. Counter collection is
 handled at the boundaries where timer collection is also handled. 
 
 To opt-in:
-
-*  Install `libpfm4-dev`, e.g. `apt-get install libpfm4-dev`.
-*  Enable the cmake flag BENCHMARK_ENABLE_LIBPFM.
+* If using a Bazel build, add `--define pfm=1` to your buid flags
+* If using CMake:
+  * Install `libpfm4-dev`, e.g. `apt-get install libpfm4-dev`.
+  * Enable the CMake flag `BENCHMARK_ENABLE_LIBPFM` in `CMakeLists.txt`.
 
 To use, pass a comma-separated list of counter names through the
 `--benchmark_perf_counters` flag. The names are decoded through libpfm - 
meaning,
@@ -31,4 +32,4 @@
 
 The counter values are reported back through the [User 
Counters](../README.md#custom-counters)
 mechanism, meaning, they are available in all the formats (e.g. JSON) supported
-by User Counters.
\ No newline at end of file
+by User Counters.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/docs/reducing_variance.md 
new/benchmark-1.7.1/docs/reducing_variance.md
--- old/benchmark-1.7.0/docs/reducing_variance.md       1970-01-01 
01:00:00.000000000 +0100
+++ new/benchmark-1.7.1/docs/reducing_variance.md       2022-11-11 
15:01:03.000000000 +0100
@@ -0,0 +1,100 @@
+# Reducing Variance
+
+<a name="disabling-cpu-frequency-scaling" />
+
+## Disabling CPU Frequency Scaling
+
+If you see this error:
+
+```
+***WARNING*** CPU scaling is enabled, the benchmark real time measurements may 
be noisy and will incur extra overhead.
+```
+
+you might want to disable the CPU frequency scaling while running the
+benchmark, as well as consider other ways to stabilize the performance of
+your system while benchmarking.
+
+See [Reducing Variance](reducing_variance.md) for more information.
+
+Exactly how to do this depends on the Linux distribution,
+desktop environment, and installed programs.  Specific details are a moving
+target, so we will not attempt to exhaustively document them here.
+
+One simple option is to use the `cpupower` program to change the
+performance governor to "performance".  This tool is maintained along with
+the Linux kernel and provided by your distribution.
+
+It must be run as root, like this:
+
+```bash
+sudo cpupower frequency-set --governor performance
+```
+
+After this you can verify that all CPUs are using the performance governor
+by running this command:
+
+```bash
+cpupower frequency-info -o proc
+```
+
+The benchmarks you subsequently run will have less variance.
+
+<a name="reducing-variance" />
+
+## Reducing Variance in Benchmarks
+
+The Linux CPU frequency governor [discussed
+above](user_guide#disabling-cpu-frequency-scaling) is not the only source
+of noise in benchmarks.  Some, but not all, of the sources of variance
+include:
+
+1. On multi-core machines not all CPUs/CPU cores/CPU threads run the same
+   speed, so running a benchmark one time and then again may give a
+   different result depending on which CPU it ran on.
+2. CPU scaling features that run on the CPU, like Intel's Turbo Boost and
+   AMD Turbo Core and Precision Boost, can temporarily change the CPU
+   frequency even when the using the "performance" governor on Linux.
+3. Context switching between CPUs, or scheduling competition on the CPU the
+   benchmark is running on.
+4. Intel Hyperthreading or AMD SMT causing the same issue as above.
+5. Cache effects caused by code running on other CPUs.
+6. Non-uniform memory architectures (NUMA).
+
+These can cause variance in benchmarks results within a single run
+(`--benchmark_repetitions=N`) or across multiple runs of the benchmark
+program.
+
+Reducing sources of variance is OS and architecture dependent, which is one
+reason some companies maintain machines dedicated to performance testing.
+
+Some of the easier and and effective ways of reducing variance on a typical
+Linux workstation are:
+
+1. Use the performance governer as [discussed
+above](user_guide#disabling-cpu-frequency-scaling).
+1. Disable processor boosting by:
+   ```sh
+   echo 0 | sudo tee /sys/devices/system/cpu/cpufreq/boost
+   ```
+   See the Linux kernel's
+   [boost.txt](https://www.kernel.org/doc/Documentation/cpu-freq/boost.txt)
+   for more information.
+2. Set the benchmark program's task affinity to a fixed cpu.  For example:
+   ```sh
+   taskset -c 0 ./mybenchmark
+   ```
+3. Disabling Hyperthreading/SMT.  This can be done in the Bios or using the
+   `/sys` file system (see the LLVM project's [Benchmarking
+   tips](https://llvm.org/docs/Benchmarking.html)).
+4. Close other programs that do non-trivial things based on timers, such as
+   your web browser, desktop environment, etc.
+5. Reduce the working set of your benchmark to fit within the L1 cache, but
+   do be aware that this may lead you to optimize for an unrelistic
+   situation.
+
+Further resources on this topic:
+
+1. The LLVM project's [Benchmarking
+   tips](https://llvm.org/docs/Benchmarking.html).
+1. The Arch Wiki [Cpu frequency
+scaling](https://wiki.archlinux.org/title/CPU_frequency_scaling) page.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/docs/user_guide.md 
new/benchmark-1.7.1/docs/user_guide.md
--- old/benchmark-1.7.0/docs/user_guide.md      2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/docs/user_guide.md      2022-11-11 15:01:03.000000000 
+0100
@@ -58,8 +58,11 @@
 
 [A Faster KeepRunning Loop](#a-faster-keep-running-loop)
 
+## Benchmarking Tips
+
 [Disabling CPU Frequency Scaling](#disabling-cpu-frequency-scaling)
 
+[Reducing Variance in Benchmarks](reducing_variance.md)
 
 <a name="output-formats" />
 
@@ -1243,35 +1246,7 @@
 ```
 
 you might want to disable the CPU frequency scaling while running the
-benchmark.  Exactly how to do this depends on the Linux distribution,
-desktop environment, and installed programs.  Specific details are a moving
-target, so we will not attempt to exhaustively document them here.
-
-One simple option is to use the `cpupower` program to change the
-performance governor to "performance".  This tool is maintained along with
-the Linux kernel and provided by your distribution.
-
-It must be run as root, like this:
-
-```bash
-sudo cpupower frequency-set --governor performance
-```
-
-After this you can verify that all CPUs are using the performance governor
-by running this command:
-
-```bash
-cpupower frequency-info -o proc
-```
-
-The benchmarks you subsequently run will have less variance.
-
-Note that changing the governor in this way will not persist across
-reboots.  To set the governor back, run the first command again with the
-governor your system usually runs with, which varies.
+benchmark, as well as consider other ways to stabilize the performance of
+your system while benchmarking.
 
-If you find yourself doing this often, there are probably better options
-than running the commands above.  Some approaches allow you to do this
-without root access, or by using a GUI, etc.  The Arch Wiki [Cpu frequency
-scaling](https://wiki.archlinux.org/title/CPU_frequency_scaling) page is a
-good place to start looking for options.
+See [Reducing Variance](reducing_variance.md) for more information.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/include/benchmark/benchmark.h 
new/benchmark-1.7.1/include/benchmark/benchmark.h
--- old/benchmark-1.7.0/include/benchmark/benchmark.h   2022-07-25 
13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/include/benchmark/benchmark.h   2022-11-11 
15:01:03.000000000 +0100
@@ -220,29 +220,18 @@
 
 #if defined(__GNUC__) || defined(__clang__)
 #define BENCHMARK_ALWAYS_INLINE __attribute__((always_inline))
-#define BENCHMARK_NOEXCEPT noexcept
-#define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
 #elif defined(_MSC_VER) && !defined(__clang__)
 #define BENCHMARK_ALWAYS_INLINE __forceinline
-#if _MSC_VER >= 1900
-#define BENCHMARK_NOEXCEPT noexcept
-#define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
-#else
-#define BENCHMARK_NOEXCEPT
-#define BENCHMARK_NOEXCEPT_OP(x)
-#endif
 #define __func__ __FUNCTION__
 #else
 #define BENCHMARK_ALWAYS_INLINE
-#define BENCHMARK_NOEXCEPT
-#define BENCHMARK_NOEXCEPT_OP(x)
 #endif
 
 #define BENCHMARK_INTERNAL_TOSTRING2(x) #x
 #define BENCHMARK_INTERNAL_TOSTRING(x) BENCHMARK_INTERNAL_TOSTRING2(x)
 
 // clang-format off
-#if defined(__GNUC__) || defined(__clang__)
+#if defined(__GNUC__) && !defined(__NVCC__) || defined(__clang__)
 #define BENCHMARK_BUILTIN_EXPECT(x, y) __builtin_expect(x, y)
 #define BENCHMARK_DEPRECATED_MSG(msg) __attribute__((deprecated(msg)))
 #define BENCHMARK_DISABLE_DEPRECATED_WARNING \
@@ -417,6 +406,8 @@
 class BenchmarkImp;
 class BenchmarkFamilies;
 
+BENCHMARK_EXPORT std::map<std::string, std::string>*& GetGlobalContext();
+
 BENCHMARK_EXPORT
 void UseCharPointer(char const volatile*);
 
@@ -1116,7 +1107,7 @@
   // By default, the CPU time is measured only for the main thread, which may
   // be unrepresentative if the benchmark uses threads internally. If called,
   // the total CPU time spent by all the threads will be measured instead.
-  // By default, the only the main thread CPU time will be measured.
+  // By default, only the main thread CPU time will be measured.
   Benchmark* MeasureProcessCPUTime();
 
   // If a particular benchmark should use the Wall clock instead of the CPU 
time
@@ -1543,8 +1534,15 @@
 #endif
 
 // Helper macro to create a main routine in a test that runs the benchmarks
+// Note the workaround for Hexagon simulator passing argc != 0, argv = NULL.
 #define BENCHMARK_MAIN()                                                \
   int main(int argc, char** argv) {                                     \
+    char arg0_default[] = "benchmark";                                  \
+    char* args_default = arg0_default;                                  \
+    if (!argv) {                                                        \
+      argc = 1;                                                         \
+      argv = &args_default;                                             \
+    }                                                                   \
     ::benchmark::Initialize(&argc, argv);                               \
     if (::benchmark::ReportUnrecognizedArguments(argc, argv)) return 1; \
     ::benchmark::RunSpecifiedBenchmarks();                              \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/requirements.txt 
new/benchmark-1.7.1/requirements.txt
--- old/benchmark-1.7.0/requirements.txt        2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/requirements.txt        2022-11-11 15:01:03.000000000 
+0100
@@ -1,3 +1,2 @@
 numpy == 1.22
 scipy == 1.5.4
-pandas == 1.1.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/setup.py new/benchmark-1.7.1/setup.py
--- old/benchmark-1.7.0/setup.py        2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/setup.py        2022-11-11 15:01:03.000000000 +0100
@@ -147,9 +147,11 @@
         "Intended Audience :: Developers",
         "Intended Audience :: Science/Research",
         "License :: OSI Approved :: Apache Software License",
-        "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
         "Programming Language :: Python :: 3.8",
+        "Programming Language :: Python :: 3.9",
+        "Programming Language :: Python :: 3.10",
+        "Programming Language :: Python :: 3.11",
         "Topic :: Software Development :: Testing",
         "Topic :: System :: Benchmark",
     ],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/CMakeLists.txt 
new/benchmark-1.7.1/src/CMakeLists.txt
--- old/benchmark-1.7.0/src/CMakeLists.txt      2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/CMakeLists.txt      2022-11-11 15:01:03.000000000 
+0100
@@ -26,7 +26,6 @@
 )
 target_include_directories(benchmark PUBLIC
   $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
-  $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
 )
 
 # libpfm, if available
@@ -56,7 +55,7 @@
 endif()
 
 if (NOT BUILD_SHARED_LIBS)
-  target_compile_definitions(benchmark PRIVATE -DBENCHMARK_STATIC_DEFINE)
+  target_compile_definitions(benchmark PUBLIC -DBENCHMARK_STATIC_DEFINE)
 endif()
 
 # Benchmark main library
@@ -70,7 +69,6 @@
 )
 target_link_libraries(benchmark_main PUBLIC benchmark::benchmark)
 
-
 set(generated_dir "${PROJECT_BINARY_DIR}")
 
 set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/benchmark.cc 
new/benchmark-1.7.1/src/benchmark.cc
--- old/benchmark-1.7.0/src/benchmark.cc        2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/benchmark.cc        2022-11-11 15:01:03.000000000 
+0100
@@ -19,7 +19,7 @@
 #include "internal_macros.h"
 
 #ifndef BENCHMARK_OS_WINDOWS
-#ifndef BENCHMARK_OS_FUCHSIA
+#if !defined(BENCHMARK_OS_FUCHSIA) && !defined(BENCHMARK_OS_QURT)
 #include <sys/resource.h>
 #endif
 #include <sys/time.h>
@@ -137,7 +137,11 @@
 
 namespace internal {
 
-BENCHMARK_EXPORT std::map<std::string, std::string>* global_context = nullptr;
+std::map<std::string, std::string>* global_context = nullptr;
+
+BENCHMARK_EXPORT std::map<std::string, std::string>*& GetGlobalContext() {
+  return global_context;
+}
 
 // FIXME: wouldn't LTO mess this up?
 void UseCharPointer(char const volatile*) {}
@@ -178,7 +182,7 @@
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Winvalid-offsetof"
 #endif
-#if defined(__CUDACC__)
+#if defined(__NVCC__)
 #pragma nv_diagnostic push
 #pragma nv_diag_suppress 1427
 #endif
@@ -192,7 +196,7 @@
 #elif defined(__GNUC__)
 #pragma GCC diagnostic pop
 #endif
-#if defined(__CUDACC__)
+#if defined(__NVCC__)
 #pragma nv_diagnostic pop
 #endif
 }
@@ -678,9 +682,9 @@
 }
 
 void Initialize(int* argc, char** argv, void (*HelperPrintf)()) {
+  internal::HelperPrintf = HelperPrintf;
   internal::ParseCommandLineFlags(argc, argv);
   internal::LogLevel() = FLAGS_v;
-  internal::HelperPrintf = HelperPrintf;
 }
 
 void Shutdown() { delete internal::global_context; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/benchmark_name.cc 
new/benchmark-1.7.1/src/benchmark_name.cc
--- old/benchmark-1.7.0/src/benchmark_name.cc   2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/benchmark_name.cc   2022-11-11 15:01:03.000000000 
+0100
@@ -51,6 +51,7 @@
 }
 }  // namespace
 
+BENCHMARK_EXPORT
 std::string BenchmarkName::str() const {
   return join('/', function_name, args, min_time, min_warmup_time, iterations,
               repetitions, time_type, threads);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/benchmark_register.cc 
new/benchmark-1.7.1/src/benchmark_register.cc
--- old/benchmark-1.7.0/src/benchmark_register.cc       2022-07-25 
13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/src/benchmark_register.cc       2022-11-11 
15:01:03.000000000 +0100
@@ -15,7 +15,7 @@
 #include "benchmark_register.h"
 
 #ifndef BENCHMARK_OS_WINDOWS
-#ifndef BENCHMARK_OS_FUCHSIA
+#if !defined(BENCHMARK_OS_FUCHSIA) && !defined(BENCHMARK_OS_QURT)
 #include <sys/resource.h>
 #endif
 #include <sys/time.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/benchmark_register.h 
new/benchmark-1.7.1/src/benchmark_register.h
--- old/benchmark-1.7.0/src/benchmark_register.h        2022-07-25 
13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/src/benchmark_register.h        2022-11-11 
15:01:03.000000000 +0100
@@ -1,6 +1,7 @@
 #ifndef BENCHMARK_REGISTER_H
 #define BENCHMARK_REGISTER_H
 
+#include <algorithm>
 #include <limits>
 #include <vector>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/benchmark_runner.cc 
new/benchmark-1.7.1/src/benchmark_runner.cc
--- old/benchmark-1.7.0/src/benchmark_runner.cc 2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/benchmark_runner.cc 2022-11-11 15:01:03.000000000 
+0100
@@ -19,7 +19,7 @@
 #include "internal_macros.h"
 
 #ifndef BENCHMARK_OS_WINDOWS
-#ifndef BENCHMARK_OS_FUCHSIA
+#if !defined(BENCHMARK_OS_FUCHSIA) && !defined(BENCHMARK_OS_QURT)
 #include <sys/resource.h>
 #endif
 #include <sys/time.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/check.cc 
new/benchmark-1.7.1/src/check.cc
--- old/benchmark-1.7.0/src/check.cc    2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/src/check.cc    2022-11-11 15:01:03.000000000 +0100
@@ -5,7 +5,7 @@
 
 static AbortHandlerT* handler = &std::abort;
 
-AbortHandlerT*& GetAbortHandler() { return handler; }
+BENCHMARK_EXPORT AbortHandlerT*& GetAbortHandler() { return handler; }
 
 }  // namespace internal
 }  // namespace benchmark
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/check.h 
new/benchmark-1.7.1/src/check.h
--- old/benchmark-1.7.0/src/check.h     2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/src/check.h     2022-11-11 15:01:03.000000000 +0100
@@ -9,6 +9,23 @@
 #include "internal_macros.h"
 #include "log.h"
 
+#if defined(__GNUC__) || defined(__clang__)
+#define BENCHMARK_NOEXCEPT noexcept
+#define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
+#elif defined(_MSC_VER) && !defined(__clang__)
+#if _MSC_VER >= 1900
+#define BENCHMARK_NOEXCEPT noexcept
+#define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
+#else
+#define BENCHMARK_NOEXCEPT
+#define BENCHMARK_NOEXCEPT_OP(x)
+#endif
+#define __func__ __FUNCTION__
+#else
+#define BENCHMARK_NOEXCEPT
+#define BENCHMARK_NOEXCEPT_OP(x)
+#endif
+
 namespace benchmark {
 namespace internal {
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/commandlineflags.cc 
new/benchmark-1.7.1/src/commandlineflags.cc
--- old/benchmark-1.7.0/src/commandlineflags.cc 2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/commandlineflags.cc 2022-11-11 15:01:03.000000000 
+0100
@@ -121,12 +121,14 @@
 
 }  // namespace
 
+BENCHMARK_EXPORT
 bool BoolFromEnv(const char* flag, bool default_val) {
   const std::string env_var = FlagToEnvVar(flag);
   const char* const value_str = getenv(env_var.c_str());
   return value_str == nullptr ? default_val : IsTruthyFlagValue(value_str);
 }
 
+BENCHMARK_EXPORT
 int32_t Int32FromEnv(const char* flag, int32_t default_val) {
   const std::string env_var = FlagToEnvVar(flag);
   const char* const value_str = getenv(env_var.c_str());
@@ -139,6 +141,7 @@
   return value;
 }
 
+BENCHMARK_EXPORT
 double DoubleFromEnv(const char* flag, double default_val) {
   const std::string env_var = FlagToEnvVar(flag);
   const char* const value_str = getenv(env_var.c_str());
@@ -151,12 +154,14 @@
   return value;
 }
 
+BENCHMARK_EXPORT
 const char* StringFromEnv(const char* flag, const char* default_val) {
   const std::string env_var = FlagToEnvVar(flag);
   const char* const value = getenv(env_var.c_str());
   return value == nullptr ? default_val : value;
 }
 
+BENCHMARK_EXPORT
 std::map<std::string, std::string> KvPairsFromEnv(
     const char* flag, std::map<std::string, std::string> default_val) {
   const std::string env_var = FlagToEnvVar(flag);
@@ -201,6 +206,7 @@
   return flag_end + 1;
 }
 
+BENCHMARK_EXPORT
 bool ParseBoolFlag(const char* str, const char* flag, bool* value) {
   // Gets the value of the flag as a string.
   const char* const value_str = ParseFlagValue(str, flag, true);
@@ -213,6 +219,7 @@
   return true;
 }
 
+BENCHMARK_EXPORT
 bool ParseInt32Flag(const char* str, const char* flag, int32_t* value) {
   // Gets the value of the flag as a string.
   const char* const value_str = ParseFlagValue(str, flag, false);
@@ -225,6 +232,7 @@
                     value);
 }
 
+BENCHMARK_EXPORT
 bool ParseDoubleFlag(const char* str, const char* flag, double* value) {
   // Gets the value of the flag as a string.
   const char* const value_str = ParseFlagValue(str, flag, false);
@@ -237,6 +245,7 @@
                      value);
 }
 
+BENCHMARK_EXPORT
 bool ParseStringFlag(const char* str, const char* flag, std::string* value) {
   // Gets the value of the flag as a string.
   const char* const value_str = ParseFlagValue(str, flag, false);
@@ -248,6 +257,7 @@
   return true;
 }
 
+BENCHMARK_EXPORT
 bool ParseKeyValueFlag(const char* str, const char* flag,
                        std::map<std::string, std::string>* value) {
   const char* const value_str = ParseFlagValue(str, flag, false);
@@ -263,10 +273,12 @@
   return true;
 }
 
+BENCHMARK_EXPORT
 bool IsFlag(const char* str, const char* flag) {
   return (ParseFlagValue(str, flag, true) != nullptr);
 }
 
+BENCHMARK_EXPORT
 bool IsTruthyFlagValue(const std::string& value) {
   if (value.size() == 1) {
     char v = value[0];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/console_reporter.cc 
new/benchmark-1.7.1/src/console_reporter.cc
--- old/benchmark-1.7.0/src/console_reporter.cc 2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/console_reporter.cc 2022-11-11 15:01:03.000000000 
+0100
@@ -33,6 +33,7 @@
 
 namespace benchmark {
 
+BENCHMARK_EXPORT
 bool ConsoleReporter::ReportContext(const Context& context) {
   name_field_width_ = context.name_field_width;
   printed_header_ = false;
@@ -52,6 +53,7 @@
   return true;
 }
 
+BENCHMARK_EXPORT
 void ConsoleReporter::PrintHeader(const Run& run) {
   std::string str =
       FormatString("%-*s %13s %15s %12s", static_cast<int>(name_field_width_),
@@ -69,6 +71,7 @@
   GetOutputStream() << line << "\n" << str << "\n" << line << "\n";
 }
 
+BENCHMARK_EXPORT
 void ConsoleReporter::ReportRuns(const std::vector<Run>& reports) {
   for (const auto& run : reports) {
     // print the header:
@@ -120,6 +123,7 @@
   return FormatString("%10.0f", time);
 }
 
+BENCHMARK_EXPORT
 void ConsoleReporter::PrintRunData(const Run& result) {
   typedef void(PrinterFn)(std::ostream&, LogColor, const char*, ...);
   auto& Out = GetOutputStream();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/csv_reporter.cc 
new/benchmark-1.7.1/src/csv_reporter.cc
--- old/benchmark-1.7.0/src/csv_reporter.cc     2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/csv_reporter.cc     2022-11-11 15:01:03.000000000 
+0100
@@ -52,11 +52,13 @@
   return '"' + tmp + '"';
 }
 
+BENCHMARK_EXPORT
 bool CSVReporter::ReportContext(const Context& context) {
   PrintBasicContext(&GetErrorStream(), context);
   return true;
 }
 
+BENCHMARK_EXPORT
 void CSVReporter::ReportRuns(const std::vector<Run>& reports) {
   std::ostream& Out = GetOutputStream();
 
@@ -103,6 +105,7 @@
   }
 }
 
+BENCHMARK_EXPORT
 void CSVReporter::PrintRunData(const Run& run) {
   std::ostream& Out = GetOutputStream();
   Out << CsvEscape(run.benchmark_name()) << ",";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/cycleclock.h 
new/benchmark-1.7.1/src/cycleclock.h
--- old/benchmark-1.7.0/src/cycleclock.h        2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/cycleclock.h        2022-11-11 15:01:03.000000000 
+0100
@@ -212,6 +212,10 @@
   struct timeval tv;
   gettimeofday(&tv, nullptr);
   return static_cast<int64_t>(tv.tv_sec) * 1000000 + tv.tv_usec;
+#elif defined(__hexagon__)
+  uint64_t pcycle;
+  asm volatile("%0 = C15:14" : "=r"(pcycle));
+  return static_cast<double>(pcycle);
 #else
 // The soft failover to a generic implementation is automatic only for ARM.
 // For other platforms the developer is expected to make an attempt to create
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/internal_macros.h 
new/benchmark-1.7.1/src/internal_macros.h
--- old/benchmark-1.7.0/src/internal_macros.h   2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/internal_macros.h   2022-11-11 15:01:03.000000000 
+0100
@@ -1,8 +1,6 @@
 #ifndef BENCHMARK_INTERNAL_MACROS_H_
 #define BENCHMARK_INTERNAL_MACROS_H_
 
-#include "benchmark/benchmark.h"
-
 /* Needed to detect STL */
 #include <cstdlib>
 
@@ -87,6 +85,8 @@
 #define BENCHMARK_OS_QNX 1
 #elif defined(__MVS__)
 #define BENCHMARK_OS_ZOS 1
+#elif defined(__hexagon__)
+#define BENCHMARK_OS_QURT 1
 #endif
 
 #if defined(__ANDROID__) && defined(__GLIBCXX__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/json_reporter.cc 
new/benchmark-1.7.1/src/json_reporter.cc
--- old/benchmark-1.7.0/src/json_reporter.cc    2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/json_reporter.cc    2022-11-11 15:01:03.000000000 
+0100
@@ -28,10 +28,6 @@
 #include "timers.h"
 
 namespace benchmark {
-namespace internal {
-extern std::map<std::string, std::string>* global_context;
-}
-
 namespace {
 
 std::string StrEscape(const std::string& s) {
@@ -178,8 +174,11 @@
 #endif
   out << indent << FormatKV("library_build_type", build_type);
 
-  if (internal::global_context != nullptr) {
-    for (const auto& kv : *internal::global_context) {
+  std::map<std::string, std::string>* global_context =
+      internal::GetGlobalContext();
+
+  if (global_context != nullptr) {
+    for (const auto& kv : *global_context) {
       out << ",\n";
       out << indent << FormatKV(kv.first, kv.second);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/log.h 
new/benchmark-1.7.1/src/log.h
--- old/benchmark-1.7.0/src/log.h       2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/src/log.h       2022-11-11 15:01:03.000000000 +0100
@@ -4,7 +4,12 @@
 #include <iostream>
 #include <ostream>
 
-#include "benchmark/benchmark.h"
+// NOTE: this is also defined in benchmark.h but we're trying to avoid a
+// dependency.
+// The _MSVC_LANG check should detect Visual Studio 2015 Update 3 and newer.
+#if __cplusplus >= 201103L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201103L)
+#define BENCHMARK_HAS_CXX11
+#endif
 
 namespace benchmark {
 namespace internal {
@@ -23,7 +28,16 @@
  private:
   LogType(std::ostream* out) : out_(out) {}
   std::ostream* out_;
-  BENCHMARK_DISALLOW_COPY_AND_ASSIGN(LogType);
+
+  // NOTE: we could use BENCHMARK_DISALLOW_COPY_AND_ASSIGN but we shouldn't 
have
+  // a dependency on benchmark.h from here.
+#ifndef BENCHMARK_HAS_CXX11
+  LogType(const LogType&);
+  LogType& operator=(const LogType&);
+#else
+  LogType(const LogType&) = delete;
+  LogType& operator=(const LogType&) = delete;
+#endif
 };
 
 template <class Tp>
@@ -47,13 +61,13 @@
 }
 
 inline LogType& GetNullLogInstance() {
-  static LogType log(nullptr);
-  return log;
+  static LogType null_log((std::ostream*)nullptr);
+  return null_log;
 }
 
 inline LogType& GetErrorLogInstance() {
-  static LogType log(&std::clog);
-  return log;
+  static LogType error_log(&std::clog);
+  return error_log;
 }
 
 inline LogType& GetLogInstanceForLevel(int level) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/reporter.cc 
new/benchmark-1.7.1/src/reporter.cc
--- old/benchmark-1.7.0/src/reporter.cc 2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/src/reporter.cc 2022-11-11 15:01:03.000000000 +0100
@@ -25,9 +25,6 @@
 #include "timers.h"
 
 namespace benchmark {
-namespace internal {
-extern std::map<std::string, std::string> *global_context;
-}
 
 BenchmarkReporter::BenchmarkReporter()
     : output_stream_(&std::cout), error_stream_(&std::cerr) {}
@@ -39,7 +36,11 @@
   BM_CHECK(out) << "cannot be null";
   auto &Out = *out;
 
+#ifndef BENCHMARK_OS_QURT
+  // Date/time information is not available on QuRT.
+  // Attempting to get it via this call cause the binary to crash.
   Out << LocalDateTimeString() << "\n";
+#endif
 
   if (context.executable_name)
     Out << "Running " << context.executable_name << "\n";
@@ -67,8 +68,11 @@
     Out << "\n";
   }
 
-  if (internal::global_context != nullptr) {
-    for (const auto &kv : *internal::global_context) {
+  std::map<std::string, std::string> *global_context =
+      internal::GetGlobalContext();
+
+  if (global_context != nullptr) {
+    for (const auto &kv : *global_context) {
       Out << kv.first << ": " << kv.second << "\n";
     }
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/string_util.h 
new/benchmark-1.7.1/src/string_util.h
--- old/benchmark-1.7.0/src/string_util.h       2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/src/string_util.h       2022-11-11 15:01:03.000000000 
+0100
@@ -4,8 +4,10 @@
 #include <sstream>
 #include <string>
 #include <utility>
+#include <vector>
 
 #include "benchmark/export.h"
+#include "check.h"
 #include "internal_macros.h"
 
 namespace benchmark {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/sysinfo.cc 
new/benchmark-1.7.1/src/sysinfo.cc
--- old/benchmark-1.7.0/src/sysinfo.cc  2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/src/sysinfo.cc  2022-11-11 15:01:03.000000000 +0100
@@ -23,7 +23,7 @@
 #include <codecvt>
 #else
 #include <fcntl.h>
-#ifndef BENCHMARK_OS_FUCHSIA
+#if !defined(BENCHMARK_OS_FUCHSIA) && !defined(BENCHMARK_OS_QURT)
 #include <sys/resource.h>
 #endif
 #include <sys/time.h>
@@ -38,10 +38,14 @@
 #endif
 #if defined(BENCHMARK_OS_SOLARIS)
 #include <kstat.h>
+#include <netdb.h>
 #endif
 #if defined(BENCHMARK_OS_QNX)
 #include <sys/syspage.h>
 #endif
+#if defined(BENCHMARK_OS_QURT)
+#include <qurt.h>
+#endif
 
 #include <algorithm>
 #include <array>
@@ -402,6 +406,8 @@
   return GetCacheSizesWindows();
 #elif defined(BENCHMARK_OS_QNX)
   return GetCacheSizesQNX();
+#elif defined(BENCHMARK_OS_QURT)
+  return std::vector<CPUInfo::CacheInfo>();
 #else
   return GetCacheSizesFromKVFS();
 #endif
@@ -417,14 +423,30 @@
 #ifndef UNICODE
   str = std::string(hostname, DWCOUNT);
 #else
-  // Using wstring_convert, Is deprecated in C++17
-  using convert_type = std::codecvt_utf8<wchar_t>;
-  std::wstring_convert<convert_type, wchar_t> converter;
-  std::wstring wStr(hostname, DWCOUNT);
-  str = converter.to_bytes(wStr);
+  std::vector<wchar_t> converted;
+  // Find the length first.
+  int len = ::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, hostname,
+                                  DWCOUNT, converted.begin(), 0);
+  // TODO: Report error from GetLastError()?
+  if (len == 0) return std::string("");
+  converted.reserve(len + 1);
+
+  len = ::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, hostname, DWCOUNT,
+                              converted.begin(), converted.size());
+  // TODO: Report error from GetLastError()?
+  if (len == 0) return std::string("");
+  str = std::string(converted.data());
 #endif
   return str;
-#else  // defined(BENCHMARK_OS_WINDOWS)
+#elif defined(BENCHMARK_OS_QURT)
+  std::string str = "Hexagon DSP";
+  qurt_arch_version_t arch_version_struct;
+  if (qurt_sysenv_get_arch_version(&arch_version_struct) == QURT_EOK) {
+    str += " v";
+    str += std::to_string(arch_version_struct.arch_version);
+  }
+  return str;
+#else
 #ifndef HOST_NAME_MAX
 #ifdef BENCHMARK_HAS_SYSCTL  // BSD/Mac Doesnt have HOST_NAME_MAX defined
 #define HOST_NAME_MAX 64
@@ -434,6 +456,8 @@
 #define HOST_NAME_MAX 154
 #elif defined(BENCHMARK_OS_RTEMS)
 #define HOST_NAME_MAX 256
+#elif defined(BENCHMARK_OS_SOLARIS)
+#define HOST_NAME_MAX MAXHOSTNAMELEN
 #else
 #pragma message("HOST_NAME_MAX not defined. using 64")
 #define HOST_NAME_MAX 64
@@ -463,14 +487,20 @@
                                         // group
 #elif defined(BENCHMARK_OS_SOLARIS)
   // Returns -1 in case of a failure.
-  int num_cpu = sysconf(_SC_NPROCESSORS_ONLN);
+  long num_cpu = sysconf(_SC_NPROCESSORS_ONLN);
   if (num_cpu < 0) {
     fprintf(stderr, "sysconf(_SC_NPROCESSORS_ONLN) failed with error: %s\n",
             strerror(errno));
   }
-  return num_cpu;
+  return (int)num_cpu;
 #elif defined(BENCHMARK_OS_QNX)
   return static_cast<int>(_syspage_ptr->num_cpu);
+#elif defined(BENCHMARK_OS_QURT)
+  qurt_sysenv_max_hthreads_t hardware_threads;
+  if (qurt_sysenv_get_max_hw_threads(&hardware_threads) != QURT_EOK) {
+    hardware_threads.max_hthreads = 1;
+  }
+  return hardware_threads.max_hthreads;
 #else
   int num_cpus = 0;
   int max_id = -1;
@@ -644,7 +674,8 @@
     std::cerr << "failed to open /dev/kstat\n";
     return -1;
   }
-  kstat_t* ksp = kstat_lookup(kc, (char*)"cpu_info", -1, (char*)"cpu_info0");
+  kstat_t* ksp = kstat_lookup(kc, const_cast<char*>("cpu_info"), -1,
+                              const_cast<char*>("cpu_info0"));
   if (!ksp) {
     std::cerr << "failed to lookup in /dev/kstat\n";
     return -1;
@@ -653,8 +684,8 @@
     std::cerr << "failed to read from /dev/kstat\n";
     return -1;
   }
-  kstat_named_t* knp =
-      (kstat_named_t*)kstat_data_lookup(ksp, (char*)"current_clock_Hz");
+  kstat_named_t* knp = (kstat_named_t*)kstat_data_lookup(
+      ksp, const_cast<char*>("current_clock_Hz"));
   if (!knp) {
     std::cerr << "failed to lookup data in /dev/kstat\n";
     return -1;
@@ -670,6 +701,9 @@
 #elif defined(BENCHMARK_OS_QNX)
   return static_cast<double>((int64_t)(SYSPAGE_ENTRY(cpuinfo)->speed) *
                              (int64_t)(1000 * 1000));
+#elif defined(BENCHMARK_OS_QURT)
+  // QuRT doesn't provide any API to query Hexagon frequency.
+  return 1000000000;
 #endif
   // If we've fallen through, attempt to roughly estimate the CPU clock rate.
   static constexpr int estimate_time_ms = 1000;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/src/timers.cc 
new/benchmark-1.7.1/src/timers.cc
--- old/benchmark-1.7.0/src/timers.cc   2022-07-25 13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/src/timers.cc   2022-11-11 15:01:03.000000000 +0100
@@ -23,7 +23,7 @@
 #include <windows.h>
 #else
 #include <fcntl.h>
-#ifndef BENCHMARK_OS_FUCHSIA
+#if !defined(BENCHMARK_OS_FUCHSIA) && !defined(BENCHMARK_OS_QURT)
 #include <sys/resource.h>
 #endif
 #include <sys/time.h>
@@ -38,6 +38,9 @@
 #include <mach/mach_port.h>
 #include <mach/thread_act.h>
 #endif
+#if defined(BENCHMARK_OS_QURT)
+#include <qurt.h>
+#endif
 #endif
 
 #ifdef BENCHMARK_OS_EMSCRIPTEN
@@ -79,7 +82,7 @@
           static_cast<double>(user.QuadPart)) *
          1e-7;
 }
-#elif !defined(BENCHMARK_OS_FUCHSIA)
+#elif !defined(BENCHMARK_OS_FUCHSIA) && !defined(BENCHMARK_OS_QURT)
 double MakeTime(struct rusage const& ru) {
   return (static_cast<double>(ru.ru_utime.tv_sec) +
           static_cast<double>(ru.ru_utime.tv_usec) * 1e-6 +
@@ -119,6 +122,10 @@
                       &user_time))
     return MakeTime(kernel_time, user_time);
   DiagnoseAndExit("GetProccessTimes() failed");
+#elif defined(BENCHMARK_OS_QURT)
+  return static_cast<double>(
+             qurt_timer_timetick_to_us(qurt_timer_get_ticks())) *
+         1.0e-6;
 #elif defined(BENCHMARK_OS_EMSCRIPTEN)
   // clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...) returns 0 on Emscripten.
   // Use Emscripten-specific API. Reported CPU time would be exactly the
@@ -149,6 +156,10 @@
   GetThreadTimes(this_thread, &creation_time, &exit_time, &kernel_time,
                  &user_time);
   return MakeTime(kernel_time, user_time);
+#elif defined(BENCHMARK_OS_QURT)
+  return static_cast<double>(
+             qurt_timer_timetick_to_us(qurt_timer_get_ticks())) *
+         1.0e-6;
 #elif defined(BENCHMARK_OS_MACOSX)
   // FIXME We want to use clock_gettime, but its not available in MacOS 10.11.
   // See https://github.com/google/benchmark/pull/292
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/test/benchmark_gtest.cc 
new/benchmark-1.7.1/test/benchmark_gtest.cc
--- old/benchmark-1.7.0/test/benchmark_gtest.cc 2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/test/benchmark_gtest.cc 2022-11-11 15:01:03.000000000 
+0100
@@ -3,12 +3,12 @@
 #include <vector>
 
 #include "../src/benchmark_register.h"
+#include "benchmark/benchmark.h"
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
 
 namespace benchmark {
 namespace internal {
-BENCHMARK_EXPORT extern std::map<std::string, std::string>* global_context;
 
 namespace {
 
@@ -38,8 +38,9 @@
 
 TEST(AddRangeTest, FullRange8) {
   std::vector<int8_t> dst;
-  AddRange(&dst, int8_t{1}, std::numeric_limits<int8_t>::max(), 8);
-  EXPECT_THAT(dst, testing::ElementsAre(1, 8, 64, 127));
+  AddRange(&dst, int8_t{1}, std::numeric_limits<int8_t>::max(), int8_t{8});
+  EXPECT_THAT(
+      dst, testing::ElementsAre(int8_t{1}, int8_t{8}, int8_t{64}, 
int8_t{127}));
 }
 
 TEST(AddRangeTest, FullRange64) {
@@ -129,11 +130,13 @@
 
 TEST(AddRangeTest, Simple8) {
   std::vector<int8_t> dst;
-  AddRange<int8_t>(&dst, 1, 8, 2);
-  EXPECT_THAT(dst, testing::ElementsAre(1, 2, 4, 8));
+  AddRange<int8_t>(&dst, int8_t{1}, int8_t{8}, int8_t{2});
+  EXPECT_THAT(dst,
+              testing::ElementsAre(int8_t{1}, int8_t{2}, int8_t{4}, 
int8_t{8}));
 }
 
 TEST(AddCustomContext, Simple) {
+  std::map<std::string, std::string> *&global_context = GetGlobalContext();
   EXPECT_THAT(global_context, nullptr);
 
   AddCustomContext("foo", "bar");
@@ -148,6 +151,7 @@
 }
 
 TEST(AddCustomContext, DuplicateKey) {
+  std::map<std::string, std::string> *&global_context = GetGlobalContext();
   EXPECT_THAT(global_context, nullptr);
 
   AddCustomContext("foo", "bar");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/benchmark-1.7.0/test/benchmark_setup_teardown_test.cc 
new/benchmark-1.7.1/test/benchmark_setup_teardown_test.cc
--- old/benchmark-1.7.0/test/benchmark_setup_teardown_test.cc   2022-07-25 
13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/test/benchmark_setup_teardown_test.cc   2022-11-11 
15:01:03.000000000 +0100
@@ -10,19 +10,19 @@
 
 // Test that Setup() and Teardown() are called exactly once
 // for each benchmark run (single-threaded).
-namespace single {
+namespace singlethreaded {
 static int setup_call = 0;
 static int teardown_call = 0;
-}  // namespace single
+}  // namespace singlethreaded
 static void DoSetup1(const benchmark::State& state) {
-  ++single::setup_call;
+  ++singlethreaded::setup_call;
 
   // Setup/Teardown should never be called with any thread_idx != 0.
   assert(state.thread_index() == 0);
 }
 
 static void DoTeardown1(const benchmark::State& state) {
-  ++single::teardown_call;
+  ++singlethreaded::teardown_call;
   assert(state.thread_index() == 0);
 }
 
@@ -134,8 +134,8 @@
   assert(ret > 0);
 
   // Setup/Teardown is called once for each arg group (1,3,5,7).
-  assert(single::setup_call == 4);
-  assert(single::teardown_call == 4);
+  assert(singlethreaded::setup_call == 4);
+  assert(singlethreaded::teardown_call == 4);
 
   // 3 group of threads calling this function (3,5,10).
   assert(concurrent::setup_call.load(std::memory_order_relaxed) == 3);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/test/reporter_output_test.cc 
new/benchmark-1.7.1/test/reporter_output_test.cc
--- old/benchmark-1.7.0/test/reporter_output_test.cc    2022-07-25 
13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/test/reporter_output_test.cc    2022-11-11 
15:01:03.000000000 +0100
@@ -318,7 +318,7 @@
 ADD_CASES(TC_CSVOut, {{"^\"BM_no_arg_name/3\",%csv_report$"}});
 
 // ========================================================================= //
-// ------------------------ Testing Arg Name Output ----------------------- //
+// ------------------------ Testing Arg Name Output ------------------------ //
 // ========================================================================= //
 
 void BM_arg_name(benchmark::State& state) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/test/user_counters_test.cc 
new/benchmark-1.7.1/test/user_counters_test.cc
--- old/benchmark-1.7.0/test/user_counters_test.cc      2022-07-25 
13:35:38.000000000 +0200
+++ new/benchmark-1.7.1/test/user_counters_test.cc      2022-11-11 
15:01:03.000000000 +0100
@@ -195,8 +195,7 @@
 CHECK_BENCHMARK_RESULTS("BM_Invert", &CheckInvert);
 
 // ========================================================================= //
-// ------------------------- InvertedRate Counters Output
-// -------------------------- //
+// --------------------- InvertedRate Counters Output ---------------------- //
 // ========================================================================= //
 
 void BM_Counters_InvertedRate(benchmark::State& state) {
@@ -460,7 +459,7 @@
                         &CheckIsIterationInvariantRate);
 
 // ========================================================================= //
-// ------------------- AvgIterations Counters Output ------------------ //
+// --------------------- AvgIterations Counters Output --------------------- //
 // ========================================================================= //
 
 void BM_Counters_AvgIterations(benchmark::State& state) {
@@ -502,7 +501,7 @@
 CHECK_BENCHMARK_RESULTS("BM_Counters_AvgIterations", &CheckAvgIterations);
 
 // ========================================================================= //
-// ----------------- AvgIterationsRate Counters Output ---------------- //
+// ------------------- AvgIterationsRate Counters Output ------------------- //
 // ========================================================================= //
 
 void BM_Counters_kAvgIterationsRate(benchmark::State& state) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/tools/compare.py 
new/benchmark-1.7.1/tools/compare.py
--- old/benchmark-1.7.0/tools/compare.py        2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/tools/compare.py        2022-11-11 15:01:03.000000000 
+0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 import unittest
 """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/tools/gbench/report.py 
new/benchmark-1.7.1/tools/gbench/report.py
--- old/benchmark-1.7.0/tools/gbench/report.py  2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/tools/gbench/report.py  2022-11-11 15:01:03.000000000 
+0100
@@ -9,7 +9,6 @@
 
 from scipy.stats import mannwhitneyu, gmean
 from numpy import array
-from pandas import Timedelta
 
 
 class BenchmarkColor(object):
@@ -43,6 +42,13 @@
 UTEST_OPTIMAL_REPETITIONS = 9  # Lowest reasonable number, More is better.
 UTEST_COL_NAME = "_pvalue"
 
+_TIME_UNIT_TO_SECONDS_MULTIPLIER = {
+    "s": 1.0,
+    "ms": 1e-3,
+    "us": 1e-6,
+    "ns": 1e-9,
+}
+
 
 def color_format(use_color, fmt_str, *args, **kwargs):
     """
@@ -157,9 +163,9 @@
     Get value of field_name field of benchmark, which is time with time unit
     time_unit, as time in seconds.
     """
-    time_unit = benchmark['time_unit'] if 'time_unit' in benchmark else 's'
-    dt = Timedelta(benchmark[field_name], time_unit)
-    return dt / Timedelta(1, 's')
+    timedelta = benchmark[field_name]
+    time_unit = benchmark.get('time_unit', 's')
+    return timedelta * _TIME_UNIT_TO_SECONDS_MULTIPLIER.get(time_unit)
 
 
 def calculate_geomean(json):
@@ -454,7 +460,7 @@
             ['BM_ThirdFaster', '-0.3333', '-0.3334', '100', '67', '100', '67'],
             ['BM_NotBadTimeUnit', '-0.9000', '+0.2000', '0', '0', '0', '1'],
             ['BM_hasLabel', '+0.0000', '+0.0000', '1', '1', '1', '1'],
-            ['OVERALL_GEOMEAN', '-0.8117', '-0.7783', '0', '0', '0', '0']
+            ['OVERALL_GEOMEAN', '-0.8113', '-0.7779', '0', '0', '0', '0']
         ]
         output_lines_with_header = print_difference_report(
             self.json_diff_report, use_color=False)
@@ -591,7 +597,7 @@
                 'label': '',
                 'measurements': [{'real_time': 3.1622776601683826e-06, 
'cpu_time': 3.2130844755623912e-06,
                                   'real_time_other': 1.9768988699420897e-07, 
'cpu_time_other': 2.397447755209533e-07,
-                                  'time': -0.8117033010153573, 'cpu': 
-0.7783324768278522}],
+                                  'time': -0.8112976497120911, 'cpu': 
-0.7778551721181174}],
                 'time_unit': 's',
                 'run_type': 'aggregate',
                 'aggregate_name': 'geomean', 'utest': {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/tools/libpfm.BUILD.bazel 
new/benchmark-1.7.1/tools/libpfm.BUILD.bazel
--- old/benchmark-1.7.0/tools/libpfm.BUILD.bazel        1970-01-01 
01:00:00.000000000 +0100
+++ new/benchmark-1.7.1/tools/libpfm.BUILD.bazel        2022-11-11 
15:01:03.000000000 +0100
@@ -0,0 +1,21 @@
+# Build rule for libpfm, which is required to collect performance counters for
+# BENCHMARK_ENABLE_LIBPFM builds.
+
+load("@rules_foreign_cc//foreign_cc:defs.bzl", "make")
+
+filegroup(
+    name = "pfm_srcs",
+    srcs = glob(["**"]),
+)
+
+make(
+    name = "libpfm",
+    lib_source = ":pfm_srcs",
+    lib_name = "libpfm",
+    copts = [
+        "-Wno-format-truncation",
+    ],
+    visibility = [
+        "//visibility:public",
+    ],
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/benchmark-1.7.0/tools/strip_asm.py 
new/benchmark-1.7.1/tools/strip_asm.py
--- old/benchmark-1.7.0/tools/strip_asm.py      2022-07-25 13:35:38.000000000 
+0200
+++ new/benchmark-1.7.1/tools/strip_asm.py      2022-11-11 15:01:03.000000000 
+0100
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 """
 strip_asm.py - Cleanup ASM output for the specified file

++++++ benchmark.obsinfo ++++++
--- /var/tmp/diff_new_pack.3TQ9GM/_old  2022-12-07 17:35:38.240760014 +0100
+++ /var/tmp/diff_new_pack.3TQ9GM/_new  2022-12-07 17:35:38.244760036 +0100
@@ -1,5 +1,5 @@
 name: benchmark
-version: 1.7.0
-mtime: 1658748938
-commit: 361e8d1cfe0c6c36d30b39f1b61302ece5507320
+version: 1.7.1
+mtime: 1668175263
+commit: d572f4777349d43653b21d6c2fc63020ab326db2
 

Reply via email to