diff --git a/src/bootstrap/check.rs b/src/bootstrap/check.rs index 068efe18cce3d..277728b90b763 100644 --- a/src/bootstrap/check.rs +++ b/src/bootstrap/check.rs @@ -265,7 +265,7 @@ pub fn compiletest(build: &Build, let llvm_components = output(Command::new(&llvm_config).arg("--components")); let llvm_cxxflags = output(Command::new(&llvm_config).arg("--cxxflags")); cmd.arg("--cc").arg(build.cc(target)) - .arg("--cxx").arg(build.cxx(target)) + .arg("--cxx").arg(build.cxx(target).unwrap()) .arg("--cflags").arg(build.cflags(target).join(" ")) .arg("--llvm-components").arg(llvm_components.trim()) .arg("--llvm-cxxflags").arg(llvm_cxxflags.trim()); diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index f92a199fa3fea..c8ab3a8fc1d99 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -291,7 +291,7 @@ pub fn rustc(build: &Build, target: &str, compiler: &Compiler) { !target.contains("windows") && !target.contains("apple") { cargo.env("LLVM_STATIC_STDCPP", - compiler_file(build.cxx(target), "libstdc++.a")); + compiler_file(build.cxx(target).unwrap(), "libstdc++.a")); } if build.config.llvm_link_shared { cargo.env("LLVM_LINK_SHARED", "1"); diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index ca8cc3212d7c7..ce7cde8fc9494 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -452,6 +452,10 @@ impl Build { cargo.env(format!("CC_{}", target), self.cc(target)) .env(format!("AR_{}", target), self.ar(target).unwrap()) // only msvc is None .env(format!("CFLAGS_{}", target), self.cflags(target).join(" ")); + + if let Ok(cxx) = self.cxx(target) { + cargo.env(format!("CXX_{}", target), cxx); + } } if self.config.extended && compiler.is_final_stage(self) { @@ -838,13 +842,13 @@ impl Build { self.cc[target].1.as_ref().map(|p| &**p) } - /// Returns the path to the C++ compiler for the target specified, may panic - /// if no C++ compiler was configured for the target. - fn cxx(&self, target: &str) -> &Path { + /// Returns the path to the C++ compiler for the target specified. + fn cxx(&self, target: &str) -> Result<&Path, String> { match self.cxx.get(target) { - Some(p) => p.path(), - None => panic!("\n\ntarget `{}` is not configured as a host, - only as a target\n\n", target), + Some(p) => Ok(p.path()), + None => Err(format!( + "target `{}` is not configured as a host, only as a target", + target)) } } diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index a23be37b15e0e..f150df6cdcdb0 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -155,7 +155,7 @@ pub fn llvm(build: &Build, target: &str) { } let cc = build.cc(target); - let cxx = build.cxx(target); + let cxx = build.cxx(target).unwrap(); // Handle msvc + ninja + ccache specially (this is what the bots use) if target.contains("msvc") && diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs index 5ccd131b77ae4..46d047bb015e5 100644 --- a/src/bootstrap/sanity.rs +++ b/src/bootstrap/sanity.rs @@ -139,7 +139,7 @@ pub fn check(build: &mut Build) { } } for host in build.config.host.iter() { - need_cmd(build.cxx(host).as_ref()); + need_cmd(build.cxx(host).unwrap().as_ref()); } // The msvc hosts don't use jemalloc, turn it off globally to