1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
From: Markus Blatt <markus@dr-blatt.de>
Date: Thu, 18 Sep 2025 07:50:35 +0200
Subject: Skip defining math functions for __float128 if they already exist
---
cmake/Modules/FindQuadMath.cmake | 15 +++++++++++++--
opm/material/common/quad.hpp | 12 ++++++------
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/cmake/Modules/FindQuadMath.cmake b/cmake/Modules/FindQuadMath.cmake
index 96873f6..01a102d 100644
--- a/cmake/Modules/FindQuadMath.cmake
+++ b/cmake/Modules/FindQuadMath.cmake
@@ -68,9 +68,20 @@ if(QuadMath_FOUND AND NOT TARGET QuadMath::QuadMath)
std::cout<<b;
return 0;
}" QuadMath_HAS_IO_OPERATOR)
- cmake_pop_check_state() # Reset CMAKE_REQUIRED_XXX variables
+
if(QuadMath_HAS_IO_OPERATOR)
target_compile_definitions(QuadMath::QuadMath INTERFACE QUADMATH_HAS_IO_OPERATOR=1)
endif()
-
+ check_cxx_source_compiles("
+ #include <cmath>
+ int main()
+ {
+ __float128 b=10;
+ __float128 c=atan(b);
+ }" QuadMath_HAS_MATH_OPS)
+ cmake_pop_check_state() # Reset CMAKE_REQUIRED_XXX variables
+ if(QuadMath_HAS_MATH_OPS)
+ target_compile_definitions(QuadMath::QuadMath INTERFACE QUADMATH_HAS_MATH_OPERATORS=1)
+ endif()
+ cmake_pop_check_state() # Reset CMAKE_REQUIRED_XXX variables
endif()
diff --git a/opm/material/common/quad.hpp b/opm/material/common/quad.hpp
index 9f4c10a..084289b 100644
--- a/opm/material/common/quad.hpp
+++ b/opm/material/common/quad.hpp
@@ -266,6 +266,7 @@ inline typename std::istream& operator>>(std::istream& is, quad& val)
}
#endif
+#if !QUADMATH_HAS_MATH_OPERATORS
inline quad real(quad val)
{ return val; }
@@ -278,7 +279,6 @@ inline quad imag(quad)
inline quad imag(const std::complex<quad>& val)
{ return val.imag(); }
-#if !LIMITS_HAS_QUAD
inline quad abs(quad val)
{ return (val < 0) ? -val : val; }
@@ -287,7 +287,7 @@ inline quad floor(quad val)
inline quad ceil(quad val)
{ return ceilq(val); }
-#endif
+
inline quad max(quad a, quad b)
{ return (a > b) ? a : b; }
@@ -295,10 +295,10 @@ inline quad max(quad a, quad b)
inline quad min(quad a, quad b)
{ return (a < b) ? a : b; }
-#if !LIMITS_HAS_QUAD
+
inline quad sqrt(quad val)
{ return sqrtq(val); }
-#endif
+#endif // !QUADMATH_HAS_MATH_OPERATORS
template <class ExpType>
inline quad pow(quad base, ExpType exp)
@@ -308,7 +308,7 @@ template <class BaseType>
inline quad pow(BaseType base, quad exp)
{ return powq(static_cast<quad>(base), exp); }
-#if !LIMITS_HAS_QUAD
+#if !QUADMATH_HAS_MATH_OPERATORS
inline quad pow(quad base, quad exp)
{ return powq(base, exp); }
@@ -344,7 +344,7 @@ inline bool isnan(quad val)
inline bool isinf(quad val)
{ return isinfq(val); }
-#endif
+#endif // QUADMATH_HAS_MATH_OPERATORS
} // namespace std
|