nativesdk: Implement cross canadian support
This addition closes #236 requesting the SDK support. The implementation consists on a yet minimum set of worky functionality; - Includes rustc, rustdoc and cargo. - Includes libstd and accompanying lib archives for host and for target. - Integrates with the standard environment setup script. - Integrates configurations automatically build for target. The supported build host is still AMD64 only. Note that there's no need on introducing crosssdk package as the official snapshot package serves same way as a non SDK build. Possible future directions: - Offline build: - Support pre-cached set of crates that can be vendored. - Support pre-filled cargo registry. - Support further tools like cargo-fmt, cargo-clippy, GDB support and so on. Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
SUMMARY = "Cargo, a package manager for Rust cross canadian flavor."
|
||||
|
||||
RUST_ALTERNATE_EXE_PATH = "${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config"
|
||||
|
||||
HOST_SYS = "${HOST_ARCH}-unknown-linux-gnu"
|
||||
CARGO_RUST_TARGET_CCLD = "${RUST_BUILD_CCLD}"
|
||||
|
||||
require recipes-devtools/rust/rust-common.inc
|
||||
require cargo.inc
|
||||
|
||||
CARGO = "${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo"
|
||||
BASEDEPENDS_remove = "cargo-native"
|
||||
|
||||
export RUST_TARGET_PATH="${WORKDIR}/targets/"
|
||||
|
||||
RUSTLIB = " \
|
||||
-L ${STAGING_DIR_NATIVE}/${SDKPATHNATIVE}/usr/lib/${TARGET_SYS}/rustlib/${HOST_SYS}/lib \
|
||||
"
|
||||
|
||||
DEPENDS += "rust-native \
|
||||
rust-cross-canadian-${TRANSLATED_TARGET_ARCH} \
|
||||
virtual/nativesdk-${HOST_PREFIX}compilerlibs \
|
||||
nativesdk-openssl nativesdk-zlib \
|
||||
virtual/nativesdk-libc \
|
||||
"
|
||||
|
||||
inherit cross-canadian
|
||||
|
||||
PN = "cargo-cross-canadian-${TRANSLATED_TARGET_ARCH}"
|
||||
|
||||
LLVM_TARGET[x86_64] = "${RUST_HOST_SYS}"
|
||||
|
||||
python do_rust_gen_targets () {
|
||||
wd = d.getVar('WORKDIR') + '/targets/'
|
||||
|
||||
rust_gen_target(d, 'BUILD', wd, "", "generic", d.getVar('BUILD_ARCH'))
|
||||
rust_gen_target(d, 'HOST', wd, "", "generic", d.getVar('HOST_ARCH'))
|
||||
}
|
||||
|
||||
do_compile_prepend () {
|
||||
PKG_CONFIG_PATH="${RECIPE_SYSROOT_NATIVE}/usr/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
||||
}
|
||||
|
||||
do_install () {
|
||||
SYS_BINDIR=$(dirname ${D}${bindir})
|
||||
install -d "${SYS_BINDIR}"
|
||||
install -m 755 "${B}/target/${CARGO_TARGET_SUBDIR}/cargo" "${SYS_BINDIR}"
|
||||
for i in ${SYS_BINDIR}/*; do
|
||||
chrpath -r "\$ORIGIN/../lib" ${i}
|
||||
done
|
||||
|
||||
ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
|
||||
mkdir "${ENV_SETUP_DIR}"
|
||||
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 = "'${TARGET_SYS}'"' >> "\$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
|
||||
}
|
||||
|
||||
PKG_SYS_BINDIR = "${SDKPATHNATIVE}/usr/bin"
|
||||
FILES_${PN} += "${base_prefix}/environment-setup.d ${PKG_SYS_BINDIR}"
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
require recipes-devtools/rust/rust-source-${PV}.inc
|
||||
require recipes-devtools/rust/rust-snapshot-${PV}.inc
|
||||
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/cargo-${PV}:"
|
||||
|
||||
require cargo-cross-canadian.inc
|
||||
@@ -1,4 +1,4 @@
|
||||
SUMMARY = "Cargo, a package manager for Rust."
|
||||
SUMMARY ?= "Cargo, a package manager for Rust."
|
||||
HOMEPAGE = "https://crates.io"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
SECTION = "devel"
|
||||
@@ -43,7 +43,7 @@ do_install () {
|
||||
# Needed for pkg-config to be used
|
||||
export LIBSSH2_SYS_USE_PKG_CONFIG = "1"
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
BBCLASSEXTEND = "native nativesdk"
|
||||
|
||||
# When building cargo-native we don't have cargo-native to use and depend on,
|
||||
# so we must use the locally set up snapshot to bootstrap the build.
|
||||
|
||||
Reference in New Issue
Block a user