From e04de10cfa3abaa162ec52b3e049b9e459e564c9 Mon Sep 17 00:00:00 2001 From: Johan Anderholm Date: Mon, 19 Jun 2017 18:39:33 -0500 Subject: [PATCH 01/15] rust-common: provide C++ wrappers For similar reasons to the C and linker wrappers, using rustbuild requires a C++ wrapper to ensure that the right flags that Yocto needs are passed to the underlying compiler. (cherry picked from commit e814ede9d93c7db801aa642db9767c0da01e39d7) --- classes/cargo.bbclass | 3 +++ classes/rust-common.bbclass | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/classes/cargo.bbclass b/classes/cargo.bbclass index 61f1324..76c245e 100644 --- a/classes/cargo.bbclass +++ b/classes/cargo.bbclass @@ -70,12 +70,15 @@ oe_cargo_build () { oe_cargo_fix_env () { export CC="${RUST_TARGET_CC}" + export CXX="${RUST_TARGET_CXX}" export CFLAGS="${CFLAGS}" export AR="${AR}" export TARGET_CC="${RUST_TARGET_CC}" + export TARGET_CXX="${RUST_TARGET_CXX}" export TARGET_CFLAGS="${CFLAGS}" export TARGET_AR="${AR}" export HOST_CC="${RUST_BUILD_CC}" + export HOST_CXX="${RUST_BUILD_CXX}" export HOST_CFLAGS="${BUILD_CFLAGS}" export HOST_AR="${BUILD_AR}" } diff --git a/classes/rust-common.bbclass b/classes/rust-common.bbclass index f79c52e..bf955a5 100644 --- a/classes/rust-common.bbclass +++ b/classes/rust-common.bbclass @@ -74,9 +74,11 @@ RUST_TARGET_SYS = "${@rust_base_triple(d, 'TARGET')}" # use those commands based on the prefix. WRAPPER_DIR = "${WORKDIR}/wrapper" RUST_BUILD_CC = "${WRAPPER_DIR}/build-rust-cc" +RUST_BUILD_CXX = "${WRAPPER_DIR}/build-rust-cxx" RUST_BUILD_CCLD = "${WRAPPER_DIR}/build-rust-ccld" RUST_BUILD_AR = "${WRAPPER_DIR}/build-rust-ar" RUST_TARGET_CC = "${WRAPPER_DIR}/target-rust-cc" +RUST_TARGET_CXX = "${WRAPPER_DIR}/target-rust-cxx" RUST_TARGET_CCLD = "${WRAPPER_DIR}/target-rust-ccld" RUST_TARGET_AR = "${WRAPPER_DIR}/target-rust-ar" @@ -97,15 +99,19 @@ create_wrapper () { do_rust_create_wrappers () { mkdir -p "${WRAPPER_DIR}" - # Yocto Build / Rust Host compiler + # Yocto Build / Rust Host C compiler create_wrapper "${RUST_BUILD_CC}" "${BUILD_CC}" + # Yocto Build / Rust Host C++ compiler + create_wrapper "${RUST_BUILD_CXX}" "${BUILD_CXX}" # Yocto Build / Rust Host linker create_wrapper "${RUST_BUILD_CCLD}" "${BUILD_CCLD}" "${BUILD_LDFLAGS}" # Yocto Build / Rust Host archiver create_wrapper "${RUST_BUILD_AR}" "${BUILD_AR}" - # Yocto Target / Rust Target compiler + # Yocto Target / Rust Target C compiler create_wrapper "${RUST_TARGET_CC}" "${CC}" + # Yocto Target / Rust Target C++ compiler + create_wrapper "${RUST_TARGET_CXX}" "${CXX}" # Yocto Target / Rust Target linker create_wrapper "${RUST_TARGET_CCLD}" "${CCLD}" "${LDFLAGS}" # Yocto Target / Rust Target archiver From b4527016dfba649edcf9af1a35c82c30fd9607d9 Mon Sep 17 00:00:00 2001 From: Johan Anderholm Date: Wed, 21 Jun 2017 09:23:56 -0500 Subject: [PATCH 02/15] cargo: build cargo using cargo and not make Instead of using the configure script paired with make, use Cargo to build Cargo. This moves us closer to being compatible with rustbuild. (cherry picked from commit 3e0f03d12a329f0c61f9f2b7a1b838a2d9c34eba) --- recipes-devtools/cargo/cargo.inc | 40 ++------------------------ recipes-devtools/cargo/cargo_0.16.0.bb | 2 -- 2 files changed, 3 insertions(+), 39 deletions(-) diff --git a/recipes-devtools/cargo/cargo.inc b/recipes-devtools/cargo/cargo.inc index bccb751..0836b31 100644 --- a/recipes-devtools/cargo/cargo.inc +++ b/recipes-devtools/cargo/cargo.inc @@ -12,45 +12,11 @@ SRC_URI = "\ http://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${CARGO_SNAPSHOT} \ " -B = "${S}" - # Used in libgit2-sys's build.rs, needed for pkg-config to be used export LIBGIT2_SYS_USE_PKG_CONFIG = "1" -# cargo's configure doesn't recognize --disable-static, so remove it. -DISABLE_STATIC = "" - -do_configure () { - "${S}/configure" \ - "--prefix=${prefix}" \ - "--build=${BUILD_SYS}" \ - "--host=${HOST_SYS}" \ - "--target=${TARGET_SYS}" \ - "--localstatedir=${localstatedir}" \ - "--sysconfdir=${sysconfdir}" \ - "--datadir=${datadir}" \ - "--infodir=${infodir}" \ - "--mandir=${mandir}" \ - "--libdir=${libdir}" \ - "--disable-verify-install" \ - ${EXTRA_OECONF} \ - || die "Could not configure cargo" - - cargo_do_configure -} - -do_compile () { - oe_cargo_fix_env - - rm -rf target/snapshot - mkdir -p target - cp -R ${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo target/snapshot - - oe_runmake VERBOSE=1 -} - -do_install () { - oe_runmake prepare-image-${TARGET_SYS} IMGDIR_${TARGET_SYS}="${D}${prefix}" -} +# When building cargo-native we don't have a built cargo to use so we must use +# the snapshot to bootstrap the build of cargo +CARGO_class-native = "${WORKDIR}/cargo-nightly-${RUST_BUILD_SYS}/cargo/bin/cargo" BBCLASSEXTEND = "native" diff --git a/recipes-devtools/cargo/cargo_0.16.0.bb b/recipes-devtools/cargo/cargo_0.16.0.bb index 47d447d..192ac86 100644 --- a/recipes-devtools/cargo/cargo_0.16.0.bb +++ b/recipes-devtools/cargo/cargo_0.16.0.bb @@ -1,8 +1,6 @@ require cargo-snapshot.inc require cargo.inc -EXTRA_OECONF += "--cargo=${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo/bin/cargo" - SRC_URI += " \ git://github.com/rust-lang/cargo.git;protocol=https;name=cargo;branch=rust-1.15.1 \ crate://crates.io/advapi32-sys/0.2.0 \ From 49c512c8854e4b2e1e2ba23c2423eec235455adb Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Wed, 21 Jun 2017 09:25:03 -0500 Subject: [PATCH 03/15] rust: drop custom target finding patch We shouldn't need to patch rustc to find the target but instead pass the full path to the target spec. This should solve #138. (cherry picked from commit 06a138a4a462929ec1a9e03a72e5f5c93054b8d2) --- classes/cargo.bbclass | 2 + ...lt-target.json-path-libdir-rust-targ.patch | 106 ------------------ recipes-devtools/rust/rust_1.15.1.bb | 1 - 3 files changed, 2 insertions(+), 107 deletions(-) delete mode 100644 recipes-devtools/rust/files/rust-1.15.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch diff --git a/classes/cargo.bbclass b/classes/cargo.bbclass index 76c245e..59484ff 100644 --- a/classes/cargo.bbclass +++ b/classes/cargo.bbclass @@ -56,12 +56,14 @@ cargo_do_configure () { RUSTFLAGS ??= "" CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} --release" +RUST_TARGET_PATH = "${STAGING_LIBDIR_NATIVE}/rustlib" # This is based on the content of CARGO_BUILD_FLAGS and generally will need to # change if CARGO_BUILD_FLAGS changes. CARGO_TARGET_SUBDIR="${HOST_SYS}/release" oe_cargo_build () { export RUSTFLAGS="${RUSTFLAGS}" + export RUST_TARGET_PATH="${RUST_TARGET_PATH}" bbnote "cargo = $(which cargo)" bbnote "rustc = $(which rustc)" bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@" diff --git a/recipes-devtools/rust/files/rust-1.15.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch b/recipes-devtools/rust/files/rust-1.15.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch deleted file mode 100644 index c0798d6..0000000 --- a/recipes-devtools/rust/files/rust-1.15.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch +++ /dev/null @@ -1,106 +0,0 @@ -From e9c6cf5d1a9bb7f50c5e98a660217062b510928b Mon Sep 17 00:00:00 2001 -From: Cody P Schafer -Date: Tue, 18 Nov 2014 01:40:21 -0500 -Subject: [PATCH 1/3] Target: add default target.json path: - $libdir/rust/targets - ---- - src/librustc/session/config.rs | 6 +++--- - src/librustc/session/mod.rs | 8 ++++++-- - src/librustc_back/target/mod.rs | 12 ++++++++++-- - 3 files changed, 19 insertions(+), 7 deletions(-) - -diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs -index 5e3c8bc..15fd763 100644 ---- a/src/librustc/session/config.rs -+++ b/src/librustc/session/config.rs -@@ -42,7 +42,7 @@ use std::hash::Hasher; - use std::collections::hash_map::DefaultHasher; - use std::collections::HashSet; - use std::iter::FromIterator; --use std::path::PathBuf; -+use std::path::{Path, PathBuf}; - - pub struct Config { - pub target: Target, -@@ -1001,8 +1001,8 @@ pub fn build_configuration(sess: &Session, - user_cfg - } - --pub fn build_target_config(opts: &Options, sp: &Handler) -> Config { -- let target = match Target::search(&opts.target_triple) { -+pub fn build_target_config(sysroot: &Path, opts: &Options, sp: &Handler) -> Config { -+ let target = match Target::search(sysroot, &opts.target_triple[..]) { - Ok(t) => t, - Err(e) => { - sp.struct_fatal(&format!("Error loading target specification: {}", e)) -diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs -index 91765e6..29e5e5d 100644 ---- a/src/librustc/session/mod.rs -+++ b/src/librustc/session/mod.rs -@@ -575,13 +575,17 @@ pub fn build_session_(sopts: config::Options, - codemap: Rc, - cstore: Rc CrateStore<'a>>) - -> Session { -- let host = match Target::search(config::host_triple()) { -+ let sysroot = match sopts.maybe_sysroot { -+ Some(ref x) => PathBuf::from(x), -+ None => filesearch::get_or_default_sysroot() -+ }; -+ let host = match Target::search(&sysroot, config::host_triple()) { - Ok(t) => t, - Err(e) => { - panic!(span_diagnostic.fatal(&format!("Error loading host specification: {}", e))); - } - }; -- let target_cfg = config::build_target_config(&sopts, &span_diagnostic); -+ let target_cfg = config::build_target_config(&sysroot, &sopts, &span_diagnostic); - let p_s = parse::ParseSess::with_span_handler(span_diagnostic, codemap); - let default_sysroot = match sopts.maybe_sysroot { - Some(_) => None, -diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs -index 351d469..3282dbd 100644 ---- a/src/librustc_back/target/mod.rs -+++ b/src/librustc_back/target/mod.rs -@@ -51,6 +51,7 @@ use std::io::prelude::*; - use syntax::abi::{Abi, lookup as lookup_abi}; - - use PanicStrategy; -+use std::path::Path; - - mod android_base; - mod apple_base; -@@ -625,12 +626,13 @@ impl Target { - /// - /// The error string could come from any of the APIs called, including - /// filesystem access and JSON decoding. -- pub fn search(target: &str) -> Result { -+ pub fn search(sysroot: &Path, target: &str) -> Result { - use std::env; - use std::ffi::OsString; - use std::fs::File; - use std::path::{Path, PathBuf}; - use serialize::json; -+ use std::iter::IntoIterator; - - fn load_file(path: &Path) -> Result { - let mut f = File::open(path).map_err(|e| e.to_string())?; -@@ -661,8 +663,14 @@ impl Target { - .unwrap_or(OsString::new()); - - // FIXME 16351: add a sane default search path? -+ let mut default_path = sysroot.to_owned(); -+ default_path.push(env!("CFG_LIBDIR_RELATIVE")); -+ default_path.push("rustlib"); - -- for dir in env::split_paths(&target_path) { -+ let paths = env::split_paths(&target_path) -+ .chain(Some(default_path).into_iter()); -+ -+ for dir in paths { - let p = dir.join(&path); - if p.is_file() { - return load_file(&p); --- -2.10.1 (Apple Git-78) - diff --git a/recipes-devtools/rust/rust_1.15.1.bb b/recipes-devtools/rust/rust_1.15.1.bb index 208ef97..ab3a82c 100644 --- a/recipes-devtools/rust/rust_1.15.1.bb +++ b/recipes-devtools/rust/rust_1.15.1.bb @@ -4,7 +4,6 @@ require rust-source-${PV}.inc EXTRA_OECONF = "--disable-rustbuild" SRC_URI += " \ - file://rust-${PV}/0001-Target-add-default-target.json-path-libdir-rust-targ.patch \ file://rust-${PV}/0003-std-thread_local-workaround-for-NULL-__dso_handle.patch \ " From 5b7699b4f028b45399d3738ff706267ae07a85af Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Wed, 21 Jun 2017 10:10:03 -0500 Subject: [PATCH 04/15] cargo.bbclass: improve debug note showing paths There was a bbnote that showed the path to the rustc and cargo binaries being used but this was not necessarily correct since it didn't use the exact variables used. (cherry picked from commit c55fb403f8e32446e9481660442ea56a8de9fbdb) --- classes/cargo.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/cargo.bbclass b/classes/cargo.bbclass index 59484ff..475e45f 100644 --- a/classes/cargo.bbclass +++ b/classes/cargo.bbclass @@ -64,8 +64,8 @@ CARGO_TARGET_SUBDIR="${HOST_SYS}/release" oe_cargo_build () { export RUSTFLAGS="${RUSTFLAGS}" export RUST_TARGET_PATH="${RUST_TARGET_PATH}" - bbnote "cargo = $(which cargo)" - bbnote "rustc = $(which rustc)" + bbnote "cargo = $(which ${CARGO})" + bbnote "rustc = $(which ${RUSTC})" bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@" "${CARGO}" build ${CARGO_BUILD_FLAGS} "$@" } From 243bc131915e6b23bc681e0223e1e1a429bdd668 Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Wed, 21 Jun 2017 10:45:16 -0500 Subject: [PATCH 05/15] cargo: convert recipe to cargo-bitbake Generate the Cargo recipe with cargo-bitbake instead of having a handcrafted recipe. This should make future version bumps easier. Three known issues: - license checksum of the Apache license is a generateme value due to the license file having a difference name then what's in Cargo.toml. - branch= value was wrong for tags. Pointed to HEAD instead of the branch that the underlying tag commit came from. - Use https protocol when the repo is publicly accessible. (cherry picked from commit 398fecb48ce5cb4fa15734c2ab3216d41c180e6d) --- recipes-devtools/cargo/cargo.inc | 13 +- recipes-devtools/cargo/cargo_0.16.0.bb | 168 ++++++++++++++----------- 2 files changed, 100 insertions(+), 81 deletions(-) diff --git a/recipes-devtools/cargo/cargo.inc b/recipes-devtools/cargo/cargo.inc index 0836b31..f3258af 100644 --- a/recipes-devtools/cargo/cargo.inc +++ b/recipes-devtools/cargo/cargo.inc @@ -1,17 +1,18 @@ -inherit cargo -inherit patch +require cargo-snapshot.inc -SUMMARY = "Cargo downloads your Rust project's dependencies and builds your project" -HOMEPAGE = "http://crates.io" SECTION = "devel" -LICENSE = "MIT | Apache-2.0" DEPENDS = "openssl zlib libgit2 curl ca-certificates libssh2" -SRC_URI = "\ +SRC_URI += "\ http://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${CARGO_SNAPSHOT} \ " +LIC_FILES_CHKSUM += " \ +file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ +file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \ +" + # Used in libgit2-sys's build.rs, needed for pkg-config to be used export LIBGIT2_SYS_USE_PKG_CONFIG = "1" diff --git a/recipes-devtools/cargo/cargo_0.16.0.bb b/recipes-devtools/cargo/cargo_0.16.0.bb index 192ac86..4982c0b 100644 --- a/recipes-devtools/cargo/cargo_0.16.0.bb +++ b/recipes-devtools/cargo/cargo_0.16.0.bb @@ -1,83 +1,101 @@ -require cargo-snapshot.inc -require cargo.inc +# Auto-Generated by cargo-bitbake 0.3.6 +# +inherit cargo +# If this is git based prefer versioned ones if they exist +# DEFAULT_PREFERENCE = "-1" + +# how to get cargo could be as easy as but default to a git checkout: +# SRC_URI += "crate://crates.io/cargo/0.16.0" +SRC_URI += "git://git@github.com/rust-lang/cargo.git;protocol=https;branch=rust-1.15.1" +SRCREV = "6e0c18cccc8b0c06fba8a8d76486f81a792fb420" +S = "${WORKDIR}/git" +CARGO_SRC_DIR="" + + +# please note if you have entries that do not begin with crate:// +# you must change them to how that package can be fetched SRC_URI += " \ - git://github.com/rust-lang/cargo.git;protocol=https;name=cargo;branch=rust-1.15.1 \ - crate://crates.io/advapi32-sys/0.2.0 \ - crate://crates.io/aho-corasick/0.5.3 \ - crate://crates.io/bitflags/0.7.0 \ - crate://crates.io/bufstream/0.1.2 \ - crate://crates.io/cfg-if/0.1.0 \ - crate://crates.io/cmake/0.1.19 \ - crate://crates.io/crossbeam/0.2.10 \ - crate://crates.io/curl-sys/0.3.6 \ - crate://crates.io/curl/0.4.1 \ - crate://crates.io/docopt/0.6.86 \ - crate://crates.io/env_logger/0.3.5 \ - crate://crates.io/filetime/0.1.10 \ - crate://crates.io/flate2/0.2.14 \ - crate://crates.io/fs2/0.3.0 \ - crate://crates.io/gcc/0.3.39 \ - crate://crates.io/gdi32-sys/0.2.0 \ - crate://crates.io/git2-curl/0.7.0 \ - crate://crates.io/git2/0.6.3 \ - crate://crates.io/glob/0.2.11 \ - crate://crates.io/hamcrest/0.1.1 \ - crate://crates.io/idna/0.1.0 \ - crate://crates.io/kernel32-sys/0.2.2 \ - crate://crates.io/lazy_static/0.2.2 \ - crate://crates.io/libc/0.2.18 \ - crate://crates.io/libgit2-sys/0.6.5 \ - crate://crates.io/libssh2-sys/0.2.4 \ - crate://crates.io/libz-sys/1.0.10 \ - crate://crates.io/log/0.3.6 \ - crate://crates.io/matches/0.1.4 \ - crate://crates.io/memchr/0.1.11 \ - crate://crates.io/miniz-sys/0.1.7 \ - crate://crates.io/miow/0.1.3 \ - crate://crates.io/net2/0.2.26 \ - crate://crates.io/num-bigint/0.1.35 \ - crate://crates.io/num-complex/0.1.35 \ - crate://crates.io/num-integer/0.1.32 \ - crate://crates.io/num-iter/0.1.32 \ - crate://crates.io/num-rational/0.1.35 \ - crate://crates.io/num-traits/0.1.36 \ - crate://crates.io/num/0.1.36 \ - crate://crates.io/num_cpus/1.1.0 \ - crate://crates.io/openssl-probe/0.1.0 \ - crate://crates.io/openssl-sys/0.9.1 \ - crate://crates.io/openssl/0.9.1 \ - crate://crates.io/pkg-config/0.3.8 \ - crate://crates.io/psapi-sys/0.1.0 \ - crate://crates.io/rand/0.3.14 \ - crate://crates.io/regex-syntax/0.3.9 \ - crate://crates.io/regex/0.1.80 \ - crate://crates.io/rustc-serialize/0.3.21 \ - crate://crates.io/semver-parser/0.6.1 \ - crate://crates.io/semver/0.5.1 \ - crate://crates.io/strsim/0.5.1 \ - crate://crates.io/tar/0.4.9 \ - crate://crates.io/tempdir/0.3.5 \ - crate://crates.io/term/0.4.4 \ - crate://crates.io/thread-id/2.0.0 \ - crate://crates.io/thread_local/0.2.7 \ - crate://crates.io/toml/0.2.1 \ - crate://crates.io/unicode-bidi/0.2.3 \ - crate://crates.io/unicode-normalization/0.1.2 \ - crate://crates.io/url/1.2.3 \ - crate://crates.io/user32-sys/0.2.0 \ - crate://crates.io/utf8-ranges/0.1.3 \ - crate://crates.io/winapi-build/0.1.1 \ - crate://crates.io/winapi/0.2.8 \ - crate://crates.io/ws2_32-sys/0.2.1 \ +crate://crates.io/advapi32-sys/0.2.0 \ +crate://crates.io/aho-corasick/0.5.3 \ +crate://crates.io/bitflags/0.7.0 \ +crate://crates.io/bufstream/0.1.2 \ +crate://crates.io/cfg-if/0.1.0 \ +crate://crates.io/cmake/0.1.19 \ +crate://crates.io/crossbeam/0.2.10 \ +crate://crates.io/curl-sys/0.3.6 \ +crate://crates.io/curl/0.4.1 \ +crate://crates.io/docopt/0.6.86 \ +crate://crates.io/env_logger/0.3.5 \ +crate://crates.io/filetime/0.1.10 \ +crate://crates.io/flate2/0.2.14 \ +crate://crates.io/fs2/0.3.0 \ +crate://crates.io/gcc/0.3.39 \ +crate://crates.io/gdi32-sys/0.2.0 \ +crate://crates.io/git2-curl/0.7.0 \ +crate://crates.io/git2/0.6.3 \ +crate://crates.io/glob/0.2.11 \ +crate://crates.io/hamcrest/0.1.1 \ +crate://crates.io/idna/0.1.0 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/lazy_static/0.2.2 \ +crate://crates.io/libc/0.2.18 \ +crate://crates.io/libgit2-sys/0.6.5 \ +crate://crates.io/libssh2-sys/0.2.4 \ +crate://crates.io/libz-sys/1.0.10 \ +crate://crates.io/log/0.3.6 \ +crate://crates.io/matches/0.1.4 \ +crate://crates.io/memchr/0.1.11 \ +crate://crates.io/miniz-sys/0.1.7 \ +crate://crates.io/miow/0.1.3 \ +crate://crates.io/net2/0.2.26 \ +crate://crates.io/num-bigint/0.1.35 \ +crate://crates.io/num-complex/0.1.35 \ +crate://crates.io/num-integer/0.1.32 \ +crate://crates.io/num-iter/0.1.32 \ +crate://crates.io/num-rational/0.1.35 \ +crate://crates.io/num-traits/0.1.36 \ +crate://crates.io/num/0.1.36 \ +crate://crates.io/num_cpus/1.1.0 \ +crate://crates.io/openssl-probe/0.1.0 \ +crate://crates.io/openssl-sys/0.9.1 \ +crate://crates.io/openssl/0.9.1 \ +crate://crates.io/pkg-config/0.3.8 \ +crate://crates.io/psapi-sys/0.1.0 \ +crate://crates.io/rand/0.3.14 \ +crate://crates.io/regex-syntax/0.3.9 \ +crate://crates.io/regex/0.1.80 \ +crate://crates.io/rustc-serialize/0.3.21 \ +crate://crates.io/semver-parser/0.6.1 \ +crate://crates.io/semver/0.5.1 \ +crate://crates.io/strsim/0.5.1 \ +crate://crates.io/tar/0.4.9 \ +crate://crates.io/tempdir/0.3.5 \ +crate://crates.io/term/0.4.4 \ +crate://crates.io/thread-id/2.0.0 \ +crate://crates.io/thread_local/0.2.7 \ +crate://crates.io/toml/0.2.1 \ +crate://crates.io/unicode-bidi/0.2.3 \ +crate://crates.io/unicode-normalization/0.1.2 \ +crate://crates.io/url/1.2.3 \ +crate://crates.io/user32-sys/0.2.0 \ +crate://crates.io/utf8-ranges/0.1.3 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +crate://crates.io/ws2_32-sys/0.2.1 \ " -SRCREV_cargo = "6e0c18cccc8b0c06fba8a8d76486f81a792fb420" -S = "${WORKDIR}/git" LIC_FILES_CHKSUM=" \ - file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \ - file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ - file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \ +file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \ " + +SUMMARY = "Cargo, a package manager for Rust." +HOMEPAGE = "https://crates.io" +LICENSE = "MIT | Apache-2.0" + +# includes this file if it exists but does not fail +# this is useful for anything you may want to override from +# what cargo-bitbake generates. +include cargo.inc From f881c0897c7882f7a725720c5b021237233c50f8 Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Wed, 21 Jun 2017 15:11:10 -0500 Subject: [PATCH 06/15] rustfmt: bump to 0.8.0 and use cargo-bitbake Switch to using cargo-bitbake to generate the recipe and bump versions at the same time. (cherry picked from commit 758f8459ecef27e7588d4f67c8815e96635100f8) --- recipes-example/rustfmt/rustfmt_0.4.0.bb | 36 ------------- recipes-example/rustfmt/rustfmt_0.8.0.bb | 67 ++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 36 deletions(-) delete mode 100644 recipes-example/rustfmt/rustfmt_0.4.0.bb create mode 100644 recipes-example/rustfmt/rustfmt_0.8.0.bb diff --git a/recipes-example/rustfmt/rustfmt_0.4.0.bb b/recipes-example/rustfmt/rustfmt_0.4.0.bb deleted file mode 100644 index 17f2350..0000000 --- a/recipes-example/rustfmt/rustfmt_0.4.0.bb +++ /dev/null @@ -1,36 +0,0 @@ -inherit cargo - -SRC_URI = " \ - crate://crates.io/aho-corasick/0.5.1 \ - crate://crates.io/bitflags/0.5.0 \ - crate://crates.io/diff/0.1.9 \ - crate://crates.io/env_logger/0.3.2 \ - crate://crates.io/getopts/0.2.14 \ - crate://crates.io/kernel32-sys/0.2.1 \ - crate://crates.io/libc/0.2.8 \ - crate://crates.io/log/0.3.5 \ - crate://crates.io/memchr/0.1.10 \ - crate://crates.io/regex/0.1.58 \ - crate://crates.io/regex-syntax/0.3.0 \ - crate://crates.io/rustc-serialize/0.3.18 \ - crate://crates.io/strings/0.0.1 \ - crate://crates.io/syntex_syntax/0.30.0 \ - crate://crates.io/term/0.2.14 \ - crate://crates.io/toml/0.1.28 \ - crate://crates.io/unicode-segmentation/0.1.2 \ - crate://crates.io/unicode-xid/0.0.3 \ - crate://crates.io/utf8-ranges/0.1.3 \ - crate://crates.io/winapi/0.2.6 \ - crate://crates.io/winapi-build/0.1.1 \ - crate://crates.io/rustfmt/0.4.0 \ -" -# rustfmt 0.5.0 -#LIC_FILES_CHKSUM=" \ -# file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ -# file://LICENSE-MIT;md5=0b29d505d9225d1f0815cbdcf602b901 \ -#" -LIC_FILES_CHKSUM="file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" - -SUMMARY = "Format Rust Code" -HOMEPAGE = "https://github.com/rust-lang-nursery/rustfmt" -LICENSE = "MIT | Apache-2.0" diff --git a/recipes-example/rustfmt/rustfmt_0.8.0.bb b/recipes-example/rustfmt/rustfmt_0.8.0.bb new file mode 100644 index 0000000..0c94e38 --- /dev/null +++ b/recipes-example/rustfmt/rustfmt_0.8.0.bb @@ -0,0 +1,67 @@ +# Auto-Generated by cargo-bitbake 0.3.6 +# +inherit cargo + +# If this is git based prefer versioned ones if they exist +# DEFAULT_PREFERENCE = "-1" + +# how to get rustfmt could be as easy as but default to a git checkout: +# SRC_URI += "crate://crates.io/rustfmt/0.8.0" +SRC_URI += "git://github.com/rust-lang-nursery/rustfmt.git;protocol=https;branch=syntex" +SRCREV = "4ed5a3bac71ed104e27797ee63729b0333e39d39" +S = "${WORKDIR}/git" +CARGO_SRC_DIR="" + + +# please note if you have entries that do not begin with crate:// +# you must change them to how that package can be fetched +SRC_URI += " \ +crate://crates.io/aho-corasick/0.6.2 \ +crate://crates.io/bitflags/0.8.0 \ +crate://crates.io/diff/0.1.10 \ +crate://crates.io/either/1.0.3 \ +crate://crates.io/env_logger/0.4.1 \ +crate://crates.io/getopts/0.2.14 \ +crate://crates.io/itertools/0.5.9 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/libc/0.2.21 \ +crate://crates.io/log/0.3.6 \ +crate://crates.io/memchr/1.0.1 \ +crate://crates.io/multimap/0.3.0 \ +crate://crates.io/regex-syntax/0.4.0 \ +crate://crates.io/regex/0.2.1 \ +crate://crates.io/rustc-serialize/0.3.22 \ +crate://crates.io/same-file/0.1.3 \ +crate://crates.io/strings/0.0.1 \ +crate://crates.io/syntex_errors/0.58.1 \ +crate://crates.io/syntex_pos/0.58.1 \ +crate://crates.io/syntex_syntax/0.58.1 \ +crate://crates.io/term/0.4.5 \ +crate://crates.io/thread-id/3.0.0 \ +crate://crates.io/thread_local/0.3.3 \ +crate://crates.io/toml/0.2.1 \ +crate://crates.io/unicode-segmentation/1.1.0 \ +crate://crates.io/unicode-xid/0.0.4 \ +crate://crates.io/unreachable/0.1.1 \ +crate://crates.io/utf8-ranges/1.0.0 \ +crate://crates.io/void/1.0.2 \ +crate://crates.io/walkdir/1.0.7 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +" + + + +LIC_FILES_CHKSUM=" \ +file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ +file://LICENSE-MIT;md5=0b29d505d9225d1f0815cbdcf602b901 \ +" + +SUMMARY = "Tool to find and fix Rust formatting issues" +HOMEPAGE = "https://github.com/rust-lang-nursery/rustfmt" +LICENSE = "Apache-2.0 | MIT" + +# includes this file if it exists but does not fail +# this is useful for anything you may want to override from +# what cargo-bitbake generates. +include rustfmt.inc From e4c106a186eb42ed607af75f38f15e9e185b7d78 Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Wed, 27 Sep 2017 11:20:32 -0500 Subject: [PATCH 07/15] cargo.bbclass: include CXXFLAGS for builds If g++ is invoked when building native bits with cargo we need to include CXXFLAGS. Signed-off-by: Doug Goldstein (cherry picked from commit 0cccf8b25c7b716e4e630fd5c14a230442ac9240) --- classes/cargo.bbclass | 3 +++ 1 file changed, 3 insertions(+) diff --git a/classes/cargo.bbclass b/classes/cargo.bbclass index 475e45f..0623cf3 100644 --- a/classes/cargo.bbclass +++ b/classes/cargo.bbclass @@ -74,14 +74,17 @@ oe_cargo_fix_env () { export CC="${RUST_TARGET_CC}" export CXX="${RUST_TARGET_CXX}" export CFLAGS="${CFLAGS}" + export CXXFLAGS="${CXXFLAGS}" export AR="${AR}" export TARGET_CC="${RUST_TARGET_CC}" export TARGET_CXX="${RUST_TARGET_CXX}" export TARGET_CFLAGS="${CFLAGS}" + export TARGET_CXXFLAGS="${CXXFLAGS}" export TARGET_AR="${AR}" export HOST_CC="${RUST_BUILD_CC}" export HOST_CXX="${RUST_BUILD_CXX}" export HOST_CFLAGS="${BUILD_CFLAGS}" + export HOST_CXXFLAGS="${BUILD_CXXFLAGS}" export HOST_AR="${BUILD_AR}" } From c7d40b7e36561edcaef1cc6ad5783ea8e9501c3f Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Wed, 27 Sep 2017 11:26:23 -0500 Subject: [PATCH 08/15] cargo{_common}.bbclass: abstract out parts for rustbuild rustbuild is a cargo based way to build Rust but all of our helper bits in cargo.bbclass would create a chicken/egg issue with dependencies since we pull down pre-built binaries and use those for boot strapping. (cherry picked from commit e31d252eb0431ec3e86914f9d772861b435ab38a) --- classes/cargo.bbclass | 66 ++++------------------------------ classes/cargo_common.bbclass | 70 ++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 59 deletions(-) create mode 100644 classes/cargo_common.bbclass diff --git a/classes/cargo.bbclass b/classes/cargo.bbclass index 0623cf3..9bbc49d 100644 --- a/classes/cargo.bbclass +++ b/classes/cargo.bbclass @@ -1,13 +1,13 @@ -# add crate fetch support -inherit crate-fetch -inherit rust-common +## +## Purpose: +## This class is used by any recipes that are built using +## Cargo. + +inherit cargo_common # the binary we will use CARGO = "cargo" -# Where we download our registry and dependencies to -export CARGO_HOME = "${WORKDIR}/cargo_home" - # We need cargo to compile for the target BASEDEPENDS_append = " cargo-native" @@ -22,38 +22,6 @@ B = "${S}" # where the issue occured export RUST_BACKTRACE = "1" -# The pkg-config-rs library used by cargo build scripts disables itself when -# cross compiling unless this is defined. We set up pkg-config appropriately -# for cross compilation, so tell it we know better than it. -export PKG_CONFIG_ALLOW_CROSS = "1" - -cargo_do_configure () { - mkdir -p ${CARGO_HOME} - echo "paths = [" > ${CARGO_HOME}/config - - for p in ${EXTRA_OECARGO_PATHS}; do - printf "\"%s\"\n" "$p" - done | sed -e 's/$/,/' >> ${CARGO_HOME}/config - echo "]" >> ${CARGO_HOME}/config - - # Point cargo at our local mirror of the registry - cat <<- EOF >> ${CARGO_HOME}/config - [source.bitbake] - directory = "${CARGO_HOME}/bitbake" - - [source.crates-io] - replace-with = "bitbake" - local-registry = "/nonexistant" - EOF - - echo "[target.${HOST_SYS}]" >> ${CARGO_HOME}/config - echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config - if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then - echo "[target.${BUILD_SYS}]" >> ${CARGO_HOME}/config - echo "linker = '${RUST_BUILD_CCLD}'" >> ${CARGO_HOME}/config - fi -} - RUSTFLAGS ??= "" CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} --release" RUST_TARGET_PATH = "${STAGING_LIBDIR_NATIVE}/rustlib" @@ -70,26 +38,6 @@ oe_cargo_build () { "${CARGO}" build ${CARGO_BUILD_FLAGS} "$@" } -oe_cargo_fix_env () { - export CC="${RUST_TARGET_CC}" - export CXX="${RUST_TARGET_CXX}" - export CFLAGS="${CFLAGS}" - export CXXFLAGS="${CXXFLAGS}" - export AR="${AR}" - export TARGET_CC="${RUST_TARGET_CC}" - export TARGET_CXX="${RUST_TARGET_CXX}" - export TARGET_CFLAGS="${CFLAGS}" - export TARGET_CXXFLAGS="${CXXFLAGS}" - export TARGET_AR="${AR}" - export HOST_CC="${RUST_BUILD_CC}" - export HOST_CXX="${RUST_BUILD_CXX}" - export HOST_CFLAGS="${BUILD_CFLAGS}" - export HOST_CXXFLAGS="${BUILD_CXXFLAGS}" - export HOST_AR="${BUILD_AR}" -} - -EXTRA_OECARGO_PATHS ??= "" - cargo_do_compile () { oe_cargo_fix_env oe_cargo_build @@ -113,4 +61,4 @@ cargo_do_install () { fi } -EXPORT_FUNCTIONS do_configure do_compile do_install +EXPORT_FUNCTIONS do_compile do_install diff --git a/classes/cargo_common.bbclass b/classes/cargo_common.bbclass new file mode 100644 index 0000000..9958265 --- /dev/null +++ b/classes/cargo_common.bbclass @@ -0,0 +1,70 @@ +## +## Purpose: +## This class is to support building with cargo. It +## must be different than cargo.bbclass because Rust +## now builds with Cargo but cannot use cargo.bbclass +## due to dependencies and assumptions in cargo.bbclass +## that Rust & Cargo are already installed. So this +## is used by cargo.bbclass and Rust +## + +# add crate fetch support +inherit crate-fetch +inherit rust-common + +# Where we download our registry and dependencies to +export CARGO_HOME = "${WORKDIR}/cargo_home" + +# The pkg-config-rs library used by cargo build scripts disables itself when +# cross compiling unless this is defined. We set up pkg-config appropriately +# for cross compilation, so tell it we know better than it. +export PKG_CONFIG_ALLOW_CROSS = "1" + +cargo_common_do_configure () { + mkdir -p ${CARGO_HOME} + echo "paths = [" > ${CARGO_HOME}/config + + for p in ${EXTRA_OECARGO_PATHS}; do + printf "\"%s\"\n" "$p" + done | sed -e 's/$/,/' >> ${CARGO_HOME}/config + echo "]" >> ${CARGO_HOME}/config + + # Point cargo at our local mirror of the registry + cat <<- EOF >> ${CARGO_HOME}/config + [source.bitbake] + directory = "${CARGO_HOME}/bitbake" + + [source.crates-io] + replace-with = "bitbake" + local-registry = "/nonexistant" + EOF + + echo "[target.${HOST_SYS}]" >> ${CARGO_HOME}/config + echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config + if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then + echo "[target.${BUILD_SYS}]" >> ${CARGO_HOME}/config + echo "linker = '${RUST_BUILD_CCLD}'" >> ${CARGO_HOME}/config + fi +} + +oe_cargo_fix_env () { + export CC="${RUST_TARGET_CC}" + export CXX="${RUST_TARGET_CXX}" + export CFLAGS="${CFLAGS}" + export CXXFLAGS="${CXXFLAGS}" + export AR="${AR}" + export TARGET_CC="${RUST_TARGET_CC}" + export TARGET_CXX="${RUST_TARGET_CXX}" + export TARGET_CFLAGS="${CFLAGS}" + export TARGET_CFLAGS="${CXXFLAGS}" + export TARGET_AR="${AR}" + export HOST_CC="${RUST_BUILD_CC}" + export HOST_CXX="${RUST_BUILD_CXX}" + export HOST_CFLAGS="${BUILD_CFLAGS}" + export HOST_CXXFLAGS="${BUILD_CXXFLAGS}" + export HOST_AR="${BUILD_AR}" +} + +EXTRA_OECARGO_PATHS ??= "" + +EXPORT_FUNCTIONS do_configure From f822a1e21fc83386e3d4101f57cc2d34a9afd729 Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Thu, 28 Sep 2017 13:55:43 -0500 Subject: [PATCH 09/15] update container to the pyro supported version (cherry picked from commit 1b8883be1249234a131a076ca0e0244f55b79b13) --- scripts/containerize.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/containerize.sh b/scripts/containerize.sh index 499378b..9e28453 100755 --- a/scripts/containerize.sh +++ b/scripts/containerize.sh @@ -1,7 +1,7 @@ #!/bin/bash # what container are we using to build this -CONTAINER="starlabio/yocto:1.5" +CONTAINER="cardoe/yocto:pyro" einfo() { echo "$*" >&2 From a086ab5c3db1dcdc8c1924cd0266a55edf5c8c65 Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Thu, 28 Sep 2017 13:52:33 -0500 Subject: [PATCH 10/15] cargo: convert to versioned include file We'll need the prior version of cargo to boot strap ourselves going forward so include the version info so we can support multiple versions in the tree. (cherry picked from commit 1ff41650d52489fcae971ed40752496aa7cac426) --- recipes-devtools/cargo/cargo-0.16.0.inc | 5 +++++ recipes-devtools/cargo/cargo-snapshot.inc | 4 ---- recipes-devtools/cargo/cargo.inc | 5 +---- recipes-devtools/cargo/cargo_0.16.0.bb | 4 +++- 4 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 recipes-devtools/cargo/cargo-0.16.0.inc delete mode 100644 recipes-devtools/cargo/cargo-snapshot.inc diff --git a/recipes-devtools/cargo/cargo-0.16.0.inc b/recipes-devtools/cargo/cargo-0.16.0.inc new file mode 100644 index 0000000..8a2088c --- /dev/null +++ b/recipes-devtools/cargo/cargo-0.16.0.inc @@ -0,0 +1,5 @@ + +CARGO_SNAPSHOT = "2016-09-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz;downloadfilename=cargo-nightly-x86_64-unknown-linux-gnu-2016-09-01.tar.gz" +SRC_URI[cargo-snapshot.md5sum] = "d41ebf79290a7c9c9e5df87cb27e5091" +SRC_URI[cargo-snapshot.sha256sum] = "365e5cad79512d244b8ced32f8e5b86a710fc6c17f0d0f5f744b8058ef6dc756" + diff --git a/recipes-devtools/cargo/cargo-snapshot.inc b/recipes-devtools/cargo/cargo-snapshot.inc deleted file mode 100644 index 8f3c28a..0000000 --- a/recipes-devtools/cargo/cargo-snapshot.inc +++ /dev/null @@ -1,4 +0,0 @@ - -CARGO_SNAPSHOT = "2016-09-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz;downloadfilename=cargo-nightly-x86_64-unknown-linux-gnu-2016-09-01.tar.gz" -SRC_URI[md5sum] = "d41ebf79290a7c9c9e5df87cb27e5091" -SRC_URI[sha256sum] = "365e5cad79512d244b8ced32f8e5b86a710fc6c17f0d0f5f744b8058ef6dc756" diff --git a/recipes-devtools/cargo/cargo.inc b/recipes-devtools/cargo/cargo.inc index f3258af..d2b550a 100644 --- a/recipes-devtools/cargo/cargo.inc +++ b/recipes-devtools/cargo/cargo.inc @@ -1,15 +1,12 @@ -require cargo-snapshot.inc - SECTION = "devel" DEPENDS = "openssl zlib libgit2 curl ca-certificates libssh2" SRC_URI += "\ - http://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${CARGO_SNAPSHOT} \ + https://static.rust-lang.org/cargo-dist/${CARGO_SNAPSHOT};name=cargo-snapshot \ " LIC_FILES_CHKSUM += " \ -file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \ " diff --git a/recipes-devtools/cargo/cargo_0.16.0.bb b/recipes-devtools/cargo/cargo_0.16.0.bb index 4982c0b..8845982 100644 --- a/recipes-devtools/cargo/cargo_0.16.0.bb +++ b/recipes-devtools/cargo/cargo_0.16.0.bb @@ -1,4 +1,4 @@ -# Auto-Generated by cargo-bitbake 0.3.6 +# Auto-Generated by cargo-bitbake 0.3.8 # inherit cargo @@ -89,6 +89,7 @@ crate://crates.io/ws2_32-sys/0.2.1 \ LIC_FILES_CHKSUM=" \ file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \ +file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ " SUMMARY = "Cargo, a package manager for Rust." @@ -98,4 +99,5 @@ LICENSE = "MIT | Apache-2.0" # includes this file if it exists but does not fail # this is useful for anything you may want to override from # what cargo-bitbake generates. +include cargo-${PV}.inc include cargo.inc From ee3fec561ae820678fddeba43e01613a5895b461 Mon Sep 17 00:00:00 2001 From: Johan Anderholm Date: Sun, 12 Mar 2017 20:03:38 +0100 Subject: [PATCH 11/15] Switch to rustbuild Switch the build process to using Rust's new build system called rustbuild. At the same time stop using jemalloc on all platforms and switch to the system allocator since that was simplier to do. (cherry picked from commit a4fe235317f655ddb3cadabb4f0695b8c204d89c) --- classes/rust-common.bbclass | 2 +- recipes-devtools/cargo/cargo-0.16.0.inc | 8 +- recipes-devtools/cargo/cargo.inc | 8 - recipes-devtools/rust/libstd-rs.inc | 8 +- recipes-devtools/rust/libstd-rs_1.15.1.bb | 6 +- recipes-devtools/rust/rust-cross_1.15.1.bb | 1 + .../rust/rust-snapshot-1.15.1.inc | 30 ++ recipes-devtools/rust/rust-source-1.15.1.inc | 12 - recipes-devtools/rust/rust.inc | 263 ++++++++---------- recipes-devtools/rust/rust_1.15.1.bb | 17 +- 10 files changed, 178 insertions(+), 177 deletions(-) create mode 100644 recipes-devtools/rust/rust-snapshot-1.15.1.inc diff --git a/classes/rust-common.bbclass b/classes/rust-common.bbclass index bf955a5..b76e2d9 100644 --- a/classes/rust-common.bbclass +++ b/classes/rust-common.bbclass @@ -5,7 +5,7 @@ FILES_${PN}-dev += "${rustlibdir}/*.rlib" FILES_${PN}-dbg += "${rustlibdir}/.debug" RUSTLIB = "-L ${STAGING_LIBDIR}/rust" -RUSTFLAGS += "-C rpath ${RUSTLIB}" +RUSTFLAGS += "${RUSTLIB}" RUSTLIB_DEP ?= "libstd-rs" # Responsible for taking Yocto triples and converting it to Rust triples diff --git a/recipes-devtools/cargo/cargo-0.16.0.inc b/recipes-devtools/cargo/cargo-0.16.0.inc index 8a2088c..04d1723 100644 --- a/recipes-devtools/cargo/cargo-0.16.0.inc +++ b/recipes-devtools/cargo/cargo-0.16.0.inc @@ -1,5 +1,11 @@ - CARGO_SNAPSHOT = "2016-09-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz;downloadfilename=cargo-nightly-x86_64-unknown-linux-gnu-2016-09-01.tar.gz" SRC_URI[cargo-snapshot.md5sum] = "d41ebf79290a7c9c9e5df87cb27e5091" SRC_URI[cargo-snapshot.sha256sum] = "365e5cad79512d244b8ced32f8e5b86a710fc6c17f0d0f5f744b8058ef6dc756" +SRC_URI += "\ + https://static.rust-lang.org/cargo-dist/${CARGO_SNAPSHOT};name=cargo-snapshot \ +" + +# When building cargo-native we don't have a built cargo to use so we must use +# the snapshot to bootstrap the build of cargo +CARGO_class-native = "${WORKDIR}/cargo-nightly-${RUST_BUILD_SYS}/cargo/bin/cargo" diff --git a/recipes-devtools/cargo/cargo.inc b/recipes-devtools/cargo/cargo.inc index d2b550a..2cccef2 100644 --- a/recipes-devtools/cargo/cargo.inc +++ b/recipes-devtools/cargo/cargo.inc @@ -2,10 +2,6 @@ SECTION = "devel" DEPENDS = "openssl zlib libgit2 curl ca-certificates libssh2" -SRC_URI += "\ - https://static.rust-lang.org/cargo-dist/${CARGO_SNAPSHOT};name=cargo-snapshot \ -" - LIC_FILES_CHKSUM += " \ file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \ " @@ -13,8 +9,4 @@ file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \ # Used in libgit2-sys's build.rs, needed for pkg-config to be used export LIBGIT2_SYS_USE_PKG_CONFIG = "1" -# When building cargo-native we don't have a built cargo to use so we must use -# the snapshot to bootstrap the build of cargo -CARGO_class-native = "${WORKDIR}/cargo-nightly-${RUST_BUILD_SYS}/cargo/bin/cargo" - BBCLASSEXTEND = "native" diff --git a/recipes-devtools/rust/libstd-rs.inc b/recipes-devtools/rust/libstd-rs.inc index 5bcfb69..ec3c67d 100644 --- a/recipes-devtools/rust/libstd-rs.inc +++ b/recipes-devtools/rust/libstd-rs.inc @@ -2,7 +2,7 @@ SUMMARY = "Rust standard libaries" HOMEPAGE = "http://www.rust-lang.org" SECTION = "devel" LICENSE = "MIT | Apache-2.0" -LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" +LIC_FILES_CHKSUM ="file://../../COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" RUSTLIB_DEP = "" inherit cargo @@ -10,16 +10,16 @@ inherit cargo # Needed so cargo can find libbacktrace RUSTFLAGS += "-L ${STAGING_LIBDIR}" +S = "${RUSTSRC}/src/libstd" + do_compile_prepend () { - cd ${S}/src/rustc/std_shim export CARGO_TARGET_DIR="${B}" - # For Rust 1.12.1 and lower - export RUSTC_BOOTSTRAP_KEY="${RS_KEY}" # For Rust 1.13.0 and newer export RUSTC_BOOTSTRAP="1" } do_install () { mkdir -p ${D}${rustlibdir} + cp ${B}/${TARGET_SYS}/release/deps/* ${D}${rustlibdir} } diff --git a/recipes-devtools/rust/libstd-rs_1.15.1.bb b/recipes-devtools/rust/libstd-rs_1.15.1.bb index 944df6a..471744d 100644 --- a/recipes-devtools/rust/libstd-rs_1.15.1.bb +++ b/recipes-devtools/rust/libstd-rs_1.15.1.bb @@ -1,9 +1,9 @@ require rust-source-${PV}.inc require libstd-rs.inc -EXTRA_OECONF = "--disable-rustbuild" - -CARGO_BUILD_FLAGS += "--features 'jemalloc panic-unwind'" +# Don't use jemalloc as it doesn't work for many targets. +# https://github.com/rust-lang/rust/pull/37392 +CARGO_BUILD_FLAGS += "--features 'panic-unwind'" SRC_URI += "\ crate://crates.io/cmake/0.1.18 \ diff --git a/recipes-devtools/rust/rust-cross_1.15.1.bb b/recipes-devtools/rust/rust-cross_1.15.1.bb index ddc25d3..34d92de 100644 --- a/recipes-devtools/rust/rust-cross_1.15.1.bb +++ b/recipes-devtools/rust/rust-cross_1.15.1.bb @@ -1,2 +1,3 @@ require rust-cross.inc require rust-source-${PV}.inc +require rust-snapshot-${PV}.inc diff --git a/recipes-devtools/rust/rust-snapshot-1.15.1.inc b/recipes-devtools/rust/rust-snapshot-1.15.1.inc new file mode 100644 index 0000000..85b4d4b --- /dev/null +++ b/recipes-devtools/rust/rust-snapshot-1.15.1.inc @@ -0,0 +1,30 @@ +# Specifics for Rust 1.15.1 + +## This is information on the rust-snapshot (binary) used to build our current release. +## snapshot info is taken from rust/src/stage0.txt +## TODO: find a way to add additional SRC_URIs based on the contents of an +## earlier SRC_URI. +RS_VERSION = "1.14.0" + +RUST_STD_SNAPSHOT = "rust-std-${RS_VERSION}-${RUST_BUILD_SYS}" +RUSTC_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_BUILD_SYS}" +CARGO_REV = "fbeea902d2c9a5be6d99cc35681565d8f7832592" +CARGO_SNAPSHOT = "cargo-nightly-${RUST_BUILD_SYS}" + +SRC_URI += " \ + https://static.rust-lang.org/dist/${RUST_STD_SNAPSHOT}.tar.gz;name=rust-std-snapshot;subdir=rust-snapshot-components \ + https://static.rust-lang.org/dist/${RUSTC_SNAPSHOT}.tar.gz;name=rustc-snapshot;subdir=rust-snapshot-components \ +" + +# Downloaded cargo tarballs must be named differently to distinguish between versions. +SRC_URI += " \ + https://s3.amazonaws.com/rust-lang-ci/cargo-builds/${CARGO_REV}/${CARGO_SNAPSHOT}.tar.gz;name=cargo-snapshot;subdir=rust-snapshot-components;downloadfilename=${CARGO_SNAPSHOT}-${CARGO_REV}.tar.gz \ +" + +# These are x86_64-unknown-linux-gnu hashes, how can we add more? +SRC_URI[rustc-snapshot.md5sum] = "f178d9d6aad0f87c451f4b2f93170633" +SRC_URI[rustc-snapshot.sha256sum] = "0eeec4211aa872f24c220200a0c2b095bbfc9c0f737c1c5df2555967c8f36787" +SRC_URI[rust-std-snapshot.md5sum] = "518e492fc3d50d8c678056eb788bd0e7" +SRC_URI[rust-std-snapshot.sha256sum] = "3a609bfe9572c742d71199faad578ee76abe9067cd8df698bda6e3ef5caf6ec4" +SRC_URI[cargo-snapshot.md5sum] = "59bc24d15c393de364dadb3f4e3c9a5a" +SRC_URI[cargo-snapshot.sha256sum] = "0e052514ee88f236153a0d6c6f38f66d691eb4cf1ac09e6040d96e5101d57800" diff --git a/recipes-devtools/rust/rust-source-1.15.1.inc b/recipes-devtools/rust/rust-source-1.15.1.inc index dc3bdfb..2534257 100644 --- a/recipes-devtools/rust/rust-source-1.15.1.inc +++ b/recipes-devtools/rust/rust-source-1.15.1.inc @@ -1,17 +1,5 @@ # Specifics for Rust 1.15.1 -## This is information on the rust-snapshot (binary) used to build our current release. -## snapshot info is taken from rust/src/stage0.txt -## TODO: find a way to add additional SRC_URIs based on the contents of an -## earlier SRC_URI. -RS_VERSION = "1.14.0" - -RUST_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_BUILD_SYS}" - -# These are x86_64-unknown-linux-gnu hashes, how can we add more? -SRC_URI[rust-snapshot.md5sum] = "f178d9d6aad0f87c451f4b2f93170633" -SRC_URI[rust-snapshot.sha256sum] = "0eeec4211aa872f24c220200a0c2b095bbfc9c0f737c1c5df2555967c8f36787" - SRC_URI += "\ https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \ " diff --git a/recipes-devtools/rust/rust.inc b/recipes-devtools/rust/rust.inc index 03abae0..12ad957 100644 --- a/recipes-devtools/rust/rust.inc +++ b/recipes-devtools/rust/rust.inc @@ -5,18 +5,26 @@ LICENSE = "MIT | Apache-2.0" LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" inherit rust +inherit cargo_common -SRC_URI = "\ - https://static.rust-lang.org/dist/${RUST_SNAPSHOT}.tar.gz;name=rust-snapshot \ - " - -DEPENDS += "file-native" +DEPENDS += "file-native python-native" # We generate local targets, and need to be able to locate them export RUST_TARGET_PATH="${WORKDIR}/targets/" export FORCE_CRATE_HASH="${BB_TASKHASH}" +setup_cargo_environment () { + # The first step is to build bootstrap and some early stage tools, + # these are build for the same target as the snapshot, e.g. + # x86_64-unknown-linux-gnu. + # Later stages are build for the native target (i.e. target.x86_64-linux) + cargo_common_do_configure + + echo "[target.${RUST_BUILD_SYS}]" >> ${CARGO_HOME}/config + echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config +} + # Right now this is focused on arm-specific tune features. # We get away with this for now as one can only use x86-64 as the build host # (not arm). @@ -115,6 +123,7 @@ DATA_LAYOUT[arm] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" LLVM_TARGET[arm] = "${RUST_TARGET_SYS}" TARGET_ENDIAN[arm] = "little" TARGET_POINTER_WIDTH[arm] = "32" +MAX_ATOMIC_WIDTH[arm] = "64" FEATURES[arm] = "+v6,+vfp2" ## aarch64-unknown-linux-gnu @@ -122,24 +131,28 @@ DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" LLVM_TARGET[aarch64] = "aarch64-unknown-linux-gnu" TARGET_ENDIAN[aarch64] = "little" TARGET_POINTER_WIDTH[aarch64] = "64" +MAX_ATOMIC_WIDTH[aarch64] = "128" ## x86_64-unknown-linux-gnu DATA_LAYOUT[x86_64] = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" LLVM_TARGET[x86_64] = "x86_64-unknown-linux-gnu" TARGET_ENDIAN[x86_64] = "little" TARGET_POINTER_WIDTH[x86_64] = "64" +MAX_ATOMIC_WIDTH[x86_64] = "64" ## i686-unknown-linux-gnu DATA_LAYOUT[i686] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" LLVM_TARGET[i686] = "i686-unknown-linux-gnu" TARGET_ENDIAN[i686] = "little" TARGET_POINTER_WIDTH[i686] = "32" +MAX_ATOMIC_WIDTH[i686] = "64" ## XXX: a bit of a hack so qemux86 builds, clone of i686-unknown-linux-gnu above DATA_LAYOUT[i586] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" LLVM_TARGET[i586] = "i586-unknown-linux-gnu" TARGET_ENDIAN[i586] = "little" TARGET_POINTER_WIDTH[i586] = "32" +MAX_ATOMIC_WIDTH[i586] = "64" def arch_for(d, thing): return d.getVar('{}_ARCH'.format(thing)) @@ -150,21 +163,6 @@ def sys_for(d, thing): def prefix_for(d, thing): return d.getVar('{}_PREFIX'.format(thing)) -## Note: TOOLCHAIN_OPTIONS is set to "" by native.bbclass and cross.bbclass, -## which prevents us from grabbing them when building a cross compiler (native doesn't matter). -## We workaround this in internal-rust-cross.bbclass. -def cflags_for(d, thing): - cc_arch = d.getVar('{}_CC_ARCH'.format(thing)) or "" - flags = d.getVar('{}_CFLAGS'.format(thing)) or "" - tc = d.getVar('TOOLCHAIN_OPTIONS') or "" - return ' '.join([cc_arch, flags, tc]) - -def cxxflags_for(d, thing): - cc_arch = d.getVar('{}_CC_ARCH'.format(thing)) or "" - flags = d.getVar('{}_CXXFLAGS'.format(thing)) or "" - tc = d.getVar('TOOLCHAIN_OPTIONS') or "" - return ' '.join([cc_arch, flags, tc]) - # Convert a normal arch (HOST_ARCH, TARGET_ARCH, BUILD_ARCH, etc) to something # rust's internals won't choke on. def arch_to_rust_target_arch(arch): @@ -215,29 +213,35 @@ def rust_gen_target(d, thing, wd): tspec = {} tspec['llvm-target'] = d.getVarFlag('LLVM_TARGET', arch) tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch) + tspec['max-atomic-width'] = d.getVarFlag('MAX_ATOMIC_WIDTH', arch) tspec['target-pointer-width'] = d.getVarFlag('TARGET_POINTER_WIDTH', arch) - tspec['target-word-size'] = tspec['target-pointer-width'] tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch) tspec['arch'] = arch_to_rust_target_arch(arch) tspec['os'] = "linux" tspec['env'] = "gnu" + tspec['vendor'] = "unknown" + tspec['target-family'] = "unix" tspec['linker'] = "{}{}gcc".format(d.getVar('CCACHE'), prefix) - tspec['objcopy'] = "{}objcopy".format(prefix) tspec['ar'] = "{}ar".format(prefix) tspec['cpu'] = cpu if features is not "": tspec['features'] = features tspec['dynamic-linking'] = True tspec['executables'] = True - tspec['morestack'] = True tspec['linker-is-gnu'] = True + tspec['linker-flavor'] = "gcc" tspec['has-rpath'] = True tspec['has-elf-tls'] = True tspec['position-independent-executables'] = True + # Don't use jemalloc as it doesn't work for many targets. + # https://github.com/rust-lang/rust/pull/37392 + tspec['exe-allocation-crate'] = "alloc_system" + tspec['lib-allocation-crate'] = "alloc_system" + # write out the target spec json file with open(wd + sys + '.json', 'w') as f: - json.dump(tspec, f) + json.dump(tspec, f, indent=4) python do_rust_gen_targets () { @@ -252,128 +256,86 @@ python do_rust_gen_targets () { addtask rust_gen_targets after do_patch before do_compile do_rust_gen_targets[dirs] += "${WORKDIR}/targets" -def rust_gen_mk_cfg(d, thing): - '''' - Rust's build system adds support for new archs via 2 things: - 1. a file in mk/cfg which defines how the runtime libraries are built - 2. and rustc arch definition either built into the compiler or supplied as a .json file - This generates a new #1 for the given 'thing' (one of HOST, TARGET, BUILD) - using a "similar" config that rust already supplies as a template. +do_rust_setup_snapshot () { + for installer in "${WORKDIR}/rust-snapshot-components/"*"/install.sh"; do + "${installer}" --prefix="${WORKDIR}/rust-snapshot" --disable-ldconfig + done - Note that the configure process also depends on the existence of #1, so we - have to run this before do_configure - ''' - import os - import subprocess - - rust_base_sys = rust_base_triple(d, thing) - arch = arch_for(d, thing) - sys = sys_for(d, thing) - prefix = prefix_for(d, thing) - llvm_target = d.getVarFlag('LLVM_TARGET', arch) - ldflags = d.getVar('LDFLAGS') + d.getVar('HOST_CC_ARCH') + d.getVar('TOOLCHAIN_OPTIONS') - - b = os.path.join(d.getVar('S'), 'mk', 'cfg') - o = open(os.path.join(b, sys_for(d, thing) + '.mk'), 'w') - i = open(os.path.join(b, rust_base_sys + '.mk'), 'r') - - r = subprocess.call(['sed', - # CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a - # wide range of targets (not just HOST). Yocto's settings for them will - # be inappropriate, avoid having random targets try to use them, we'll - # add as needed. - '-e', 's/$(CFLAGS)//', - '-e', 's/$(CXXFLAGS)//', - '-e', 's/$(CPPFLAGS)//', - '-e', 's/$(LDFLAGS)//', - - # update all triplets to the new one - '-e', 's/{}/{}/g'.format(rust_base_sys, sys), - - # Replace tools with our own (CROSS_PREFIX is appended to all tools - # by rust's build system). We delete and then insert this because not - # all targets define it. - '-e', 's/^CROSS_PREFIX_{}.*$//'.format(sys), - '-e', '2 a CROSS_PREFIX_{} := {}'.format(sys, prefix), - '-e', 's/^CFG_LLVM_TARGET_.*$//', - '-e', '2 a CFG_LLVM_TARGET_{} := {}'.format(sys, llvm_target), - '-e', 's/^CC_{}=.*$/CC_{} := gcc/'.format(sys, sys), - '-e', 's/^CXX_{}.*$/CXX_{} := g++/'.format(sys, sys), - '-e', 's/^CPP_{}.*$/CPP_{} := gcc -E/'.format(sys, sys), - '-e', 's/^AR_{}.*$/AR_{} := ar/'.format(sys, sys), - - # Some targets don't have LINK even though it is required to build. - '-e', 's/^LINK_{}.*$//'.format(sys), - '-e', '2 a LINK_{} := gcc'.format(sys), - - # Append our flags to the existing ones - '-e', '/^CFG_JEMALLOC_CFLAGS/ s;$; {};'.format(cflags_for(d, thing)), - '-e', '/^CFG_GCCISH_CFLAGS/ s;$; {};'.format(cflags_for(d, thing)), - '-e', '/^CFG_GCCISH_CXXFLAGS/ s;$; {};'.format(cxxflags_for(d, thing)), - '-e', '/^CFG_GCCISH_LINK_FLAGS/ s;$; {};'.format(ldflags), - - # May need to add: CFG_LLC_FLAGS_{} - ], stdout=o, stdin=i) - if r: - raise Exception - o.write("OBJCOPY_{} := {}objcopy\n".format(sys, prefix)) - # Note: this isn't how this variable is supposed to be used, but for - # non-msvc platforms nothing else touches it. - # These are the only extra flags passed to the rustllvm (c++ code) build. - # These are only used for host (even though we emit them for all targets) - # Without this, there are link failures due to GLIBC_CXX11_ABI issues in - # certain setups. - o.write("EXTRA_RUSTLLVM_CXXFLAGS_{} := {}\n".format(sys, cxxflags_for(d, thing))) - o.close() - i.close() - -python do_rust_arch_fixup () { - for thing in ['BUILD', 'HOST', 'TARGET']: - bb.debug(1, "rust_gen_mk_cfg for " + thing) - rust_gen_mk_cfg(d, thing) + # Some versions of rust (e.g. 1.18.0) tries to find cargo in stage0/bin/cargo + # and fail without it there. + mkdir -p ${RUSTSRC}/build/${BUILD_SYS} + ln -s ${WORKDIR}/rust-snapshot/ ${RUSTSRC}/build/${BUILD_SYS}/stage0 } -addtask rust_arch_fixup before do_configure after do_patch -do_rust_arch_fixup[dirs] += "${S}/mk/cfg" +addtask rust_setup_snapshot after do_unpack before do_configure +do_rust_setup_snapshot[dirs] += "${WORKDIR}/rust-snapshot" -# prevent the rust-installer scripts from calling ldconfig -export CFG_DISABLE_LDCONFIG="notempty" -# rust's configure doesn't recognize --disable-static, so remove it. -DISABLE_STATIC = "" +python do_configure() { + import json + try: + import configparser + except ImportError: + import ConfigParser as configparser -do_configure () { - # FIXME: target_prefix vs prefix, see cross.bbclass + # toml is rather similar to standard ini like format except it likes values + # that look more JSON like. So for our purposes simply escaping all values + # as JSON seem to work fine. - # - rpath is required otherwise rustc fails to resolve symbols - # - submodule management is done by bitbake's fetching - ${S}/configure \ - "--enable-rpath" \ - "--disable-docs" \ - "--disable-manage-submodules" \ - "--disable-debug" \ - "--enable-optimize" \ - "--enable-optimize-cxx" \ - "--disable-llvm-version-check" \ - "--llvm-root=${STAGING_DIR_NATIVE}/${prefix_native}" \ - "--enable-optimize-tests" \ - "--release-channel=stable" \ - "--prefix=${prefix}" \ - "--target=${TARGET_SYS}" \ - "--host=${HOST_SYS}" \ - "--build=${BUILD_SYS}" \ - "--localstatedir=${localstatedir}" \ - "--sysconfdir=${sysconfdir}" \ - "--datadir=${datadir}" \ - "--infodir=${infodir}" \ - "--mandir=${mandir}" \ - "--libdir=${libdir}" \ - "--enable-local-rust" \ - "--local-rust-root=${WORKDIR}/${RUST_SNAPSHOT}/rustc" \ - ${EXTRA_OECONF} + e = lambda s: json.dumps(s) + + config = configparser.RawConfigParser() + + # [target.ARCH-poky-linux] + target_section = "target.{}".format(d.getVar('TARGET_SYS', True)) + config.add_section(target_section) + + llvm_config = d.expand("${STAGING_DIR_NATIVE}${bindir_native}/llvm-config") + config.set(target_section, "llvm-config", e(llvm_config)) + + config.set(target_section, "cxx", e(d.expand("${RUST_TARGET_CXX}"))) + config.set(target_section, "cc", e(d.expand("${RUST_TARGET_CC}"))) + + # [rust] + config.add_section("rust") + config.set("rust", "rpath", e(True)) + config.set("rust", "channel", e("stable")) + + # Don't use jemalloc as it doesn't work for many targets. + # https://github.com/rust-lang/rust/pull/37392 + config.set("rust", "use-jemalloc", e(False)) + + # Whether or not to optimize the compiler and standard library + config.set("rust", "optimize", e(True)) + + # [build] + config.add_section("build") + config.set("build", "submodules", e(False)) + config.set("build", "docs", e(False)) + + rustc = d.expand("${WORKDIR}/rust-snapshot/bin/rustc") + config.set("build", "rustc", e(rustc)) + + cargo = d.expand("${WORKDIR}/rust-snapshot/bin/cargo") + config.set("build", "cargo", e(cargo)) + + targets = [d.getVar("TARGET_SYS", True)] + config.set("build", "target", e(targets)) + + hosts = [d.getVar("HOST_SYS", True)] + config.set("build", "host", e(targets)) + + config.set("build", "build", e(d.getVar("BUILD_SYS", True))) + + with open("config.toml", "w") as f: + config.write(f) + + # set up ${WORKDIR}/cargo_home + bb.build.exec_func("setup_cargo_environment", d) } -rust_runmake () { + +rust_runx () { echo "COMPILE ${PN}" "$@" # CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a @@ -384,15 +346,27 @@ rust_runmake () { unset CXXFLAGS unset CPPFLAGS - oe_runmake "VERBOSE=1" "$@" + oe_cargo_fix_env + + python src/bootstrap/bootstrap.py "$@" --verbose } + do_compile () { - rust_runmake + rust_runx build } -rust_do_install () { - rust_runmake DESTDIR="${D}" install + +rust_do_dist_install () { + rust_runx dist + + for installer in "build/tmp/dist/rustc"*"/install.sh"; do + "${installer}" --destdir="${D}" --prefix="${prefix}" --disable-ldconfig + done + + for installer in "build/tmp/dist/rust-std"*"/install.sh"; do + "${installer}" --destdir="${D}" --prefix="${prefix}" --disable-ldconfig + done # Install our custom target.json files local td="${D}${libdir}/rustlib/" @@ -401,10 +375,6 @@ rust_do_install () { install -m 0644 "$tgt" "$td" done - # Remove any files directly installed into libdir to avoid - # conflicts between cross and native - rm -f ${D}${libdir}/lib*.so - # cleanup after rust-installer since we don't need these bits rm ${D}/${libdir}/rustlib/install.log rm ${D}/${libdir}/rustlib/rust-installer-version @@ -412,7 +382,8 @@ rust_do_install () { rm ${D}/${libdir}/rustlib/components } + do_install () { - rust_do_install + rust_do_dist_install } # ex: sts=4 et sw=4 ts=8 diff --git a/recipes-devtools/rust/rust_1.15.1.bb b/recipes-devtools/rust/rust_1.15.1.bb index ab3a82c..c0feb61 100644 --- a/recipes-devtools/rust/rust_1.15.1.bb +++ b/recipes-devtools/rust/rust_1.15.1.bb @@ -1,12 +1,25 @@ require rust.inc require rust-source-${PV}.inc - -EXTRA_OECONF = "--disable-rustbuild" +require rust-snapshot-${PV}.inc SRC_URI += " \ file://rust-${PV}/0003-std-thread_local-workaround-for-NULL-__dso_handle.patch \ " +# These are extracted from rustc/src/bootstrap/Cargo.toml. +SRC_URI += " \ + crate://crates.io/cmake/0.1.18 \ + crate://crates.io/env_logger/0.3.5 \ + crate://crates.io/filetime/0.1.10 \ + crate://crates.io/gcc/0.3.40 \ + crate://crates.io/getopts/0.2.14 \ + crate://crates.io/libc/0.2.17 \ + crate://crates.io/log/0.3.6 \ + crate://crates.io/num_cpus/0.2.13 \ + crate://crates.io/rustc-serialize/0.3.19 \ + crate://crates.io/toml/0.1.30 \ +" + DEPENDS += "rust-llvm (=${PV})" # Otherwise we'll depend on what we provide From 13e81c1961d93c33789efdc13aa4b3afbc421bc2 Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Fri, 29 Sep 2017 14:04:03 -0500 Subject: [PATCH 12/15] bump to Rust 1.20.0 and Cargo 0.21 (cherry picked from commit 3bf7088579ff5b97e4052712e4e1c5fcb650feb7) --- recipes-devtools/cargo/cargo-0.21.0.inc | 11 ++ recipes-devtools/cargo/cargo_0.21.0.bb | 136 +++++++++++++++++ recipes-devtools/rust/libstd-rs.inc | 1 - recipes-devtools/rust/libstd-rs_1.15.1.bb | 2 + recipes-devtools/rust/libstd-rs_1.20.0.bb | 139 +++++++++++++++++ recipes-devtools/rust/rust-cross_1.20.0.bb | 3 + recipes-devtools/rust/rust-llvm_1.20.0.bb | 16 ++ .../rust/rust-snapshot-1.20.0.inc | 26 ++++ recipes-devtools/rust/rust-source-1.15.1.inc | 2 + recipes-devtools/rust/rust-source-1.20.0.inc | 14 ++ recipes-devtools/rust/rust.inc | 1 - recipes-devtools/rust/rust_1.20.0.bb | 143 ++++++++++++++++++ 12 files changed, 492 insertions(+), 2 deletions(-) create mode 100644 recipes-devtools/cargo/cargo-0.21.0.inc create mode 100644 recipes-devtools/cargo/cargo_0.21.0.bb create mode 100644 recipes-devtools/rust/libstd-rs_1.20.0.bb create mode 100644 recipes-devtools/rust/rust-cross_1.20.0.bb create mode 100644 recipes-devtools/rust/rust-llvm_1.20.0.bb create mode 100644 recipes-devtools/rust/rust-snapshot-1.20.0.inc create mode 100644 recipes-devtools/rust/rust-source-1.20.0.inc create mode 100644 recipes-devtools/rust/rust_1.20.0.bb diff --git a/recipes-devtools/cargo/cargo-0.21.0.inc b/recipes-devtools/cargo/cargo-0.21.0.inc new file mode 100644 index 0000000..367ad21 --- /dev/null +++ b/recipes-devtools/cargo/cargo-0.21.0.inc @@ -0,0 +1,11 @@ +CARGO_SNAPSHOT = "cargo-0.20.0-${RUST_BUILD_SYS}" +SRC_URI[cargo-snapshot.md5sum] = "63aa861b029eec9f559f4fb5a10c287d" +SRC_URI[cargo-snapshot.sha256sum] = "a677d13b01d00ad13edf75c7d1b484421c7fc09338bf9ed6d456b4685bb42ed1" + +SRC_URI += "\ + https://static.rust-lang.org/dist/${CARGO_SNAPSHOT}.tar.gz;name=cargo-snapshot \ +" + +# When building cargo-native we don't have a built cargo to use so we must use +# the snapshot to bootstrap the build of cargo +CARGO_class-native = "${WORKDIR}/${CARGO_SNAPSHOT}/cargo/bin/cargo" diff --git a/recipes-devtools/cargo/cargo_0.21.0.bb b/recipes-devtools/cargo/cargo_0.21.0.bb new file mode 100644 index 0000000..9f6bc7c --- /dev/null +++ b/recipes-devtools/cargo/cargo_0.21.0.bb @@ -0,0 +1,136 @@ +# Auto-Generated by cargo-bitbake 0.3.8 +# +inherit cargo + +# If this is git based prefer versioned ones if they exist +# DEFAULT_PREFERENCE = "-1" + +# how to get cargo could be as easy as but default to a git checkout: +# SRC_URI += "crate://crates.io/cargo/0.21.0" +SRC_URI += "git://git@github.com/rust-lang/cargo.git;protocol=ssh;branch=rust-1.20.0" +SRCREV = "5b4b8b2ae3f6a884099544ce66dbb41626110ece" +S = "${WORKDIR}/git" +CARGO_SRC_DIR="" + + +# please note if you have entries that do not begin with crate:// +# you must change them to how that package can be fetched +SRC_URI += " \ +crate://crates.io/advapi32-sys/0.2.0 \ +crate://crates.io/aho-corasick/0.5.3 \ +crate://crates.io/aho-corasick/0.6.3 \ +crate://crates.io/atty/0.2.2 \ +crate://crates.io/backtrace-sys/0.1.11 \ +crate://crates.io/backtrace/0.3.2 \ +crate://crates.io/bitflags/0.9.1 \ +crate://crates.io/bufstream/0.1.3 \ +crate://crates.io/cfg-if/0.1.2 \ +crate://crates.io/cmake/0.1.24 \ +crate://crates.io/crossbeam/0.2.10 \ +crate://crates.io/curl-sys/0.3.14 \ +crate://crates.io/curl/0.4.7 \ +crate://crates.io/dbghelp-sys/0.2.0 \ +crate://crates.io/docopt/0.8.1 \ +crate://crates.io/dtoa/0.4.1 \ +crate://crates.io/env_logger/0.4.3 \ +crate://crates.io/error-chain/0.11.0-rc.2 \ +crate://crates.io/filetime/0.1.10 \ +crate://crates.io/flate2/0.2.19 \ +crate://crates.io/foreign-types/0.2.0 \ +crate://crates.io/fs2/0.4.2 \ +crate://crates.io/gcc/0.3.51 \ +crate://crates.io/git2-curl/0.7.0 \ +crate://crates.io/git2/0.6.6 \ +crate://crates.io/glob/0.2.11 \ +crate://crates.io/hamcrest/0.1.1 \ +crate://crates.io/hex/0.2.0 \ +crate://crates.io/idna/0.1.2 \ +crate://crates.io/itoa/0.3.1 \ +crate://crates.io/jobserver/0.1.6 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/lazy_static/0.2.8 \ +crate://crates.io/libc/0.2.25 \ +crate://crates.io/libgit2-sys/0.6.12 \ +crate://crates.io/libssh2-sys/0.2.6 \ +crate://crates.io/libz-sys/1.0.16 \ +crate://crates.io/log/0.3.8 \ +crate://crates.io/matches/0.1.6 \ +crate://crates.io/memchr/0.1.11 \ +crate://crates.io/memchr/1.0.1 \ +crate://crates.io/miniz-sys/0.1.9 \ +crate://crates.io/miow/0.2.1 \ +crate://crates.io/net2/0.2.29 \ +crate://crates.io/num-bigint/0.1.39 \ +crate://crates.io/num-complex/0.1.38 \ +crate://crates.io/num-integer/0.1.34 \ +crate://crates.io/num-iter/0.1.33 \ +crate://crates.io/num-rational/0.1.38 \ +crate://crates.io/num-traits/0.1.39 \ +crate://crates.io/num/0.1.39 \ +crate://crates.io/num_cpus/1.6.2 \ +crate://crates.io/openssl-probe/0.1.1 \ +crate://crates.io/openssl-sys/0.9.14 \ +crate://crates.io/openssl/0.9.14 \ +crate://crates.io/percent-encoding/1.0.0 \ +crate://crates.io/pkg-config/0.3.9 \ +crate://crates.io/psapi-sys/0.1.0 \ +crate://crates.io/quote/0.3.15 \ +crate://crates.io/rand/0.3.15 \ +crate://crates.io/regex-syntax/0.3.9 \ +crate://crates.io/regex-syntax/0.4.1 \ +crate://crates.io/regex/0.1.80 \ +crate://crates.io/regex/0.2.2 \ +crate://crates.io/rustc-demangle/0.1.4 \ +crate://crates.io/rustc-serialize/0.3.24 \ +crate://crates.io/scoped-tls/0.1.0 \ +crate://crates.io/semver-parser/0.7.0 \ +crate://crates.io/semver/0.7.0 \ +crate://crates.io/serde/1.0.9 \ +crate://crates.io/serde_derive/1.0.9 \ +crate://crates.io/serde_derive_internals/0.15.1 \ +crate://crates.io/serde_ignored/0.0.3 \ +crate://crates.io/serde_json/1.0.2 \ +crate://crates.io/shell-escape/0.1.3 \ +crate://crates.io/socket2/0.2.1 \ +crate://crates.io/strsim/0.6.0 \ +crate://crates.io/syn/0.11.11 \ +crate://crates.io/synom/0.11.3 \ +crate://crates.io/tar/0.4.13 \ +crate://crates.io/tempdir/0.3.5 \ +crate://crates.io/termcolor/0.3.2 \ +crate://crates.io/thread-id/2.0.0 \ +crate://crates.io/thread_local/0.2.7 \ +crate://crates.io/thread_local/0.3.4 \ +crate://crates.io/toml/0.4.2 \ +crate://crates.io/unicode-bidi/0.3.4 \ +crate://crates.io/unicode-normalization/0.1.5 \ +crate://crates.io/unicode-xid/0.0.4 \ +crate://crates.io/unreachable/1.0.0 \ +crate://crates.io/url/1.5.1 \ +crate://crates.io/utf8-ranges/0.1.3 \ +crate://crates.io/utf8-ranges/1.0.0 \ +crate://crates.io/vcpkg/0.2.2 \ +crate://crates.io/void/1.0.2 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +crate://crates.io/wincolor/0.1.4 \ +crate://crates.io/ws2_32-sys/0.2.1 \ +" + + + +# FIXME: update generateme with the real MD5 of the license file +LIC_FILES_CHKSUM=" \ +file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \ +file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ +" + +SUMMARY = "Cargo, a package manager for Rust." +HOMEPAGE = "https://crates.io" +LICENSE = "MIT | Apache-2.0" + +# includes this file if it exists but does not fail +# this is useful for anything you may want to override from +# what cargo-bitbake generates. +include cargo-${PV}.inc +include cargo.inc diff --git a/recipes-devtools/rust/libstd-rs.inc b/recipes-devtools/rust/libstd-rs.inc index ec3c67d..f5dce79 100644 --- a/recipes-devtools/rust/libstd-rs.inc +++ b/recipes-devtools/rust/libstd-rs.inc @@ -2,7 +2,6 @@ SUMMARY = "Rust standard libaries" HOMEPAGE = "http://www.rust-lang.org" SECTION = "devel" LICENSE = "MIT | Apache-2.0" -LIC_FILES_CHKSUM ="file://../../COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" RUSTLIB_DEP = "" inherit cargo diff --git a/recipes-devtools/rust/libstd-rs_1.15.1.bb b/recipes-devtools/rust/libstd-rs_1.15.1.bb index 471744d..89f7da8 100644 --- a/recipes-devtools/rust/libstd-rs_1.15.1.bb +++ b/recipes-devtools/rust/libstd-rs_1.15.1.bb @@ -1,6 +1,8 @@ require rust-source-${PV}.inc require libstd-rs.inc +LIC_FILES_CHKSUM = "file://../../COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" + # Don't use jemalloc as it doesn't work for many targets. # https://github.com/rust-lang/rust/pull/37392 CARGO_BUILD_FLAGS += "--features 'panic-unwind'" diff --git a/recipes-devtools/rust/libstd-rs_1.20.0.bb b/recipes-devtools/rust/libstd-rs_1.20.0.bb new file mode 100644 index 0000000..bd594e5 --- /dev/null +++ b/recipes-devtools/rust/libstd-rs_1.20.0.bb @@ -0,0 +1,139 @@ +require rust-source-${PV}.inc +require libstd-rs.inc + +LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=12922f5565a22267bd82aaeb6d3548e5" + +# Don't use jemalloc as it doesn't work for many targets. +# https://github.com/rust-lang/rust/pull/37392 +CARGO_BUILD_FLAGS += "--features 'panic-unwind'" + +# These are taken from src/libstd/Cargo.toml via cargo-bitbake +SRC_URI += " \ +crate://crates.io/advapi32-sys/0.2.0 \ +crate://crates.io/aho-corasick/0.5.3 \ +crate://crates.io/aho-corasick/0.6.3 \ +crate://crates.io/ansi_term/0.9.0 \ +crate://crates.io/atty/0.2.2 \ +crate://crates.io/backtrace-sys/0.1.11 \ +crate://crates.io/backtrace/0.3.2 \ +crate://crates.io/bitflags/0.8.2 \ +crate://crates.io/bitflags/0.9.1 \ +crate://crates.io/bufstream/0.1.3 \ +crate://crates.io/cfg-if/0.1.2 \ +crate://crates.io/clap/2.25.0 \ +crate://crates.io/cmake/0.1.24 \ +crate://crates.io/crossbeam/0.2.10 \ +crate://crates.io/curl-sys/0.3.14 \ +crate://crates.io/curl/0.4.7 \ +crate://crates.io/dbghelp-sys/0.2.0 \ +crate://crates.io/diff/0.1.10 \ +crate://crates.io/docopt/0.8.1 \ +crate://crates.io/dtoa/0.4.1 \ +crate://crates.io/env_logger/0.4.3 \ +crate://crates.io/error-chain/0.10.0 \ +crate://crates.io/error-chain/0.11.0-rc.2 \ +crate://crates.io/filetime/0.1.10 \ +crate://crates.io/flate2/0.2.19 \ +crate://crates.io/foreign-types/0.2.0 \ +crate://crates.io/fs2/0.4.2 \ +crate://crates.io/gcc/0.3.51 \ +crate://crates.io/getopts/0.2.14 \ +crate://crates.io/git2-curl/0.7.0 \ +crate://crates.io/git2/0.6.6 \ +crate://crates.io/glob/0.2.11 \ +crate://crates.io/hamcrest/0.1.1 \ +crate://crates.io/handlebars/0.26.2 \ +crate://crates.io/hex/0.2.0 \ +crate://crates.io/idna/0.1.2 \ +crate://crates.io/itoa/0.3.1 \ +crate://crates.io/jobserver/0.1.6 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/lazy_static/0.2.8 \ +crate://crates.io/libc/0.2.26 \ +crate://crates.io/libgit2-sys/0.6.12 \ +crate://crates.io/libssh2-sys/0.2.6 \ +crate://crates.io/libz-sys/1.0.16 \ +crate://crates.io/log/0.3.8 \ +crate://crates.io/lzma-sys/0.1.7 \ +crate://crates.io/matches/0.1.6 \ +crate://crates.io/mdbook/0.0.22 \ +crate://crates.io/memchr/0.1.11 \ +crate://crates.io/memchr/1.0.1 \ +crate://crates.io/miniz-sys/0.1.9 \ +crate://crates.io/miow/0.2.1 \ +crate://crates.io/net2/0.2.29 \ +crate://crates.io/num-bigint/0.1.39 \ +crate://crates.io/num-complex/0.1.38 \ +crate://crates.io/num-integer/0.1.34 \ +crate://crates.io/num-iter/0.1.33 \ +crate://crates.io/num-rational/0.1.38 \ +crate://crates.io/num-traits/0.1.39 \ +crate://crates.io/num/0.1.39 \ +crate://crates.io/num_cpus/1.6.2 \ +crate://crates.io/open/1.2.0 \ +crate://crates.io/openssl-probe/0.1.1 \ +crate://crates.io/openssl-sys/0.9.15 \ +crate://crates.io/openssl/0.9.15 \ +crate://crates.io/owning_ref/0.3.3 \ +crate://crates.io/percent-encoding/1.0.0 \ +crate://crates.io/pest/0.3.3 \ +crate://crates.io/pkg-config/0.3.9 \ +crate://crates.io/psapi-sys/0.1.0 \ +crate://crates.io/pulldown-cmark/0.0.14 \ +crate://crates.io/quick-error/1.2.0 \ +crate://crates.io/quote/0.3.15 \ +crate://crates.io/rand/0.3.15 \ +crate://crates.io/regex-syntax/0.3.9 \ +crate://crates.io/regex-syntax/0.4.1 \ +crate://crates.io/regex/0.1.80 \ +crate://crates.io/regex/0.2.2 \ +crate://crates.io/rls-data/0.7.0 \ +crate://crates.io/rls-span/0.4.0 \ +crate://crates.io/rustc-demangle/0.1.4 \ +crate://crates.io/rustc-serialize/0.3.24 \ +crate://crates.io/same-file/0.1.3 \ +crate://crates.io/scoped-tls/0.1.0 \ +crate://crates.io/semver-parser/0.7.0 \ +crate://crates.io/semver/0.7.0 \ +crate://crates.io/serde/1.0.10 \ +crate://crates.io/serde_derive/1.0.10 \ +crate://crates.io/serde_derive_internals/0.15.1 \ +crate://crates.io/serde_ignored/0.0.3 \ +crate://crates.io/serde_json/1.0.2 \ +crate://crates.io/shell-escape/0.1.3 \ +crate://crates.io/socket2/0.2.1 \ +crate://crates.io/stable_deref_trait/1.0.0 \ +crate://crates.io/strsim/0.6.0 \ +crate://crates.io/syn/0.11.11 \ +crate://crates.io/synom/0.11.3 \ +crate://crates.io/tar/0.4.13 \ +crate://crates.io/tempdir/0.3.5 \ +crate://crates.io/term_size/0.3.0 \ +crate://crates.io/termcolor/0.3.2 \ +crate://crates.io/textwrap/0.6.0 \ +crate://crates.io/thread-id/2.0.0 \ +crate://crates.io/thread_local/0.2.7 \ +crate://crates.io/thread_local/0.3.4 \ +crate://crates.io/toml/0.1.30 \ +crate://crates.io/toml/0.4.2 \ +crate://crates.io/unicode-bidi/0.3.4 \ +crate://crates.io/unicode-normalization/0.1.5 \ +crate://crates.io/unicode-segmentation/1.1.0 \ +crate://crates.io/unicode-width/0.1.4 \ +crate://crates.io/unicode-xid/0.0.4 \ +crate://crates.io/unreachable/1.0.0 \ +crate://crates.io/url/1.5.1 \ +crate://crates.io/utf8-ranges/0.1.3 \ +crate://crates.io/utf8-ranges/1.0.0 \ +crate://crates.io/vcpkg/0.2.2 \ +crate://crates.io/vec_map/0.8.0 \ +crate://crates.io/void/1.0.2 \ +crate://crates.io/walkdir/1.0.7 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +crate://crates.io/wincolor/0.1.4 \ +crate://crates.io/ws2_32-sys/0.2.1 \ +crate://crates.io/xattr/0.1.11 \ +crate://crates.io/xz2/0.1.3 \ +crate://crates.io/yaml-rust/0.3.5 \ +" diff --git a/recipes-devtools/rust/rust-cross_1.20.0.bb b/recipes-devtools/rust/rust-cross_1.20.0.bb new file mode 100644 index 0000000..34d92de --- /dev/null +++ b/recipes-devtools/rust/rust-cross_1.20.0.bb @@ -0,0 +1,3 @@ +require rust-cross.inc +require rust-source-${PV}.inc +require rust-snapshot-${PV}.inc diff --git a/recipes-devtools/rust/rust-llvm_1.20.0.bb b/recipes-devtools/rust/rust-llvm_1.20.0.bb new file mode 100644 index 0000000..19305d2 --- /dev/null +++ b/recipes-devtools/rust/rust-llvm_1.20.0.bb @@ -0,0 +1,16 @@ +require rust-source-${PV}.inc +require rust-llvm.inc + +LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=e825e017edc35cfd58e26116e5251771" + +do_install_prepend () { + # the install does a sed on this without installing the file + # we don't need it for anything + mkdir -p "${D}/usr/share/llvm/cmake" + touch "${D}/usr/share/llvm/cmake/LLVMExports-noconfig.cmake" +} + +do_install_append () { + # we don't need any of this stuff to build Rust + rm -rf "${D}/usr/lib/cmake" +} diff --git a/recipes-devtools/rust/rust-snapshot-1.20.0.inc b/recipes-devtools/rust/rust-snapshot-1.20.0.inc new file mode 100644 index 0000000..6e2af7d --- /dev/null +++ b/recipes-devtools/rust/rust-snapshot-1.20.0.inc @@ -0,0 +1,26 @@ +# Specifics for Rust 1.20.0 + +## This is information on the rust-snapshot (binary) used to build our current release. +## snapshot info is taken from rust/src/stage0.txt +## TODO: find a way to add additional SRC_URIs based on the contents of an +## earlier SRC_URI. +RS_VERSION = "1.19.0" + +RUST_STD_SNAPSHOT = "rust-std-${RS_VERSION}-${RUST_BUILD_SYS}" +RUSTC_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_BUILD_SYS}" +CARGO_VERSION = "0.20.0" +CARGO_SNAPSHOT = "cargo-${CARGO_VERSION}-${RUST_BUILD_SYS}" + +SRC_URI += " \ + https://static.rust-lang.org/dist/${RUST_STD_SNAPSHOT}.tar.gz;name=rust-std-snapshot;subdir=rust-snapshot-components \ + https://static.rust-lang.org/dist/${RUSTC_SNAPSHOT}.tar.gz;name=rustc-snapshot;subdir=rust-snapshot-components \ + https://static.rust-lang.org/dist/${CARGO_SNAPSHOT}.tar.gz;name=cargo-snapshot;subdir=rust-snapshot-components \ + " + +# These are x86_64-unknown-linux-gnu hashes, how can we add more? +SRC_URI[rustc-snapshot.md5sum] = "e5077b80cc953a1fb9c767aa039d5984" +SRC_URI[rustc-snapshot.sha256sum] = "4c8df3088d17c8e06bf58d453d39bd521487defcefc8193203b80f0fb797d6fe" +SRC_URI[rust-std-snapshot.md5sum] = "2bff47764df01c99f349908601c10478" +SRC_URI[rust-std-snapshot.sha256sum] = "5905803e8a127f656bf253978692f0d6cf6c9206c527e4d6d7e981980618d1b6" +SRC_URI[cargo-snapshot.md5sum] = "63aa861b029eec9f559f4fb5a10c287d" +SRC_URI[cargo-snapshot.sha256sum] = "a677d13b01d00ad13edf75c7d1b484421c7fc09338bf9ed6d456b4685bb42ed1" diff --git a/recipes-devtools/rust/rust-source-1.15.1.inc b/recipes-devtools/rust/rust-source-1.15.1.inc index 2534257..deae018 100644 --- a/recipes-devtools/rust/rust-source-1.15.1.inc +++ b/recipes-devtools/rust/rust-source-1.15.1.inc @@ -10,3 +10,5 @@ SRC_URI[rust.sha256sum] = "2e7daad418a830b45b977cd7ecf181b65f30f73df63ff36e124ea RUSTSRC = "${WORKDIR}/rustc-${PV}-src" # set this as our default S = "${RUSTSRC}" + +LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" diff --git a/recipes-devtools/rust/rust-source-1.20.0.inc b/recipes-devtools/rust/rust-source-1.20.0.inc new file mode 100644 index 0000000..28256b6 --- /dev/null +++ b/recipes-devtools/rust/rust-source-1.20.0.inc @@ -0,0 +1,14 @@ +# Specifics for Rust 1.20.0 + +SRC_URI += "\ + https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \ + " +SRC_URI[rust.md5sum] = "1d3c5d25d8e6215e7d0b6d4d4c9835b9" +SRC_URI[rust.sha256sum] = "2aa4875ff4472c6e35262bbb9052cb2623da3dae6084a858cc59d36f33f18214" + +# later versions of rust change the directory that they unextract to +RUSTSRC = "${WORKDIR}/rustc-${PV}-src" +# set this as our default +S = "${RUSTSRC}" + +LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=12922f5565a22267bd82aaeb6d3548e5" diff --git a/recipes-devtools/rust/rust.inc b/recipes-devtools/rust/rust.inc index 12ad957..53a2520 100644 --- a/recipes-devtools/rust/rust.inc +++ b/recipes-devtools/rust/rust.inc @@ -2,7 +2,6 @@ SUMMARY = "Rust compiler and runtime libaries" HOMEPAGE = "http://www.rust-lang.org" SECTION = "devel" LICENSE = "MIT | Apache-2.0" -LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" inherit rust inherit cargo_common diff --git a/recipes-devtools/rust/rust_1.20.0.bb b/recipes-devtools/rust/rust_1.20.0.bb new file mode 100644 index 0000000..443f13e --- /dev/null +++ b/recipes-devtools/rust/rust_1.20.0.bb @@ -0,0 +1,143 @@ +require rust.inc +require rust-source-${PV}.inc +require rust-snapshot-${PV}.inc + +# These are extracted from rustc/src/bootstrap/Cargo.toml via cargo-bitbake +SRC_URI += " \ +crate://crates.io/advapi32-sys/0.2.0 \ +crate://crates.io/aho-corasick/0.5.3 \ +crate://crates.io/aho-corasick/0.6.3 \ +crate://crates.io/ansi_term/0.9.0 \ +crate://crates.io/atty/0.2.2 \ +crate://crates.io/backtrace-sys/0.1.11 \ +crate://crates.io/backtrace/0.3.2 \ +crate://crates.io/bitflags/0.8.2 \ +crate://crates.io/bitflags/0.9.1 \ +crate://crates.io/bufstream/0.1.3 \ +crate://crates.io/cfg-if/0.1.2 \ +crate://crates.io/clap/2.25.0 \ +crate://crates.io/cmake/0.1.24 \ +crate://crates.io/crossbeam/0.2.10 \ +crate://crates.io/curl-sys/0.3.14 \ +crate://crates.io/curl/0.4.7 \ +crate://crates.io/dbghelp-sys/0.2.0 \ +crate://crates.io/diff/0.1.10 \ +crate://crates.io/docopt/0.8.1 \ +crate://crates.io/dtoa/0.4.1 \ +crate://crates.io/env_logger/0.4.3 \ +crate://crates.io/error-chain/0.10.0 \ +crate://crates.io/error-chain/0.11.0-rc.2 \ +crate://crates.io/filetime/0.1.10 \ +crate://crates.io/flate2/0.2.19 \ +crate://crates.io/foreign-types/0.2.0 \ +crate://crates.io/fs2/0.4.2 \ +crate://crates.io/gcc/0.3.51 \ +crate://crates.io/getopts/0.2.14 \ +crate://crates.io/git2-curl/0.7.0 \ +crate://crates.io/git2/0.6.6 \ +crate://crates.io/glob/0.2.11 \ +crate://crates.io/hamcrest/0.1.1 \ +crate://crates.io/handlebars/0.26.2 \ +crate://crates.io/hex/0.2.0 \ +crate://crates.io/idna/0.1.2 \ +crate://crates.io/itoa/0.3.1 \ +crate://crates.io/jobserver/0.1.6 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/lazy_static/0.2.8 \ +crate://crates.io/libc/0.2.26 \ +crate://crates.io/libgit2-sys/0.6.12 \ +crate://crates.io/libssh2-sys/0.2.6 \ +crate://crates.io/libz-sys/1.0.16 \ +crate://crates.io/log/0.3.8 \ +crate://crates.io/lzma-sys/0.1.7 \ +crate://crates.io/matches/0.1.6 \ +crate://crates.io/mdbook/0.0.22 \ +crate://crates.io/memchr/0.1.11 \ +crate://crates.io/memchr/1.0.1 \ +crate://crates.io/miniz-sys/0.1.9 \ +crate://crates.io/miow/0.2.1 \ +crate://crates.io/net2/0.2.29 \ +crate://crates.io/num-bigint/0.1.39 \ +crate://crates.io/num-complex/0.1.38 \ +crate://crates.io/num-integer/0.1.34 \ +crate://crates.io/num-iter/0.1.33 \ +crate://crates.io/num-rational/0.1.38 \ +crate://crates.io/num-traits/0.1.39 \ +crate://crates.io/num/0.1.39 \ +crate://crates.io/num_cpus/1.6.2 \ +crate://crates.io/open/1.2.0 \ +crate://crates.io/openssl-probe/0.1.1 \ +crate://crates.io/openssl-sys/0.9.15 \ +crate://crates.io/openssl/0.9.15 \ +crate://crates.io/owning_ref/0.3.3 \ +crate://crates.io/percent-encoding/1.0.0 \ +crate://crates.io/pest/0.3.3 \ +crate://crates.io/pkg-config/0.3.9 \ +crate://crates.io/psapi-sys/0.1.0 \ +crate://crates.io/pulldown-cmark/0.0.14 \ +crate://crates.io/quick-error/1.2.0 \ +crate://crates.io/quote/0.3.15 \ +crate://crates.io/rand/0.3.15 \ +crate://crates.io/regex-syntax/0.3.9 \ +crate://crates.io/regex-syntax/0.4.1 \ +crate://crates.io/regex/0.1.80 \ +crate://crates.io/regex/0.2.2 \ +crate://crates.io/rls-data/0.7.0 \ +crate://crates.io/rls-span/0.4.0 \ +crate://crates.io/rustc-demangle/0.1.4 \ +crate://crates.io/rustc-serialize/0.3.24 \ +crate://crates.io/same-file/0.1.3 \ +crate://crates.io/scoped-tls/0.1.0 \ +crate://crates.io/semver-parser/0.7.0 \ +crate://crates.io/semver/0.7.0 \ +crate://crates.io/serde/1.0.10 \ +crate://crates.io/serde_derive/1.0.10 \ +crate://crates.io/serde_derive_internals/0.15.1 \ +crate://crates.io/serde_ignored/0.0.3 \ +crate://crates.io/serde_json/1.0.2 \ +crate://crates.io/shell-escape/0.1.3 \ +crate://crates.io/socket2/0.2.1 \ +crate://crates.io/stable_deref_trait/1.0.0 \ +crate://crates.io/strsim/0.6.0 \ +crate://crates.io/syn/0.11.11 \ +crate://crates.io/synom/0.11.3 \ +crate://crates.io/tar/0.4.13 \ +crate://crates.io/tempdir/0.3.5 \ +crate://crates.io/term_size/0.3.0 \ +crate://crates.io/termcolor/0.3.2 \ +crate://crates.io/textwrap/0.6.0 \ +crate://crates.io/thread-id/2.0.0 \ +crate://crates.io/thread_local/0.2.7 \ +crate://crates.io/thread_local/0.3.4 \ +crate://crates.io/toml/0.1.30 \ +crate://crates.io/toml/0.4.2 \ +crate://crates.io/unicode-bidi/0.3.4 \ +crate://crates.io/unicode-normalization/0.1.5 \ +crate://crates.io/unicode-segmentation/1.1.0 \ +crate://crates.io/unicode-width/0.1.4 \ +crate://crates.io/unicode-xid/0.0.4 \ +crate://crates.io/unreachable/1.0.0 \ +crate://crates.io/url/1.5.1 \ +crate://crates.io/utf8-ranges/0.1.3 \ +crate://crates.io/utf8-ranges/1.0.0 \ +crate://crates.io/vcpkg/0.2.2 \ +crate://crates.io/vec_map/0.8.0 \ +crate://crates.io/void/1.0.2 \ +crate://crates.io/walkdir/1.0.7 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +crate://crates.io/wincolor/0.1.4 \ +crate://crates.io/ws2_32-sys/0.2.1 \ +crate://crates.io/xattr/0.1.11 \ +crate://crates.io/xz2/0.1.3 \ +crate://crates.io/yaml-rust/0.3.5 \ +" + +DEPENDS += "rust-llvm (=${PV})" + +# Otherwise we'll depend on what we provide +INHIBIT_DEFAULT_RUST_DEPS_class-native = "1" +# We don't need to depend on gcc-native because yocto assumes it exists +PROVIDES_class-native = "virtual/${TARGET_PREFIX}rust" + +BBCLASSEXTEND = "native" From 633c18c655b3156e14271162478d16d789dc2b35 Mon Sep 17 00:00:00 2001 From: Johan Anderholm Date: Sat, 30 Sep 2017 11:22:58 +0200 Subject: [PATCH 13/15] libstd: correct path to COPYRIGHT (cherry picked from commit 2fd83daa46a8ab105ba5e4f965a3216f34560cea) --- recipes-devtools/rust/libstd-rs_1.20.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes-devtools/rust/libstd-rs_1.20.0.bb b/recipes-devtools/rust/libstd-rs_1.20.0.bb index bd594e5..4e0166c 100644 --- a/recipes-devtools/rust/libstd-rs_1.20.0.bb +++ b/recipes-devtools/rust/libstd-rs_1.20.0.bb @@ -1,7 +1,7 @@ require rust-source-${PV}.inc require libstd-rs.inc -LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=12922f5565a22267bd82aaeb6d3548e5" +LIC_FILES_CHKSUM = "file://../../COPYRIGHT;md5=12922f5565a22267bd82aaeb6d3548e5" # Don't use jemalloc as it doesn't work for many targets. # https://github.com/rust-lang/rust/pull/37392 From 980f6e2baf70a061bfb83578e2e0d51fa1e48c1d Mon Sep 17 00:00:00 2001 From: Johan Anderholm Date: Sat, 30 Sep 2017 11:23:29 +0200 Subject: [PATCH 14/15] rust: Don't specify allocator for >= 1.20.0 System allocator is the default in rust. (cherry picked from commit 37813c4dffc07bf488fad36ebd2128d5f03c9600) --- recipes-devtools/rust/rust.inc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/recipes-devtools/rust/rust.inc b/recipes-devtools/rust/rust.inc index 53a2520..53251d6 100644 --- a/recipes-devtools/rust/rust.inc +++ b/recipes-devtools/rust/rust.inc @@ -196,6 +196,7 @@ TARGET_LLVM_FEATURES_class-native = "${@llvm_features_from_cc_arch(d)}" def rust_gen_target(d, thing, wd): import json + from distutils.version import LooseVersion arch = arch_for(d, thing) sys = sys_for(d, thing) prefix = prefix_for(d, thing) @@ -235,8 +236,10 @@ def rust_gen_target(d, thing, wd): # Don't use jemalloc as it doesn't work for many targets. # https://github.com/rust-lang/rust/pull/37392 - tspec['exe-allocation-crate'] = "alloc_system" - tspec['lib-allocation-crate'] = "alloc_system" + # From 1.20.0 and forward, system allocator is the default. + if LooseVersion(d.getVar("PV")) < LooseVersion("1.20.0"): + tspec['exe-allocation-crate'] = "alloc_system" + tspec['lib-allocation-crate'] = "alloc_system" # write out the target spec json file with open(wd + sys + '.json', 'w') as f: From 4c764c34478d82e1ed8891d66c169fa38eb9554d Mon Sep 17 00:00:00 2001 From: Derek Straka Date: Fri, 29 Sep 2017 16:09:21 -0400 Subject: [PATCH 15/15] Always allow the clean-up to succeed Signed-off-by: Derek Straka (cherry picked from commit 34941a25e909566f31f510f91fa547ff5ebe12f0) --- scripts/cleanup-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cleanup-env.sh b/scripts/cleanup-env.sh index 9e5ef8b..61c7573 100755 --- a/scripts/cleanup-env.sh +++ b/scripts/cleanup-env.sh @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash -x # Only attempt to unmount if the directory is already mounted if mountpoint -q `pwd`/build; then