mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-01 11:18:09 -07:00
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@gentoo.org>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 )"
|
||||
|
||||
|
||||
@@ -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} )"
|
||||
|
||||
91
dev-cpp/benchmark/benchmark-1.9.1.ebuild
Normal file
91
dev-cpp/benchmark/benchmark-1.9.1.ebuild
Normal file
@@ -0,0 +1,91 @@
|
||||
# Copyright 1999-2025 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{11..12} )
|
||||
|
||||
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 ~loong ~ppc ~ppc64 ~riscv ~x86"
|
||||
IUSE="doc debug libpfm test +tools"
|
||||
RESTRICT="!test? ( test )"
|
||||
REQUIRED_USE="tools? ( ${PYTHON_REQUIRED_USE} )"
|
||||
|
||||
DEPEND="
|
||||
libpfm? ( dev-libs/libpfm:= )
|
||||
"
|
||||
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}/${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_GTEST_TESTS="$(usex test)"
|
||||
# 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
|
||||
# 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
|
||||
|
||||
if use tools; then
|
||||
python_domodule tools/gbench
|
||||
python_doscript tools/compare.py
|
||||
python_doscript tools/strip_asm.py
|
||||
fi
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user