mirror of
https://git.yoctoproject.org/poky
synced 2026-09-15 06:49:33 +02:00
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>
This commit is contained in:
committed by
Richard Purdie
parent
1e2b9bafd4
commit
dd8fd17a1b
19
meta/recipes-devtools/rust/files/target-rust-ccld.c
Normal file
19
meta/recipes-devtools/rust/files/target-rust-ccld.c
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 Wind River Systems
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
int main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
unsetenv("LD_LIBRARY_PATH");
|
||||||
|
execvp("target-rust-ccld-wrapper", argv);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -7,13 +7,18 @@ LICENSE = "MIT"
|
|||||||
|
|
||||||
MODIFYTOS = "0"
|
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
|
# Need to use our SDK's sh here, see #14878
|
||||||
create_sdk_wrapper () {
|
create_sdk_wrapper () {
|
||||||
file="$1"
|
file="$1"
|
||||||
shift
|
shift
|
||||||
|
|
||||||
cat <<- EOF > "${file}"
|
cat <<- EOF > "${file}"
|
||||||
#!${base_prefix}/bin/sh
|
#!/bin/sh
|
||||||
\$$1 \$@
|
\$$1 \$@
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@@ -32,8 +37,17 @@ do_install () {
|
|||||||
install -m 0644 "${RUST_TARGETS_DIR}/${RUST_TARGET_SYS}.json" "${RUSTLIB_DIR}"
|
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.
|
# 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}
|
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
|
ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
|
||||||
mkdir "${ENV_SETUP_DIR}"
|
mkdir "${ENV_SETUP_DIR}"
|
||||||
|
|||||||
Reference in New Issue
Block a user