diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 637bdbe9984..8fae1dd99d8 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -405,8 +405,9 @@ pub fn std(build: &Build, compiler: &Compiler, target: &str) { let dst = image.join("lib/rustlib").join(target); t!(fs::create_dir_all(&dst)); - let src = build.sysroot(compiler).join("lib/rustlib"); - cp_r(&src.join(target), &dst); + let mut src = build.sysroot_libdir(compiler, target); + src.pop(); // Remove the trailing /lib folder from the sysroot_libdir + cp_r(&src, &dst); let mut cmd = rust_installer(build); cmd.arg("generate") diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 5a3785b1ed6..032231582ef 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -645,8 +645,14 @@ impl Build { /// Returns the libdir where the standard library and other artifacts are /// found for a compiler's sysroot. fn sysroot_libdir(&self, compiler: &Compiler, target: &str) -> PathBuf { - self.sysroot(compiler).join("lib").join("rustlib") - .join(target).join("lib") + if compiler.stage >= 2 { + if let Some(ref libdir_relative) = self.config.libdir_relative { + return self.sysroot(compiler).join(libdir_relative) + .join("rustlib").join(target).join("lib") + } + } + self.sysroot(compiler).join("lib").join("rustlib") + .join(target).join("lib") } /// Returns the root directory for all output generated in a particular