• Hans Wennborg's avatar
    [build] Only apply thin_lto_enable_optimizations to select targets · 1cda6e78
    Hans Wennborg authored
    Link-time optimization enables greater performance, but leads to
    significantly longer link times. This change turns off optimization
    in the link step except for select targets such as the actual browser
    executable/shared lib.
    
    Source files are still compiled with the usual optimization flags, and
    the ThinLTO mechanism is still used for all links; this only affects
    whether optimizations are also performed in the link step or not.
    
    The motivation is to speed up builds with thin_lto_enable_optimizations
    so that this can be enabled in official builds on all targets.
    
    Currently only ChromeOS and Android use thin_lto_enable_optimizations,
    and in terms of production builds this is a no-op since the optimization
    is applied to the shipping binaries as before. However it means that tests
    and auxiliary binaries won't be optimized during the link step.
    
    
    In terms of build speed, this reduces the link time of
    v8_context_snapshot_generator in a Linux build with
    thin_lto_enable_optimizations from 173 to 39 CPU minutes.
    
    On Windows, the link time of the same target goes from 2m50 to 1m40
    (wall-clock time). Linking unit_tests goes from 8m50 to 5m40.
    
    
    Build timings (best of two) of official "all" builds on my Win
    workstation:
    
    - Without ThinLTO:                25m
    - With ThinLTO opts:            4h36m
    - With ThinLTO opts+this patch: 2h39m
    
    With the ThinLTO cache enabled (requires fixing crbug.com/871962):
    - With ThinLTO opts+this patch: 1h52m
    
    Hopefully this patch (esp. if we can also fix the thinlto cache bug)
    would make win-official survive enabling thin_lto_enable_optimizations
    in official builds.
    
    
    Build timings of official "all" builds on my Linux workstation:
    (ThinLTO without opts is already enabled in official builds due to
    CFI, so I didn't measure with it disabled.)
    
    - With ThinLTO opts:              4h00m
    - With ThinLTO + this patch:      1h12m
    
    
    Note that this means test binaries and the shipping browser see
    different levels of optimization. We think that is the right trade-off:
    the difference should only matter in case of compiler/linker bugs, and
    we believe the browser binary gets enough testing (e.g. by perf bots)
    that such bugs will still be caught. Also to some extent this is
    already the case: most testing is done on non-official builds, and
    official builds use different optimizations (notably PGO).
    
    We have more ideas for speeding up linking of the
    non-link-time-optimized targets, but we hope this is enough to enable
    ThinLTO in official Windows and Linux builds.
    
    Bug: 110124, 1057737
    Change-Id: I4130c02d0b7fe7012e52c92e51a0b255b576ad2b
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2628955
    Commit-Queue: Hans Wennborg <hans@chromium.org>
    Reviewed-by: default avatarNico Weber <thakis@chromium.org>
    Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#845618}
    1cda6e78
BUILD.gn 52.5 KB