Skip to content

cmComputeLinkInformation: track OBJECT library dependencies

In commit b6a53822 (Ninja: depend on language module information files directly, 2023-02-10), introduced via !8197 (merged), language-specific module information files (CMakeFiles/<target>.dir/<lang>Modules.json) files were added as real dependencies to the dyndep collation steps. Previously, the behavior was to inform the collator of all possible targets and search for the files manually ignoring those which did not exist with ordering enforced by depending on the linker output of all dependent targets. This behavior could lead to stale information being used (e.g., if a target stops providing any targets) and also did not reliably build everything needed on rebuilds. Afterwards, the internal computation changed the dependency from all possible targets to an exact set of "these targets might have modules" query, however one that did not include OBJECT libraries since do not have LinkEntry items internally (their objects are instead treated as source files).

As a stopgap measure, track OBJECT libraries in a separate list and query them explicitly when gathering targets which may have interesting information. Future work can add LinkEntry items to represent these targets once all LinkEntry consumers have been audited to make sure they are not surprised by any OBJECT library entries.

Fixes: #25112 (closed)


Cc: @scivision
Backport: release

Merge request reports