diff options
| -rwxr-xr-x | meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env b/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env index 426b093d91..90d249df9f 100755 --- a/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env +++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env | |||
| @@ -12,6 +12,26 @@ is_dynamic_elf () | |||
| 12 | (file -L "$1" | grep 'ELF' > /dev/null 2>&1) && (! file -L "$1" | grep 'static' > /dev/null 2>&1) | 12 | (file -L "$1" | grep 'ELF' > /dev/null 2>&1) && (! file -L "$1" | grep 'static' > /dev/null 2>&1) |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | fix_rpath () | ||
| 16 | { | ||
| 17 | # Patches the RPATH for a file. When the program is executed in the chroot | ||
| 18 | # be iceccd, /proc is not mounted. As such, $ORIGIN can't be resolved. To | ||
| 19 | # work around this, replace all instances of $ORIGIN in RPATH with the | ||
| 20 | # known chroot path to the executables directory | ||
| 21 | local path="$1" | ||
| 22 | local origin="$2" | ||
| 23 | if ! is_dynamic_elf "$path"; then | ||
| 24 | return | ||
| 25 | fi | ||
| 26 | local new_rpath="`readelf -w -d "$path" | grep RPATH | \ | ||
| 27 | sed 's/.*\[\(.*\)\]/\1/g' | \ | ||
| 28 | sed "s,\\\$ORIGIN,/$origin,g"`" | ||
| 29 | |||
| 30 | if test -n "$new_rpath"; then | ||
| 31 | $PATCHELF --set-rpath "$new_rpath" "$path" | ||
| 32 | fi | ||
| 33 | } | ||
| 34 | |||
| 15 | is_contained () | 35 | is_contained () |
| 16 | { | 36 | { |
| 17 | case " $target_files " in | 37 | case " $target_files " in |
| @@ -47,9 +67,8 @@ add_file () | |||
| 47 | name="$2" | 67 | name="$2" |
| 48 | fi | 68 | fi |
| 49 | test -z "$name" && return | 69 | test -z "$name" && return |
| 50 | # ls -H isn't really the same as readlink, but | 70 | # readlink is required for Yocto, so we can use it |
| 51 | # readlink is not portable enough. | 71 | path=`readlink -f "$path"` |
| 52 | path=`ls -H $path` | ||
| 53 | toadd="$name=$path" | 72 | toadd="$name=$path" |
| 54 | is_contained "$toadd" && return | 73 | is_contained "$toadd" && return |
| 55 | if test -z "$silent"; then | 74 | if test -z "$silent"; then |
| @@ -108,6 +127,17 @@ added_as=$1 | |||
| 108 | shift | 127 | shift |
| 109 | archive_name=$1 | 128 | archive_name=$1 |
| 110 | 129 | ||
| 130 | if test -z "$PATCHELF"; then | ||
| 131 | PATCHELF=`which patchelf 2> /dev/null` | ||
| 132 | fi | ||
| 133 | if test -z "$PATCHELF"; then | ||
| 134 | PATCHELF=`which patchelf-uninative 2> /dev/null` | ||
| 135 | fi | ||
| 136 | if test -z "$PATCHELF"; then | ||
| 137 | echo "patchelf is required" | ||
| 138 | exit 1 | ||
| 139 | fi | ||
| 140 | |||
| 111 | if test -z "$added_gcc" || test -z "$added_gxx" ; then | 141 | if test -z "$added_gcc" || test -z "$added_gxx" ; then |
| 112 | echo "usage: $0 <gcc_path> <g++_path>" | 142 | echo "usage: $0 <gcc_path> <g++_path>" |
| 113 | exit 1 | 143 | exit 1 |
| @@ -197,6 +227,8 @@ for i in $target_files; do | |||
| 197 | if test -f $tempdir/$target -a -x $tempdir/$target; then | 227 | if test -f $tempdir/$target -a -x $tempdir/$target; then |
| 198 | strip -s $tempdir/$target 2>/dev/null | 228 | strip -s $tempdir/$target 2>/dev/null |
| 199 | fi | 229 | fi |
| 230 | |||
| 231 | fix_rpath $tempdir/$target `dirname $target` | ||
| 200 | else | 232 | else |
| 201 | mkdir -p $tempdir/`dirname $path` | 233 | mkdir -p $tempdir/`dirname $path` |
| 202 | cp -pH $path $tempdir/$path | 234 | cp -pH $path $tempdir/$path |
| @@ -210,6 +242,8 @@ for i in $target_files; do | |||
| 210 | strip -s $tempdir/$path 2>/dev/null | 242 | strip -s $tempdir/$path 2>/dev/null |
| 211 | fi | 243 | fi |
| 212 | 244 | ||
| 245 | fix_rpath $tempdir/$path `dirname $path` | ||
| 246 | |||
| 213 | path=`echo $path | cut -b2-` | 247 | path=`echo $path | cut -b2-` |
| 214 | new_target_files="$new_target_files $path" | 248 | new_target_files="$new_target_files $path" |
| 215 | fi | 249 | fi |
