Skip to content
  • primiano's avatar
    Allow base to depend on allocator · 58e5f8b2
    primiano authored
    A smaller, yet key, step to move
    
    From: a situation where mainly executables (but not really) depend on
    allocator, and base needs dependencies (to tcmalloc) to be injected
    from content (which violates the ODR in component buids).
    
    To: a situation where only base depends on allocator and the other
    targets get recursively the required linked flags.
    
    In essence this CL is a more gradual approach to the bigger
    unreviewable crrev.com/1528013002.
    
    How is the transition handled?
    ------------------------------
    After this CL, the situation will be as follows:
    From a build time perspective base will also depend on allocator.
    This will not change anything substantial in static builds and introduce
    yet another (temporary) ODR violation in Linux component builds.
    The big change introduced by this CL is the fact that all the executable
    targets that depend on base (virtualy all) will also get another
    indirect dependency to allocator.
    
    In other words, after this CL executable targets will depend on
    allocator for two reasons:
     - Because they have an explicit dependency to it (the one I am going to
       get rid of in the immediate future).
     - Because this new transitive path I am introducing in base.
    
    Rationale of this approach
    --------------------------
    This allows to restrict the critical changes in a smaller CL easier to
    review, at the cost of the temporary double dependency on base.
    The good things are:
     - If something will break, this CL will be very easy to revert.
     - The next cleanups will be straightforward.
     - We have now smoke tests (crrev.com/1577883002) that will help us
       realize if something goes wrong.
    
    Next steps
    ----------
    In the next CLs I will:
     - Remove the content -> base injection layer, and let base directly use
       the tcmalloc functions it needs.
     - Remove all the traces of USE_TCMALLOC outside of base.
     - Start cleaning up the hundreds use_allocator conditionals in the gyp
       files in a way which is easier to review and produce zero ninja diffs
       (see crrev.com/1583973002 as an example)
    
    Ninja diffs caused by this change
    ---------------------------------
     ### Win, static build, GN:   https://paste.ee/p/hvcRp
     The missing targets (mostly tests) that previously were
     not depending on allocator, now get that by virtue of the transitive
     dependency.
    
     ### Win, static build, GYP:  https://paste.ee/p/AGuKR
     As above. Just GYP seems to emit the ninja files in a different,
     inlined, format.
    
     ### linux static build, GYP:  https://paste.ee/p/kmD7U
     As above. Plus the new targets also get the -Wl,-u (keep symbol)
     args as expected by allocator.gyp for the tcmalloc heap profiler.
    
     ### linux shared build, GYP: https://paste.ee/p/FHHNR
     Nothing relevant. Just I moved the dependency to allocator from
     base_unittests to base, and that is the only thing that reflects in the
     ninja files.
    
    BUG=564618
    
    Review URL: https://codereview.chromium.org/1584893002
    
    Cr-Commit-Position: refs/heads/master@{#370405}
    58e5f8b2