kumquat-buildroot/package/boost/0002-math-provide-graceful-failure-for-bernoulli-code-on-platforms-with-no-atomics.patch
Michael Nosthoff 1b1b24ce84 package/boost: fix math with no atomics
Boost 1.77.0 broke the build of the math component on architectures
without lockfree atomics. This was reported in [0].

This patch adds the relevant patches from the upstream patchset[1] which fix the build
and removes the dependency on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS

[0] https://github.com/boostorg/math/issues/673
[1] https://github.com/boostorg/math/pull/684

Signed-off-by: Michael Nosthoff <buildroot@heine.tech>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2021-09-12 11:27:28 +02:00

48 lines
2.1 KiB
Diff

From 32bd6197353f6ea8e5bef01f09e25c944141acfc Mon Sep 17 00:00:00 2001
From: jzmaddock <john@johnmaddock.co.uk>
Date: Wed, 1 Sep 2021 18:54:54 +0100
Subject: [PATCH] Allow definition of BOOST_MATH_NO_ATOMIC_INT on the command
line. Allows us to test/emulate platforms with no atomic integers.
---
boost/math/tools/atomic.hpp | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/boost/math/tools/atomic.hpp b/boost/math/tools/atomic.hpp
index cc76ed269f..e3cbf5db89 100644
--- a/boost/math/tools/atomic.hpp
+++ b/boost/math/tools/atomic.hpp
@@ -16,27 +16,27 @@
namespace boost {
namespace math {
namespace detail {
-#if ATOMIC_INT_LOCK_FREE == 2
+#if (ATOMIC_INT_LOCK_FREE == 2) && !defined(BOOST_MATH_NO_ATOMIC_INT)
typedef std::atomic<int> atomic_counter_type;
typedef std::atomic<unsigned> atomic_unsigned_type;
typedef int atomic_integer_type;
typedef unsigned atomic_unsigned_integer_type;
-#elif ATOMIC_SHORT_LOCK_FREE == 2
+#elif (ATOMIC_SHORT_LOCK_FREE == 2) && !defined(BOOST_MATH_NO_ATOMIC_INT)
typedef std::atomic<short> atomic_counter_type;
typedef std::atomic<unsigned short> atomic_unsigned_type;
typedef short atomic_integer_type;
typedef unsigned short atomic_unsigned_type;
-#elif ATOMIC_LONG_LOCK_FREE == 2
+#elif (ATOMIC_LONG_LOCK_FREE == 2) && !defined(BOOST_MATH_NO_ATOMIC_INT)
typedef std::atomic<long> atomic_unsigned_integer_type;
typedef std::atomic<unsigned long> atomic_unsigned_type;
typedef unsigned long atomic_unsigned_type;
typedef long atomic_integer_type;
-#elif ATOMIC_LLONG_LOCK_FREE == 2
+#elif (ATOMIC_LLONG_LOCK_FREE == 2) && !defined(BOOST_MATH_NO_ATOMIC_INT)
typedef std::atomic<long long> atomic_unsigned_integer_type;
typedef std::atomic<unsigned long long> atomic_unsigned_type;
typedef long long atomic_integer_type;
typedef unsigned long long atomic_unsigned_integer_type;
-#else
+#elif !defined(BOOST_MATH_NO_ATOMIC_INT)
# define BOOST_MATH_NO_ATOMIC_INT
#endif
} // Namespace detail