Introduction

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

By default we assume that there is a local cargo (ie: cargo-native). To disable this and try to build cargo, add:

CARGO_PROVIDED = ""

To a conf file (probably local.conf)

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
  • cargo and cargo-native (use a local package for -native)

What about cargo?:

We provide .bb files for cargo (-target) and cargo-native, and they are working every now-and-then. Unfortunately, rust moves a bit too quickly for cargo to keep up, and it ends up broken fairly often.

Very often we'll want newer versions of rust than cargo is able to build with. Thankfully, we don't need any custom cargo configuration, and can use a vanilla cargo binary.

We add "cargo-native" to ASSUME_PROVIDED unless overridden by clearing CARGO_PROVIDED (via conf/layer.conf)

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

  • Include downloaded stage0 snapshot in SRC_URI
  • -crosssdk and -buildsdk packages
  • -runtime? (install target libraries on target)
  • Add SRC_URI components so that cargo doesn't use the network
  • Convince cargo (via env vars or patching) not to use '$HOME/.cargo' for storing downloaded source code
  • Upstream local rustc patches for libdir and bindir support

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%