split rust.bbclass into rust & cargo classes

This commit is contained in:
Cody P Schafer
2014-11-21 12:11:28 -05:00
parent fd26b2e1bb
commit 4b75f09945
3 changed files with 62 additions and 56 deletions

60
classes/cargo.bbclass Normal file
View File

@@ -0,0 +1,60 @@
inherit rust
CARGO = "cargo"
# Cargo only supports in-tree builds at the moment
B = "${S}"
OECARGO_PATH ??= ""
oe_cargo_config () {
mkdir -p .cargo
# FIXME: we currently blow away the entire config because duplicate
# sections are treated as a parse error by cargo (causing the entire
# config to be silently ignored.
# NOTE: we cannot pass more flags via this interface, the 'linker' is
# assumed to be a path to a binary. If flags are needed, a wrapper must
# be used.
echo "paths = [" >.cargo/config
for p in ${OECARGO_PATH}; do
printf "\"%s\" " "$p"
done | sed -e 's/[ \n]+/,/g' -e 's/,$//' >>.cargo/config
echo "]" >>.cargo/config
}
rust_cargo_patch () {
cd "${S}"
cat >>Cargo.toml <<EOF
[profile.dev]
rpath = true
[profile.release]
rpath = true
EOF
}
oe_cargo_build () {
# FIXME: if there is already an entry for this target, in an existing
# cargo/config, this won't work.
which cargo
which rustc
bbnote ${CARGO} build --target ${TARGET_SYS} "$@"
oe_cargo_config
"${CARGO}" build -v --target "${TARGET_SYS}" --release "$@"
}
cargo_do_compile () {
cd "${B}"
oe_cargo_build
}
cargo_do_install () {
install -d "${D}${bindir}"
for tgt in "${B}/target/${HOST_SYS}/release/"*; do
if [ -f "$tgt" ] && [ -x "$tgt" ]; then
install -m755 "$tgt" "${D}${bindir}"
fi
done
}
EXPORT_FUNCTIONS do_compile do_install