summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-07-24 12:31:45 (GMT)
committerKitware Robot <kwrobot@kitware.com>2023-07-24 12:31:53 (GMT)
commitf8c3fd0c45f9b1358f301371f3b37327f54641d0 (patch)
tree0e9447b426bc944478c03c795977a392e16d10e8 /Source
parentee9908df397faf6b02e29a0516f931d913440101 (diff)
parentb665966933c8656d1dafde06b8f29fe7e4901738 (diff)
downloadCMake-f8c3fd0c45f9b1358f301371f3b37327f54641d0.zip
CMake-f8c3fd0c45f9b1358f301371f3b37327f54641d0.tar.gz
CMake-f8c3fd0c45f9b1358f301371f3b37327f54641d0.tar.bz2
Merge topic 'dyndep-module-info-objlib-dependency'
b665966933 cmComputeLinkInformation: track OBJECT library dependencies a99b87a628 Tests/RunCMake/CXXModules: add a test for issue #25112 2870a67540 Tests/FortranOnly: add a test case for issue #25112 Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !8645
Diffstat (limited to 'Source')
-rw-r--r--Source/cmCommonTargetGenerator.cxx12
-rw-r--r--Source/cmComputeLinkInformation.cxx14
-rw-r--r--Source/cmComputeLinkInformation.h3
3 files changed, 24 insertions, 5 deletions
diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx
index e635dd9..1924235 100644
--- a/Source/cmCommonTargetGenerator.cxx
+++ b/Source/cmCommonTargetGenerator.cxx
@@ -170,9 +170,15 @@ std::vector<std::string> cmCommonTargetGenerator::GetLinkedTargetDirectories(
cmGlobalCommonGenerator* const gg = this->GlobalCommonGenerator;
if (cmComputeLinkInformation* cli =
this->GeneratorTarget->GetLinkInformation(config)) {
- cmComputeLinkInformation::ItemVector const& items = cli->GetItems();
- for (auto const& item : items) {
- cmGeneratorTarget const* linkee = item.Target;
+ std::vector<cmGeneratorTarget const*> targets;
+ for (auto const& item : cli->GetItems()) {
+ targets.push_back(item.Target);
+ }
+ for (auto const* target : cli->GetObjectLibrariesLinked()) {
+ targets.push_back(target);
+ }
+
+ for (auto const* linkee : targets) {
if (linkee &&
!linkee->IsImported()
// Skip targets that build after this one in a static lib cycle.
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index f4bb8b1..a50ce11 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -525,6 +525,12 @@ cmComputeLinkInformation::GetSharedLibrariesLinked() const
return this->SharedLibrariesLinked;
}
+const std::vector<const cmGeneratorTarget*>&
+cmComputeLinkInformation::GetObjectLibrariesLinked() const
+{
+ return this->ObjectLibrariesLinked;
+}
+
bool cmComputeLinkInformation::Compute()
{
// Skip targets that do not link.
@@ -1147,8 +1153,12 @@ void cmComputeLinkInformation::AddItem(LinkEntry const& entry)
this->AddItem(BT<std::string>(libName, item.Backtrace));
}
} else if (tgt->GetType() == cmStateEnums::OBJECT_LIBRARY) {
- // Ignore object library!
- // Its object-files should already have been extracted for linking.
+ if (!tgt->HaveCxx20ModuleSources() && !tgt->HaveFortranSources(config)) {
+ // Ignore object library!
+ // Its object-files should already have been extracted for linking.
+ } else {
+ this->ObjectLibrariesLinked.push_back(entry.Target);
+ }
} else {
// Decide whether to use an import library.
cmStateEnums::ArtifactType artifact = tgt->HasImportLibrary(config)
diff --git a/Source/cmComputeLinkInformation.h b/Source/cmComputeLinkInformation.h
index a4ada1f..8393a29 100644
--- a/Source/cmComputeLinkInformation.h
+++ b/Source/cmComputeLinkInformation.h
@@ -96,6 +96,8 @@ public:
std::string GetRPathString(bool for_install) const;
std::string GetChrpathString() const;
std::set<cmGeneratorTarget const*> const& GetSharedLibrariesLinked() const;
+ std::vector<cmGeneratorTarget const*> const& GetObjectLibrariesLinked()
+ const;
std::vector<cmGeneratorTarget const*> const& GetRuntimeDLLs() const
{
return this->RuntimeDLLs;
@@ -132,6 +134,7 @@ private:
std::vector<std::string> FrameworkPaths;
std::vector<std::string> RuntimeSearchPath;
std::set<cmGeneratorTarget const*> SharedLibrariesLinked;
+ std::vector<cmGeneratorTarget const*> ObjectLibrariesLinked;
std::vector<cmGeneratorTarget const*> RuntimeDLLs;
// Context information.