Merge pull request #161 from cardoe/fixup-wrappers

drop custom compiler patch to provide target
This commit is contained in:
Derek Straka
2017-06-22 08:49:36 -04:00
committed by GitHub
8 changed files with 183 additions and 265 deletions

View File

@@ -56,26 +56,31 @@ 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}"
bbnote "cargo = $(which cargo)"
bbnote "rustc = $(which rustc)"
export RUST_TARGET_PATH="${RUST_TARGET_PATH}"
bbnote "cargo = $(which ${CARGO})"
bbnote "rustc = $(which ${RUSTC})"
bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@"
"${CARGO}" build ${CARGO_BUILD_FLAGS} "$@"
}
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}"
}

View File

@@ -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

View File

@@ -1,56 +1,23 @@
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} \
"
B = "${S}"
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"
# 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"

View File

@@ -1,85 +1,101 @@
require cargo-snapshot.inc
require cargo.inc
# Auto-Generated by cargo-bitbake 0.3.6
#
inherit cargo
EXTRA_OECONF += "--cargo=${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo/bin/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

View File

@@ -1,106 +0,0 @@
From e9c6cf5d1a9bb7f50c5e98a660217062b510928b Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
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<codemap::CodeMap>,
cstore: Rc<for<'a> 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<Target, String> {
+ pub fn search(sysroot: &Path, target: &str) -> Result<Target, String> {
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<Target, String> {
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)

View File

@@ -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 \
"

View File

@@ -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"

View File

@@ -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