Author: Dharanendiran <dharanendiran@timesys.com>
Date: Tue, 3 Oct 2023 13:34:31 +0530

Error log:

/home/timesys/build_armv7l-timesys-linux-uclibcgnueabi/mysql-5.7.43/mysql-server-mysql-5.7.43/libmysqld/../sql/mysqld.cc:196:14: error: 'FE_TONEAREST' was not declared in this scope
   fesetround(FE_TONEAREST);


---
 config.h.cmake  | 1 +
 configure.cmake | 7 +++++++
 sql/mysqld.cc   | 5 +++++
 3 files changed, 13 insertions(+)

diff --git a/config.h.cmake b/config.h.cmake
index ac25ce6e..fd1081ab 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -168,6 +168,7 @@
 
 #cmakedefine HAVE_ISINF 1
 #cmakedefine HAVE_FINITE 1
+#cmakedefine HAVE_FESETROUND 1
 
 #cmakedefine HAVE_KQUEUE_TIMERS 1
 #cmakedefine HAVE_POSIX_TIMERS 1
diff --git a/configure.cmake b/configure.cmake
index 89bf0301..e240b714 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -400,6 +400,13 @@ ELSE()
   SET(HAVE_ISINF 0 CACHE INTERNAL "isinf visible in C and C++" FORCE)
 ENDIF()
 
+# fesetround() prototype not found in gcc compatibility file fenv.h
+CHECK_CXX_SOURCE_COMPILES(
+"#include  <fenv.h>
+int main() {
+  fesetround(FE_TONEAREST);
+  return 0;
+}" HAVE_FESETROUND)
 
 # The results of these four checks are only needed here, not in code.
 CHECK_FUNCTION_EXISTS (timer_create HAVE_TIMER_CREATE)
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index cb6f9c58..1aeba945 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -30,7 +30,10 @@
 #include <set>
 #include <string>
 
+#ifdef HAVE_FESETROUND
 #include <fenv.h>
+#endif
+
 #include <signal.h>
 #ifdef HAVE_SYS_WAIT_H
 #include <sys/wait.h>
@@ -192,8 +195,10 @@ inline void setup_fpu()
   fedisableexcept(FE_ALL_EXCEPT);
 #endif
 
+#ifdef HAVE_FESETROUND
   /* Set FPU rounding mode to "round-to-nearest" */
   fesetround(FE_TONEAREST);
+#endif
 
   /*
     x86 (32-bit) requires FPU precision to be explicitly set to 64 bit
-- 
2.25.1

