cmComputeLinkDepends: Add final dependency ordering to debug output

Print results of the main ordering algorithm before platform-specific
filtering by `CMAKE_<LANG>_LINK_LIBRARIES_PROCESSING`.
This commit is contained in:
Brad King
2024-09-18 18:29:51 -04:00
parent f792db4ca2
commit 9285a9dc9a
2 changed files with 46 additions and 17 deletions

View File

@@ -715,6 +715,11 @@ cmComputeLinkDepends::Compute()
// Compute the final ordering.
this->OrderLinkEntries();
// Display the final ordering.
if (this->DebugMode) {
this->DisplayOrderedEntries();
}
// Compute the final set of link entries.
EntriesProcessing entriesProcessing{ this->Target, this->LinkLanguage,
this->EntryList,
@@ -1649,26 +1654,49 @@ size_t cmComputeLinkDepends::ComputeComponentCount(NodeList const& nl)
return count;
}
namespace {
void DisplayLinkEntry(int& count, cmComputeLinkDepends::LinkEntry const& entry)
{
if (entry.Kind == cmComputeLinkDepends::LinkEntry::Group) {
if (entry.Item.Value == LG_ITEM_BEGIN) {
fprintf(stderr, " start group");
count = 4;
} else if (entry.Item.Value == LG_ITEM_END) {
fprintf(stderr, " end group");
count = 2;
} else {
fprintf(stderr, " group");
}
} else if (entry.Target) {
fprintf(stderr, "%*starget [%s]", count, "",
entry.Target->GetName().c_str());
} else {
fprintf(stderr, "%*sitem [%s]", count, "", entry.Item.Value.c_str());
}
if (entry.Feature != cmComputeLinkDepends::LinkEntry::DEFAULT) {
fprintf(stderr, ", feature [%s]", entry.Feature.c_str());
}
fprintf(stderr, "\n");
}
}
void cmComputeLinkDepends::DisplayOrderedEntries()
{
fprintf(stderr, "target [%s] link dependency ordering:\n",
this->Target->GetName().c_str());
int count = 2;
for (auto index : this->FinalLinkOrder) {
DisplayLinkEntry(count, this->EntryList[index]);
}
fprintf(stderr, "\n");
}
void cmComputeLinkDepends::DisplayFinalEntries()
{
fprintf(stderr, "target [%s] links to:\n", this->Target->GetName().c_str());
char space[] = " ";
fprintf(stderr, "target [%s] link line:\n", this->Target->GetName().c_str());
int count = 2;
for (LinkEntry const& lei : this->FinalLinkEntries) {
if (lei.Kind == LinkEntry::Group) {
fprintf(stderr, " %s group",
lei.Item.Value == "<LINK_GROUP>" ? "start" : "end");
count = lei.Item.Value == "<LINK_GROUP>" ? 4 : 2;
} else if (lei.Target) {
fprintf(stderr, "%*starget [%s]", count, space,
lei.Target->GetName().c_str());
} else {
fprintf(stderr, "%*sitem [%s]", count, space, lei.Item.Value.c_str());
}
if (lei.Feature != LinkEntry::DEFAULT) {
fprintf(stderr, ", feature [%s]", lei.Feature.c_str());
}
fprintf(stderr, "\n");
for (LinkEntry const& entry : this->FinalLinkEntries) {
DisplayLinkEntry(count, entry);
}
fprintf(stderr, "\n");
}

View File

@@ -199,6 +199,7 @@ private:
void VisitEntry(size_t index);
PendingComponent& MakePendingComponent(size_t component);
size_t ComputeComponentCount(NodeList const& nl);
void DisplayOrderedEntries();
void DisplayFinalEntries();
// Record of the original link line.