public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: dev-cpp/benchmark/files/, profiles/arch/hppa/, dev-cpp/benchmark/
@ 2025-01-14  6:34 Sam James
  0 siblings, 0 replies; only message in thread
From: Sam James @ 2025-01-14  6:34 UTC (permalink / raw
  To: gentoo-commits

commit:     3c2c0cf61d2d1231e5c88f6c2f48c3b5e4524716
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 14 06:22:02 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Jan 14 06:32:48 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3c2c0cf6

dev-cpp/benchmark: add 1.9.1

* Skip tests which fail with GCC 15 for now (bug #941538). It's worth us
  looking at why they only fail with 15 but CMake warns on them being
  brittle w/ diff GCC versions and I'm not too worried about it.

* Drop USE=libcxx, USE=exceptions, USE=lto. These should be determined by
  profile, upstream defaults / always on, and user *FLAGS, respectively.

* Backport upstream patches to add clock detection for HPPA *and* fallback
  for other arches. Yay!

* Fix libpfm (disable for multilib as it's not multilib-aware, bug #943293).

* Add USE=debug for -DNDEBUG (bug #943629).

Bug: https://bugs.gentoo.org/914038
Bug: https://bugs.gentoo.org/941538
Closes: https://bugs.gentoo.org/943293
Closes: https://bugs.gentoo.org/943629
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-cpp/benchmark/Manifest                         |   1 +
 dev-cpp/benchmark/benchmark-1.8.4.ebuild           |   2 +-
 dev-cpp/benchmark/benchmark-1.9.0.ebuild           |   2 +-
 ...nchmark-1.9.0.ebuild => benchmark-1.9.1.ebuild} |  55 ++++--
 ...nchmark-1.9.1-clock-detection-portability.patch | 205 +++++++++++++++++++++
 profiles/arch/hppa/package.mask                    |   5 -
 6 files changed, 244 insertions(+), 26 deletions(-)

diff --git a/dev-cpp/benchmark/Manifest b/dev-cpp/benchmark/Manifest
index 9fa403401fa5..07551f9ed37d 100644
--- a/dev-cpp/benchmark/Manifest
+++ b/dev-cpp/benchmark/Manifest
@@ -1,2 +1,3 @@
 DIST benchmark-1.8.4.tar.gz 253916 BLAKE2B 78a290a5013d8371e87b7c918e518e3ec0e8247e25e211d160ab8dea51d8871d8dac54ee91ee0c512af86a60d1f4e9baedadc20d4a7fa28ef790411fda0399c8 SHA512 835d12b88fe52309ce6b2ffbc8b3c178ac594be7d249b5daca0373d1d03ec83ea3c7b94224f67f22d21919376985867eeff0d1c0721501cfd8a9e9b8a9c48882
 DIST benchmark-1.9.0.tar.gz 253961 BLAKE2B fdac0018435622e3ee2c1cde02c8140a15f2579b9059d1592b588033e6935bd8d54c874f4ea912696e8e1d5f7eebae30ba849f77cc3f74f006b4b03c712685ed SHA512 0e91e0e5a2222d7650fd8bd9cafb2f0e7c1689cd1b87b2cc529c738db12bfef31162aa5a4da78f7b0aa7f0101dc08b626802c58d39862458f82f9fea9316ca25
+DIST benchmark-1.9.1.tar.gz 255148 BLAKE2B 39b78afcb333c750960f476476b625d7f72b7cb787176deda1bd939d030e39b16fd008816c64447f7bb224983f2e80b047636f727a3d6d938f1b44dc25bddb55 SHA512 fc787d3d60a55abb3edaa575bf947c72e1ad1404a35bfddf585299411bcd04d32503bba563f9a36dccf128fce6261b97d460d6c293ed2c2d0807cf0154c86aa7

diff --git a/dev-cpp/benchmark/benchmark-1.8.4.ebuild b/dev-cpp/benchmark/benchmark-1.8.4.ebuild
index 3ba3a6651fab..b800d96f5d0f 100644
--- a/dev-cpp/benchmark/benchmark-1.8.4.ebuild
+++ b/dev-cpp/benchmark/benchmark-1.8.4.ebuild
@@ -11,7 +11,7 @@ SRC_URI="https://github.com/google/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
 
 LICENSE="Apache-2.0"
 SLOT="0"
-KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~loong ppc ppc64 ~riscv x86"
+KEYWORDS="~alpha amd64 ~arm arm64 ~loong ppc ppc64 ~riscv x86"
 IUSE="debug doc test"
 RESTRICT="!test? ( test )"
 

diff --git a/dev-cpp/benchmark/benchmark-1.9.0.ebuild b/dev-cpp/benchmark/benchmark-1.9.0.ebuild
index 8340d18d7710..b20f08d030a7 100644
--- a/dev-cpp/benchmark/benchmark-1.9.0.ebuild
+++ b/dev-cpp/benchmark/benchmark-1.9.0.ebuild
@@ -12,7 +12,7 @@ HOMEPAGE="https://github.com/google/benchmark/"
 SRC_URI="https://github.com/google/benchmark/archive/v${PV}.tar.gz -> ${P}.tar.gz"
 LICENSE="Apache-2.0"
 SLOT="0/$(ver_cut 1)"
-KEYWORDS="amd64 ~arm arm64 ~hppa ~loong ~ppc ppc64 ~riscv x86"
+KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv x86"
 IUSE="doc +exceptions libcxx libpfm lto test +tools"
 RESTRICT="!test? ( test )"
 REQUIRED_USE="tools? ( ${PYTHON_REQUIRED_USE} )"

diff --git a/dev-cpp/benchmark/benchmark-1.9.0.ebuild b/dev-cpp/benchmark/benchmark-1.9.1.ebuild
similarity index 56%
copy from dev-cpp/benchmark/benchmark-1.9.0.ebuild
copy to dev-cpp/benchmark/benchmark-1.9.1.ebuild
index 8340d18d7710..267541f48e8b 100644
--- a/dev-cpp/benchmark/benchmark-1.9.0.ebuild
+++ b/dev-cpp/benchmark/benchmark-1.9.1.ebuild
@@ -1,67 +1,84 @@
-# Copyright 1999-2024 Gentoo Authors
+# Copyright 1999-2025 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
 
-PYTHON_COMPAT=( python3_{11,12} )
+PYTHON_COMPAT=( python3_{11..12} )
 
-inherit cmake-multilib python-single-r1
+inherit cmake-multilib flag-o-matic python-single-r1
 
 DESCRIPTION="A microbenchmark support library"
 HOMEPAGE="https://github.com/google/benchmark/"
 SRC_URI="https://github.com/google/benchmark/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
 LICENSE="Apache-2.0"
 SLOT="0/$(ver_cut 1)"
-KEYWORDS="amd64 ~arm arm64 ~hppa ~loong ~ppc ppc64 ~riscv x86"
-IUSE="doc +exceptions libcxx libpfm lto test +tools"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+IUSE="doc debug libpfm test +tools"
 RESTRICT="!test? ( test )"
 REQUIRED_USE="tools? ( ${PYTHON_REQUIRED_USE} )"
 
 DEPEND="
-	libcxx? ( llvm-runtimes/libcxx[${MULTILIB_USEDEP}] )
 	libpfm? ( dev-libs/libpfm:= )
 "
-
-BDEPEND="
-	>=dev-build/cmake-3.10
-	doc? ( app-text/doxygen )
-	test? ( dev-cpp/gtest[${MULTILIB_USEDEP}] )
-"
-
 RDEPEND="
+	${DEPEND}
 	tools? (
 		$(python_gen_cond_dep '
 			dev-python/numpy[${PYTHON_USEDEP}]
 			>=dev-python/scipy-1.10.0[${PYTHON_USEDEP}]
 		')
-
 		${PYTHON_DEPS}
 	)
 "
+BDEPEND="
+	doc? ( app-text/doxygen )
+	test? ( dev-cpp/gtest[${MULTILIB_USEDEP}] )
+"
 
-PATCHES=( "${FILESDIR}/${P}-fix-documentation-installation.patch" )
+PATCHES=(
+	"${FILESDIR}/${PN}-1.9.0-fix-documentation-installation.patch"
+	"${FILESDIR}/${P}-clock-detection-portability.patch"
+)
 
 pkg_setup() {
 	use tools && python-single-r1_pkg_setup
 }
 
 multilib_src_configure() {
+	# bug #943629
+	use debug || append-cppflags -DNDEBUG
+
 	local mycmakeargs=(
 		-DBENCHMARK_ENABLE_DOXYGEN="$(usex doc)"
-		-DBENCHMARK_ENABLE_EXCEPTIONS="$(usex exceptions)"
 		-DBENCHMARK_ENABLE_GTEST_TESTS="$(usex test)"
-		-DBENCHMARK_ENABLE_LTO="$(usex lto)"
-		-DBENCHMARK_ENABLE_LIBPFM="$(usex libpfm)"
+		# Users should control this via *FLAGS
+		-DBENCHMARK_ENABLE_LTO=OFF
+		-DBENCHMARK_ENABLE_LIBPFM="$(multilib_native_usex libpfm)"
 		-DBENCHMARK_ENABLE_TESTING="$(usex test)"
 		-DBENCHMARK_ENABLE_WERROR=OFF
 		-DBENCHMARK_INSTALL_DOCS="$(usex doc)"
 		-DBENCHMARK_USE_BUNDLED_GTEST=OFF
-		-DBENCHMARK_USE_LIBCXX="$(usex libcxx)"
+		# This is determined by profile.
+		-DBENCHMARK_USE_LIBCXX=OFF
 	)
 
 	cmake_src_configure
 }
 
+multilib_src_test() {
+	CMAKE_SKIP_TESTS=(
+		# CMake already warns on these being brittle w/ diff
+		# compiler versions. Could do with investigation if bored
+		# but not critical. See bug #941538.
+		run_donotoptimize_assembly_test_CHECK
+		run_state_assembly_test_CHECK
+		run_clobber_memory_assembly_test_CHECK
+	)
+
+	cmake_src_test
+}
+
 multilib_src_install_all() {
 	dodoc CONTRIBUTING.md
 	dodoc CONTRIBUTORS

diff --git a/dev-cpp/benchmark/files/benchmark-1.9.1-clock-detection-portability.patch b/dev-cpp/benchmark/files/benchmark-1.9.1-clock-detection-portability.patch
new file mode 100644
index 000000000000..d9ecd9db56d2
--- /dev/null
+++ b/dev-cpp/benchmark/files/benchmark-1.9.1-clock-detection-portability.patch
@@ -0,0 +1,205 @@
+https://github.com/google/benchmark/commit/f65741b2bd92461dc2c816056eb9c996ae48ad62
+https://github.com/google/benchmark/commit/077db43001b42af3ad23e993b2bdcb4fadb7bcf8
+https://github.com/google/benchmark/commit/39be87d3004ff9ff4cdf736651af80c3d15e2497
+https://github.com/google/benchmark/commit/c24774dc4f4402c3ad150363321cc972ed2669e7
+
+From f65741b2bd92461dc2c816056eb9c996ae48ad62 Mon Sep 17 00:00:00 2001
+From: Helge Deller <deller@gmx.de>
+Date: Wed, 8 Jan 2025 13:03:53 +0100
+Subject: [PATCH] cycleclock: Support for PA-RISC (hppa) architecture (#1894)
+
+Co-authored-by: dominic <510002+dmah42@users.noreply.github.com>
+---
+ src/cycleclock.h | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/src/cycleclock.h b/src/cycleclock.h
+index bd62f5d7e7..7852f3df52 100644
+--- a/src/cycleclock.h
++++ b/src/cycleclock.h
+@@ -229,6 +229,16 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() {
+   struct timeval tv;
+   gettimeofday(&tv, nullptr);
+   return static_cast<int64_t>(tv.tv_sec) * 1000000 + tv.tv_usec;
++#elif defined(__hppa__)
++  // HP PA-RISC provides a user-readable clock counter (cr16), but
++  // it's not syncronized across CPUs and only 32-bit wide when programs
++  // are built as 32-bit binaries.
++  // Use clock_gettime(CLOCK_MONOTONIC, ...) instead of gettimeofday
++  // because is provides nanosecond resolution.
++  // Initialize to always return 0 if clock_gettime fails.
++  struct timespec ts = {0, 0};
++  clock_gettime(CLOCK_MONOTONIC, &ts);
++  return static_cast<int64_t>(ts.tv_sec) * 1000000000 + ts.tv_nsec;
+ #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
+
+From 077db43001b42af3ad23e993b2bdcb4fadb7bcf8 Mon Sep 17 00:00:00 2001
+From: Helge Deller <deller@gmx.de>
+Date: Wed, 8 Jan 2025 17:54:08 +0100
+Subject: [PATCH] cycleclock: Use cock_gettime() as fallback for any Linux
+ architecture (#1899)
+
+The Linux kernel provides the clock_gettime() functions since a long
+time already, so it's possible to use it as a generic fallback option
+for any architecture if no other (better) possibility has been provided
+instead.
+
+I noticed the benchmark package failed to build on debian on the SH-4
+architecture, so with this change SH-4 is now the first user of this
+fallback option.
+---
+ src/cycleclock.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/cycleclock.h b/src/cycleclock.h
+index 7852f3df5..03e02f805 100644
+--- a/src/cycleclock.h
++++ b/src/cycleclock.h
+@@ -229,10 +229,12 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() {
+   struct timeval tv;
+   gettimeofday(&tv, nullptr);
+   return static_cast<int64_t>(tv.tv_sec) * 1000000 + tv.tv_usec;
+-#elif defined(__hppa__)
++#elif defined(__hppa__) || defined(__linux__)
++  // Fallback for all other architectures with a recent Linux kernel, e.g.:
+   // HP PA-RISC provides a user-readable clock counter (cr16), but
+   // it's not syncronized across CPUs and only 32-bit wide when programs
+   // are built as 32-bit binaries.
++  // Same for SH-4 and possibly others.
+   // Use clock_gettime(CLOCK_MONOTONIC, ...) instead of gettimeofday
+   // because is provides nanosecond resolution.
+   // Initialize to always return 0 if clock_gettime fails.
+From 39be87d3004ff9ff4cdf736651af80c3d15e2497 Mon Sep 17 00:00:00 2001
+From: Helge Deller <deller@gmx.de>
+Date: Thu, 9 Jan 2025 11:47:29 +0100
+Subject: [PATCH] Fix runtime crash when parsing /proc/cpuinfo fails (#1900)
+
+The testcase fails on sparc64, because the parsing of /proc/cpuinfo
+fails and thus currently returns "0" CPUs which finally leads
+to division-by-zero faults in the tests.
+
+Fix the issue by returning at least "1" CPU which allows the
+tests to run. A error message will be printed in any case.
+
+Long-term the code should be fixed to parse the cpuinfo output
+on sparch which looks like this:
+...
+type            : sun4v
+ncpus probed    : 48
+ncpus active    : 48
+---
+ src/sysinfo.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/sysinfo.cc b/src/sysinfo.cc
+index 49bff75e5..ce14b8d8e 100644
+--- a/src/sysinfo.cc
++++ b/src/sysinfo.cc
+@@ -561,10 +561,12 @@ int GetNumCPUsImpl() {
+ }
+ 
+ int GetNumCPUs() {
+-  const int num_cpus = GetNumCPUsImpl();
++  int num_cpus = GetNumCPUsImpl();
+   if (num_cpus < 1) {
+     std::cerr << "Unable to extract number of CPUs.  If your platform uses "
+                  "/proc/cpuinfo, custom support may need to be added.\n";
++    /* There is at least one CPU which we run on. */
++    num_cpus = 1;
+   }
+   return num_cpus;
+ }
+From c24774dc4f4402c3ad150363321cc972ed2669e7 Mon Sep 17 00:00:00 2001
+From: Helge Deller <deller@gmx.de>
+Date: Thu, 9 Jan 2025 17:07:43 +0100
+Subject: [PATCH] Get number of CPUs with sysconf() on Linux (#1901)
+
+* Get number of CPUs with sysconf() on Linux
+
+Avoid parsing the /proc/cpuinfo just to get number of CPUs.
+Instead use the portable function provided by glibc.
+
+* Update sysinfo.cc
+---
+ src/sysinfo.cc | 54 +++-----------------------------------------------
+ 1 file changed, 3 insertions(+), 51 deletions(-)
+
+diff --git a/src/sysinfo.cc b/src/sysinfo.cc
+index ce14b8d8e..eddd430e6 100644
+--- a/src/sysinfo.cc
++++ b/src/sysinfo.cc
+@@ -492,14 +492,14 @@ int GetNumCPUsImpl() {
+   GetSystemInfo(&sysinfo);
+   // number of logical processors in the current group
+   return static_cast<int>(sysinfo.dwNumberOfProcessors);
+-#elif defined(BENCHMARK_OS_SOLARIS)
++#elif defined(__linux__) || defined(BENCHMARK_OS_SOLARIS)
+   // Returns -1 in case of a failure.
+-  long num_cpu = sysconf(_SC_NPROCESSORS_ONLN);
++  int num_cpu = static_cast<int>(sysconf(_SC_NPROCESSORS_ONLN));
+   if (num_cpu < 0) {
+     PrintErrorAndDie("sysconf(_SC_NPROCESSORS_ONLN) failed with error: ",
+                      strerror(errno));
+   }
+-  return (int)num_cpu;
++  return num_cpu;
+ #elif defined(BENCHMARK_OS_QNX)
+   return static_cast<int>(_syspage_ptr->num_cpu);
+ #elif defined(BENCHMARK_OS_QURT)
+@@ -508,54 +508,6 @@ int GetNumCPUsImpl() {
+     hardware_threads.max_hthreads = 1;
+   }
+   return hardware_threads.max_hthreads;
+-#else
+-  int num_cpus = 0;
+-  int max_id = -1;
+-  std::ifstream f("/proc/cpuinfo");
+-  if (!f.is_open()) {
+-    std::cerr << "Failed to open /proc/cpuinfo\n";
+-    return -1;
+-  }
+-#if defined(__alpha__)
+-  const std::string Key = "cpus detected";
+-#else
+-  const std::string Key = "processor";
+-#endif
+-  std::string ln;
+-  while (std::getline(f, ln)) {
+-    if (ln.empty()) continue;
+-    std::size_t split_idx = ln.find(':');
+-    std::string value;
+-#if defined(__s390__)
+-    // s390 has another format in /proc/cpuinfo
+-    // it needs to be parsed differently
+-    if (split_idx != std::string::npos)
+-      value = ln.substr(Key.size() + 1, split_idx - Key.size() - 1);
+-#else
+-    if (split_idx != std::string::npos) value = ln.substr(split_idx + 1);
+-#endif
+-    if (ln.size() >= Key.size() && ln.compare(0, Key.size(), Key) == 0) {
+-      num_cpus++;
+-      if (!value.empty()) {
+-        const int cur_id = benchmark::stoi(value);
+-        max_id = std::max(cur_id, max_id);
+-      }
+-    }
+-  }
+-  if (f.bad()) {
+-    PrintErrorAndDie("Failure reading /proc/cpuinfo");
+-  }
+-  if (!f.eof()) {
+-    PrintErrorAndDie("Failed to read to end of /proc/cpuinfo");
+-  }
+-  f.close();
+-
+-  if ((max_id + 1) != num_cpus) {
+-    fprintf(stderr,
+-            "CPU ID assignments in /proc/cpuinfo seem messed up."
+-            " This is usually caused by a bad BIOS.\n");
+-  }
+-  return num_cpus;
+ #endif
+   BENCHMARK_UNREACHABLE();
+ }

diff --git a/profiles/arch/hppa/package.mask b/profiles/arch/hppa/package.mask
index 39addcecad66..e7ef6e29762a 100644
--- a/profiles/arch/hppa/package.mask
+++ b/profiles/arch/hppa/package.mask
@@ -4,8 +4,3 @@
 # Sam James <sam@gentoo.org> (2023-03-28)
 # Needs explicit porting to each platform (bug 894078#c6)
 dev-python/py-cpuinfo
-
-# Quote from <eike@s...l.de>:
-# "Compilation fails with: #error You need to define CycleTimer for
-#  your OS and CPU"
-dev-cpp/benchmark


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2025-01-14  6:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-14  6:34 [gentoo-commits] repo/gentoo:master commit in: dev-cpp/benchmark/files/, profiles/arch/hppa/, dev-cpp/benchmark/ Sam James

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox