diff options
author | 2022-09-07 07:48:17 +0530 | |
---|---|---|
committer | 2022-09-07 08:52:07 +0100 | |
commit | 7cd6faf4e0147eef557f83fb266a25935e26efff (patch) | |
tree | c87ded03465a91d8ce649d07e3b3a4065da919f3 /meta/recipes-devtools/rust/rust-cross-canadian.inc | |
parent | cd549402c899585eb20466a728bf93f3133b0ff2 (diff) | |
download | openembedded-core-7cd6faf4e0147eef557f83fb266a25935e26efff.tar.gz |
rust-cross-canadian: Fix for the issue caused by using sdk shell
This is a fix for the fix in YOCTO #14878. When the shebang is more than
128 characters the default shell /bin/sh is used instead of SDK shell as
a fallback, which causes problems with LD_LIBRARY_PATH. With this patch
shell usage is avoided as we use a C wrapper and unset LD_LIBRARY_PATH
that way.
[YOCTO #14892]
Signed-off-by: Sundeep KOKKONDA <sundeep.kokkonda@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/rust/rust-cross-canadian.inc')
-rw-r--r-- | meta/recipes-devtools/rust/rust-cross-canadian.inc | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/meta/recipes-devtools/rust/rust-cross-canadian.inc b/meta/recipes-devtools/rust/rust-cross-canadian.inc index 7bf75a4712..17f933959f 100644 --- a/meta/recipes-devtools/rust/rust-cross-canadian.inc +++ b/meta/recipes-devtools/rust/rust-cross-canadian.inc @@ -7,13 +7,18 @@ LICENSE = "MIT" MODIFYTOS = "0" +DEPENDS += "virtual/${SDK_PREFIX}gcc-crosssdk virtual/nativesdk-libc virtual/nativesdk-${SDK_PREFIX}compilerlibs" + +SRC_URI += "file://target-rust-ccld.c" +LIC_FILES_CHKSUM = "file://target-rust-ccld.c;md5=af4e0e29f81a34cffe05aa07c89e93e9;endline=7" +S = "${WORKDIR}" + # Need to use our SDK's sh here, see #14878 create_sdk_wrapper () { file="$1" shift - cat <<- EOF > "${file}" - #!${base_prefix}/bin/sh + #!/bin/sh \$$1 \$@ EOF @@ -32,8 +37,17 @@ do_install () { install -m 0644 "${RUST_TARGETS_DIR}/${RUST_TARGET_SYS}.json" "${RUSTLIB_DIR}" # Uses SDK's CC as linker so linked binaries works out of box. + # We have a problem as rust sets LD_LIBRARY_PATH and this will break running host + # binaries (even /bin/sh) in the SDK as they detect a newer glibc from the SDK + # in those paths and we hit symbol errors. We saw particular problems with symbol + # mismatch on ubuntu1804 during development. To avoid this we have an SDK built + # binary which unsets LD_LIBRARY_PATH, which can then call the wrapper script + # where the context is easier to do the env maniupations needed install -d ${SYS_BINDIR} - create_sdk_wrapper "${SYS_BINDIR}/target-rust-ccld" "CC" + outfile="${SYS_BINDIR}/target-rust-ccld" + ${CC} ${WORKDIR}/target-rust-ccld.c -o $outfile + chmod +x "$outfile" + create_sdk_wrapper "${SYS_BINDIR}/target-rust-ccld-wrapper" "CC" ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d mkdir "${ENV_SETUP_DIR}" |