diff --git a/classes/cargo.bbclass b/classes/cargo.bbclass index 44ff604..2be039e 100644 --- a/classes/cargo.bbclass +++ b/classes/cargo.bbclass @@ -38,13 +38,14 @@ cargo_do_configure () { echo "]" >> ${CARGO_HOME}/config # Point cargo at our local mirror of the registry - cat >> ${CARGO_HOME}/config <> ${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 diff --git a/lib/crate.py b/lib/crate.py index 3197037..178e7f4 100644 --- a/lib/crate.py +++ b/lib/crate.py @@ -21,6 +21,8 @@ BitBake 'Fetch' implementation for crates.io # # Based on functions from the base bb module, Copyright 2003 Holger Schurig +import hashlib +import json import os import shutil import subprocess @@ -48,8 +50,8 @@ class Crate(Wget): def _cargo_cache_path(self, rootdir): return self._cargo_path(rootdir, "cache") - def _cargo_registry_path(self, rootdir, component=""): - return os.path.join(rootdir, "cargo_registry", component) + def _cargo_bitbake_path(self, rootdir): + return os.path.join(rootdir, "cargo_home", "bitbake") def supports(self, ud, d): """ @@ -136,18 +138,13 @@ class Crate(Wget): super(Crate, self).unpack(ud, rootdir, d) def _index_unpack(self, ud, rootdir, d): - cargo_index = self._cargo_index_path(rootdir) - self._index_unpack_to(ud, rootdir, d, cargo_index) - - cargo_registry_index = self._cargo_registry_path(rootdir, "index") - self._index_unpack_to(ud, rootdir, d, cargo_registry_index) - - def _index_unpack_to(self, ud, rootdir, d, cargo_index): """ Unpacks the index """ thefile = ud.localpath + cargo_index = self._cargo_index_path(rootdir) + cmd = "tar -xz --no-same-owner --strip-components 1 -f %s -C %s" % (thefile, cargo_index) # change to the rootdir to unpack but save the old working dir @@ -176,6 +173,9 @@ class Crate(Wget): """ thefile = ud.localpath + # possible metadata we need to write out + metadata = {} + # change to the rootdir to unpack but save the old working dir save_cwd = os.getcwd() os.chdir(rootdir) @@ -184,22 +184,22 @@ class Crate(Wget): if pn == ud.parm.get('name'): cmd = "tar -xz --no-same-owner -f %s" % thefile else: - cargo_src = self._cargo_src_path(rootdir) - cargo_cache = self._cargo_cache_path(rootdir) - cargo_registry = self._cargo_registry_path(rootdir) + self._crate_unpack_old_layout(ud, rootdir, d) - cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_src) + cargo_bitbake = self._cargo_bitbake_path(rootdir) + + cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_bitbake) # ensure we've got these paths made - bb.utils.mkdirhier(cargo_cache) - bb.utils.mkdirhier(cargo_registry) - bb.utils.mkdirhier(cargo_src) + bb.utils.mkdirhier(cargo_bitbake) - bb.note("Copying %s to %s/" % (thefile, cargo_cache)) - shutil.copy(thefile, cargo_cache) + # generate metadata necessary + with open(thefile, 'rb') as f: + # get the SHA256 of the original tarball + tarhash = hashlib.sha256(f.read()).hexdigest() - bb.note("Copying %s to %s/" % (thefile, cargo_registry)) - shutil.copy(thefile, cargo_registry) + metadata['files'] = {} + metadata['package'] = tarhash # path it path = d.getVar('PATH', True) @@ -214,3 +214,42 @@ class Crate(Wget): if ret != 0: raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url) + # if we have metadata to write out.. + if len(metadata) > 0: + cratepath = os.path.splitext(os.path.basename(thefile))[0] + bbpath = self._cargo_bitbake_path(rootdir) + mdfile = '.cargo-checksum.json' + mdpath = os.path.join(bbpath, cratepath, mdfile) + with open(mdpath, "w") as f: + json.dump(metadata, f) + + + def _crate_unpack_old_layout(self, ud, rootdir, d): + """ + Unpacks a crate in the old location that tried to emulate + the Cargo registry layout. + """ + thefile = ud.localpath + + cargo_src = self._cargo_src_path(rootdir) + cargo_cache = self._cargo_cache_path(rootdir) + + cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_src) + + # ensure we've got these paths made + bb.utils.mkdirhier(cargo_cache) + bb.utils.mkdirhier(cargo_src) + + bb.note("Copying %s to %s/" % (thefile, cargo_cache)) + shutil.copy(thefile, cargo_cache) + + # path it + path = d.getVar('PATH', True) + if path: + cmd = "PATH=\"%s\" %s" % (path, cmd) + bb.note("Unpacking %s to %s/" % (thefile, os.getcwd())) + + ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True) + + if ret != 0: + raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url) diff --git a/recipes-devtools/cargo/cargo.inc b/recipes-devtools/cargo/cargo.inc index 7b46472..7347766 100644 --- a/recipes-devtools/cargo/cargo.inc +++ b/recipes-devtools/cargo/cargo.inc @@ -13,55 +13,6 @@ CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2" SRC_URI = "\ http://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${CARGO_SNAPSHOT} \ - crate://crates.io/advapi32-sys/0.1.2 \ - crate://crates.io/bufstream/0.1.1 \ - crate://crates.io/crossbeam/0.2.8 \ - crate://crates.io/docopt/0.6.78 \ - crate://crates.io/env_logger/0.3.2 \ - crate://crates.io/filetime/0.1.10 \ - crate://crates.io/flate2/0.2.13 \ - crate://crates.io/fs2/0.2.3 \ - crate://crates.io/glob/0.2.11 \ - crate://crates.io/hamcrest/0.1.0 \ - 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/num_cpus/0.2.11 \ - crate://crates.io/regex/0.1.58 \ - crate://crates.io/rustc-serialize/0.3.18 \ - crate://crates.io/tar/0.4.5 \ - crate://crates.io/tempdir/0.3.4 \ - crate://crates.io/term/0.4.4 \ - crate://crates.io/toml/0.1.28 \ - crate://crates.io/url/1.1.0 \ - crate://crates.io/winapi/0.2.6 \ - crate://crates.io/semver/0.2.3 \ - crate://crates.io/regex-syntax/0.3.0 \ - crate://crates.io/utf8-ranges/0.1.3 \ - crate://crates.io/gcc/0.3.26 \ - crate://crates.io/unicode-normalization/0.1.2 \ - crate://crates.io/libz-sys/1.0.2 \ - crate://crates.io/rand/0.3.14 \ - crate://crates.io/user32-sys/0.1.2 \ - crate://crates.io/idna/0.1.0 \ - crate://crates.io/strsim/0.3.0 \ - crate://crates.io/matches/0.1.2 \ - crate://crates.io/cmake/0.1.16 \ - crate://crates.io/gdi32-sys/0.1.1 \ - crate://crates.io/bitflags/0.1.1 \ - crate://crates.io/unicode-bidi/0.2.3 \ - crate://crates.io/pkg-config/0.3.8 \ - crate://crates.io/winapi-build/0.1.1 \ - crate://crates.io/memchr/0.1.10 \ - crate://crates.io/pnacl-build-helper/1.4.10 \ - crate://crates.io/nom/1.2.2 \ - crate://crates.io/num/0.1.31 \ - crate://crates.io/uuid/0.2.3 \ - crate://crates.io/aho-corasick/0.5.1 \ - crate://crates.io/libressl-pnacl-sys/2.1.6 \ - crate://crates.io/miniz-sys/0.1.7 \ - crate://crates.io/openssl-sys/0.7.8 \ - crate://crates.io/url/0.5.10 \ crate-index://crates.io/${CARGO_INDEX_COMMIT} \ " diff --git a/recipes-devtools/cargo/cargo_0.11.0.bb b/recipes-devtools/cargo/cargo_0.11.0.bb index c70d049..08e0de3 100644 --- a/recipes-devtools/cargo/cargo_0.11.0.bb +++ b/recipes-devtools/cargo/cargo_0.11.0.bb @@ -6,6 +6,55 @@ SRC_URI += " \ file://0001-disable-cargo-snapshot-fetch.patch \ file://0001-Never-update-the-registry-index.patch \ git://github.com/rust-lang/rust-installer.git;protocol=https;name=rust-installer;destsuffix=${S}/src/rust-installer \ + crate://crates.io/advapi32-sys/0.1.2 \ + crate://crates.io/bufstream/0.1.1 \ + crate://crates.io/crossbeam/0.2.8 \ + crate://crates.io/docopt/0.6.78 \ + crate://crates.io/env_logger/0.3.2 \ + crate://crates.io/filetime/0.1.10 \ + crate://crates.io/flate2/0.2.13 \ + crate://crates.io/fs2/0.2.3 \ + crate://crates.io/glob/0.2.11 \ + crate://crates.io/hamcrest/0.1.0 \ + 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/num_cpus/0.2.11 \ + crate://crates.io/regex/0.1.58 \ + crate://crates.io/rustc-serialize/0.3.18 \ + crate://crates.io/tar/0.4.5 \ + crate://crates.io/tempdir/0.3.4 \ + crate://crates.io/term/0.4.4 \ + crate://crates.io/toml/0.1.28 \ + crate://crates.io/url/1.1.0 \ + crate://crates.io/winapi/0.2.6 \ + crate://crates.io/semver/0.2.3 \ + crate://crates.io/regex-syntax/0.3.0 \ + crate://crates.io/utf8-ranges/0.1.3 \ + crate://crates.io/gcc/0.3.26 \ + crate://crates.io/unicode-normalization/0.1.2 \ + crate://crates.io/libz-sys/1.0.2 \ + crate://crates.io/rand/0.3.14 \ + crate://crates.io/user32-sys/0.1.2 \ + crate://crates.io/idna/0.1.0 \ + crate://crates.io/strsim/0.3.0 \ + crate://crates.io/matches/0.1.2 \ + crate://crates.io/cmake/0.1.16 \ + crate://crates.io/gdi32-sys/0.1.1 \ + crate://crates.io/bitflags/0.1.1 \ + crate://crates.io/unicode-bidi/0.2.3 \ + crate://crates.io/pkg-config/0.3.8 \ + crate://crates.io/winapi-build/0.1.1 \ + crate://crates.io/memchr/0.1.10 \ + crate://crates.io/pnacl-build-helper/1.4.10 \ + crate://crates.io/nom/1.2.2 \ + crate://crates.io/num/0.1.31 \ + crate://crates.io/uuid/0.2.3 \ + crate://crates.io/aho-corasick/0.5.1 \ + crate://crates.io/libressl-pnacl-sys/2.1.6 \ + crate://crates.io/miniz-sys/0.1.7 \ + crate://crates.io/openssl-sys/0.7.8 \ + crate://crates.io/url/0.5.10 \ " # Compatible with Rust 1.10.0 # https://static.rust-lang.org/dist/channel-rust-1.10.0.toml diff --git a/recipes-devtools/cargo/cargo_0.13.0.bb b/recipes-devtools/cargo/cargo_0.13.0.bb new file mode 100644 index 0000000..e7d0984 --- /dev/null +++ b/recipes-devtools/cargo/cargo_0.13.0.bb @@ -0,0 +1,89 @@ +require cargo-snapshot.inc +require cargo.inc + +SRC_URI += " \ + git://github.com/rust-lang/cargo.git;protocol=https;name=cargo \ + git://github.com/rust-lang/rust-installer.git;protocol=https;name=rust-installer;destsuffix=${S}/src/rust-installer \ + crate://crates.io/advapi32-sys/0.2.0 \ + crate://crates.io/aho-corasick/0.5.2 \ + crate://crates.io/bitflags/0.1.1 \ + 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.17 \ + crate://crates.io/crossbeam/0.2.9 \ + crate://crates.io/curl-sys/0.2.1 \ + crate://crates.io/curl/0.3.2 \ + crate://crates.io/docopt/0.6.82 \ + crate://crates.io/env_logger/0.3.4 \ + crate://crates.io/filetime/0.1.10 \ + crate://crates.io/flate2/0.2.14 \ + crate://crates.io/fs2/0.2.5 \ + crate://crates.io/gcc/0.3.32 \ + crate://crates.io/gdi32-sys/0.2.0 \ + crate://crates.io/git2-curl/0.5.0 \ + crate://crates.io/git2/0.4.4 \ + crate://crates.io/glob/0.2.11 \ + crate://crates.io/hamcrest/0.1.0 \ + crate://crates.io/idna/0.1.0 \ + crate://crates.io/kernel32-sys/0.2.2 \ + crate://crates.io/lazy_static/0.2.1 \ + crate://crates.io/libc/0.2.15 \ + crate://crates.io/libgit2-sys/0.4.5 \ + crate://crates.io/libressl-pnacl-sys/2.1.6 \ + crate://crates.io/libssh2-sys/0.1.38 \ + crate://crates.io/libz-sys/1.0.5 \ + crate://crates.io/log/0.3.6 \ + crate://crates.io/matches/0.1.2 \ + 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/nom/1.2.4 \ + crate://crates.io/num-bigint/0.1.33 \ + crate://crates.io/num-complex/0.1.33 \ + crate://crates.io/num-integer/0.1.32 \ + crate://crates.io/num-iter/0.1.32 \ + crate://crates.io/num-rational/0.1.32 \ + crate://crates.io/num-traits/0.1.34 \ + crate://crates.io/num/0.1.34 \ + crate://crates.io/num_cpus/1.0.0 \ + crate://crates.io/openssl-sys-extras/0.7.14 \ + crate://crates.io/openssl-sys/0.7.14 \ + crate://crates.io/openssl/0.7.14 \ + crate://crates.io/pkg-config/0.3.8 \ + crate://crates.io/pnacl-build-helper/1.4.10 \ + crate://crates.io/rand/0.3.14 \ + crate://crates.io/regex-syntax/0.3.4 \ + crate://crates.io/regex/0.1.73 \ + crate://crates.io/rustc-serialize/0.3.19 \ + crate://crates.io/semver/0.2.3 \ + crate://crates.io/strsim/0.3.0 \ + crate://crates.io/tar/0.4.8 \ + 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.6 \ + crate://crates.io/toml/0.2.0 \ + crate://crates.io/unicode-bidi/0.2.3 \ + crate://crates.io/unicode-normalization/0.1.2 \ + crate://crates.io/url/1.2.0 \ + 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 \ +" +# Compatible with Rust 1.12.1 +# https://static.rust-lang.org/dist/channel-rust-1.12.1.toml +SRCREV_cargo = "109cb7c33d426044d141457049bd0fffaca1327c" + +SRCREV_rust-installer = "c37d3747da75c280237dc2d6b925078e69555499" + +S = "${WORKDIR}/git" + +LIC_FILES_CHKSUM ="\ + file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \ + file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ + file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \ +" diff --git a/recipes-devtools/rust/compiler-rt_1.12.1.bb b/recipes-devtools/rust/compiler-rt_1.12.1.bb new file mode 100644 index 0000000..878e59e --- /dev/null +++ b/recipes-devtools/rust/compiler-rt_1.12.1.bb @@ -0,0 +1,24 @@ +SUMMARY = "Rust compiler run-time" +HOMEPAGE = "http://www.rust-lang.org" +SECTION = "devel" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://src/compiler-rt/LICENSE.TXT;md5=bf24bca27049b52e9738451aa55771d4" + +require rust.inc +require rust-source-${PV}.inc + +DEPENDS += "rust-llvm-native (=${PV})" + +S = "${WORKDIR}/rustc-${PV}" + +DISABLE_STATIC = "" +INHIBIT_DEFAULT_RUST_DEPS = "1" + +do_compile () { + oe_runmake ${TARGET_SYS}/rt/libcompiler-rt.a +} + +do_install () { + mkdir -p ${D}${libdir} + cp ${TARGET_SYS}/rt/libcompiler-rt.a ${D}${libdir}/libcompiler-rt.a +} diff --git a/recipes-devtools/rust/files/rust-1.12.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch b/recipes-devtools/rust/files/rust-1.12.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch new file mode 100644 index 0000000..6186c5b --- /dev/null +++ b/recipes-devtools/rust/files/rust-1.12.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch @@ -0,0 +1,107 @@ +From bb2d8649b2b344e0bb4b1cf94135378831735557 Mon Sep 17 00:00:00 2001 +From: Cody P Schafer +Date: Tue, 18 Nov 2014 01:40:21 -0500 +Subject: [PATCH 01/10] 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 | 13 +++++++++++-- + 3 files changed, 20 insertions(+), 7 deletions(-) + +diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs +index e988ddc..563f3ac 100644 +--- a/src/librustc/session/config.rs ++++ b/src/librustc/session/config.rs +@@ -42,7 +42,7 @@ use std::env; + use std::fmt; + use std::hash::{Hasher, SipHasher}; + use std::iter::FromIterator; +-use std::path::PathBuf; ++use std::path::{Path, PathBuf}; + + pub struct Config { + pub target: Target, +@@ -1011,8 +1011,8 @@ pub fn build_configuration(sess: &Session, + v + } + +-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 c71253a..13b4e05 100644 +--- a/src/librustc/session/mod.rs ++++ b/src/librustc/session/mod.rs +@@ -395,13 +395,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 18686e3..d439b59 100644 +--- a/src/librustc_back/target/mod.rs ++++ b/src/librustc_back/target/mod.rs +@@ -49,6 +49,8 @@ use std::collections::BTreeMap; + use std::default::Default; + use std::io::prelude::*; + use syntax::abi::Abi; ++use std::borrow::ToOwned; ++use std::path::Path; + + mod android_base; + mod apple_base; +@@ -541,12 +543,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())?; +@@ -577,8 +580,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.0 + diff --git a/recipes-devtools/rust/files/rust-1.12.1/0002-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch b/recipes-devtools/rust/files/rust-1.12.1/0002-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch new file mode 100644 index 0000000..e1eaa05 --- /dev/null +++ b/recipes-devtools/rust/files/rust-1.12.1/0002-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch @@ -0,0 +1,73 @@ +From 0829743c109a147213d06d38052662a5f2b0dd9b Mon Sep 17 00:00:00 2001 +From: Cody P Schafer +Date: Tue, 18 Nov 2014 14:52:56 -0500 +Subject: [PATCH 02/10] mk: for stage0, use RUSTFLAGS to override target libs + dir + +Setting HLIB specially for stage0 (and even more specially for windows) +also affects the location we place TLIB. To keep the TLIBs we build in +the place requested by configure, use '-L' and '--sysroot' to point +stage0-rustc at the appropriate location. +--- + mk/main.mk | 29 ++++++++++++----------------- + 1 file changed, 12 insertions(+), 17 deletions(-) + +diff --git a/mk/main.mk b/mk/main.mk +index 90d3563..cdcbdf2 100644 +--- a/mk/main.mk ++++ b/mk/main.mk +@@ -420,32 +420,26 @@ define SREQ + HROOT$(1)_H_$(3) = $(3)/stage$(1) + HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin + +-ifeq ($$(CFG_WINDOWSY_$(3)),1) +-# On Windows we always store host runtime libraries in the 'bin' directory because +-# there's no rpath. Target libraries go under $CFG_LIBDIR_RELATIVE (usually 'lib'). +-HLIB_RELATIVE$(1)_H_$(3) = bin +-TROOT$(1)_T_$(2)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(CFG_LIBDIR_RELATIVE)/rustlib/$(2) +-# Remove the next 3 lines after a snapshot +-ifeq ($(1),0) +-RUSTFLAGS_STAGE0 += -L $$(TROOT$(1)_T_$(2)_H_$(3))/lib +-endif +- +-else +- +-ifeq ($(1),0) +-HLIB_RELATIVE$(1)_H_$(3) = lib +-else + HLIB_RELATIVE$(1)_H_$(3) = $$(CFG_LIBDIR_RELATIVE) +-endif ++ + TROOT$(1)_T_$(2)_H_$(3) = $$(HLIB$(1)_H_$(3))/rustlib/$(2) + +-endif + HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(HLIB_RELATIVE$(1)_H_$(3)) + + # Destinations of artifacts for target architectures + TBIN$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/bin + TLIB$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/lib + ++# Don't trust stage0, be explicit about libraries ++# TODO: rather than specifying sysroot, we really want to tell which libdir to ++# use (ie: the dir containing 'rustlib'). This would allow us to avoid ++# passing the '-L' options. ++ifeq ($(1),0) ++RUSTFLAGS_S_$(1)_T_$(2)_H_$(3) += --sysroot "$$(HROOT$(1)_H_$(3))" \ ++ -L "$$(TLIB$(1)_T_$(2)_H_$(3))" ++endif ++ ++ + # Preqrequisites for using the stageN compiler + ifeq ($(1),0) + HSREQ$(1)_H_$(3) = $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) +@@ -558,6 +552,7 @@ STAGE$(1)_T_$(2)_H_$(3) := \ + $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ + --cfg $$(CFGFLAG$(1)_T_$(2)_H_$(3)) \ + $$(CFG_RUSTC_FLAGS) $$(EXTRAFLAGS_STAGE$(1)) --target=$(2)) \ ++ $$(RUSTFLAGS_S_$(1)_T_$(2)_H_$(3)) \ + $$(RUSTC_FLAGS_$(2)) + + endef +-- +2.10.0 + diff --git a/recipes-devtools/rust/files/rust-1.12.1/0003-mk-add-missing-CFG_LIBDIR_RELATIVE.patch b/recipes-devtools/rust/files/rust-1.12.1/0003-mk-add-missing-CFG_LIBDIR_RELATIVE.patch new file mode 100644 index 0000000..dad4b4e --- /dev/null +++ b/recipes-devtools/rust/files/rust-1.12.1/0003-mk-add-missing-CFG_LIBDIR_RELATIVE.patch @@ -0,0 +1,27 @@ +From 128503bf447e82b9e99bea8ef83294a6446036b5 Mon Sep 17 00:00:00 2001 +From: Cody P Schafer +Date: Tue, 18 Nov 2014 13:48:14 -0500 +Subject: [PATCH 03/10] mk: add missing CFG_LIBDIR_RELATIVE + +--- + mk/grammar.mk | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/mk/grammar.mk b/mk/grammar.mk +index 0d527bd..926f247 100644 +--- a/mk/grammar.mk ++++ b/mk/grammar.mk +@@ -11,8 +11,8 @@ + BG = $(CFG_BUILD_DIR)/grammar/ + SG = $(S)src/grammar/ + B = $(CFG_BUILD_DIR)/$(CFG_BUILD)/stage2/ +-L = $(B)lib/rustlib/$(CFG_BUILD)/lib +-LD = $(CFG_BUILD)/stage2/lib/rustlib/$(CFG_BUILD)/lib/ ++L = $(B)$(CFG_LIBDIR_RELATIVE)/rustlib/$(CFG_BUILD)/lib ++LD = $(CFG_BUILD)/stage2/$(CFG_LIBDIR_RELATIVE)/rustlib/$(CFG_BUILD)/lib/ + RUSTC = $(STAGE2_T_$(CFG_BUILD)_H_$(CFG_BUILD)) + ifeq ($(CFG_OSTYPE),apple-darwin) + FLEX_LDFLAGS=-ll +-- +2.10.0 + diff --git a/recipes-devtools/rust/files/rust-1.12.1/0005-std-thread_local-workaround-for-NULL-__dso_handle.patch b/recipes-devtools/rust/files/rust-1.12.1/0005-std-thread_local-workaround-for-NULL-__dso_handle.patch new file mode 100644 index 0000000..42a6c88 --- /dev/null +++ b/recipes-devtools/rust/files/rust-1.12.1/0005-std-thread_local-workaround-for-NULL-__dso_handle.patch @@ -0,0 +1,25 @@ +From d73ce5d99346812fcf063a87b4efac54c263737d Mon Sep 17 00:00:00 2001 +From: Cody P Schafer +Date: Wed, 3 Dec 2014 19:15:19 -0500 +Subject: [PATCH 05/10] std/thread_local: workaround for NULL __dso_handle + +--- + src/libstd/thread/local.rs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libstd/thread/local.rs b/src/libstd/thread/local.rs +index 152b977..3c62862 100644 +--- a/src/libstd/thread/local.rs ++++ b/src/libstd/thread/local.rs +@@ -380,7 +380,7 @@ pub mod elf { + #[linkage = "extern_weak"] + static __cxa_thread_atexit_impl: *const libc::c_void; + } +- if !__cxa_thread_atexit_impl.is_null() { ++ if !__cxa_thread_atexit_impl.is_null() && !__dso_handle.is_null() { + type F = unsafe extern fn(dtor: unsafe extern fn(*mut u8), + arg: *mut u8, + dso_handle: *mut u8) -> libc::c_int; +-- +2.10.0 + diff --git a/recipes-devtools/rust/files/rust-1.12.1/0006-mk-install-use-disable-rewrite-paths.patch b/recipes-devtools/rust/files/rust-1.12.1/0006-mk-install-use-disable-rewrite-paths.patch new file mode 100644 index 0000000..1c003b5 --- /dev/null +++ b/recipes-devtools/rust/files/rust-1.12.1/0006-mk-install-use-disable-rewrite-paths.patch @@ -0,0 +1,30 @@ +From f8d4b1ea925789bca1aa6261017d63f5efa95c0f Mon Sep 17 00:00:00 2001 +From: Cody P Schafer +Date: Mon, 2 Mar 2015 13:34:59 -0500 +Subject: [PATCH 06/10] mk/install: use disable-rewrite-paths + +This stops the install scripts from doing work we've already handled. + +Path rewriting is only useful for prepackaged binary installers. +--- + mk/install.mk | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/mk/install.mk b/mk/install.mk +index d2e5449..e67650b 100644 +--- a/mk/install.mk ++++ b/mk/install.mk +@@ -12,7 +12,9 @@ RUN_INSTALLER = cd tmp/empty_dir && \ + sh ../../tmp/dist/$(1)/install.sh \ + --prefix="$(DESTDIR)$(CFG_PREFIX)" \ + --libdir="$(DESTDIR)$(CFG_LIBDIR)" \ +- --mandir="$(DESTDIR)$(CFG_MANDIR)" ++ --mandir="$(DESTDIR)$(CFG_MANDIR)" \ ++ "$(MAYBE_DISABLE_VERIFY)" \ ++ --disable-rewrite-paths + + install: + ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER))) +-- +2.10.0 + diff --git a/recipes-devtools/rust/files/rust-1.12.1/0007-Allow-overriding-crate_hash-with-C-crate_hash.patch b/recipes-devtools/rust/files/rust-1.12.1/0007-Allow-overriding-crate_hash-with-C-crate_hash.patch new file mode 100644 index 0000000..cb8e017 --- /dev/null +++ b/recipes-devtools/rust/files/rust-1.12.1/0007-Allow-overriding-crate_hash-with-C-crate_hash.patch @@ -0,0 +1,65 @@ +From 2a42d59c3671f3ab68d8ff49c46240842aff6eb6 Mon Sep 17 00:00:00 2001 +From: Steven Walter +Date: Wed, 18 Nov 2015 08:33:26 -0500 +Subject: [PATCH 07/10] Allow overriding crate_hash with -C crate_hash + +The current crate hash is not stable from run-to-run. This causes +problems with bitbake; it needs a guarantee that every build with the +same input will generate compatible output, otherwise sstate won't work. +Using -C crate_hash, we can do that by using the bitbake input hash to +determine the crate hash; the bitbake input hash will be stable, but +still different for different rust recipes. + +Upstream-Status: not-appropriate + +Upstream wants to fix it's actual object generation here. See +https://github.com/rust-lang/rust/issues/34902 (and others) for details. +--- + src/librustc/session/config.rs | 2 ++ + src/librustc_trans/back/link.rs | 12 +++++++++++- + 2 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs +index 563f3ac..52a5130 100644 +--- a/src/librustc/session/config.rs ++++ b/src/librustc/session/config.rs +@@ -804,6 +804,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options, + "choose the code model to use (rustc --print code-models for details)"), + metadata: Vec = (Vec::new(), parse_list, [TRACKED], + "metadata to mangle symbol names with"), ++ crate_hash: String = ("".to_string(), parse_string, [TRACKED], ++ "override crate hash with given value"), + extra_filename: String = ("".to_string(), parse_string, [UNTRACKED], + "extra data to put in each output filename"), + codegen_units: usize = (1, parse_uint, [UNTRACKED], +diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs +index 3cf2500..0e48063 100644 +--- a/src/librustc_trans/back/link.rs ++++ b/src/librustc_trans/back/link.rs +@@ -125,12 +125,22 @@ pub fn find_crate_name(sess: Option<&Session>, + + } + ++use std::hash::{Hasher, SipHasher}; ++use rustc::hir::svh::Svh; ++ + pub fn build_link_meta<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, + name: &str) + -> LinkMeta { ++ let crate_hash = if tcx.sess.opts.cg.crate_hash != "" { ++ let mut state = SipHasher::new(); ++ state.write(tcx.sess.opts.cg.crate_hash.as_bytes()); ++ Svh::new(state.finish()) ++ } else { ++ tcx.calculate_krate_hash() ++ }; + let r = LinkMeta { + crate_name: name.to_owned(), +- crate_hash: tcx.calculate_krate_hash(), ++ crate_hash: crate_hash, + }; + info!("{:?}", r); + return r; +-- +2.10.0 + diff --git a/recipes-devtools/rust/files/rust-1.12.1/0008-mk-platform.mk-pass-C-crate_hash-to-builds.patch b/recipes-devtools/rust/files/rust-1.12.1/0008-mk-platform.mk-pass-C-crate_hash-to-builds.patch new file mode 100644 index 0000000..37acbe4 --- /dev/null +++ b/recipes-devtools/rust/files/rust-1.12.1/0008-mk-platform.mk-pass-C-crate_hash-to-builds.patch @@ -0,0 +1,27 @@ +From 174ae38bcc197658dd0ad6bcdae2bb06112e68a2 Mon Sep 17 00:00:00 2001 +From: Steven Walter +Date: Wed, 18 Nov 2015 08:41:17 -0500 +Subject: [PATCH 08/10] mk/platform.mk: pass -C crate_hash to builds + +bitbake recipe will export FORCE_CRATE_HASH + +Upstream-Status: not-appropriate +--- + mk/platform.mk | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/mk/platform.mk b/mk/platform.mk +index d601cab..0b5e9f2 100644 +--- a/mk/platform.mk ++++ b/mk/platform.mk +@@ -181,6 +181,7 @@ define CFG_MAKE_TOOLCHAIN + AR_$(1)=$(CROSS_PREFIX_$(1))$(AR_$(1)) + LINK_$(1)=$(CROSS_PREFIX_$(1))$(LINK_$(1)) + RUSTC_CROSS_FLAGS_$(1)=-C linker=$$(call FIND_COMPILER,$$(LINK_$(1))) \ ++ -C crate_hash=$(FORCE_CRATE_HASH) \ + -C ar=$$(call FIND_COMPILER,$$(AR_$(1))) $(RUSTC_CROSS_FLAGS_$(1)) + + RUSTC_FLAGS_$(1)=$$(RUSTC_CROSS_FLAGS_$(1)) $(RUSTC_FLAGS_$(1)) +-- +2.10.0 + diff --git a/recipes-devtools/rust/files/rust-installer-1.12.1/0001-add-option-to-disable-rewriting-of-install-paths.patch b/recipes-devtools/rust/files/rust-installer-1.12.1/0001-add-option-to-disable-rewriting-of-install-paths.patch new file mode 100644 index 0000000..9471252 --- /dev/null +++ b/recipes-devtools/rust/files/rust-installer-1.12.1/0001-add-option-to-disable-rewriting-of-install-paths.patch @@ -0,0 +1,58 @@ +From c7daec775a917d9e3017bc35ea7d88cc9418f181 Mon Sep 17 00:00:00 2001 +From: Cody P Schafer +Date: Mon, 2 Mar 2015 13:27:49 -0500 +Subject: [PATCH] add option to disable rewriting of install paths + +This is intended for use by rust & cargo's `make install`, as in that +case: + + - these paths are typically built into the pre-install layout already + - attempting to do the replacement will be incorrect subdirectory + cases (ie: libdir=lib/foo) +--- + install-template.sh | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +diff --git a/install-template.sh b/install-template.sh +index 042b955..4ecf430 100644 +--- a/install-template.sh ++++ b/install-template.sh +@@ -618,16 +618,18 @@ install_components() { + # Decide the destination of the file + local _file_install_path="$_dest_prefix/$_file" + +- if echo "$_file" | grep "^lib/" > /dev/null +- then +- local _f="$(echo "$_file" | sed 's/^lib\///')" +- _file_install_path="$CFG_LIBDIR/$_f" +- fi ++ if [ -n "${CFG_REWRITE_PATHS-}" ]; then ++ if echo "$_file" | grep "^lib/" > /dev/null ++ then ++ local _f="$(echo "$_file" | sed 's/^lib\///')" ++ _file_install_path="$CFG_LIBDIR/$_f" ++ fi + +- if echo "$_file" | grep "^share/man/" > /dev/null +- then +- local _f="$(echo "$_file" | sed 's/^share\/man\///')" +- _file_install_path="$CFG_MANDIR/$_f" ++ if echo "$_file" | grep "^share/man/" > /dev/null ++ then ++ local _f="$(echo "$_file" | sed 's/^share\/man\///')" ++ _file_install_path="$CFG_MANDIR/$_f" ++ fi + fi + + # Make sure there's a directory for it +@@ -810,6 +812,7 @@ valopt mandir "$CFG_DESTDIR_PREFIX/share/man" "install man pages in PATH" + opt ldconfig 1 "run ldconfig after installation (Linux only)" + opt verify 1 "obsolete" + flag verbose "run with verbose output" ++opt rewrite-paths 1 "rewrite install paths for libdir & mandir" + + if [ $HELP -eq 1 ] + then +-- +2.4.1 + diff --git a/recipes-devtools/rust/libstd-rs_1.12.1.bb b/recipes-devtools/rust/libstd-rs_1.12.1.bb new file mode 100644 index 0000000..821f3cc --- /dev/null +++ b/recipes-devtools/rust/libstd-rs_1.12.1.bb @@ -0,0 +1,37 @@ +SUMMARY = "Rust standard libaries" +HOMEPAGE = "http://www.rust-lang.org" +SECTION = "devel" +LICENSE = "MIT | Apache-2.0" +LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" + +require rust-source-${PV}.inc + +S = "${WORKDIR}/rustc-${PV}" + +CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2" + +SRC_URI += "\ + crate://crates.io/gcc/0.3.27 \ + crate-index://crates.io/${CARGO_INDEX_COMMIT} \ +" + +DEPENDS += "compiler-rt (=${PV})" + +RUSTLIB_DEP = "" +inherit cargo + +# Needed so cargo can find libbacktrace +RUSTFLAGS += "-L ${STAGING_LIBDIR}" + +S = "${WORKDIR}/rustc-${PV}" + +do_compile_prepend () { + cd ${S}/src/rustc/std_shim + export CARGO_TARGET_DIR="${B}" + export RUSTC_BOOTSTRAP_KEY="${RS_KEY}" +} + +do_install () { + mkdir -p ${D}${rustlibdir} + cp ${B}/${TARGET_SYS}/release/deps/* ${D}${rustlibdir} +} diff --git a/recipes-devtools/rust/rust-cross_1.12.1.bb b/recipes-devtools/rust/rust-cross_1.12.1.bb new file mode 100644 index 0000000..67b6f3c --- /dev/null +++ b/recipes-devtools/rust/rust-cross_1.12.1.bb @@ -0,0 +1,50 @@ +require rust.inc +inherit cross +require rust-source-${PV}.inc + +# Otherwise we'll depend on what we provide +INHIBIT_DEFAULT_RUST_DEPS = "1" + +# Unlike native (which nicely maps it's DEPENDS) cross wipes them out completely. +# Generally, we (and cross in general) need the same things that native needs, +# so it might make sense to take it's mapping. For now, though, we just mention +# the bits we need explicitly. +DEPENDS += "rust-llvm-native" +DEPENDS += "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}compilerlibs virtual/libc" +DEPENDS += "rust-native" + +PROVIDES = "virtual/${TARGET_PREFIX}rust" +PN = "rust-cross-${TARGET_ARCH}" + +# In the cross compilation case, rustc doesn't seem to get the rpath quite +# right. It manages to include '../../lib/${TARGET_PREFIX}', but doesn't +# include the '../../lib' (ie: relative path from cross_bindir to normal +# libdir. As a result, we end up not being able to properly reference files in normal ${libdir}. +# Most of the time this happens to work fine as the systems libraries are +# subsituted, but sometimes a host system will lack a library, or the right +# version of a library (libtinfo was how I noticed this). +# +# FIXME: this should really be fixed in rust itself. +# FIXME: using hard-coded relative paths is wrong, we should ask bitbake for +# the relative path between 2 of it's vars. +HOST_POST_LINK_ARGS_append = " -Wl,-rpath=../../lib" +BUILD_POST_LINK_ARGS_append = " -Wl,-rpath=../../lib" + +# We need the same thing for the calls to the compiler when building the runtime crap +TARGET_CC_ARCH_append = " --sysroot=${STAGING_DIR_TARGET}" + +do_configure () { +} + +do_compile () { +} + +do_install () { + mkdir -p ${D}${prefix}/${base_libdir_native}/rustlib + cp ${WORKDIR}/targets/${TARGET_SYS}.json ${D}${prefix}/${base_libdir_native}/rustlib +} + +rust_cross_sysroot_preprocess() { + sysroot_stage_dir ${D}${prefix}/${base_libdir_native}/rustlib ${SYSROOT_DESTDIR}${prefix}/${base_libdir_native}/rustlib +} +SYSROOT_PREPROCESS_FUNCS += "rust_cross_sysroot_preprocess" diff --git a/recipes-devtools/rust/rust-llvm.inc b/recipes-devtools/rust/rust-llvm.inc index fba8b22..2706ae3 100644 --- a/recipes-devtools/rust/rust-llvm.inc +++ b/recipes-devtools/rust/rust-llvm.inc @@ -1,10 +1,6 @@ SUMMARY = "LLVM compiler framework (packaged with rust)" LICENSE = "NCSA" -SRC_URI = "\ - https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \ -" - S = "${WORKDIR}/rustc-${PV}/src/llvm" LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=4c0bc17c954e99fd547528d938832bfa" diff --git a/recipes-devtools/rust/rust-llvm_1.12.1.bb b/recipes-devtools/rust/rust-llvm_1.12.1.bb new file mode 100644 index 0000000..12dd8e9 --- /dev/null +++ b/recipes-devtools/rust/rust-llvm_1.12.1.bb @@ -0,0 +1,16 @@ +require rust-llvm.inc +require rust-source-${PV}.inc + +LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=43fdaa303c1c5589ad60f4ffc6a0b9ce" + +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-source-1.10.0.inc b/recipes-devtools/rust/rust-source-1.10.0.inc index 4ee024a..45a7792 100644 --- a/recipes-devtools/rust/rust-source-1.10.0.inc +++ b/recipes-devtools/rust/rust-source-1.10.0.inc @@ -6,7 +6,7 @@ RS_VERSION = "1.9.0" RS_KEY = "e8edd0fd" -RUST_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_HOST_SYS}" +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] = "f1cf6d2fe15e4be18a08259f1540a4ae" diff --git a/recipes-devtools/rust/rust-source-1.12.1.inc b/recipes-devtools/rust/rust-source-1.12.1.inc new file mode 100644 index 0000000..add9509 --- /dev/null +++ b/recipes-devtools/rust/rust-source-1.12.1.inc @@ -0,0 +1,21 @@ +# Specifics for Rust 1.12.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.11.0" +RS_KEY = "5c6cf767" + +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] = "b83d7a1a90c2d80bef97a518022948c8" +SRC_URI[rust-snapshot.sha256sum] = "e9d27a72900da33c1bbd0e59dd42fd6414c6bcdfa33593fb7c7360068406394a" + +SRC_URI += "\ + https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \ + " +SRC_URI[rust.md5sum] = "82db5a9cb9a051bf8ece2f5174cb273b" +SRC_URI[rust.sha256sum] = "97913ae4cb255618aaacd1a534b11f343634b040b32656250d09d8d9ec02d3dc" + diff --git a/recipes-devtools/rust/rust.inc b/recipes-devtools/rust/rust.inc index d104d4a..549066c 100644 --- a/recipes-devtools/rust/rust.inc +++ b/recipes-devtools/rust/rust.inc @@ -7,7 +7,6 @@ LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" inherit rust SRC_URI = "\ - https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \ https://static.rust-lang.org/dist/${RUST_SNAPSHOT}.tar.gz;name=rust-snapshot \ " @@ -120,7 +119,8 @@ TARGET_ENDIAN[arm] = "little" TARGET_POINTER_WIDTH[arm] = "32" FEATURES[arm] = "+v6,+vfp2" -DATA_LAYOUT[aarch64] = "e-m:e-i64:64-i128:128-n32:64-S128" +## aarch64-unknown-linux-gnu +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" diff --git a/recipes-devtools/rust/rust_1.10.0.bb b/recipes-devtools/rust/rust_1.10.0.bb index bfccfd1..6c5fbeb 100644 --- a/recipes-devtools/rust/rust_1.10.0.bb +++ b/recipes-devtools/rust/rust_1.10.0.bb @@ -2,6 +2,9 @@ inherit rust-installer require rust.inc require rust-source-${PV}.inc +# overriden due to difference between 1.10.0 and 1.12.1 +DATA_LAYOUT[aarch64] = "e-m:e-i64:64-i128:128-n32:64-S128" + SRC_URI += " \ file://rust-${PV}/0001-Add-config-for-musl-based-arm-builds.patch \ file://rust-${PV}/0002-Target-add-default-target.json-path-libdir-rust-targ.patch \ diff --git a/recipes-devtools/rust/rust_1.12.1.bb b/recipes-devtools/rust/rust_1.12.1.bb new file mode 100644 index 0000000..d6269b1 --- /dev/null +++ b/recipes-devtools/rust/rust_1.12.1.bb @@ -0,0 +1,28 @@ +inherit rust-installer +require rust.inc +require rust-source-${PV}.inc + +# the configure script always requires cmake so despite +# rust not needing this (only rust-llvm needs it) we must +# have it for the configure script to succeed. +DEPENDS += "cmake-native" + +SRC_URI += " \ + file://rust-${PV}/0001-Target-add-default-target.json-path-libdir-rust-targ.patch \ + file://rust-${PV}/0002-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch \ + file://rust-${PV}/0003-mk-add-missing-CFG_LIBDIR_RELATIVE.patch \ + file://rust-${PV}/0005-std-thread_local-workaround-for-NULL-__dso_handle.patch \ + file://rust-${PV}/0006-mk-install-use-disable-rewrite-paths.patch \ + file://rust-${PV}/0007-Allow-overriding-crate_hash-with-C-crate_hash.patch \ + file://rust-${PV}/0008-mk-platform.mk-pass-C-crate_hash-to-builds.patch \ + file://rust-installer-${PV}/0001-add-option-to-disable-rewriting-of-install-paths.patch;patchdir=src/rust-installer \ + " + +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"