From 04c41eb3726e5bd34d4bbdc7e405813a5a7e8cb3 Mon Sep 17 00:00:00 2001 From: Vadim Chugunov Date: Sat, 20 Sep 2014 11:42:10 -0700 Subject: [PATCH 1/2] Move bundled gcc and its libs out into $rust/rustlib//gcc/(bin|lib). This way the libs won't be on the -L library search path, and won't confuse external gcc, if one is used. The bundled gcc itself will still be able to find them, because it searches for libs relative to own install location. --- src/etc/make-win-dist.py | 6 +++--- src/librustc/metadata/filesearch.rs | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/etc/make-win-dist.py b/src/etc/make-win-dist.py index bb9a112b7b28a..9d883dec968ee 100644 --- a/src/etc/make-win-dist.py +++ b/src/etc/make-win-dist.py @@ -58,15 +58,15 @@ def make_win_dist(dist_root, target_triple): for src in rustc_dlls: shutil.copy(src, dist_bin_dir) - # Copy platform tools (and another copy of runtime dlls) to platform-spcific bin directory - target_bin_dir = os.path.join(dist_root, "bin", "rustlib", target_triple, "bin") + # Copy platform tools to platform-specific bin directory + target_bin_dir = os.path.join(dist_root, "bin", "rustlib", target_triple, "gcc", "bin") if not os.path.exists(target_bin_dir): os.makedirs(target_bin_dir) for src in target_tools: shutil.copy(src, target_bin_dir) # Copy platform libs to platform-spcific lib directory - target_lib_dir = os.path.join(dist_root, "bin", "rustlib", target_triple, "lib") + target_lib_dir = os.path.join(dist_root, "bin", "rustlib", target_triple, "gcc", "lib") if not os.path.exists(target_lib_dir): os.makedirs(target_lib_dir) for src in target_libs: diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs index 148aaf9568675..553ec096521cd 100644 --- a/src/librustc/metadata/filesearch.rs +++ b/src/librustc/metadata/filesearch.rs @@ -150,8 +150,12 @@ impl<'a> FileSearch<'a> { p.push(find_libdir(self.sysroot)); p.push(rustlibdir()); p.push(self.triple); - p.push("bin"); - vec![p] + let mut p1 = p.clone(); + p1.push("bin"); + let mut p2 = p.clone(); + p2.push("gcc"); + p2.push("bin"); + vec![p1, p2] } } From 94f05324fee6cd4637adc01f441fafd09e678668 Mon Sep 17 00:00:00 2001 From: Vadim Chugunov Date: Sat, 20 Sep 2014 11:44:01 -0700 Subject: [PATCH 2/2] Prefer bundled gcc. External gcc can still be used if one provides a full path via -Clinker=... --- src/librustc/driver/driver.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index bb454e07fc158..2d543d13065e7 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -562,8 +562,8 @@ pub fn phase_6_link_output(sess: &Session, trans: &CrateTranslation, outputs: &OutputFilenames) { let old_path = os::getenv("PATH").unwrap_or_else(||String::new()); - let mut new_path = os::split_paths(old_path.as_slice()); - new_path.push_all_move(sess.host_filesearch().get_tools_search_paths()); + let mut new_path = sess.host_filesearch().get_tools_search_paths(); + new_path.push_all_move(os::split_paths(old_path.as_slice())); os::setenv("PATH", os::join_paths(new_path.as_slice()).unwrap()); time(sess.time_passes(), "linking", (), |_|