Conflicts: conf/distro/include/rust_security_flags.inc conf/layer.conf recipes-devtools/cargo/cargo_git.bb recipes-devtools/cargo/files/0001-update-Rust.patch recipes-devtools/cargo/files/0001-update-pkg-versions.patch recipes-devtools/cargo/files/curl-rust/0001-curl-sys-avoid-explicitly-linking-in-openssl.-If-it-.patch recipes-devtools/cargo/files/curl-rust/0002-remove-per-triple-deps-on-openssl-sys.patch recipes-devtools/cargo/files/git2-rs/0001-Add-generic-openssl-sys-dep.patch recipes-devtools/cargo/files/git2-rs/0002-libgit2-sys-avoid-the-build-script-it-is-a-disaster.patch recipes-devtools/cargo/files/git2-rs/0003-bump-libssh2-to-fix-build-with-nightly.patch recipes-devtools/cargo/files/ssh2-rs/0001-Unconditionally-depend-on-openssl-sys.patch recipes-devtools/rust/files/rust-1.3.0/0001-platform.mk-avoid-choking-on-i586.patch recipes-devtools/rust/files/rust-1.3.0/0002-Target-add-default-target.json-path-libdir-rust-targ.patch recipes-devtools/rust/files/rust-1.3.0/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch recipes-devtools/rust/files/rust-1.3.0/0004-mk-add-missing-CFG_LIBDIR_RELATIVE.patch recipes-devtools/rust/files/rust-1.3.0/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch recipes-devtools/rust/files/rust-1.3.0/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch recipes-devtools/rust/files/rust-1.3.0/0007-mk-install-use-disable-rewrite-paths.patch recipes-devtools/rust/files/rust-1.3.0/0008-install-disable-ldconfig.patch recipes-devtools/rust/files/rust-1.3.0/0009-Remove-crate-metadata-from-symbol-hashing.patch recipes-devtools/rust/files/rust-1.3.0/0010-mk-tell-rustc-that-we-re-only-looking-for-native-lib.patch recipes-devtools/rust/files/rust-git/0001-platform.mk-avoid-choking-on-i586.patch recipes-devtools/rust/files/rust-git/0002-Target-add-default-target.json-path-libdir-rust-targ.patch recipes-devtools/rust/files/rust-git/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch recipes-devtools/rust/files/rust-git/0004-mk-add-missing-CFG_LIBDIR_RELATIVE.patch recipes-devtools/rust/files/rust-git/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch recipes-devtools/rust/files/rust-git/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch recipes-devtools/rust/files/rust-git/0007-mk-install-use-disable-rewrite-paths.patch recipes-devtools/rust/files/rust-git/0008-install-disable-ldconfig.patch recipes-devtools/rust/files/rust/0001-platform.mk-avoid-choking-on-i586.patch recipes-devtools/rust/files/rust/0002-Target-add-default-target.json-path-libdir-rust-targ.patch recipes-devtools/rust/files/rust/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch recipes-devtools/rust/files/rust/0004-mk-add-missing-CFG_LIBDIR_RELATIVE.patch recipes-devtools/rust/files/rust/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch recipes-devtools/rust/files/rust/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch recipes-devtools/rust/files/rust/0009-Remove-crate-metadata-from-symbol-hashing.patch recipes-devtools/rust/rust-1.3.0.inc recipes-devtools/rust/rust-git.inc recipes-devtools/rust/rust-llvm_1.3.0.bb recipes-devtools/rust/rust.inc recipes-devtools/rust/rust_1.3.0.bb recipes-devtools/rust/rust_git.bb recipes/rust/files/rust-1.3.0/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch recipes/rust/files/rust-1.3.0/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch recipes/rust/files/rust-git/0001-platform.mk-avoid-choking-on-i586.patch recipes/rust/files/rust-git/0002-Target-add-default-target.json-path-libdir-rust-targ.patch recipes/rust/files/rust-git/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch
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
- 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.
Generally, I try to support the latest master of poky. I'm happy to support older versions too by applying backwards compat patches as long as I don't need to maintain a seperate branch. Of course, others are welcome to create forks to support their individual needs.
Copyright
MIT OR Apache-2.0 - Same as rust