mirror of
https://git.yoctoproject.org/poky
synced 2026-02-27 03:49:41 +01:00
rust sets LD_LIBRARY_PATH which causes a lot of problems with host binaries conflicting with SDK libraries. By using sh/bash from the SDK we avoid those issues. [YOCTO #14878] (From OE-Core rev: dabd97e78a599a81c056c0f3291244f5afae44b0) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
72 lines
2.1 KiB
PHP
72 lines
2.1 KiB
PHP
PN = "rust-cross-canadian-${TRANSLATED_TARGET_ARCH}"
|
|
|
|
inherit rust-target-config
|
|
inherit rust-common
|
|
|
|
LICENSE = "MIT"
|
|
|
|
MODIFYTOS = "0"
|
|
|
|
# Need to use our SDK's sh here, see #14878
|
|
create_sdk_wrapper () {
|
|
file="$1"
|
|
shift
|
|
|
|
cat <<- EOF > "${file}"
|
|
#!${base_prefix}/bin/sh
|
|
\$$1 \$@
|
|
EOF
|
|
|
|
chmod +x "$file"
|
|
}
|
|
|
|
do_install () {
|
|
# Rust requires /usr/lib to contain the libs.
|
|
# The required structure is retained for simplicity.
|
|
SYS_LIBDIR=$(dirname ${D}${libdir})
|
|
SYS_BINDIR=$(dirname ${D}${bindir})
|
|
RUSTLIB_DIR=${SYS_LIBDIR}/${TARGET_SYS}/rustlib
|
|
|
|
install -d ${RUSTLIB_DIR}
|
|
install -m 0644 "${RUST_TARGETS_DIR}/${RUST_HOST_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.
|
|
install -d ${SYS_BINDIR}
|
|
create_sdk_wrapper "${SYS_BINDIR}/target-rust-ccld" "CC"
|
|
|
|
ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
|
|
mkdir "${ENV_SETUP_DIR}"
|
|
ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh"
|
|
|
|
cat <<- EOF > "${ENV_SETUP_SH}"
|
|
export RUSTFLAGS="--sysroot=\$OECORE_TARGET_SYSROOT/usr -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT"
|
|
export RUST_TARGET_PATH="\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib"
|
|
EOF
|
|
|
|
chown -R root.root ${D}
|
|
|
|
ENV_SETUP_SH="${ENV_SETUP_DIR}/cargo.sh"
|
|
cat <<- EOF > "${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"
|
|
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
|
|
}
|
|
|
|
FILES:${PN} += "${base_prefix}/environment-setup.d"
|
|
|