Files
meta-rust/classes/cargo_common.bbclass
T
Johan Anderholm 9ecc36acb5 Set proxy in cargo if available
This is needed for cargo to use proxies set by bitbake. It is important
for devtooled builds which does not use vendored sources.
2019-01-13 10:45:01 +01:00

97 lines
2.8 KiB
Plaintext

##
## Purpose:
## This class is to support building with cargo. It
## must be different than cargo.bbclass because Rust
## now builds with Cargo but cannot use cargo.bbclass
## due to dependencies and assumptions in cargo.bbclass
## that Rust & Cargo are already installed. So this
## is used by cargo.bbclass and Rust
##
# add crate fetch support
inherit crate-fetch
inherit rust-common
# Where we download our registry and dependencies to
export CARGO_HOME = "${WORKDIR}/cargo_home"
# The pkg-config-rs library used by cargo build scripts disables itself when
# cross compiling unless this is defined. We set up pkg-config appropriately
# for cross compilation, so tell it we know better than it.
export PKG_CONFIG_ALLOW_CROSS = "1"
# Don't instruct cargo to use crates downloaded by bitbake. Some rust packages,
# for example the rust compiler itself, come with their own vendored sources.
# Specifying two [source.crates-io] will not work.
CARGO_DISABLE_BITBAKE_VENDORING ?= "0"
# Used by libstd-rs to point to the vendor dir included in rustc src
CARGO_VENDORING_DIRECTORY ?= "${CARGO_HOME}/bitbake"
cargo_common_do_configure () {
mkdir -p ${CARGO_HOME}/bitbake
echo "paths = [" > ${CARGO_HOME}/config
for p in ${EXTRA_OECARGO_PATHS}; do
printf "\"%s\"\n" "$p"
done | sed -e 's/$/,/' >> ${CARGO_HOME}/config
echo "]" >> ${CARGO_HOME}/config
# Point cargo at our local mirror of the registry
cat <<- EOF >> ${CARGO_HOME}/config
[source.bitbake]
directory = "${CARGO_VENDORING_DIRECTORY}"
EOF
if [ -z "${EXTERNALSRC}" ] && [ ${CARGO_DISABLE_BITBAKE_VENDORING} = "0" ]; then
cat <<- EOF >> ${CARGO_HOME}/config
[source.crates-io]
replace-with = "bitbake"
local-registry = "/nonexistant"
EOF
fi
if [ -n "${http_proxy}" ]; then
cat <<- EOF >> ${CARGO_HOME}/config
[http]
proxy = "${http_proxy}"
EOF
fi
if [ -n "${https_proxy}" ]; then
cat <<- EOF >> ${CARGO_HOME}/config
[https]
proxy = "${https_proxy}"
EOF
fi
echo "[target.${HOST_SYS}]" >> ${CARGO_HOME}/config
echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config
if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then
echo "[target.${BUILD_SYS}]" >> ${CARGO_HOME}/config
echo "linker = '${RUST_BUILD_CCLD}'" >> ${CARGO_HOME}/config
fi
}
oe_cargo_fix_env () {
export CC="${RUST_TARGET_CC}"
export CXX="${RUST_TARGET_CXX}"
export CFLAGS="${CFLAGS}"
export CXXFLAGS="${CXXFLAGS}"
export AR="${AR}"
export TARGET_CC="${RUST_TARGET_CC}"
export TARGET_CXX="${RUST_TARGET_CXX}"
export TARGET_CFLAGS="${CFLAGS}"
export TARGET_CXXFLAGS="${CXXFLAGS}"
export TARGET_AR="${AR}"
export HOST_CC="${RUST_BUILD_CC}"
export HOST_CXX="${RUST_BUILD_CXX}"
export HOST_CFLAGS="${BUILD_CFLAGS}"
export HOST_CXXFLAGS="${BUILD_CXXFLAGS}"
export HOST_AR="${BUILD_AR}"
}
EXTRA_OECARGO_PATHS ??= ""
EXPORT_FUNCTIONS do_configure