Commit 1ba5d611 authored by Peter Collingbourne's avatar Peter Collingbourne Committed by Commit Bot

build: Enable ThinLTO in official Android builds.

With this change we start building Chromium with ThinLTO when targeting
Android. In 64-bit Monochrome builds, the 32-bit binary is also built
with ThinLTO. This change is expected to reduce code size significantly
(in local measurements it reduced the size of MonochromePublic.apk by 2.3MB)
and is a prerequisite for enabling control flow integrity in official
builds.

Note that although this change enables ThinLTO, it does not enable
the cross-TU optimizations normally associated with LTO. Enabling
cross-TU optimizations is a separate project.

On my local machine (a Lenovo P920) libmonochrome.so link times increase
as follows:

         before  after (first link)  after (incremental links)
32-bit    18s          140s                     50s
64-bit    13s          107s                     41s

All known blockers have now been fixed. This CL is likely to uncover
unknown blockers.

Bug: 469376
Change-Id: I8981e17abd50bc5ca00440e0d74dda878c911749
Reviewed-on: https://chromium-review.googlesource.com/1150870
Commit-Queue: Peter Collingbourne <pcc@chromium.org>
Reviewed-by: default avatarNico Weber <thakis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#578195}
parent 68ed4d05
......@@ -592,7 +592,9 @@ config("compiler") {
# example by disabling the optimize configuration.
# TODO(pcc): Make this conditional on is_official_build rather than on gn
# flags for specific features.
if (!is_debug && use_thin_lto && current_toolchain == default_toolchain) {
if (!is_debug && use_thin_lto &&
(current_toolchain == default_toolchain ||
(is_android && current_toolchain == android_secondary_abi_toolchain))) {
assert(use_lld || target_os == "chromeos",
"gold plugin only supported with ChromeOS")
......
......@@ -43,7 +43,7 @@ declare_args() {
# Enables support for ThinLTO, which links 3x-10x faster than full LTO. See
# also http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html
use_thin_lto = is_cfi
use_thin_lto = is_cfi || (is_android && is_official_build)
# Tell VS to create a PDB that references information in .obj files rather
# than copying it all. This should improve linker performance. mspdbcmf.exe
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment