Skip to content

Commit

Permalink
Avoid recursive calls into try_get_compiler when items are in the cache
Browse files Browse the repository at this point in the history
  • Loading branch information
dpaoliello committed May 4, 2024
1 parent 2c85112 commit 763a468
Showing 1 changed file with 23 additions and 19 deletions.
42 changes: 23 additions & 19 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -601,26 +601,12 @@ impl Build {
/// `known_flag_support` field. If `is_flag_supported(flag)`
/// is called again, the result will be read from the hash table.
pub fn is_flag_supported(&self, flag: &str) -> Result<bool, Error> {
let target = self.get_target()?;

let mut compiler = {
let mut cfg = Build::new();
cfg.flag(flag)
.cargo_metadata(self.cargo_output.metadata)
.target(&target)
.opt_level(0)
.host(&self.get_host()?)
.debug(false)
.cpp(self.cpp)
.cuda(self.cuda);
if let Some(ref c) = self.compiler {
cfg.compiler(c.clone());
}
cfg.try_get_compiler()?
};
self.is_flag_supported_inner(flag, self.get_base_compiler()?.path())
}

fn is_flag_supported_inner(&self, flag: &str, compiler_path: &Path) -> Result<bool, Error> {
let compiler_flag = CompilerFlag {
compiler: compiler.path.clone().into(),
compiler: compiler_path.into(),
flag: flag.into(),
};

Expand All @@ -637,6 +623,21 @@ impl Build {
let out_dir = self.get_out_dir()?;
let src = self.ensure_check_file()?;
let obj = out_dir.join("flag_check");
let target = self.get_target()?;

let mut compiler = {
let mut cfg = Build::new();
cfg.flag(flag)
.compiler(compiler_path)
.cargo_metadata(self.cargo_output.metadata)
.target(&target)
.opt_level(0)
.host(&self.get_host()?)
.debug(false)
.cpp(self.cpp)
.cuda(self.cuda);
cfg.try_get_compiler()?
};

// Clang uses stderr for verbose output, which yields a false positive
// result if the CFLAGS/CXXFLAGS include -v to aid in debugging.
Expand Down Expand Up @@ -1805,7 +1806,10 @@ impl Build {
}

for flag in self.flags_supported.iter() {
if self.is_flag_supported(flag).unwrap_or(false) {
if self
.is_flag_supported_inner(flag, &cmd.path)
.unwrap_or(false)
{
cmd.push_cc_arg((**flag).into());
}
}
Expand Down

0 comments on commit 763a468

Please sign in to comment.