Skip to content
  • Ben Boeckel's avatar
    cmComputeLinkInformation: track OBJECT library dependencies · b6659669
    Ben Boeckel authored
    In commit b6a53822 (Ninja: depend on language module information files
    directly, 2023-02-10), introduced via !8197, 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
    b6659669