From: Deepthi Hemraj <[email protected]>

YOCTO [#15061]
Rust multilib sdks broken because of the conflicts between attempted
installs of rust-cross-canadian for arm and aarch64.

Multilibs trying to install cargo.sh
and rust.sh in the same path which resulted in the issue

This patch implements architecture specific environment setup scripts
using RUST_TARGET_SYS to create unique filenames.
The changes ensure that these scripts do not overwrite each other.
Additionally, all target-independent variables previously defined in the
rust and cargo scripts have been moved to their respective nativesdk recipe 
files

Signed-off-by: Deepthi Hemraj <[email protected]>
---
 meta/recipes-devtools/rust/cargo_1.80.0.bb    | 24 +++++++++++++++++++
 .../rust/rust-cross-canadian.inc              | 24 ++++---------------
 meta/recipes-devtools/rust/rust_1.80.0.bb     | 14 +++++++++++
 3 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/meta/recipes-devtools/rust/cargo_1.80.0.bb 
b/meta/recipes-devtools/rust/cargo_1.80.0.bb
index 123032cdf7..2246ce2534 100644
--- a/meta/recipes-devtools/rust/cargo_1.80.0.bb
+++ b/meta/recipes-devtools/rust/cargo_1.80.0.bb
@@ -50,7 +50,31 @@ do_install:append:class-nativesdk() {
        # sets to libdir but not base_libdir leading to symbol mismatches 
depending on the
        # host OS. Fully set LD_LIBRARY_PATH to contain both to avoid this.
        create_wrapper ${D}/${bindir}/cargo 
LD_LIBRARY_PATH=${libdir}:${base_libdir}
+
+    ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
+    mkdir "${ENV_SETUP_DIR}"
+    CARGO_ENV_SETUP_SH="${ENV_SETUP_DIR}/${RUST_TARGET_SYS}_cargo.sh"
+    
+    RUST_HOST_TRIPLE=`echo ${RUST_HOST_SYS} | tr '[:lower:]' '[:upper:]' | sed 
's/-/_/g'`
+    
+    cat <<- EOF > "${CARGO_ENV_SETUP_SH}"
+       export 
CARGO_TARGET_${RUST_HOST_TRIPLE}_RUNNER="\$OECORE_NATIVE_SYSROOT/lib/${SDKLOADER}"
+       export CARGO_HOME="\$OECORE_TARGET_SYSROOT/home/cargo"
+       mkdir -p "\$CARGO_HOME"
+       if ! grep -q '^\[build\]' "\$CARGO_HOME/config"; then
+               touch "\$CARGO_HOME/config"
+               echo "[build]" >> "\$CARGO_HOME/config"
+               echo 'linker = "target-rust-ccld"' >> "\$CARGO_HOME/config"
+    fi
+       
+       
+       # Keep the below off as long as HTTP/2 is disabled.
+       export CARGO_HTTP_MULTIPLEXING=false
+       export 
CARGO_HTTP_CAINFO="\$OECORE_NATIVE_SYSROOT/etc/ssl/certs/ca-certificates.crt"
+       EOF
+
 }
+FILES:${PN} += "${base_prefix}/environment-setup.d"
 
 # Disabled due to incompatibility with libgit2 0.28.x 
(https://github.com/rust-lang/git2-rs/issues/458, 
https://bugs.gentoo.org/707746#c1)
 # as shipped by Yocto Dunfell.
diff --git a/meta/recipes-devtools/rust/rust-cross-canadian.inc 
b/meta/recipes-devtools/rust/rust-cross-canadian.inc
index c34b839d15..1ef14e5e6d 100644
--- a/meta/recipes-devtools/rust/rust-cross-canadian.inc
+++ b/meta/recipes-devtools/rust/rust-cross-canadian.inc
@@ -54,39 +54,25 @@ do_install () {
 
     ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
     mkdir "${ENV_SETUP_DIR}"
-    RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh"
+    RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/${RUST_TARGET_SYS}_rust.sh"
 
     RUST_TARGET_TRIPLE=`echo ${RUST_TARGET_SYS} | tr '[:lower:]' '[:upper:]' | 
sed 's/-/_/g'`
-    RUST_HOST_TRIPLE=`echo ${RUST_HOST_SYS} | tr '[:lower:]' '[:upper:]' | sed 
's/-/_/g'`
     SDKLOADER=${@bb.utils.contains('SDK_ARCH', 'x86_64', 
'ld-linux-x86-64.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'i686', 
'ld-linux.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'aarch64', 
'ld-linux-aarch64.so.1', '', d)}${@bb.utils.contains('SDK_ARCH', 'ppc64le', 
'ld64.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'riscv64', 
'ld-linux-riscv64-lp64d.so.1', '', d)}
 
     cat <<- EOF > "${RUST_ENV_SETUP_SH}"
        export 
CARGO_TARGET_${RUST_TARGET_TRIPLE}_RUSTFLAGS="--sysroot=\$OECORE_TARGET_SYSROOT/usr
 -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT"
-       export 
CARGO_TARGET_${RUST_HOST_TRIPLE}_RUNNER="\$OECORE_NATIVE_SYSROOT/lib/${SDKLOADER}"
-       export 
RUST_TARGET_PATH="\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib"
-       EOF
-
-    chown -R root.root ${D}
-
-    CARGO_ENV_SETUP_SH="${ENV_SETUP_DIR}/cargo.sh"
-    cat <<- EOF > "${CARGO_ENV_SETUP_SH}"
        export CARGO_HOME="\$OECORE_TARGET_SYSROOT/home/cargo"
        mkdir -p "\$CARGO_HOME"
-        # Init the default target once, it might be otherwise user modified.
-       if [ ! -f "\$CARGO_HOME/config" ]; then
-               touch "\$CARGO_HOME/config"
-               echo "[build]" >> "\$CARGO_HOME/config"
+       if ! grep -q '^\[target\.' "\$CARGO_HOME/config"; then
                echo 'target = "'${RUST_TARGET_SYS}'"' >> "\$CARGO_HOME/config"
                echo '# TARGET_SYS' >> "\$CARGO_HOME/config"
                echo '[target.'${RUST_TARGET_SYS}']' >> "\$CARGO_HOME/config"
-               echo 'linker = "target-rust-ccld"' >> "\$CARGO_HOME/config"
     fi
 
-       # Keep the below off as long as HTTP/2 is disabled.
-       export CARGO_HTTP_MULTIPLEXING=false
-
-       export 
CARGO_HTTP_CAINFO="\$OECORE_NATIVE_SYSROOT/etc/ssl/certs/ca-certificates.crt"
        EOF
+
+    chown -R root.root ${D}
+
 }
 
 FILES:${PN} += "${base_prefix}/environment-setup.d"
diff --git a/meta/recipes-devtools/rust/rust_1.80.0.bb 
b/meta/recipes-devtools/rust/rust_1.80.0.bb
index eae1f28bb8..8a8aad5a8d 100644
--- a/meta/recipes-devtools/rust/rust_1.80.0.bb
+++ b/meta/recipes-devtools/rust/rust_1.80.0.bb
@@ -271,8 +271,22 @@ rust_do_install:class-nativesdk() {
     rm ${D}${libdir}/rustlib/uninstall.sh
     rm ${D}${libdir}/rustlib/install.log
     rm ${D}${libdir}/rustlib/manifest*
+
+    ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
+    mkdir "${ENV_SETUP_DIR}"
+    RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/${RUST_TARGET_SYS}_rust.sh"
+
+    cat <<- EOF > "${RUST_ENV_SETUP_SH}"
+       export 
RUST_TARGET_PATH="\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib"
+       
+       EOF
+
+    chown -R root.root ${D}
+
 }
 
+FILES:${PN} += "${base_prefix}/environment-setup.d"
+
 EXTRA_TOOLS ?= "cargo-clippy clippy-driver rustfmt"
 rust_do_install:class-target() {
     export PSEUDO_UNLOAD=1
-- 
2.43.0

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#207540): 
https://lists.openembedded.org/g/openembedded-core/message/207540
Mute This Topic: https://lists.openembedded.org/mt/109704334/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

  • [OE-core] [PATCH] rust-cross-ca... Hemraj, Deepthi via lists.openembedded.org

Reply via email to