summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/rust
diff options
context:
space:
mode:
authorSundeep KOKKONDA <sundeep.kokkonda@gmail.com>2022-09-07 07:48:17 +0530
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-09-07 08:53:50 +0100
commitdd8fd17a1ba1dee2900ee6efd1d658d56802972b (patch)
tree6d979fad563338dae56659d1d36adeba5caaa824 /meta/recipes-devtools/rust
parent1e2b9bafd4a86c212ef2096ae1410ff0c565db91 (diff)
downloadpoky-dd8fd17a1ba1dee2900ee6efd1d658d56802972b.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] (From OE-Core rev: 7cd6faf4e0147eef557f83fb266a25935e26efff) 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')
-rw-r--r--meta/recipes-devtools/rust/files/target-rust-ccld.c19
-rw-r--r--meta/recipes-devtools/rust/rust-cross-canadian.inc20
2 files changed, 36 insertions, 3 deletions
diff --git a/meta/recipes-devtools/rust/files/target-rust-ccld.c b/meta/recipes-devtools/rust/files/target-rust-ccld.c
new file mode 100644
index 0000000000..d3d491fb60
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/target-rust-ccld.c
@@ -0,0 +1,19 @@
1/*
2*
3* Copyright (C) 2022 Wind River Systems
4*
5* SPDX-License-Identifier: MIT
6*
7*/
8
9#include <string.h>
10#include <stdlib.h>
11#include <unistd.h>
12
13int main (int argc, char *argv[])
14{
15 unsetenv("LD_LIBRARY_PATH");
16 execvp("target-rust-ccld-wrapper", argv);
17
18 return 0;
19}
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"
7 7
8MODIFYTOS = "0" 8MODIFYTOS = "0"
9 9
10DEPENDS += "virtual/${SDK_PREFIX}gcc-crosssdk virtual/nativesdk-libc virtual/nativesdk-${SDK_PREFIX}compilerlibs"
11
12SRC_URI += "file://target-rust-ccld.c"
13LIC_FILES_CHKSUM = "file://target-rust-ccld.c;md5=af4e0e29f81a34cffe05aa07c89e93e9;endline=7"
14S = "${WORKDIR}"
15
10# Need to use our SDK's sh here, see #14878 16# Need to use our SDK's sh here, see #14878
11create_sdk_wrapper () { 17create_sdk_wrapper () {
12 file="$1" 18 file="$1"
13 shift 19 shift
14
15 cat <<- EOF > "${file}" 20 cat <<- EOF > "${file}"
16 #!${base_prefix}/bin/sh 21 #!/bin/sh
17 \$$1 \$@ 22 \$$1 \$@
18 EOF 23 EOF
19 24
@@ -32,8 +37,17 @@ do_install () {
32 install -m 0644 "${RUST_TARGETS_DIR}/${RUST_TARGET_SYS}.json" "${RUSTLIB_DIR}" 37 install -m 0644 "${RUST_TARGETS_DIR}/${RUST_TARGET_SYS}.json" "${RUSTLIB_DIR}"
33 38
34 # Uses SDK's CC as linker so linked binaries works out of box. 39 # Uses SDK's CC as linker so linked binaries works out of box.
40 # We have a problem as rust sets LD_LIBRARY_PATH and this will break running host
41 # binaries (even /bin/sh) in the SDK as they detect a newer glibc from the SDK
42 # in those paths and we hit symbol errors. We saw particular problems with symbol
43 # mismatch on ubuntu1804 during development. To avoid this we have an SDK built
44 # binary which unsets LD_LIBRARY_PATH, which can then call the wrapper script
45 # where the context is easier to do the env maniupations needed
35 install -d ${SYS_BINDIR} 46 install -d ${SYS_BINDIR}
36 create_sdk_wrapper "${SYS_BINDIR}/target-rust-ccld" "CC" 47 outfile="${SYS_BINDIR}/target-rust-ccld"
48 ${CC} ${WORKDIR}/target-rust-ccld.c -o $outfile
49 chmod +x "$outfile"
50 create_sdk_wrapper "${SYS_BINDIR}/target-rust-ccld-wrapper" "CC"
37 51
38 ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d 52 ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
39 mkdir "${ENV_SETUP_DIR}" 53 mkdir "${ENV_SETUP_DIR}"