Skip to content
  • Dan Liew's avatar
    Previously if the user configured their build but then changed · de5220ed
    Dan Liew authored
    LLVM_ENABLED_PROJECT and reconfigured it had no effect on what
    projects were actually built. This was very confusing behaviour. The
    reason for this is that the value of the `LLVM_TOOL_<PROJECT>_BUILD`
    variables are already set.
    
    The problem here is that we have two sources of truth:
    
    * The projects listed in LLVM_ENABLE_PROJECTS.
    * The projects enabled/disabled with LLVM_TOOL_<PROJECT>_BUILD.
    
    At configure time we have no real way of knowing which source of truth
    the user wants so we apply the following heuristic:
    
    If the user ever sets `LLVM_ENABLE_PROJECTS` in the CMakeCache then that
    is used as the single source of truth and we force the
    `LLVM_TOOL_<PROJECT>_BUILD` CMake cache variables to have the
    appropriate values that match the contents of the
    `LLVM_ENABLE_PROJECTS`. If the user never sets `LLVM_ENABLE_PROJECTS`
    then they can continue to use and set the `LLVM_TOOL_<PROJECT>_BUILD`
    variables as the "source of truth".
    
    The problem with this approach is that if the user ever tries to use
    both `LLVM_ENABLE_PROJECTS` and `LLVM_TOOL_<PROJECT>_BUILD` for the same
    build directory then any user set value for `LLVM_TOOL_<PROJECT>_BUILD`
    variables will get overwriten, likely without the user noticing.
    
    Hopefully the above shouldn't matter in practice because the
    LLVM_TOOL_<PROJECT>_BUILD variables are not documented, but
    LLVM_ENABLE_PROJECTS is.
    
    We should probably deprecate the `LLVM_TOOL_<PROJECT>_BUILD`
    variables at some point by turning them into to regular CMake
    variables that don't live in the CMake cache.
    
    Differential Revision: https://reviews.llvm.org/D57535
    
    llvm-svn: 353148
    de5220ed
Loading