summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-01-24 19:11:04 (GMT)
committerBrad King <brad.king@kitware.com>2022-01-29 11:48:11 (GMT)
commit4e8f24e9778e4f5d69862efa109d7f8284d1a119 (patch)
tree6e461d2771cdaa21b672d2f0d6de351d08a95524
parent854e67985e25886770b4e76546afff9567ba99f0 (diff)
downloadCMake-4e8f24e9778e4f5d69862efa109d7f8284d1a119.zip
CMake-4e8f24e9778e4f5d69862efa109d7f8284d1a119.tar.gz
CMake-4e8f24e9778e4f5d69862efa109d7f8284d1a119.tar.bz2
PCH: Clear link interface cache when adding PCH object to it
On platforms using `CMAKE_LINK_PCH`, the implementation of `PRECOMPILE_HEADERS_REUSE_FROM`, when re-using the PCH from one object library in another, adds a PCH object file to the link interface. Clear any cached link interface to ensure it is used.
-rw-r--r--Source/cmGeneratorTarget.cxx6
-rw-r--r--Source/cmGeneratorTarget.h3
-rw-r--r--Source/cmLocalGenerator.cxx5
3 files changed, 14 insertions, 0 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 9a67821..d1c5819 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -749,6 +749,12 @@ void cmGeneratorTarget::ClearSourcesCache()
this->LinkImplMap.clear();
}
+void cmGeneratorTarget::ClearLinkInterfaceCache()
+{
+ this->LinkInterfaceMap.clear();
+ this->LinkInterfaceUsageRequirementsOnlyMap.clear();
+}
+
void cmGeneratorTarget::AddSourceCommon(const std::string& src, bool before)
{
this->SourceEntries.insert(
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index 71212c4..8134087 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -664,6 +664,9 @@ public:
*/
void ClearSourcesCache();
+ // Do not use. This is only for a specific call site with a FIXME comment.
+ void ClearLinkInterfaceCache();
+
void AddSource(const std::string& src, bool before = false);
void AddTracedSources(std::vector<std::string> const& srcs);
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 5b3aad3..77439d1 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -2615,10 +2615,15 @@ void cmLocalGenerator::AddPchDependencies(cmGeneratorTarget* target)
true);
} else if (reuseTarget->GetType() ==
cmStateEnums::OBJECT_LIBRARY) {
+ // FIXME: This can propagate more than one level, unlike
+ // the rest of the object files in an object library.
+ // Find another way to do this.
target->Target->AppendProperty(
"INTERFACE_LINK_LIBRARIES",
cmStrCat("$<$<CONFIG:", config,
">:$<LINK_ONLY:", pchSourceObj, ">>"));
+ // We updated the link interface, so ensure it is recomputed.
+ target->ClearLinkInterfaceCache();
}
}
} else {