Skip to content
  • Chandler Carruth's avatar
    Clean up a pile of hacks in our CMake build relating to TableGen. · 97c069c1
    Chandler Carruth authored
    The first problem to fix is to stop creating synthetic *Table_gen
    targets next to all of the LLVM libraries. These had no real effect as
    CMake specifies that add_custom_command(OUTPUT ...) directives (what the
    'tablegen(...)' stuff expands to) are implicitly added as dependencies
    to all the rules in that CMakeLists.txt.
    
    These synthetic rules started to cause problems as we started more and
    more heavily using tablegen files from *subdirectories* of the one where
    they were generated. Within those directories, the set of tablegen
    outputs was still available and so these synthetic rules added them as
    dependencies of those subdirectories. However, they were no longer
    properly associated with the custom command to generate them. Most of
    the time this "just worked" because something would get to the parent
    directory first, and run tablegen there. Once run, the files existed and
    the build proceeded happily. However, as more and more subdirectories
    have started using this, the probability of this failing to happen has
    increased. Recently with the MC refactorings, it became quite common for
    me when touching a large enough number of targets.
    
    To add insult to injury, several of the backends *tried* to fix this by
    adding explicit dependencies back to the parent directory's tablegen
    rules, but those dependencies didn't work as expected -- they weren't
    forming a linear chain, they were adding another thread in the race.
    
    This patch removes these synthetic rules completely, and adds a much
    simpler function to declare explicitly that a collection of tablegen'ed
    files are referenced by other libraries. From that, we can add explicit
    dependencies from the smaller libraries (such as every architectures
    Desc library) on this and correctly form a linear sequence. All of the
    backends are updated to use it, sometimes replacing the existing attempt
    at adding a dependency, sometimes adding a previously missing dependency
    edge.
    
    Please let me know if this causes any problems, but it fixes a rather
    persistent and problematic source of build flakiness on our end.
    
    llvm-svn: 136023
    97c069c1
Loading