-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
boost: Fix build on arches with no atomics
1.77 is broken on architectures which dont have lockfree atomics e.g. armv5 [1], backport relevant fixes from upstream to unbreak the build [1] boostorg/math#673 (From OE-Core rev: aaaf763acfca236654e299d3be6a9484355e3be9) Signed-off-by: Khem Raj <[email protected]> Signed-off-by: Richard Purdie <[email protected]> (cherry picked from commit 57dc797712abcf83b63694b21d2b3a3f09b1c9bc) Signed-off-by: Anuj Mittal <[email protected]> Signed-off-by: Richard Purdie <[email protected]>
- Loading branch information
Showing
3 changed files
with
206 additions
and
0 deletions.
There are no files selected for viewing
53 changes: 53 additions & 0 deletions
53
...st/boost/0002-math-allow-definition-of-boost_math_no_atomic_int-on-the-command-line.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
From 32bd6197353f6ea8e5bef01f09e25c944141acfc Mon Sep 17 00:00:00 2001 | ||
From: jzmaddock <[email protected]> | ||
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. | ||
|
||
[[email protected]: | ||
- backport from boostorg/math 32bd6197353f6ea8e5bef01f09e25c944141acfc | ||
- alter path to match boost release | ||
] | ||
Signed-off-by: Michael Nosthoff <[email protected]> | ||
--- | ||
Upstream-Status: Backport [https://github.com/boostorg/math/pull/684/commits/32bd6197353f6ea8e5bef01f09e25c944141acfc] | ||
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 |
151 changes: 151 additions & 0 deletions
151
...pport/boost/boost/0003-math-make-no-atomics-a-soft-failure-in-bernoulli_details_hpp.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
From 7d482f6ebc356e6ec455ccb5f51a23971bf6ce5b Mon Sep 17 00:00:00 2001 | ||
From: jzmaddock <[email protected]> | ||
Date: Wed, 1 Sep 2021 20:31:53 +0100 | ||
Subject: [PATCH] Make no atomics a soft failure in bernoulli_details.hpp. | ||
Include an "escape macro" so thread safety can be disabled if certain | ||
bernoulli features are to be used in a no-atomics environment. Fixes | ||
https://github.com/boostorg/math/issues/673. | ||
|
||
[[email protected]: | ||
- backport from boostorg/math 7d482f6ebc356e6ec455ccb5f51a23971bf6ce5b | ||
- alter path to match boost release | ||
] | ||
Signed-off-by: Michael Nosthoff <[email protected]> | ||
--- | ||
Upstream-Status: Backport [https://github.com/boostorg/math/pull/684/commits/7d482f6ebc356e6ec455ccb5f51a23971bf6ce5b] | ||
.../detail/bernoulli_details.hpp | 10 +++++++--- | ||
libs/math/test/Jamfile.v2 | 3 +++ | ||
test/compile_test/bernoulli_no_atomic_d.cpp | 14 ++++++++++++++ | ||
test/compile_test/bernoulli_no_atomic_fail.cpp | 15 +++++++++++++++ | ||
test/compile_test/bernoulli_no_atomic_mp.cpp | 16 ++++++++++++++++ | ||
5 files changed, 55 insertions(+), 3 deletions(-) | ||
create mode 100644 test/compile_test/bernoulli_no_atomic_d.cpp | ||
create mode 100644 test/compile_test/bernoulli_no_atomic_fail.cpp | ||
create mode 100644 test/compile_test/bernoulli_no_atomic_mp.cpp | ||
|
||
diff --git a/boost/math/special_functions/detail/bernoulli_details.hpp b/boost/math/special_functions/detail/bernoulli_details.hpp | ||
index cf35545264..8519b7c89c 100644 | ||
--- a/boost/math/special_functions/detail/bernoulli_details.hpp | ||
+++ b/boost/math/special_functions/detail/bernoulli_details.hpp | ||
@@ -360,7 +360,7 @@ class bernoulli_numbers_cache | ||
return out; | ||
} | ||
|
||
- #ifndef BOOST_HAS_THREADS | ||
+ #if !defined(BOOST_HAS_THREADS) || defined(BOOST_MATH_BERNOULLI_UNTHREADED) | ||
// | ||
// Single threaded code, very simple: | ||
// | ||
@@ -382,6 +382,8 @@ class bernoulli_numbers_cache | ||
*out = (i >= m_overflow_limit) ? policies::raise_overflow_error<T>("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, T(i), pol) : bn[i]; | ||
++out; | ||
} | ||
+ #elif defined(BOOST_MATH_NO_ATOMIC_INT) | ||
+ static_assert(sizeof(T) == 1, "Unsupported configuration: your platform appears to have no atomic integers. If you are happy with thread-unsafe code, then you may define BOOST_MATH_BERNOULLI_UNTHREADED to suppress this error."); | ||
#else | ||
// | ||
// Double-checked locking pattern, lets us access cached already cached values | ||
@@ -464,7 +466,7 @@ class bernoulli_numbers_cache | ||
return out; | ||
} | ||
|
||
- #ifndef BOOST_HAS_THREADS | ||
+ #if !defined(BOOST_HAS_THREADS) || defined(BOOST_MATH_BERNOULLI_UNTHREADED) | ||
// | ||
// Single threaded code, very simple: | ||
// | ||
@@ -494,6 +496,8 @@ class bernoulli_numbers_cache | ||
} | ||
++out; | ||
} | ||
+ #elif defined(BOOST_MATH_NO_ATOMIC_INT) | ||
+ static_assert(sizeof(T) == 1, "Unsupported configuration: your platform appears to have no atomic integers. If you are happy with thread-unsafe code, then you may define BOOST_MATH_BERNOULLI_UNTHREADED to suppress this error."); | ||
#else | ||
// | ||
// Double-checked locking pattern, lets us access cached already cached values | ||
@@ -555,7 +559,7 @@ class bernoulli_numbers_cache | ||
// The value at which we know overflow has already occurred for the Bn: | ||
std::size_t m_overflow_limit; | ||
|
||
- #ifdef BOOST_HAS_THREADS | ||
+ #if defined(BOOST_HAS_THREADS) && !defined(BOOST_MATH_NO_ATOMIC_INT) | ||
std::mutex m_mutex; | ||
atomic_counter_type m_counter, m_current_precision; | ||
#else | ||
diff --git a/libs/math/test/Jamfile.v2 b/libs/math/test/Jamfile.v2 | ||
index 52fb87f5e5..3ac63f9279 100644 | ||
--- a/libs/math/test/Jamfile.v2 | ||
+++ b/libs/math/test/Jamfile.v2 | ||
@@ -1137,6 +1137,9 @@ test-suite misc : | ||
|
||
# [ run __temporary_test.cpp test_instances//test_instances : : : <test-info>always_show_run_output <pch>off ] | ||
[ compile test_no_long_double_policy.cpp ] | ||
+ [ compile compile_test/bernoulli_no_atomic_d.cpp ] | ||
+ [ compile compile_test/bernoulli_no_atomic_mp.cpp ] | ||
+ [ compile-fail compile_test/bernoulli_no_atomic_fail.cpp ] | ||
; | ||
|
||
test-suite interpolators : | ||
diff --git a/test/compile_test/bernoulli_no_atomic_d.cpp b/test/compile_test/bernoulli_no_atomic_d.cpp | ||
new file mode 100644 | ||
index 0000000000..61926f7e1f | ||
--- /dev/null | ||
+++ b/test/compile_test/bernoulli_no_atomic_d.cpp | ||
@@ -0,0 +1,14 @@ | ||
+// (C) Copyright John Maddock 2021. | ||
+// Use, modification and distribution are subject to the | ||
+// Boost Software License, Version 1.0. (See accompanying file | ||
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||
+ | ||
+#define BOOST_MATH_NO_ATOMIC_INT | ||
+ | ||
+#include <boost/math/special_functions/bernoulli.hpp> | ||
+#include "test_compile_result.hpp" | ||
+ | ||
+void compile_and_link_test() | ||
+{ | ||
+ check_result<double>(boost::math::bernoulli_b2n<double>(4)); | ||
+} | ||
diff --git a/test/compile_test/bernoulli_no_atomic_fail.cpp b/test/compile_test/bernoulli_no_atomic_fail.cpp | ||
new file mode 100644 | ||
index 0000000000..bbd7152412 | ||
--- /dev/null | ||
+++ b/test/compile_test/bernoulli_no_atomic_fail.cpp | ||
@@ -0,0 +1,15 @@ | ||
+// (C) Copyright John Maddock 2021. | ||
+// Use, modification and distribution are subject to the | ||
+// Boost Software License, Version 1.0. (See accompanying file | ||
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||
+ | ||
+#define BOOST_MATH_NO_ATOMIC_INT | ||
+ | ||
+#include <boost/math/special_functions/bernoulli.hpp> | ||
+#include <boost/multiprecision/cpp_bin_float.hpp> | ||
+#include "test_compile_result.hpp" | ||
+ | ||
+void compile_and_link_test() | ||
+{ | ||
+ check_result<boost::multiprecision::cpp_bin_float_50>(boost::math::bernoulli_b2n<boost::multiprecision::cpp_bin_float_50>(4)); | ||
+} | ||
diff --git a/test/compile_test/bernoulli_no_atomic_mp.cpp b/test/compile_test/bernoulli_no_atomic_mp.cpp | ||
new file mode 100644 | ||
index 0000000000..8d5a6e78e6 | ||
--- /dev/null | ||
+++ b/test/compile_test/bernoulli_no_atomic_mp.cpp | ||
@@ -0,0 +1,16 @@ | ||
+// (C) Copyright John Maddock 2021. | ||
+// Use, modification and distribution are subject to the | ||
+// Boost Software License, Version 1.0. (See accompanying file | ||
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||
+ | ||
+#define BOOST_MATH_NO_ATOMIC_INT | ||
+#define BOOST_MATH_BERNOULLI_UNTHREADED | ||
+ | ||
+#include <boost/math/special_functions/bernoulli.hpp> | ||
+#include <boost/multiprecision/cpp_bin_float.hpp> | ||
+#include "test_compile_result.hpp" | ||
+ | ||
+void compile_and_link_test() | ||
+{ | ||
+ check_result<boost::multiprecision::cpp_bin_float_50>(boost::math::bernoulli_b2n<boost::multiprecision::cpp_bin_float_50>(4)); | ||
+} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters