Skip to content

fp: support environments without hardware floating point#1646

Merged
obiltschnig merged 1 commit intopocoproject:developfrom
andred:nofpu-fix
Mar 30, 2017
Merged

fp: support environments without hardware floating point#1646
obiltschnig merged 1 commit intopocoproject:developfrom
andred:nofpu-fix

Conversation

@andred
Copy link
Copy Markdown

@andred andred commented Mar 22, 2017

| cd /Foundation &&
| mipsel-poky-linux-musl-g++ -DFoundation_EXPORTS -DHAVE_PTHREAD_SETAFFINITY_NP -DHAVE_THREE_PARAM_SCHED_SETAFFINITY
| -DPCRE_STATIC -DPOCO_HAVE_FD_EPOLL -DPOCO_NO_AUTOMATIC_LIBS -DPOCO_OS_FAMILY_UNIX -DPOCO_UNBUNDLED
| -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_REENTRANT -D_THREAD_SAFE -D_XOPEN_SOURCE=500
| -I/usr/include -I/Foundation/include -I/Foundation/src
| -mel -mabi=32 -msoft-float -march=mips32r2 -mno-mips16 -minterlink-compressed -mtune=24kec -mdsp
| --sysroot= -O2 -pipe -g -feliminate-unused-debug-types
| -fstack-protector-strong -pie -fpie -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security
| -fvisibility-inlines-hidden -mel -mabi=32 -msoft-float -march=mips32r2 -mno-mips16 -minterlink-compressed
| -mtune=24kec -mdsp --sysroot= -O2 -g -DNDEBUG -fPIC
| -o CMakeFiles/Foundation.dir/src/ArchiveStrategy.cpp.o
| -c /Foundation/src/ArchiveStrategy.cpp
| In file included from /Foundation/include/Poco/FPEnvironment.h:33:0,
| from /Foundation/include/Poco/NumericString.h:25,
| from /Foundation/include/Poco/NumberFormatter.h:24,
| from /Foundation/include/Poco/ArchiveStrategy.h:27,
| from /Foundation/src/ArchiveStrategy.cpp:17:
| /Foundation/include/Poco/FPEnvironment_C99.h:36:30: error: 'FE_DOWNWARD' was not declared in this scope
| FP_ROUND_DOWNWARD_IMPL = FE_DOWNWARD,
| ^~~~~~~~~~~
| /Foundation/include/Poco/FPEnvironment_C99.h:37:30: error: 'FE_UPWARD' was not declared in this scope
| FP_ROUND_UPWARD_IMPL = FE_UPWARD,
| ^~~~~~~~~
| /Foundation/include/Poco/FPEnvironment_C99.h:39:30: error: 'FE_TOWARDZERO' was not declared in this scope
| FP_ROUND_TOWARDZERO_IMPL = FE_TOWARDZERO
| ^~~~~~~~~~~~~
| /Foundation/include/Poco/FPEnvironment_C99.h:43:28: error: 'FE_DIVBYZERO' was not declared in this scope
| FP_DIVIDE_BY_ZERO_IMPL = FE_DIVBYZERO,
| ^~~~~~~~~~~~
| /Foundation/include/Poco/FPEnvironment_C99.h:44:28: error: 'FE_INEXACT' was not declared in this scope
| FP_INEXACT_IMPL = FE_INEXACT,
| ^~~~~~~~~~
| /Foundation/include/Poco/FPEnvironment_C99.h:45:28: error: 'FE_OVERFLOW' was not declared in this scope
| FP_OVERFLOW_IMPL = FE_OVERFLOW,
| ^~~~~~~~~~~
| /Foundation/include/Poco/FPEnvironment_C99.h:46:28: error: 'FE_UNDERFLOW' was not declared in this scope
| FP_UNDERFLOW_IMPL = FE_UNDERFLOW,
| ^~~~~~~~~~~~
| /Foundation/include/Poco/FPEnvironment_C99.h:47:28: error: 'FE_INVALID' was not declared in this scope
| FP_INVALID_IMPL = FE_INVALID
| ^~~~~~~~~~

The reason is that some (notably FPU-less) architectures,
including mips*-nf, don't define/implement some of the
floating point constants, even though fenv.h is
available.

The key point is:
A fully standards conforming fenv.h does not have to
define any FE_* macros, and if it does define them,
then it defines macros only for the FP exceptions it
actually supports.

See similar issue in boost:
https://svn.boost.org/trac/boost/ticket/11756

| cd <build>/Foundation && \
|    mipsel-poky-linux-musl-g++   -DFoundation_EXPORTS -DHAVE_PTHREAD_SETAFFINITY_NP -DHAVE_THREE_PARAM_SCHED_SETAFFINITY \
|         -DPCRE_STATIC -DPOCO_HAVE_FD_EPOLL -DPOCO_NO_AUTOMATIC_LIBS -DPOCO_OS_FAMILY_UNIX -DPOCO_UNBUNDLED \
|         -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_REENTRANT -D_THREAD_SAFE -D_XOPEN_SOURCE=500 \
|         -I<sysroot>/usr/include -I<poco>/Foundation/include -I<poco>/Foundation/src  \
|         -mel -mabi=32 -msoft-float -march=mips32r2 -mno-mips16  -minterlink-compressed -mtune=24kec -mdsp  \
|         --sysroot=<sysroot> -O2 -pipe -g -feliminate-unused-debug-types \
|         -fstack-protector-strong -pie -fpie -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security \
|         -fvisibility-inlines-hidden  -mel -mabi=32 -msoft-float -march=mips32r2 -mno-mips16  -minterlink-compressed \
|         -mtune=24kec -mdsp  --sysroot=<sysroot> -O2 -g -DNDEBUG -fPIC   \
|         -o CMakeFiles/Foundation.dir/src/ArchiveStrategy.cpp.o \
|         -c <poco>/Foundation/src/ArchiveStrategy.cpp
| In file included from <poco>/Foundation/include/Poco/FPEnvironment.h:33:0,
|                  from <poco>/Foundation/include/Poco/NumericString.h:25,
|                  from <poco>/Foundation/include/Poco/NumberFormatter.h:24,
|                  from <poco>/Foundation/include/Poco/ArchiveStrategy.h:27,
|                  from <poco>/Foundation/src/ArchiveStrategy.cpp:17:
| <poco>/Foundation/include/Poco/FPEnvironment_C99.h:36:30: error: 'FE_DOWNWARD' was not declared in this scope
|    FP_ROUND_DOWNWARD_IMPL   = FE_DOWNWARD,
|                               ^~~~~~~~~~~
| <poco>/Foundation/include/Poco/FPEnvironment_C99.h:37:30: error: 'FE_UPWARD' was not declared in this scope
|    FP_ROUND_UPWARD_IMPL     = FE_UPWARD,
|                               ^~~~~~~~~
| <poco>/Foundation/include/Poco/FPEnvironment_C99.h:39:30: error: 'FE_TOWARDZERO' was not declared in this scope
|    FP_ROUND_TOWARDZERO_IMPL = FE_TOWARDZERO
|                               ^~~~~~~~~~~~~
| <poco>/Foundation/include/Poco/FPEnvironment_C99.h:43:28: error: 'FE_DIVBYZERO' was not declared in this scope
|    FP_DIVIDE_BY_ZERO_IMPL = FE_DIVBYZERO,
|                             ^~~~~~~~~~~~
| <poco>/Foundation/include/Poco/FPEnvironment_C99.h:44:28: error: 'FE_INEXACT' was not declared in this scope
|    FP_INEXACT_IMPL        = FE_INEXACT,
|                             ^~~~~~~~~~
| <poco>/Foundation/include/Poco/FPEnvironment_C99.h:45:28: error: 'FE_OVERFLOW' was not declared in this scope
|    FP_OVERFLOW_IMPL       = FE_OVERFLOW,
|                             ^~~~~~~~~~~
| <poco>/Foundation/include/Poco/FPEnvironment_C99.h:46:28: error: 'FE_UNDERFLOW' was not declared in this scope
|    FP_UNDERFLOW_IMPL      = FE_UNDERFLOW,
|                             ^~~~~~~~~~~~
| <poco>/Foundation/include/Poco/FPEnvironment_C99.h:47:28: error: 'FE_INVALID' was not declared in this scope
|    FP_INVALID_IMPL        = FE_INVALID
|                             ^~~~~~~~~~

The reason is that some (notably FPU-less) architectures,
including mips*-nf, don't define/implement some of the
floating point constants, even though fenv.h is
available.

The key point is:
  A fully standards conforming fenv.h does not have to
  define any FE_* macros, and if it does define them,
  then it defines macros only for the FP exceptions it
  actually supports.

See similar issue in boost:
  https://svn.boost.org/trac/boost/ticket/11756
@obiltschnig obiltschnig merged commit 63b6be6 into pocoproject:develop Mar 30, 2017
@andred andred deleted the nofpu-fix branch May 11, 2017 10:28
uilianries added a commit to uilianries/poco that referenced this pull request May 21, 2021
Signed-off-by: Uilian Ries <uilianries@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants