All of lore.kernel.org
 help / color / mirror / Atom feed
From: "André Draszik" <git@andred.net>
To: openembedded-core@lists.openembedded.org
Subject: [PATCH v3 2/3] boost: fix mips soft float compilation
Date: Sat,  3 Sep 2016 01:12:21 +0100	[thread overview]
Message-ID: <20160903001222.2864-3-git@andred.net> (raw)
In-Reply-To: <20160903001222.2864-1-git@andred.net>

Upstream-Status: Submitted https://svn.boost.org/trac/boost/ticket/11756

Signed-off-by: André Draszik <git@andred.net>
---
 ...execution_monitor.hpp-fix-mips-soft-float.patch | 145 +++++++++++++++++++++
 meta/recipes-support/boost/boost_1.61.0.bb         |   1 +
 2 files changed, 146 insertions(+)
 create mode 100644 meta/recipes-support/boost/boost/0002-boost-test-execution_monitor.hpp-fix-mips-soft-float.patch

diff --git a/meta/recipes-support/boost/boost/0002-boost-test-execution_monitor.hpp-fix-mips-soft-float.patch b/meta/recipes-support/boost/boost/0002-boost-test-execution_monitor.hpp-fix-mips-soft-float.patch
new file mode 100644
index 0000000..569c987
--- /dev/null
+++ b/meta/recipes-support/boost/boost/0002-boost-test-execution_monitor.hpp-fix-mips-soft-float.patch
@@ -0,0 +1,145 @@
+From 5c349a1c391c9ce171a1c80f5164fae764f27dba Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <adraszik@tycoint.com>
+Date: Wed, 24 Aug 2016 20:58:59 +0100
+Subject: [PATCH 2/4] boost/test/execution_monitor.hpp: fix mips soft float
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+gcc.compile.c++ <builddir>/boost/bin.v2/libs/test/build/gcc-4.3.1/release/threading-multi/execution_monitor.o
+
+    "mipsel-poky-linux-musl-g++" "-mel" "-mabi=32" "-msoft-float" "-march=mips32r2" "-mips16" "-minterlink-compressed" "-mtune=24kec" "-mdsp" "-Wl,-O1" "-Wl,--as-needed" "-fstack-protector-strong" "-Wl,-z,relro,-z,now" "--sysroot=<sysroot>"  -ftemplate-depth-128 -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=<srcdir>=/usr/src/debug/boost/1.61.0-r0 -fdebug-prefix-map=<sysroot_host>= -fdebug-prefix-map=<sysroot>= -fstack-protector-strong -pie -fpie -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -fvisibility-inlines-hidden -O3 -finline-functions -Wno-inline -Wall -pedantic -pthread -fPIC -Wno-variadic-macros -DBOOST_ALL_NO_LIB=1 -DBOOST_CHRONO_DYN_LINK=1 -DBOOST_SYSTEM_DYN_LINK=1 -DBOOST_SYSTEM_NO_DEPRECATED -DBOOST_TEST_DYN_LINK=1 -DBOOST_TIMER_DYN_LINK=1 -DNDEBUG  -I"." -c -o "<builddir>/boost/bin.v2/libs/test/build/gcc-4.3.1/release/threading-multi/execution_monitor.o" "libs/test/src/execution_monitor.cpp"
+
+In file included from ./boost/test/impl/execution_monitor.ipp:31:0,
+                 from libs/test/src/execution_monitor.cpp:16:
+./boost/test/execution_monitor.hpp:491:27: error: 'FE_DIVBYZERO' was not declared in this scope
+     BOOST_FPE_DIVBYZERO = FE_DIVBYZERO,
+                           ^~~~~~~~~~~~
+./boost/test/execution_monitor.hpp:492:27: error: 'FE_INEXACT' was not declared in this scope
+     BOOST_FPE_INEXACT   = FE_INEXACT,
+                           ^~~~~~~~~~
+./boost/test/execution_monitor.hpp:493:27: error: 'FE_INVALID' was not declared in this scope
+     BOOST_FPE_INVALID   = FE_INVALID,
+                           ^~~~~~~~~~
+./boost/test/execution_monitor.hpp:494:27: error: 'FE_OVERFLOW' was not declared in this scope
+     BOOST_FPE_OVERFLOW  = FE_OVERFLOW,
+                           ^~~~~~~~~~~
+./boost/test/execution_monitor.hpp:495:27: error: 'FE_UNDERFLOW' was not declared in this scope
+     BOOST_FPE_UNDERFLOW = FE_UNDERFLOW,
+                           ^~~~~~~~~~~~
+
+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.
+
+So correct usage requires a triple check:
+1) Check BOOST_NO_FENV_H to see if the header is supported.
+2) Include the header and then check FE_ALL_EXCEPT to see
+   if any FP exceptions are supported.
+3) Before using the individual FE_* macros, you need to
+   check for their existence too as not all may be
+   supported.
+
+https://svn.boost.org/trac/boost/ticket/11756
+
+Other projects have similar issues, e.g. pixman, and
+apply similar work-arounds:
+  https://lists.freedesktop.org/archives/pixman/2014-February/003172.html
+
+Architectures are notably also allowed to define FE_ALL_EXCEPT to 0!
+Keeping this in mind, and knowing that the compiler will eliminate
+code that can't be executed, we can change BOOST_FPE_ALL to be 0 for
+the case of compiling using Clang and/or fenv.h being unavailable
+as well, which allows simplification of the #ifdef's in
+execution_monitor.ipp a bit.
+
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+---
+Upstream-Status: Submitted https://svn.boost.org/trac/boost/ticket/11756
+ boost/test/execution_monitor.hpp      | 26 +++++++++++++++++++++++++-
+ boost/test/impl/execution_monitor.ipp | 10 ++++++++--
+ 2 files changed, 33 insertions(+), 3 deletions(-)
+
+diff --git a/boost/test/execution_monitor.hpp b/boost/test/execution_monitor.hpp
+index 0eee497..44fe59d 100644
+--- a/boost/test/execution_monitor.hpp
++++ b/boost/test/execution_monitor.hpp
+@@ -486,15 +486,39 @@ enum masks {
+     BOOST_FPE_ALL       = MCW_EM,
+ #elif defined(BOOST_NO_FENV_H) || defined(BOOST_CLANG) \
+     || defined(__ARM_PCS)
+-    BOOST_FPE_ALL       = 1,
++    BOOST_FPE_ALL       = 0,
+ #else
++#if defined(FE_DIVBYZERO)
+     BOOST_FPE_DIVBYZERO = FE_DIVBYZERO,
++#else
++    BOOST_FPE_DIVBYZERO = 0,
++#endif
++#if defined(FE_INEXACT)
+     BOOST_FPE_INEXACT   = FE_INEXACT,
++#else
++    BOOST_FPE_INEXACT   = 0,
++#endif
++#if defined(FE_INVALID)
+     BOOST_FPE_INVALID   = FE_INVALID,
++#else
++    BOOST_FPE_INVALID   = 0,
++#endif
++#if defined(FE_OVERFLOW)
+     BOOST_FPE_OVERFLOW  = FE_OVERFLOW,
++#else
++    BOOST_FPE_OVERFLOW  = 0,
++#endif
++#if defined(FE_UNDERFLOW)
+     BOOST_FPE_UNDERFLOW = FE_UNDERFLOW,
++#else
++    BOOST_FPE_UNDERFLOW = 0,
++#endif
+ 
++#if defined(FE_ALL_EXCEPT)
+     BOOST_FPE_ALL       = FE_ALL_EXCEPT,
++#else
++    BOOST_FPE_ALL       = 0,
++#endif
+ #endif
+     BOOST_FPE_INV       = BOOST_FPE_ALL+1
+ };
+diff --git a/boost/test/impl/execution_monitor.ipp b/boost/test/impl/execution_monitor.ipp
+index f7fc8ea..d1088b9 100644
+--- a/boost/test/impl/execution_monitor.ipp
++++ b/boost/test/impl/execution_monitor.ipp
+@@ -1381,7 +1381,10 @@ enable( unsigned mask )
+ #endif
+ 
+     return ~old_cw & BOOST_FPE_ALL;
+-#elif defined(__GLIBC__) && defined(__USE_GNU) && !defined(BOOST_CLANG) && !defined(BOOST_NO_FENV_H)
++#elif defined(__GLIBC__) && defined(__USE_GNU)
++    if (BOOST_FPE_ALL == 0)
++        /* Not Implemented */
++        return 0;
+     feclearexcept(BOOST_FPE_ALL);
+     int res = feenableexcept( mask );
+     return res == -1 ? (unsigned)BOOST_FPE_INV : (unsigned)res;
+@@ -1418,7 +1421,10 @@ disable( unsigned mask )
+ #endif
+ 
+     return ~old_cw & BOOST_FPE_ALL;
+-#elif defined(__GLIBC__) && defined(__USE_GNU) && !defined(BOOST_CLANG) && !defined(BOOST_NO_FENV_H)
++#elif defined(__GLIBC__) && defined(__USE_GNU)
++    if (BOOST_FPE_ALL == 0)
++        /* Not Implemented */
++        return BOOST_FPE_INV;
+     feclearexcept(BOOST_FPE_ALL);
+     int res = fedisableexcept( mask );
+     return res == -1 ? (unsigned)BOOST_FPE_INV : (unsigned)res;
+-- 
+2.9.3
+
diff --git a/meta/recipes-support/boost/boost_1.61.0.bb b/meta/recipes-support/boost/boost_1.61.0.bb
index 41ff203..de482ee 100644
--- a/meta/recipes-support/boost/boost_1.61.0.bb
+++ b/meta/recipes-support/boost/boost_1.61.0.bb
@@ -6,4 +6,5 @@ SRC_URI += "\
     file://consider-hardfp.patch \
     file://boost-CVE-2012-2677.patch \
     file://0001-boost-asio-detail-socket_types.hpp-fix-poll.h-includ.patch \
+    file://0002-boost-test-execution_monitor.hpp-fix-mips-soft-float.patch \
 "
-- 
2.9.3



  parent reply	other threads:[~2016-09-03  0:12 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-29 11:03 [PATCH 0/3] boost mips16e and soft-float fixes André Draszik
2016-08-29 11:03 ` [PATCH 1/3] boost: fix a musl compilation warning André Draszik
2016-08-29 11:03 ` [PATCH 2/3] boost: fix compilation using soft float toolchains André Draszik
2016-08-29 11:16   ` André Draszik
2016-08-29 11:03 ` [PATCH 3/3] boost: fix MIPS16e compilation André Draszik
2016-08-29 11:55 ` [PATCH v2 0/3] boost mips16e and soft-float fixes André Draszik
2016-08-29 11:55   ` [PATCH v2 1/3] boost: fix a musl compilation warning André Draszik
2016-08-29 11:55   ` [PATCH v2 2/3] boost: fix compilation using soft float toolchains André Draszik
2016-08-29 11:55   ` [PATCH v2 3/3] boost: fix MIPS16e compilation André Draszik
2016-08-30 16:00   ` [PATCH v2 0/3] boost mips16e and soft-float fixes Richard Purdie
2016-08-30 16:05     ` André Draszik
2016-09-03  0:12 ` [PATCH v3 " André Draszik
2016-09-03  0:12   ` [PATCH v3 1/3] boost: fix a musl compilation warning André Draszik
2016-09-03  0:12   ` André Draszik [this message]
2016-09-03  0:12   ` [PATCH v3 3/3] boost: fix MIPS16e compilation André Draszik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160903001222.2864-3-git@andred.net \
    --to=git@andred.net \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.