Forráskód Böngészése

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

Fixes: #20602
Lukas Böger 4 éve
szülő
commit
2266e223c5
2 módosított fájl, 20 hozzáadás és 0 törlés
  1. 15 0
      Source/cmGeneratorTarget.cxx
  2. 5 0
      Source/cmGeneratorTarget.h

+ 15 - 0
Source/cmGeneratorTarget.cxx

@@ -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;

+ 5 - 0
Source/cmGeneratorTarget.h

@@ -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;