[OE-core] [PATCH] classes/cmake: Use relative RPATHs

Joshua Watt jpewhacker at gmail.com
Thu Nov 21 16:59:11 UTC 2019


In most cases, the RPATH is stripped out when the ELF file is packages,
but by then the damage is done from a reproducible perspective because
this absolute path is hashed as part of the build-id generated at link
time ([1] has a good explanation). Fortunately, newer cmake has an
option to generated relative RPATHs that use $ORIGIN to set the path, so
set it in the toolchain file.

[1]: https://gitlab.kitware.com/cmake/cmake/issues/18413

Signed-off-by: Joshua Watt <JPEWhacker at gmail.com>
---
 meta/classes/cmake.bbclass | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
index 291f1e8d448..8ccb1eefc7d 100644
--- a/meta/classes/cmake.bbclass
+++ b/meta/classes/cmake.bbclass
@@ -120,6 +120,9 @@ set( ENV{QT_CONF_PATH} ${WORKDIR}/qt.conf )
 # directory as rpath by default
 set( CMAKE_INSTALL_RPATH ${OECMAKE_RPATH} )
 
+# Use RPATHs relative to build directory for reproducibility
+set( CMAKE_BUILD_RPATH_USE_ORIGIN ON )
+
 # Use our cmake modules
 list(APPEND CMAKE_MODULE_PATH "${STAGING_DATADIR}/cmake/Modules/")
 
-- 
2.23.0



More information about the Openembedded-core mailing list