Skip to content
  • Stephen Kelly's avatar
    Optimize genex evaluation for includes and defines. · 089fe1c1
    Stephen Kelly authored
    While porting boost to use these features, the generation step took
    too long (several minutes before I stopped it). The reason was that
    the boost libraries form a large interdependent mesh. The libraries
    list their dependencies in their INTERFACE such as:
    
     $<LINKED:boost::core>;$<LINKED:boost::config>;$<LINKED:boost::mpl>
    
    As boost::core already depends on the boost::config libraries, that
    expression has no impact on the end-content, as it is removed after
    the generation step. There is no DAG issue though, so the generator
    expression evaluation would fully evaluate them. In the case of the
    config library, it also depends on the core library, so all depends
    are followed through that again, despite the fact that they've just
    been evaluated. After this patch, the evaluation skips libraries if
    they have already been seen via depends or directly in the content.
    
    This patch keeps track of targets whose INTERFACE has been consumed
    already. The INCLUDE_DIRECTORIES and COMPILE_DEFINITIONS properties
    are whitelisted because repeated content will be stripped out later
    during generation. For other properties now and in the future, that
    may not be the case.
    089fe1c1