Steven Walter 29b5f6eadd rust: remove crate hash & metadata from symbol hashing
Rust's symbol hashes break sstate, because a subsequent build of the same
input hash may generate different symbol hashes.  This means that
packages that previously built against the "same" (from bitbake's
perspective) rustc would no longer run, and bitbake would not know to
rebuild them because the input hash is the same.  This is because the
crate metadata contains some data that differs from build-to-build.

This problem actually extends beyond the compiler to any arbitrary
crate, for the same reason.  If a crate in the middle of the dependency
chain had to be rebuilt, bitbake wouldn't realized that all its
dependencies have to be relink, and the dependent packages would fail
due to missing symbols.

Fortunately, bitbake's input hash makes this mechanism largely
unnecessary; any change to rust's source or configuration will cause
rustc and all dependencies to rebuild.  Therefore, it's safe to remove
crate metadata from the hashing.
2015-07-08 10:55:33 -04:00
2015-05-26 12:06:27 -04:00
2014-10-25 12:50:28 -04:00
2015-05-26 22:20:53 -04:00
2014-10-25 12:50:28 -04:00

Introduction

This openembedded layer provides the rust compiler, tools for building packages (cargo), and a few example projects.

What works:

  • MACHINE="beaglebone" (TARGET_SYS=arm-poky-linux-gnueabi)
  • Building rust-native, rust-cross, rust-hello-world, cargo-native
  • Running/using all of these (including rust-hello-world)

What doesn't:

  • Probably some of the untested things

What's untested:

  • rust (built for target)
  • Other TARGETs

Common issues when packaging things using cargo

You may run into errors similar to:

| src/lib.rs:12:1: 12:35 error: can't find crate for `ffi`
| src/lib.rs:12 extern crate "openssl-sys" as ffi;
|               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Where a "-sys" crate (or other crate) is not found. These are typically caused by a crate's Cargo.toml including triplet-specific dependencies and then using the crate based on a feature (most often, #[cfg(unix)]). Until cargo and it's ecosystem get their act together, you'll need to supply patches to the misbehaving packages. See recipies/cargo/cargo_*.bb for an example of how to do this.

TODO

  • -crosssdk and -buildsdk packages
  • -runtime? (install target libraries on target)
  • Upstream local rustc patches for libdir and bindir support
  • add bitbake fetch support for crates.io
  • add required cargo package registry clones in SRC_URI to prevent the need for network when building.

Pitfalls

  • TARGET_SYS must be different from BUILD_SYS. This is due to the way configuration options are tracked for different targets.

Dependencies

On the host: unknown

On the target: unknown

Maintainer(s) & Patch policy

Open a Pull Request

MIT/Apache-2.0 - Same as rust

S
Description
OpenEmbedded/Yocto layer for Rust and Cargo
Readme 1.6 MiB
Languages
PHP 56.5%
BitBake 17%
Shell 9.1%
Python 7.5%
Pawn 5.3%
Other 4.6%