macOS: Speed up rpath install name dir lookup with a cache

Fixes: #20602
This commit is contained in:
Lukas Böger
2021-09-19 17:15:21 +01:00
committed by Brad King
parent 96c3849384
commit 2266e223c5
2 changed files with 20 additions and 0 deletions

View File

@@ -2169,6 +2169,21 @@ bool cmGeneratorTarget::IsImportedSharedLibWithoutSOName(
bool cmGeneratorTarget::HasMacOSXRpathInstallNameDir(
const std::string& config) const
{
TargetPtrToBoolMap& cache = this->MacOSXRpathInstallNameDirCache[config];
const auto lookup = cache.find(this->Target);
if (lookup != cache.cend()) {
return lookup->second;
}
const bool result = this->DetermineHasMacOSXRpathInstallNameDir(config);
cache[this->Target] = result;
return result;
}
bool cmGeneratorTarget::DetermineHasMacOSXRpathInstallNameDir(
const std::string& config) const
{
bool install_name_is_rpath = false;
bool macosx_rpath = false;

View File

@@ -866,6 +866,11 @@ private:
mutable std::map<cmSourceFile const*, std::string> Objects;
std::set<cmSourceFile const*> ExplicitObjectName;
using TargetPtrToBoolMap = std::unordered_map<cmTarget*, bool>;
mutable std::unordered_map<std::string, TargetPtrToBoolMap>
MacOSXRpathInstallNameDirCache;
bool DetermineHasMacOSXRpathInstallNameDir(const std::string& config) const;
// "config/language" is the key
mutable std::map<std::string, std::vector<std::string>> SystemIncludesCache;