Commit be8138a4 authored by Hans Wennborg's avatar Hans Wennborg Committed by Commit Bot

win: Link with lld instead of MSVC's link.exe by default

lld is LLVM's linker. It produces PE/COFF and PDB files just like
link.exe, but it's significantly faster and it can also handle LLVM's
internal representation, which will enable us to do link-time
optimization and control-flow integraty checks with Clang.

While lld is much faster at linking, it doesn't support incremental
links, meaning builds that only touch a few files and re-link a large
executable may become slower.

This is the first attempt at switching everything over, with the
purpose of gathering data and finding unknown unknowns. It's likely
temporary until something breaks.

is_win_fastlink is implicitly ignored when using lld, as lld without
fastlink is faster than link.exe with it.

Also switch the CrWinClangLLD bots on chromium.clang to use MSVC's
link.exe to make sure that configuration keeps working.

Bug: 792131
Change-Id: I0f115a78c33d69eadbd480f75c2a5d636e86483d
Reviewed-on: https://chromium-review.googlesource.com/983632
Commit-Queue: Nico Weber <thakis@chromium.org>
Reviewed-by: default avatarNico Weber <thakis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#551367}
parent 3600e215
...@@ -164,12 +164,12 @@ declare_args() { ...@@ -164,12 +164,12 @@ declare_args() {
# Linux or Fuchsia. # Linux or Fuchsia.
# TODO(pcc): Enable lld on more architectures on Linux. E.g. we probably need # TODO(pcc): Enable lld on more architectures on Linux. E.g. we probably need
# to fix some of crbug.com/742655 to enable it on ARM. # to fix some of crbug.com/742655 to enable it on ARM.
use_lld = is_clang && use_lld =
((is_win && host_os != "win") || is_fuchsia || is_clang &&
(use_thin_lto && target_os != "chromeos") || (is_win || is_fuchsia || (use_thin_lto && target_os != "chromeos") ||
(is_linux && current_cpu == "x64" && target_os != "chromeos") || (is_linux && current_cpu == "x64" && target_os != "chromeos") ||
(is_android && (current_cpu != "arm" || arm_version >= 7) && (is_android && (current_cpu != "arm" || arm_version >= 7) &&
current_cpu != "mipsel" && current_cpu != "mips64el")) current_cpu != "mipsel" && current_cpu != "mips64el"))
} }
declare_args() { declare_args() {
......
...@@ -114,10 +114,10 @@ ...@@ -114,10 +114,10 @@
'CrWinAsan(dll)': 'asan_clang_shared_v8_heap_x86_full_symbols_release', 'CrWinAsan(dll)': 'asan_clang_shared_v8_heap_x86_full_symbols_release',
'CrWinAsanCov': 'asan_clang_edge_fuzzer_static_v8_heap_x86_full_symbols_release', 'CrWinAsanCov': 'asan_clang_edge_fuzzer_static_v8_heap_x86_full_symbols_release',
'CrWinClangLLD': 'clang_tot_official_static_use_lld_x86', 'CrWinClangLLD': 'clang_tot_official_static_no_lld_x86',
'CrWinClangLLD64': 'clang_tot_shared_release_use_lld_dcheck', 'CrWinClangLLD64': 'clang_tot_shared_release_no_lld_dcheck',
'CrWinClngLLD64dbg': 'clang_tot_full_symbols_shared_debug_use_lld', 'CrWinClngLLD64dbg': 'clang_tot_full_symbols_shared_debug_no_lld',
'CrWinClngLLDdbg': 'clang_tot_full_symbols_shared_debug_use_lld_x86', 'CrWinClngLLDdbg': 'clang_tot_full_symbols_shared_debug_no_lld_x86',
'linux-win_cross-rel': 'clang_tot_win_release_cross', 'linux-win_cross-rel': 'clang_tot_win_release_cross',
'ToTAndroid': 'android_clang_tot_release_minimal_symbols', 'ToTAndroid': 'android_clang_tot_release_minimal_symbols',
'ToTAndroid64': 'android_clang_tot_release_arm64', 'ToTAndroid64': 'android_clang_tot_release_arm64',
...@@ -1118,24 +1118,24 @@ ...@@ -1118,24 +1118,24 @@
'clang_tot', 'shared', 'debug', 'clang_tot', 'shared', 'debug',
], ],
'clang_tot_full_symbols_shared_debug_use_lld': [ 'clang_tot_full_symbols_shared_debug_no_lld': [
'clang_tot', 'full_symbols', 'shared', 'debug', 'use_lld', 'clang_tot', 'full_symbols', 'shared', 'debug', 'no_lld',
], ],
'clang_tot_full_symbols_shared_debug_use_lld_x86': [ 'clang_tot_full_symbols_shared_debug_no_lld_x86': [
'clang_tot', 'full_symbols', 'shared', 'debug', 'use_lld', 'x86', 'clang_tot', 'full_symbols', 'shared', 'debug', 'no_lld', 'x86',
], ],
'clang_tot_shared_debug_x86': [ 'clang_tot_shared_debug_x86': [
'clang_tot', 'shared', 'debug', 'x86', 'clang_tot', 'shared', 'debug', 'x86',
], ],
'clang_tot_shared_release_use_lld_dcheck': [ 'clang_tot_shared_release_no_lld_dcheck': [
'clang_tot', 'minimal_symbols', 'shared', 'release', 'use_lld', 'dcheck_always_on', 'clang_tot', 'minimal_symbols', 'shared', 'release', 'no_lld', 'dcheck_always_on',
], ],
'clang_tot_official_static_use_lld_x86': [ 'clang_tot_official_static_no_lld_x86': [
'clang_tot', 'minimal_symbols', 'official', 'static', 'release', 'use_lld', 'x86', 'clang_tot', 'minimal_symbols', 'official', 'static', 'release', 'no_lld', 'x86',
], ],
'clang_tot_minimal_symbols_shared_release': [ 'clang_tot_minimal_symbols_shared_release': [
...@@ -2084,6 +2084,10 @@ ...@@ -2084,6 +2084,10 @@
'gn_args': 'use_lld=true', 'gn_args': 'use_lld=true',
}, },
'no_lld': {
'gn_args': 'use_lld=false',
},
'use_vaapi': { 'use_vaapi': {
'gn_args': 'use_vaapi=true', 'gn_args': 'use_vaapi=true',
}, },
......
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