Index: build/common.gypi |
diff --git a/build/common.gypi b/build/common.gypi |
index 0ad62ee597ca1d822e84d13ac99d0e0b126abc16..e0726b4097849bb691eb3c0672d03fbf4f6a4b98 100644 |
--- a/build/common.gypi |
+++ b/build/common.gypi |
@@ -637,6 +637,16 @@ |
# compiler. Always do this by default. |
'host_clang%': 1, |
+ # Variables to control Link-Time Optimizations (LTO). |
+ # Note: the variables must *not* be enabled at the same time. |
+ # In this case LTO would 'merge' the optimization flags |
+ # at link-time which would lead to all code be optimized with -O2. |
+ # Enable LTO on the code compiled with -Os. |
+ # See crbug.com/407544 |
+ 'use_lto%': 0, |
+ # Enable LTO on code compiled with -O2. |
+ 'use_lto_o2%': 0, |
+ |
'conditions': [ |
# A flag for POSIX platforms |
['OS=="win"', { |
@@ -1185,6 +1195,8 @@ |
'proprietary_codecs%': '<(proprietary_codecs)', |
'use_goma%': '<(use_goma)', |
'gomadir%': '<(gomadir)', |
+ 'use_lto%': '<(use_lto)', |
+ 'use_lto_o2%': '<(use_lto_o2)', |
'video_hole%': '<(video_hole)', |
'enable_load_completion_hacks%': '<(enable_load_completion_hacks)', |
'support_pre_M6_history_database%': '<(support_pre_M6_history_database)', |
@@ -2313,6 +2325,11 @@ |
}, { |
'use_seccomp_bpf%': 0, |
}], |
+ # Set component build with LTO until all tests pass. |
+ # This also reduces link time. |
+ ['use_lto==1', { |
+ 'component%': "shared_library", |
+ }], |
], |
# older history files use fts2 instead of fts3 |
@@ -3755,6 +3772,13 @@ |
'cflags': [ |
'-march=<(arm_arch)', |
], |
+ 'conditions': [ |
+ ['use_lto==1 or use_lto_o2==1', { |
+ 'ldflags': [ |
+ '-march=<(arm_arch)', |
+ ], |
+ }], |
+ ], |
}], |
['clang==1 and OS!="android"', { |
'cflags': [ |
@@ -3767,21 +3791,49 @@ |
'cflags': [ |
'-mtune=<(arm_tune)', |
], |
+ 'conditions': [ |
+ ['use_lto==1 or use_lto_o2==1', { |
+ 'ldflags': [ |
+ '-mtune=<(arm_tune)', |
+ ], |
+ }], |
+ ], |
}], |
['arm_fpu!=""', { |
'cflags': [ |
'-mfpu=<(arm_fpu)', |
], |
+ 'conditions': [ |
+ ['use_lto==1 or use_lto_o2==1', { |
+ 'ldflags': [ |
+ '-mfpu=<(arm_fpu)', |
+ ], |
+ }], |
+ ], |
}], |
['arm_float_abi!=""', { |
'cflags': [ |
'-mfloat-abi=<(arm_float_abi)', |
], |
+ 'conditions': [ |
+ ['use_lto==1 or use_lto_o2==1', { |
+ 'ldflags': [ |
+ '-mfloat-abi=<(arm_float_abi)', |
+ ], |
+ }], |
+ ], |
}], |
['arm_thumb==1', { |
'cflags': [ |
'-mthumb', |
], |
+ 'conditions': [ |
+ ['use_lto==1 or use_lto_o2==1', { |
+ 'ldflags': [ |
+ '-mthumb', |
+ ], |
+ }], |
+ ], |
}], |
['OS=="android"', { |
# Most of the following flags are derived from what Android |
@@ -5685,6 +5737,29 @@ |
['CXX.host_wrapper', '<(gomadir)/gomacc'], |
], |
}], |
+ ['use_lto==1', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'cflags': [ |
+ '-flto', |
+ '-ffat-lto-objects', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
+ ['use_lto==1 or use_lto_o2==1', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'ldflags': [ |
+ '-flto=32', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
], |
'xcode_settings': { |
# DON'T ADD ANYTHING NEW TO THIS BLOCK UNLESS YOU REALLY REALLY NEED IT! |