Files
meta-rust/classes/cargo.bbclass
2014-11-21 12:11:28 -05:00

61 lines
1.3 KiB
Plaintext

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