termux-packages/packages/openfoam/src-OSspecific-POSIX-signals-sigFpe.C.patch
Henrik Grimler cb8e5946b2 openfoam: update to 21.06
Finally a working build :)

Tests done: run cavity tutorial on aarch64 and arm.

TODO/things that would be nice to test:

* Check if we actually need to set WM_{CC,CXX,CFLAGS,CXXFLAGS} in
  etc/config.sh/settings.
* Test compilation with Gcc on device
* Look at the __libc_malloc->malloc patch in sigFpe.C again, and try
  to upstream the fix so that it isn't as glibc specific.

We need to remove -std=c++11 from CXXFLAGS, or else we get errors when building with
our (rather new) version of CGAL, for example:

/data/data/com.termux/files/usr/include/CGAL/array.h:72:44: error: no template named 'index_sequence' in namespace 'std'
make_filled_array_aux(const T& value, std::index_sequence<Is...>)
                                      ~~~~~^

/data/data/com.termux/files/usr/include/CGAL/number_utils.h:320:10: warning: 'decltype(auto)' type specifier is a C++14 extension [-Wc++14-extensions]
  decltype(auto) approximate_sqrt(const NT& nt)
           ^
/data/data/com.termux/files/usr/include/CGAL/number_utils.h:320:1: error: deduced return types are a C++14 extension
  decltype(auto) approximate_sqrt(const NT& nt)
  ^
2021-12-04 14:36:37 +01:00

63 lines
1.7 KiB
Diff

--- ./src/OSspecific/POSIX/signals/sigFpe.C.orig 2021-12-01 03:15:50.000000000 +0100
+++ ./src/OSspecific/POSIX/signals/sigFpe.C 2021-12-01 03:15:50.000000000 +0100
@@ -36,7 +36,7 @@
#include <limits>
-#if defined(__linux__) && defined(__GNUC__)
+#if (defined(__linux__) && defined(__GNUC__)) || defined(__ANDROID__)
#ifndef __USE_GNU
#define __USE_GNU // To use feenableexcept()
#endif
@@ -82,8 +82,11 @@
#ifdef __linux__
extern "C"
{
- extern void* __libc_malloc(size_t size);
+ extern void* malloc(size_t size);
+ // The override below gives segmentation fault in malloc on arm so skip
+ // on android for now.
+ #ifndef __ANDROID__
// Override the GLIBC malloc to support mallocNan
void* malloc(size_t size)
{
@@ -93,16 +96,17 @@
}
else
{
- return __libc_malloc(size);
+ return malloc(size);
}
}
+ #endif
}
void* Foam::sigFpe::mallocNan(size_t size)
{
// Call the low-level GLIBC malloc function
- void* result = __libc_malloc(size);
+ void* result = malloc(size);
// Initialize to signalling NaN
UList<scalar> list(reinterpret_cast<scalar*>(result), size/sizeof(scalar));
@@ -117,7 +121,7 @@
void Foam::sigFpe::sigHandler(int)
{
- #if (defined(__linux__) && defined(__GNUC__)) || defined(__APPLE__)
+ #if (defined(__linux__) && defined(__GNUC__)) || defined(__APPLE__) || defined(__ANDROID__)
resetHandler("SIGFPE", SIGFPE);
@@ -125,7 +129,7 @@
error::printStack(Perr);
::raise(SIGFPE); // Throw signal (to old handler)
- #endif // (__linux__ && __GNUC__) || __APPLE__
+ #endif // (__linux__ && __GNUC__) || __APPLE__ || __ANDROID__
}