boost: Add patch to avoid undefined references to boost::atomic::lockpool::get_lock_for()

Boost::thread uses functions from boost::atomic but doesn't actually
link with libboost_atomic.  This works fine on platforms where
BOOST_ATOMIC_FLAG_LOCK_FREE is true but will lead to undefined
symbol references otherwise.  Fix this by applying a patch from
the upstream bug tracker to add the missing library linkage.

(From OE-Core master rev: 1ffc27173576589191b037d111ecb59d94631de0)

(From OE-Core rev: 306fd06c7687340a0d4eb90e9aba9dc8669db07c)

Signed-off-by: Phil Blundell <pb@pbcl.net>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Phil Blundell 2013-11-14 14:41:21 +00:00 committed by Richard Purdie
parent fbe8b3ce1f
commit a8008ea07b
2 changed files with 60 additions and 0 deletions

View File

@ -3,4 +3,5 @@ include boost.inc
SRC_URI += "file://arm-intrinsics.patch \
file://glibc.patch \
file://boost-1.54.0-thread-link_atomic.patch \
"

View File

@ -0,0 +1,59 @@
Link boost_thread with boost_atomic to avoid undefined references to
boost::atomic::detail::lock_pool::get_lock_for().
From https://svn.boost.org/trac/boost/ticket/9041
Phil Blundell <pb@pbcl.net>
Upstream-Status: Backport
diff -Nurp boost_1_54_0/libs/thread/build/has_atomic_flag_lockfree_test.cpp boost_1_54_0.pm/libs/thread/build/has_atomic_flag_lockfree_test.cpp
--- boost_1_54_0/libs/thread/build/has_atomic_flag_lockfree_test.cpp 1970-01-01 01:00:00.000000000 +0100
+++ boost_1_54_0.pm/libs/thread/build/has_atomic_flag_lockfree_test.cpp 2013-08-23 19:51:52.706329968 +0200
@@ -0,0 +1,14 @@
+// Copyright (c) 2013, Petr Machata, Red Hat Inc.
+//
+// Use modification and distribution are subject to the boost Software
+// License, Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+#include "../../../boost/atomic.hpp"
+#include "../../../boost/static_assert.hpp"
+
+int
+main(int argc, char *argv[])
+{
+ BOOST_STATIC_ASSERT(BOOST_ATOMIC_FLAG_LOCK_FREE);
+ return 0;
+}
diff -Nurp boost_1_54_0/libs/thread/build/Jamfile.v2 boost_1_54_0.pm/libs/thread/build/Jamfile.v2
--- boost_1_54_0/libs/thread/build/Jamfile.v2 2013-06-15 12:35:45.000000000 +0200
+++ boost_1_54_0.pm/libs/thread/build/Jamfile.v2 2013-08-23 19:52:30.018613408 +0200
@@ -36,6 +36,7 @@ import os ;
import feature ;
import indirect ;
import path ;
+import configure ;
project boost/thread
: source-location ../src
@@ -140,6 +141,8 @@ local rule default_threadapi ( )
feature.feature threadapi : pthread win32 : propagated ;
feature.set-default threadapi : [ default_threadapi ] ;
+exe has_atomic_flag_lockfree : ../build/has_atomic_flag_lockfree_test.cpp ;
+
rule tag ( name : type ? : property-set )
{
local result = $(name) ;
@@ -248,6 +251,12 @@ rule requirements ( properties * )
{
local result ;
+ if ! [ configure.builds has_atomic_flag_lockfree
+ : $(properties) : "lockfree boost::atomic_flag" ]
+ {
+ result += <library>/boost/atomic//boost_atomic ;
+ }
+
if <threadapi>pthread in $(properties)
{
result += <define>BOOST_THREAD_POSIX ;