mirror of
https://git.yoctoproject.org/poky
synced 2026-02-20 08:29:42 +01:00
There is little point in having "crosssdk" suffex added to the virtual provider within gcc/go since the TARGET_PREFIX or SDK_PREFIX already encapsulates this. Remove it allowing some of the special case overriding to be removed. This also allows removal of some of the MLPREFIX usage since again, the triplet also covers this. (From OE-Core rev: fe0206ba482d209b24e636d578aa68ba5e67ba1b) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
87 lines
3.1 KiB
PHP
87 lines
3.1 KiB
PHP
SUMMARY = "Rust compiler and runtime libaries (cross-canadian for ${TARGET_ARCH} target)"
|
|
PN = "rust-cross-canadian-${TRANSLATED_TARGET_ARCH}"
|
|
|
|
inherit rust-target-config
|
|
inherit rust-common
|
|
|
|
LICENSE = "MIT"
|
|
|
|
MODIFYTOS = "0"
|
|
|
|
DEPENDS += "virtual/${SDK_PREFIX}gcc 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}"
|
|
#!/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.
|
|
# 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}
|
|
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}"
|
|
RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh"
|
|
|
|
cat <<- EOF > "${RUST_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}
|
|
|
|
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"
|
|
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"
|
|
|