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"