diff options
author | Joshua Lock <josh@linux.intel.com> | 2010-02-11 16:11:01 +0000 |
---|---|---|
committer | Joshua Lock <josh@linux.intel.com> | 2010-02-11 16:21:09 +0000 |
commit | 6e1cc7ca104b78ebb34a15eb4a41e33c7186d2fd (patch) | |
tree | 0f47b358ce2f5e26c43777c79409274eeb218a17 | |
parent | a0795895e317fddb212dc531e2ac8943f433c562 (diff) | |
download | poky-6e1cc7ca104b78ebb34a15eb4a41e33c7186d2fd.tar.gz |
relocatable.bbclass: remove hard-coded rpaths from native binaries
The relocatable path will pre-process built binaries in SYSROOT_DESTDIR and
replace any harcoded dynamic link rpaths with relative paths.
Add an inherit of class in native.bbclass to make our native packages
relocatable and tweak the chrpath recipe so that the native package can make
itself relocatable with the just built chrpath binary.
Signed-off-by: Joshua Lock <josh@linux.intel.com>
-rw-r--r-- | meta/classes/native.bbclass | 3 | ||||
-rw-r--r-- | meta/classes/relocatable.bbclass | 24 | ||||
-rw-r--r-- | meta/packages/chrpath/chrpath_0.13.bb | 5 |
3 files changed, 32 insertions, 0 deletions
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass index 01f886294e..9d678fd802 100644 --- a/meta/classes/native.bbclass +++ b/meta/classes/native.bbclass | |||
@@ -1,3 +1,6 @@ | |||
1 | # We want native packages to be relocatable | ||
2 | inherit relocatable | ||
3 | |||
1 | # Native packages are built indirectly via dependency, | 4 | # Native packages are built indirectly via dependency, |
2 | # no need for them to be a direct target of 'world' | 5 | # no need for them to be a direct target of 'world' |
3 | EXCLUDE_FROM_WORLD = "1" | 6 | EXCLUDE_FROM_WORLD = "1" |
diff --git a/meta/classes/relocatable.bbclass b/meta/classes/relocatable.bbclass new file mode 100644 index 0000000000..81fe8c518d --- /dev/null +++ b/meta/classes/relocatable.bbclass | |||
@@ -0,0 +1,24 @@ | |||
1 | SYSROOT_PREPROCESS_FUNCS += "relocatable_binaries_preprocess" | ||
2 | |||
3 | CHRPATH_BIN ?= "chrpath" | ||
4 | |||
5 | def rpath_replace (paths, d): | ||
6 | chrpath = bb.data.expand('${CHRPATH_BIN}', d) | ||
7 | |||
8 | for path in paths: | ||
9 | for root, dirs, files in os.walk(path): | ||
10 | for f in files: | ||
11 | if 'usr' in path: | ||
12 | os.system("%s -r $ORIGIN/../lib:$ORIGIN/../../lib %s/%s" % (chrpath, path,f)) | ||
13 | else: | ||
14 | os.system("%s -r $ORIGIN/../lib %s/%s" % (chrpath, path, f)) | ||
15 | |||
16 | python relocatable_binaries_preprocess() { | ||
17 | paths = [] | ||
18 | target = bb.data.expand("${SYSROOT_DESTDIR}${TMPDIR}/sysroots/${TARGET_ARCH}-${TARGET_OS}", d) | ||
19 | |||
20 | paths.append(target + "/bin") | ||
21 | paths.append(target + "/usr/bin") | ||
22 | |||
23 | rpath_replace(paths, d) | ||
24 | } | ||
diff --git a/meta/packages/chrpath/chrpath_0.13.bb b/meta/packages/chrpath/chrpath_0.13.bb index e843de6872..012897d575 100644 --- a/meta/packages/chrpath/chrpath_0.13.bb +++ b/meta/packages/chrpath/chrpath_0.13.bb | |||
@@ -2,6 +2,7 @@ DESCRIPTION = "chrpath allows you to change the rpath (where the application \ | |||
2 | looks for libraries) in an application. It does not (yet) allow you to add an \ | 2 | looks for libraries) in an application. It does not (yet) allow you to add an \ |
3 | rpath if there isn't one already." | 3 | rpath if there isn't one already." |
4 | LICENSE = "GPL" | 4 | LICENSE = "GPL" |
5 | PR = "r1" | ||
5 | 6 | ||
6 | SRC_URI = "${DEBIAN_MIRROR}/main/c/chrpath/chrpath_${PV}.orig.tar.gz" | 7 | SRC_URI = "${DEBIAN_MIRROR}/main/c/chrpath/chrpath_${PV}.orig.tar.gz" |
7 | 8 | ||
@@ -9,4 +10,8 @@ inherit autotools | |||
9 | 10 | ||
10 | S = "${WORKDIR}/chrpath-${PV}" | 11 | S = "${WORKDIR}/chrpath-${PV}" |
11 | 12 | ||
13 | # We don't have a staged chrpath-native for ensuring our binary is relocatable | ||
14 | # so must use the one we've just built | ||
15 | CHRPATH_BIN = "${S}/chrpath" | ||
16 | |||
12 | BBCLASSEXTEND = "native" | 17 | BBCLASSEXTEND = "native" |