Browse Source

Merge topic 'macos-cache-rpath-install-namedir'

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

Acked-by: Kitware Robot <[email protected]>
Merge-request: !6543
Brad King 4 years ago
parent
commit
62834c0760
2 changed files with 20 additions and 0 deletions
  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;