Rollup merge of #34302 - retep998:🐇-sanity-is-overrated-🐇, r=alexcrichton
Fix issue where rustbuild expected msvc to have ar I made `cc2ar` return an `Option`. r? @alexcrichton
This commit is contained in:
commit
51b20bcbf4
@ -57,7 +57,9 @@ pub fn find(build: &mut Build) {
|
||||
let compiler = cfg.get_compiler();
|
||||
let ar = cc2ar(compiler.path(), target);
|
||||
build.verbose(&format!("CC_{} = {:?}", target, compiler.path()));
|
||||
build.verbose(&format!("AR_{} = {:?}", target, ar));
|
||||
if let Some(ref ar) = ar {
|
||||
build.verbose(&format!("AR_{} = {:?}", target, ar));
|
||||
}
|
||||
build.cc.insert(target.to_string(), (compiler, ar));
|
||||
}
|
||||
|
||||
|
@ -119,7 +119,7 @@ pub struct Build {
|
||||
lldb_python_dir: Option<String>,
|
||||
|
||||
// Runtime state filled in later on
|
||||
cc: HashMap<String, (gcc::Tool, PathBuf)>,
|
||||
cc: HashMap<String, (gcc::Tool, Option<PathBuf>)>,
|
||||
cxx: HashMap<String, gcc::Tool>,
|
||||
compiler_rt_built: RefCell<HashMap<String, PathBuf>>,
|
||||
}
|
||||
@ -549,7 +549,7 @@ impl Build {
|
||||
// FIXME: the guard against msvc shouldn't need to be here
|
||||
if !target.contains("msvc") {
|
||||
cargo.env(format!("CC_{}", target), self.cc(target))
|
||||
.env(format!("AR_{}", target), self.ar(target))
|
||||
.env(format!("AR_{}", target), self.ar(target).unwrap()) // only msvc is None
|
||||
.env(format!("CFLAGS_{}", target), self.cflags(target).join(" "));
|
||||
}
|
||||
|
||||
@ -825,8 +825,8 @@ impl Build {
|
||||
}
|
||||
|
||||
/// Returns the path to the `ar` archive utility for the target specified.
|
||||
fn ar(&self, target: &str) -> &Path {
|
||||
&self.cc[target].1
|
||||
fn ar(&self, target: &str) -> Option<&Path> {
|
||||
self.cc[target].1.as_ref().map(|p| &**p)
|
||||
}
|
||||
|
||||
/// Returns the path to the C++ compiler for the target specified, may panic
|
||||
|
@ -70,7 +70,9 @@ pub fn check(build: &mut Build) {
|
||||
// also build some C++ shims for LLVM so we need a C++ compiler.
|
||||
for target in build.config.target.iter() {
|
||||
need_cmd(build.cc(target).as_ref());
|
||||
need_cmd(build.ar(target).as_ref());
|
||||
if let Some(ar) = build.ar(target) {
|
||||
need_cmd(ar.as_ref());
|
||||
}
|
||||
}
|
||||
for host in build.config.host.iter() {
|
||||
need_cmd(build.cxx(host).as_ref());
|
||||
|
@ -39,9 +39,11 @@ pub fn gnu_target(target: &str) -> String {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn cc2ar(cc: &Path, target: &str) -> PathBuf {
|
||||
if target.contains("musl") || target.contains("msvc") {
|
||||
PathBuf::from("ar")
|
||||
pub fn cc2ar(cc: &Path, target: &str) -> Option<PathBuf> {
|
||||
if target.contains("msvc") {
|
||||
None
|
||||
} else if target.contains("musl") {
|
||||
Some(PathBuf::from("ar"))
|
||||
} else {
|
||||
let parent = cc.parent().unwrap();
|
||||
let file = cc.file_name().unwrap().to_str().unwrap();
|
||||
@ -49,10 +51,10 @@ pub fn cc2ar(cc: &Path, target: &str) -> PathBuf {
|
||||
if let Some(idx) = file.rfind(suffix) {
|
||||
let mut file = file[..idx].to_owned();
|
||||
file.push_str("ar");
|
||||
return parent.join(&file);
|
||||
return Some(parent.join(&file));
|
||||
}
|
||||
}
|
||||
parent.join(file)
|
||||
Some(parent.join(file))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,8 @@ fn main() {
|
||||
}
|
||||
|
||||
let compiler = gcc::Config::new().get_compiler();
|
||||
let ar = build_helper::cc2ar(compiler.path(), &target);
|
||||
// only msvc returns None for ar so unwrap is okay
|
||||
let ar = build_helper::cc2ar(compiler.path(), &target).unwrap();
|
||||
let cflags = compiler.args()
|
||||
.iter()
|
||||
.map(|s| s.to_str().unwrap())
|
||||
|
@ -80,7 +80,8 @@ fn build_libbacktrace(host: &str, target: &str) {
|
||||
}
|
||||
|
||||
let compiler = gcc::Config::new().get_compiler();
|
||||
let ar = build_helper::cc2ar(compiler.path(), target);
|
||||
// only msvc returns None for ar so unwrap is okay
|
||||
let ar = build_helper::cc2ar(compiler.path(), target).unwrap();
|
||||
let cflags = compiler.args().iter().map(|s| s.to_str().unwrap())
|
||||
.collect::<Vec<_>>().join(" ");
|
||||
run(Command::new("sh")
|
||||
|
Loading…
x
Reference in New Issue
Block a user