rust: avoid some things that break bitbake, add more patches
This commit is contained in:
@@ -10,7 +10,7 @@ PN = "rust-cross-${TARGET_ARCH}"
|
|||||||
|
|
||||||
# The same value as ${TOOLCHAIN_OPTIONS}. We can't use that variable directly
|
# The same value as ${TOOLCHAIN_OPTIONS}. We can't use that variable directly
|
||||||
# here because cross.bblcass is "helpful" and blanks it out.
|
# here because cross.bblcass is "helpful" and blanks it out.
|
||||||
TARGET_PRE_LINK_ARGS_append = " --sysroot=${STAGING_DIR_TARGET}"
|
#TARGET_PRE_LINK_ARGS_append = " --sysroot=${STAGING_DIR_TARGET}"
|
||||||
|
|
||||||
# We need the same thing for the calls to the compiler when building the runtime crap
|
# We need the same thing for the calls to the compiler when building the runtime crap
|
||||||
TARGET_CC_ARCH_append = " --sysroot=${STAGING_DIR_TARGET}"
|
TARGET_CC_ARCH_append = " --sysroot=${STAGING_DIR_TARGET}"
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
From 8502ded50381200386c52a9c66e77ac3f3ca7188 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cody P Schafer <dev@codyps.com>
|
||||||
|
Date: Mon, 17 Nov 2014 19:44:58 -0500
|
||||||
|
Subject: [PATCH 8/9] Support --bindir
|
||||||
|
|
||||||
|
---
|
||||||
|
configure | 4 ++++
|
||||||
|
mk/install.mk | 4 ++--
|
||||||
|
mk/main.mk | 2 ++
|
||||||
|
src/etc/install.sh | 13 ++++++++++++-
|
||||||
|
4 files changed, 20 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index 7790025..bdfeedd 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -554,6 +554,9 @@ fi
|
||||||
|
|
||||||
|
valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
|
||||||
|
|
||||||
|
+CFG_BINDIR_RELATIVE=bin
|
||||||
|
+valopt bindir "${CFG_PREFIX}/${CFG_BINDIR_RELATIVE}" "install binaries"
|
||||||
|
+
|
||||||
|
if [ $HELP -eq 1 ]
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
@@ -1312,6 +1315,7 @@ putvar CFG_PREFIX
|
||||||
|
putvar CFG_HOST
|
||||||
|
putvar CFG_TARGET
|
||||||
|
putvar CFG_LIBDIR_RELATIVE
|
||||||
|
+putvar CFG_BINDIR_RELATIVE
|
||||||
|
putvar CFG_DISABLE_MANAGE_SUBMODULES
|
||||||
|
putvar CFG_ANDROID_CROSS_PATH
|
||||||
|
putvar CFG_MANDIR
|
||||||
|
diff --git a/mk/install.mk b/mk/install.mk
|
||||||
|
index 88b451f..4588e83 100644
|
||||||
|
--- a/mk/install.mk
|
||||||
|
+++ b/mk/install.mk
|
||||||
|
@@ -21,7 +21,7 @@ ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
|
||||||
|
else
|
||||||
|
$(Q)$(MAKE) prepare_install
|
||||||
|
endif
|
||||||
|
- $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" "$(MAYBE_DISABLE_VERIFY)"
|
||||||
|
+ $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" "$(MAYBE_DISABLE_VERIFY)" --bindir="$(DESTDIR)$(CFG_BINDIR)"
|
||||||
|
# Remove tmp files because it's a decent amount of disk space
|
||||||
|
$(Q)rm -R tmp/dist
|
||||||
|
|
||||||
|
@@ -34,7 +34,7 @@ ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
|
||||||
|
else
|
||||||
|
$(Q)$(MAKE) prepare_uninstall
|
||||||
|
endif
|
||||||
|
- $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --uninstall --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)"
|
||||||
|
+ $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --uninstall --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" --bindir="$(DESTDIR)$(CFG_BINDIR)"
|
||||||
|
# Remove tmp files because it's a decent amount of disk space
|
||||||
|
$(Q)rm -R tmp/dist
|
||||||
|
|
||||||
|
diff --git a/mk/main.mk b/mk/main.mk
|
||||||
|
index 3df4d3b..36f0e58 100644
|
||||||
|
--- a/mk/main.mk
|
||||||
|
+++ b/mk/main.mk
|
||||||
|
@@ -315,7 +315,9 @@ export CFG_BUILD
|
||||||
|
export CFG_LLVM_ROOT
|
||||||
|
export CFG_PREFIX
|
||||||
|
export CFG_LIBDIR
|
||||||
|
+export CFG_BINDIR
|
||||||
|
export CFG_LIBDIR_RELATIVE
|
||||||
|
+export CFG_BINDIR_RELATIVE
|
||||||
|
export CFG_DISABLE_INJECT_STD_VERSION
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
diff --git a/src/etc/install.sh b/src/etc/install.sh
|
||||||
|
index 4f43b1e..add1c26 100644
|
||||||
|
--- a/src/etc/install.sh
|
||||||
|
+++ b/src/etc/install.sh
|
||||||
|
@@ -285,6 +285,8 @@ then
|
||||||
|
CFG_LIBDIR_RELATIVE=bin
|
||||||
|
fi
|
||||||
|
|
||||||
|
+CFG_BINDIR_RELATIVE=bin
|
||||||
|
+
|
||||||
|
if [ "$CFG_OSTYPE" = "pc-mingw32" ] || [ "$CFG_OSTYPE" = "w64-mingw32" ]
|
||||||
|
then
|
||||||
|
CFG_LD_PATH_VAR=PATH
|
||||||
|
@@ -304,6 +306,7 @@ valopt prefix "/usr/local" "set installation prefix"
|
||||||
|
# NB This isn't quite the same definition as in `configure`.
|
||||||
|
# just using 'lib' instead of CFG_LIBDIR_RELATIVE
|
||||||
|
valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
|
||||||
|
+valopt bindir "${CFG_PREFIX}/${CFG_BINDIR_RELATIVE}" "install binaries"
|
||||||
|
valopt mandir "${CFG_PREFIX}/share/man" "install man pages in PATH"
|
||||||
|
|
||||||
|
if [ $HELP -eq 1 ]
|
||||||
|
@@ -424,6 +427,7 @@ need_ok "failed to create installed manifest"
|
||||||
|
|
||||||
|
# Now install, iterate through the new manifest and copy files
|
||||||
|
while read p; do
|
||||||
|
+ is_bin=false
|
||||||
|
|
||||||
|
# Decide the destination of the file
|
||||||
|
FILE_INSTALL_PATH="${CFG_PREFIX}/$p"
|
||||||
|
@@ -434,6 +438,13 @@ while read p; do
|
||||||
|
FILE_INSTALL_PATH="${CFG_LIBDIR}/$pp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
+ if echo "$p" | grep "^bin/" > /dev/null
|
||||||
|
+ then
|
||||||
|
+ is_bin=true
|
||||||
|
+ pp=`echo $p | sed 's/^bin\///'`
|
||||||
|
+ FILE_INSTALL_PATH="${CFG_BINDIR}/$pp"
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
if echo "$p" | grep "^share/man/" > /dev/null
|
||||||
|
then
|
||||||
|
pp=`echo $p | sed 's/^share\/man\///'`
|
||||||
|
@@ -451,7 +462,7 @@ while read p; do
|
||||||
|
|
||||||
|
# Install the file
|
||||||
|
msg "${FILE_INSTALL_PATH}"
|
||||||
|
- if echo "$p" | grep "^bin/" > /dev/null
|
||||||
|
+ if $is_bin
|
||||||
|
then
|
||||||
|
install -m755 "${CFG_SRC_DIR}/$p" "${FILE_INSTALL_PATH}"
|
||||||
|
else
|
||||||
|
--
|
||||||
|
2.0.4
|
||||||
|
|
||||||
@@ -0,0 +1,195 @@
|
|||||||
|
From 0285e9ebaea38ccb436e8b7b64a0bac232a89935 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cody P Schafer <dev@codyps.com>
|
||||||
|
Date: Mon, 17 Nov 2014 20:10:42 -0500
|
||||||
|
Subject: [PATCH 9/9] Remember relative libdir and bindir from build time
|
||||||
|
|
||||||
|
---
|
||||||
|
configure | 6 +++
|
||||||
|
mk/install.mk | 2 +-
|
||||||
|
src/librustc/back/link.rs | 3 +-
|
||||||
|
src/librustc/metadata/filesearch.rs | 73 +++++++++++++++----------------------
|
||||||
|
4 files changed, 37 insertions(+), 47 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index bdfeedd..c9bec44 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -340,6 +340,7 @@ need_cmd date
|
||||||
|
need_cmd tr
|
||||||
|
need_cmd sed
|
||||||
|
need_cmd file
|
||||||
|
+need_cmd realpath
|
||||||
|
|
||||||
|
msg "inspecting environment"
|
||||||
|
|
||||||
|
@@ -563,6 +564,11 @@ then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
+# Determine libdir and bindir relative to prefix
|
||||||
|
+step_msg "calculating relative paths to prefix = ${CFG_PREFIX}"
|
||||||
|
+CFG_BINDIR_RELATIVE=$(realpath --relative-to="${CFG_PREFIX}" "${CFG_BINDIR}")
|
||||||
|
+CFG_LIBDIR_RELATIVE=$(realpath --relative-to="${CFG_PREFIX}" "${CFG_LIBDIR}")
|
||||||
|
+
|
||||||
|
# Validate Options
|
||||||
|
step_msg "validating $CFG_SELF args"
|
||||||
|
validate_opt
|
||||||
|
diff --git a/mk/install.mk b/mk/install.mk
|
||||||
|
index 4588e83..0fba6ee 100644
|
||||||
|
--- a/mk/install.mk
|
||||||
|
+++ b/mk/install.mk
|
||||||
|
@@ -21,7 +21,7 @@ ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
|
||||||
|
else
|
||||||
|
$(Q)$(MAKE) prepare_install
|
||||||
|
endif
|
||||||
|
- $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" "$(MAYBE_DISABLE_VERIFY)" --bindir="$(DESTDIR)$(CFG_BINDIR)"
|
||||||
|
+ $(Q)cd tmp/empty_dir && sh ../../tmp/dist/$(PKG_NAME)-$(CFG_BUILD)/install.sh --prefix="$(DESTDIR)$(CFG_PREFIX)" --libdir="$(DESTDIR)$(CFG_LIBDIR)" --mandir="$(DESTDIR)$(CFG_MANDIR)" --bindir="$(DESTDIR)$(CFG_BINDIR)" "$(MAYBE_DISABLE_VERIFY)"
|
||||||
|
# Remove tmp files because it's a decent amount of disk space
|
||||||
|
$(Q)rm -R tmp/dist
|
||||||
|
|
||||||
|
diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs
|
||||||
|
index 766715f..306e074 100644
|
||||||
|
--- a/src/librustc/back/link.rs
|
||||||
|
+++ b/src/librustc/back/link.rs
|
||||||
|
@@ -1015,11 +1015,10 @@ fn link_args(cmd: &mut Command,
|
||||||
|
// where extern libraries might live, based on the
|
||||||
|
// addl_lib_search_paths
|
||||||
|
if sess.opts.cg.rpath {
|
||||||
|
- let sysroot = sess.sysroot();
|
||||||
|
let target_triple = sess.opts.target_triple.as_slice();
|
||||||
|
let get_install_prefix_lib_path = || {
|
||||||
|
let install_prefix = option_env!("CFG_PREFIX").expect("CFG_PREFIX");
|
||||||
|
- let tlib = filesearch::relative_target_lib_path(sysroot, target_triple);
|
||||||
|
+ let tlib = filesearch::relative_target_lib_path(target_triple);
|
||||||
|
let mut path = Path::new(install_prefix);
|
||||||
|
path.push(&tlib);
|
||||||
|
|
||||||
|
diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs
|
||||||
|
index f7d666e..6db56ef 100644
|
||||||
|
--- a/src/librustc/metadata/filesearch.rs
|
||||||
|
+++ b/src/librustc/metadata/filesearch.rs
|
||||||
|
@@ -66,8 +66,7 @@ impl<'a> FileSearch<'a> {
|
||||||
|
if !found {
|
||||||
|
let rustpath = rust_path();
|
||||||
|
for path in rustpath.iter() {
|
||||||
|
- let tlib_path = make_rustpkg_lib_path(
|
||||||
|
- self.sysroot, path, self.triple);
|
||||||
|
+ let tlib_path = make_rustpkg_lib_path(path, self.triple);
|
||||||
|
debug!("is {} in visited_dirs? {}", tlib_path.display(),
|
||||||
|
visited_dirs.contains(&tlib_path.as_vec().to_vec()));
|
||||||
|
|
||||||
|
@@ -149,7 +148,7 @@ impl<'a> FileSearch<'a> {
|
||||||
|
// Returns a list of directories where target-specific tool binaries are located.
|
||||||
|
pub fn get_tools_search_paths(&self) -> Vec<Path> {
|
||||||
|
let mut p = Path::new(self.sysroot);
|
||||||
|
- p.push(find_libdir(self.sysroot));
|
||||||
|
+ p.push(libdir_str());
|
||||||
|
p.push(rustlibdir());
|
||||||
|
p.push(self.triple);
|
||||||
|
p.push("bin");
|
||||||
|
@@ -157,8 +156,8 @@ impl<'a> FileSearch<'a> {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-pub fn relative_target_lib_path(sysroot: &Path, target_triple: &str) -> Path {
|
||||||
|
- let mut p = Path::new(find_libdir(sysroot));
|
||||||
|
+pub fn relative_target_lib_path(target_triple: &str) -> Path {
|
||||||
|
+ let mut p = Path::new(libdir_str());
|
||||||
|
assert!(p.is_relative());
|
||||||
|
p.push(rustlibdir());
|
||||||
|
p.push(target_triple);
|
||||||
|
@@ -168,17 +167,24 @@ pub fn relative_target_lib_path(sysroot: &Path, target_triple: &str) -> Path {
|
||||||
|
|
||||||
|
fn make_target_lib_path(sysroot: &Path,
|
||||||
|
target_triple: &str) -> Path {
|
||||||
|
- sysroot.join(&relative_target_lib_path(sysroot, target_triple))
|
||||||
|
+ sysroot.join(&relative_target_lib_path(target_triple))
|
||||||
|
}
|
||||||
|
|
||||||
|
-fn make_rustpkg_lib_path(sysroot: &Path,
|
||||||
|
- dir: &Path,
|
||||||
|
+fn make_rustpkg_lib_path(dir: &Path,
|
||||||
|
triple: &str) -> Path {
|
||||||
|
- let mut p = dir.join(find_libdir(sysroot));
|
||||||
|
+ let mut p = dir.join(libdir_str());
|
||||||
|
p.push(triple);
|
||||||
|
p
|
||||||
|
}
|
||||||
|
|
||||||
|
+pub fn bindir_relative_str() -> &'static str {
|
||||||
|
+ env!("CFG_BINDIR_RELATIVE")
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+pub fn bindir_relative_path() -> Path {
|
||||||
|
+ Path::new(bindir_relative_str())
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
pub fn get_or_default_sysroot() -> Path {
|
||||||
|
// Follow symlinks. If the resolved path is relative, make it absolute.
|
||||||
|
fn canonicalize(path: Option<Path>) -> Option<Path> {
|
||||||
|
@@ -190,7 +196,17 @@ pub fn get_or_default_sysroot() -> Path {
|
||||||
|
}
|
||||||
|
|
||||||
|
match canonicalize(os::self_exe_name()) {
|
||||||
|
- Some(mut p) => { p.pop(); p.pop(); p }
|
||||||
|
+ Some(mut p) => {
|
||||||
|
+ // Remove the exe name
|
||||||
|
+ p.pop();
|
||||||
|
+ let mut rel = bindir_relative_path();
|
||||||
|
+ // Remove a number of elements equal to the number of elements in the bindir relative
|
||||||
|
+ // path
|
||||||
|
+ while rel.pop() {
|
||||||
|
+ p.pop();
|
||||||
|
+ }
|
||||||
|
+ p
|
||||||
|
+ }
|
||||||
|
None => panic!("can't determine value for sysroot")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -248,40 +264,9 @@ pub fn rust_path() -> Vec<Path> {
|
||||||
|
env_rust_path
|
||||||
|
}
|
||||||
|
|
||||||
|
-// The name of the directory rustc expects libraries to be located.
|
||||||
|
-// On Unix should be "lib", on windows "bin"
|
||||||
|
-#[cfg(unix)]
|
||||||
|
-fn find_libdir(sysroot: &Path) -> String {
|
||||||
|
- // FIXME: This is a quick hack to make the rustc binary able to locate
|
||||||
|
- // Rust libraries in Linux environments where libraries might be installed
|
||||||
|
- // to lib64/lib32. This would be more foolproof by basing the sysroot off
|
||||||
|
- // of the directory where librustc is located, rather than where the rustc
|
||||||
|
- // binary is.
|
||||||
|
-
|
||||||
|
- if sysroot.join(primary_libdir_name()).join(rustlibdir()).exists() {
|
||||||
|
- return primary_libdir_name();
|
||||||
|
- } else {
|
||||||
|
- return secondary_libdir_name();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- #[cfg(target_word_size = "64")]
|
||||||
|
- fn primary_libdir_name() -> String {
|
||||||
|
- "lib64".to_string()
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- #[cfg(target_word_size = "32")]
|
||||||
|
- fn primary_libdir_name() -> String {
|
||||||
|
- "lib32".to_string()
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- fn secondary_libdir_name() -> String {
|
||||||
|
- "lib".to_string()
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-#[cfg(windows)]
|
||||||
|
-fn find_libdir(_sysroot: &Path) -> String {
|
||||||
|
- "bin".to_string()
|
||||||
|
+// The name of the directory rustc expects libraries to be located, relative to the sysroot
|
||||||
|
+fn libdir_str() -> &'static str {
|
||||||
|
+ env!("CFG_LIBDIR_RELATIVE")
|
||||||
|
}
|
||||||
|
|
||||||
|
// The name of rustc's own place to organize libraries.
|
||||||
|
--
|
||||||
|
2.0.4
|
||||||
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
From 8346b26f57926960640f5e68d78cd5a7a50e4a6d 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] Target: add default target.json path: $libdir/rust/targets
|
||||||
|
|
||||||
|
---
|
||||||
|
src/librustc/driver/config.rs | 4 ++--
|
||||||
|
src/librustc/driver/session.rs | 6 +++++-
|
||||||
|
src/librustc_back/target/mod.rs | 6 +++---
|
||||||
|
3 files changed, 10 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/librustc/driver/config.rs b/src/librustc/driver/config.rs
|
||||||
|
index 1a40a04..a5c334c 100644
|
||||||
|
--- a/src/librustc/driver/config.rs
|
||||||
|
+++ b/src/librustc/driver/config.rs
|
||||||
|
@@ -521,8 +521,8 @@ pub fn build_configuration(sess: &Session) -> ast::CrateConfig {
|
||||||
|
v
|
||||||
|
}
|
||||||
|
|
||||||
|
-pub fn build_target_config(opts: &Options, sp: &SpanHandler) -> Config {
|
||||||
|
- let target = match Target::search(opts.target_triple.as_slice()) {
|
||||||
|
+pub fn build_target_config(sysroot: &Path, opts: &Options, sp: &SpanHandler) -> Config {
|
||||||
|
+ let target = match Target::search(sysroot, opts.target_triple.as_slice()) {
|
||||||
|
Ok(t) => t,
|
||||||
|
Err(e) => {
|
||||||
|
sp.handler().fatal((format!("Error loading target specification: {}", e)).as_slice());
|
||||||
|
diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs
|
||||||
|
index 35ccbb4..d31735a 100644
|
||||||
|
--- a/src/librustc/driver/session.rs
|
||||||
|
+++ b/src/librustc/driver/session.rs
|
||||||
|
@@ -219,7 +219,11 @@ pub fn build_session_(sopts: config::Options,
|
||||||
|
local_crate_source_file: Option<Path>,
|
||||||
|
span_diagnostic: diagnostic::SpanHandler)
|
||||||
|
-> Session {
|
||||||
|
- let target_cfg = config::build_target_config(&sopts, &span_diagnostic);
|
||||||
|
+ let sysroot = match sopts.maybe_sysroot {
|
||||||
|
+ Some(ref x) => Path::new(x),
|
||||||
|
+ None => filesearch::get_or_default_sysroot()
|
||||||
|
+ };
|
||||||
|
+ let target_cfg = config::build_target_config(&sysroot, &sopts, &span_diagnostic);
|
||||||
|
let p_s = parse::new_parse_sess_special_handler(span_diagnostic);
|
||||||
|
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 d7b4285..27ad897 100644
|
||||||
|
--- a/src/librustc_back/target/mod.rs
|
||||||
|
+++ b/src/librustc_back/target/mod.rs
|
||||||
|
@@ -291,7 +291,7 @@ 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::os;
|
||||||
|
use std::io::File;
|
||||||
|
use std::path::Path;
|
||||||
|
@@ -366,8 +366,8 @@ impl Target {
|
||||||
|
|
||||||
|
let target_path = os::getenv("RUST_TARGET_PATH").unwrap_or(String::new());
|
||||||
|
|
||||||
|
- let paths = os::split_paths(target_path.as_slice());
|
||||||
|
- // FIXME 16351: add a sane default search path?
|
||||||
|
+ let mut paths = os::split_paths(target_path.as_slice());
|
||||||
|
+ paths.push(sysroot.join_many([env!("CFG_LIBDIR_RELATIVE"), "rust", "targets"]));
|
||||||
|
|
||||||
|
for dir in paths.iter() {
|
||||||
|
let p = dir.join(path.clone());
|
||||||
|
--
|
||||||
|
2.0.4
|
||||||
|
|
||||||
+20
-30
@@ -46,22 +46,13 @@ TARGET_ENDIAN[i586] = "little"
|
|||||||
TARGET_WORD_SIZE[i586] = "32"
|
TARGET_WORD_SIZE[i586] = "32"
|
||||||
PRE_LINK_ARGS[i586] = "-Wl,--as-needed -m32"
|
PRE_LINK_ARGS[i586] = "-Wl,--as-needed -m32"
|
||||||
|
|
||||||
|
# XXX: BITBAKE-BUG: these used to be set via a function, but that caused bitbake to error on
|
||||||
def ldflags_for(d, thing):
|
# users of these variables without any backtrace or error message other than
|
||||||
f = d.getVar('{}_CC_ARCH'.format(thing), True) or ""
|
# "failed" (of some form or another). Probably an issue with bitbake attempting
|
||||||
f += " "
|
# to track variable users and us having too many dynamic variable names.
|
||||||
f += d.getVar('TOOLCHAIN_OPTIONS', True) or ""
|
TARGET_PRE_LINK_ARGS = "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${TARGET_LDFLAGS} ${PRE_LINK_ARGS[${TARGET_ARCH}]}"
|
||||||
f += " "
|
BUILD_PRE_LINK_ARGS = "${BUILD_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${BUILD_LDFLAGS} ${PRE_LINK_ARGS[${BUILD_ARCH}]}"
|
||||||
f += d.getVar('{}_LDFLAGS'.format(thing), True) or ""
|
HOST_PRE_LINK_ARGS = "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${HOST_LDFLAGS} ${PRE_LINK_ARGS[${HOST_ARCH}]}"
|
||||||
f += " "
|
|
||||||
f += d.getVarFlag('PRE_LINK_ARGS', d.getVar('{}_ARCH'.format(thing)), True) or ""
|
|
||||||
return f
|
|
||||||
|
|
||||||
# These are appended to by internal-rust-cross.bbclass and should be used
|
|
||||||
# instead of ldflags_for() where ever ldflags are needed
|
|
||||||
TARGET_PRE_LINK_ARGS = "${@ldflags_for(d, 'TARGET')}"
|
|
||||||
HOST_PRE_LINK_ARGS = "${@ldflags_for(d, 'HOST')}"
|
|
||||||
BUILD_PRE_LINK_ARGS = "${@ldflags_for(d, 'BUILD')}"
|
|
||||||
|
|
||||||
def arch_for(d, thing):
|
def arch_for(d, thing):
|
||||||
return d.getVar('{}_ARCH'.format(thing), True)
|
return d.getVar('{}_ARCH'.format(thing), True)
|
||||||
@@ -124,7 +115,7 @@ def rust_gen_target(d, thing, wd):
|
|||||||
linker = "{}{}gcc".format(ccache, prefix)
|
linker = "{}{}gcc".format(ccache, prefix)
|
||||||
features = d.getVarFlag('FEATURES', arch, True) or ""
|
features = d.getVarFlag('FEATURES', arch, True) or ""
|
||||||
|
|
||||||
pre_link_args = (d.getVar('{}_PRE_LINK_ARGS_PREPEND'.format(thing), True) or "").split()
|
pre_link_args = (d.getVar('{}_PRE_LINK_ARGS'.format(thing), True) or "").split()
|
||||||
pre_link_args.extend((d.getVarFlag('PRE_LINK_ARGS', arch, True) or "").split())
|
pre_link_args.extend((d.getVarFlag('PRE_LINK_ARGS', arch, True) or "").split())
|
||||||
|
|
||||||
o.write('''{{
|
o.write('''{{
|
||||||
@@ -155,20 +146,18 @@ def rust_gen_target(d, thing, wd):
|
|||||||
o.close()
|
o.close()
|
||||||
|
|
||||||
python do_rust_gen_targets () {
|
python do_rust_gen_targets () {
|
||||||
import os
|
import os
|
||||||
wd = d.getVar('WORKDIR', True) + '/targets/'
|
wd = d.getVar('WORKDIR', True) + '/targets/'
|
||||||
try:
|
try:
|
||||||
os.makedirs(wd)
|
os.makedirs(wd)
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
if e.errno != 17:
|
if e.errno != 17:
|
||||||
raise e
|
raise e
|
||||||
|
for thing in ['BUILD', 'HOST', 'TARGET']:
|
||||||
for thing in ['HOST', 'BUILD', 'TARGET']:
|
bb.debug(1, "rust_gen_target for " + thing)
|
||||||
rust_gen_target(d, thing, wd)
|
rust_gen_target(d, thing, wd)
|
||||||
}
|
}
|
||||||
addtask do_rust_gen_targets after do_patch before do_compile
|
addtask do_rust_gen_targets after do_patch before do_compile
|
||||||
do_rust_gen_targets[dirs] = "${WORKDIR}"
|
|
||||||
|
|
||||||
|
|
||||||
def rust_gen_mk_cfg(d, thing):
|
def rust_gen_mk_cfg(d, thing):
|
||||||
''''
|
''''
|
||||||
@@ -219,11 +208,12 @@ def rust_gen_mk_cfg(d, thing):
|
|||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
python do_rust_arch_fixup () {
|
python do_rust_arch_fixup () {
|
||||||
for thing in ['HOST', 'BUILD', 'TARGET']:
|
for thing in ['BUILD', 'HOST', 'TARGET']:
|
||||||
|
bb.debug(1, "rust_gen_mk_cfg for " + thing)
|
||||||
rust_gen_mk_cfg(d, thing)
|
rust_gen_mk_cfg(d, thing)
|
||||||
}
|
}
|
||||||
addtask do_rust_arch_fixup before do_configure after do_patch
|
addtask do_rust_arch_fixup before do_configure after do_patch
|
||||||
do_rust_arch_fixup[dirs] = "${WORKDIR}"
|
do_rust_arch_fixup[dirs] = "${S}/mk/cfg"
|
||||||
|
|
||||||
do_configure () {
|
do_configure () {
|
||||||
# FIXME: target_prefix vs prefix, see cross.bbclass
|
# FIXME: target_prefix vs prefix, see cross.bbclass
|
||||||
@@ -253,7 +243,7 @@ do_configure () {
|
|||||||
"--infodir=${infodir}" \
|
"--infodir=${infodir}" \
|
||||||
"--mandir=${mandir}" \
|
"--mandir=${mandir}" \
|
||||||
"--libdir=${libdir}" \
|
"--libdir=${libdir}" \
|
||||||
"--disable-manage-submodules" \
|
"--disable-manage-submodules" \
|
||||||
${@base_conditional('USE_LOCAL_RUST', '1', '--enable-local-rust', '', d)} \
|
${@base_conditional('USE_LOCAL_RUST', '1', '--enable-local-rust', '', d)} \
|
||||||
${EXTRA_OECONF}
|
${EXTRA_OECONF}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,4 +8,7 @@ SRC_URI_append = "\
|
|||||||
file://0005-CFG_CFLAGS-is-only-used-for-jemalloc-rename-all-uses.patch \
|
file://0005-CFG_CFLAGS-is-only-used-for-jemalloc-rename-all-uses.patch \
|
||||||
file://0006-mk-rt-jemalloc-pass-CFG_GCCISH_CFLAGS-inside-CC-inst.patch \
|
file://0006-mk-rt-jemalloc-pass-CFG_GCCISH_CFLAGS-inside-CC-inst.patch \
|
||||||
file://0007-mk-rt-compiler_rt-pass-LDFLAGS-from-CFG_GCCISH_LINK_.patch \
|
file://0007-mk-rt-compiler_rt-pass-LDFLAGS-from-CFG_GCCISH_LINK_.patch \
|
||||||
|
file://0008-Support-bindir.patch \
|
||||||
|
file://0009-Remember-relative-libdir-and-bindir-from-build-time.patch \
|
||||||
|
file://0010-Target-add-default-target.json-path-libdir-rust-targ.patch \
|
||||||
"
|
"
|
||||||
|
|||||||
Reference in New Issue
Block a user