guix/gnu/packages/patches/abseil-cpp-20200923.3-adjust-sysinfo.patch
Efraim Flashner e50fc5380e
gnu: abseil-cpp-20200923.3: Fix test suite on some architectures.
* gnu/packages/cpp.scm (abseil-cpp-20200923.3)[source]: Add patches.
* gnu/packages/patches/abseil-cpp-20200923.3-adjust-sysinfo.patch,
gnu/packages/patches/abseil-cpp-20200923.3-duration-test.patch: New
files.
* gnu/local.mk (dist_patch_DATA): Register them.

Change-Id: I3a0a6c3396a7c2854236c68ec77a68bbdd6af1f4
2024-05-21 09:10:33 +03:00

60 lines
2.8 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

https://sources.debian.org/data/main/a/abseil/0~20200923.3-2/debian/patches/cpu-frequency.diff
This patch is taken from Debian instead of the upstream URL because the
upstream URL contains far more changes than occur in this patch.
It was then modified to also work for armhf.
From: Benjamin Barenblat <bbaren@google.com>
Subject: Ignore missing CPU frequency on more architectures
Forwarded: yes
Applied-Upstream: https://github.com/abseil/abseil-cpp/commit/1918ad2ae38aa32c74b558b322479a8efdd76363
Linux on MIPS, PA-RISC, RISC-V, and SystemZ doesnt expose the nominal CPU
frequency via /sys, so dont worry if `NominalCPUFrequency` returns 1.0 on those
platforms.
Some POWER machines expose the CPU frequency; others do not. Since we cant
predict which type of machine the tests will run on, simply disable testing for
`NominalCPUFrequency` on POWER.
The author works at Google. Upstream applied this patch as Piper revision
347079873 and exported it to GitHub; the Applied-Upstream URL above points to
the exported commit.
--- a/absl/base/internal/sysinfo_test.cc
+++ b/absl/base/internal/sysinfo_test.cc
@@ -37,17 +37,28 @@ TEST(SysinfoTest, NumCPUs) {
<< "NumCPUs() should not have the default value of 0";
}
+// Ensure that NominalCPUFrequency returns a reasonable value, or 1.00 on
+// platforms where the CPU frequency is not available through sysfs.
+//
+// POWER is particularly problematic here; some Linux kernels expose the CPU
+// frequency, while others do not. Since we can't predict a priori what a given
+// machine is going to do, just disable this test on POWER on Linux.
+#if !(defined(__linux) && (defined(__ppc64__) || defined(__PPC64__)))
TEST(SysinfoTest, NominalCPUFrequency) {
-#if !(defined(__aarch64__) && defined(__linux__)) && !defined(__EMSCRIPTEN__)
- EXPECT_GE(NominalCPUFrequency(), 1000.0)
- << "NominalCPUFrequency() did not return a reasonable value";
-#else
- // Aarch64 cannot read the CPU frequency from sysfs, so we get back 1.0.
- // Emscripten does not have a sysfs to read from at all.
+ // Linux only exposes the CPU frequency on certain architectures, and
+ // Emscripten doesn't expose it at all.
+#if defined(__linux__) && \
+ (defined(__aarch64__) || defined(__hppa__) || defined(__mips__) || \
+ defined(__arm__) || defined(__riscv) || defined(__s390x__)) || \
+ defined(__EMSCRIPTEN__)
EXPECT_EQ(NominalCPUFrequency(), 1.0)
<< "CPU frequency detection was fixed! Please update unittest.";
+#else
+ EXPECT_GE(NominalCPUFrequency(), 1000.0)
+ << "NominalCPUFrequency() did not return a reasonable value";
#endif
}
+#endif
TEST(SysinfoTest, GetTID) {
EXPECT_EQ(GetTID(), GetTID()); // Basic compile and equality test.