[oe] [PATCH] cmake.bbclass: set the rpath for native binaries build with cmake
Simon Busch
morphis at gravedo.de
Wed May 4 20:46:29 UTC 2011
On 04.05.2011 18:55, Simon Busch wrote:
> In the default configuration cmake does not set a rpath for its builded binaries. This
> leads to errors at runtime when the binaries not find their needed runtime libraries.
> Please note that this is only done for recipes inheriting the native class!
>
> Signed-off-by: Simon Busch <morphis at gravedo.de>
> ---
> classes/cmake.bbclass | 11 +++++++++++
> 1 files changed, 11 insertions(+), 0 deletions(-)
>
> diff --git a/classes/cmake.bbclass b/classes/cmake.bbclass
> index 40fadea..e8e485a 100644
> --- a/classes/cmake.bbclass
> +++ b/classes/cmake.bbclass
> @@ -24,6 +24,13 @@ OECMAKE_CXX_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${TARGET_CPPFLAGS} -f
> OECMAKE_C_FLAGS_RELEASE ?= "${SELECTED_OPTIMIZATION} -DNDEBUG"
> OECMAKE_CXX_FLAGS_RELEASE ?= "${SELECTED_OPTIMIZATION} -DNDEBUG"
>
> +OECMAKE_RPATH ?= ""
> +python __anonymous() {
> + # Only set OECMAKE_RPATH if we build a native recipe
> + if bb.data.inherits_class('native', d) and not bb.data.inherits_class('cross', d):
> + bb.data.setVar('OECMAKE_RPATH', '${libdir}', d)
> +}
> +
> cmake_do_generate_toolchain_file() {
> # CMake system name must be something like "Linux".
> # This is important for cross-compiling.
> @@ -44,6 +51,10 @@ cmake_do_generate_toolchain_file() {
> echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )" >> ${WORKDIR}/toolchain.cmake
> # Use qt.conf settings
> echo "set( ENV{QT_CONF_PATH} ${WORKDIR}/qt.conf )" >> ${WORKDIR}/toolchain.cmake
> +
> +# We need to set the rpath to the correct directory as cmake does not provide any
> +# directory as rpath by default
> + echo "set( CMAKE_INSTALL_RPATH ${OECMAKE_RPATH} )" >> ${WORKDIR}/toolchain.cmake
> }
>
> addtask generate_toolchain_file after do_patch before do_configure
To proof this: I tested it with native and non-native recipes (all
builded with cmake.bbclass) and grep'ed through the resulting binaries
afterwards to be sure there is a rpath in the native ones (and the
correct one) and no one in the non native recipes:
morphis at nirvana ...root/tmp/sysroots/x86_64-linux/usr/bin % objdump -x
generatorrunner | grep RPATH
RPATH $ORIGIN/../lib:$ORIGIN/../lib
morphis at nirvana ...libshiboken-1.0.2-r0.0/package/usr/lib % pwd
/home/morphis/oe/buildroot/tmp/work/armv7a-oe-linux-gnueabi/libshiboken-1.0.2-r0.0/package/usr/lib
morphis at nirvana ...libshiboken-1.0.2-r0.0/package/usr/lib % objdump -x
libshiboken-python2.6.so.1.0.2 | grep RPATH
1 morphis at nirvana ...libshiboken-1.0.2-r0.0/package/usr/lib %
[...]
regards,
Simon
More information about the Openembedded-devel
mailing list