Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: build/config/compiler/BUILD.gn

Issue 1809273002: Enable whole-program virtual function optimization in LTO mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename one more instance of is_lto Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import("//build/config/android/config.gni") 5 import("//build/config/android/config.gni")
6 import("//build/config/chrome_build.gni") 6 import("//build/config/chrome_build.gni")
7 import("//build/config/compiler/compiler.gni") 7 import("//build/config/compiler/compiler.gni")
8 import("//build/config/nacl/config.gni") 8 import("//build/config/nacl/config.gni")
9 import("//build/toolchain/cc_wrapper.gni") 9 import("//build/toolchain/cc_wrapper.gni")
10 import("//build/toolchain/toolchain.gni")
10 11
11 if (current_cpu == "arm") { 12 if (current_cpu == "arm") {
12 import("//build/config/arm.gni") 13 import("//build/config/arm.gni")
13 } 14 }
14 if (current_cpu == "mipsel" || current_cpu == "mips64el") { 15 if (current_cpu == "mipsel" || current_cpu == "mips64el") {
15 import("//build/config/mips.gni") 16 import("//build/config/mips.gni")
16 } 17 }
17 if (is_win) { 18 if (is_win) {
18 import("//build/config/win/visual_studio_version.gni") 19 import("//build/config/win/visual_studio_version.gni")
19 } 20 }
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 cflags_cc += [ "-stdlib=libc++" ] 364 cflags_cc += [ "-stdlib=libc++" ]
364 ldflags += [ "-stdlib=libc++" ] 365 ldflags += [ "-stdlib=libc++" ]
365 if (!is_component_build && !is_asan) { 366 if (!is_component_build && !is_asan) {
366 ldflags += [ 367 ldflags += [
367 "-L", 368 "-L",
368 rebase_path("//third_party/libc++-static", root_build_dir), 369 rebase_path("//third_party/libc++-static", root_build_dir),
369 ] 370 ]
370 } 371 }
371 } 372 }
372 373
374 # Add flags for link-time optimization. These flags enable
375 # optimizations/transformations that require whole-program visibility at link
376 # time, so they need to be applied to all translation units, and we may end up
377 # with miscompiles if only part of the program is compiled with LTO flags. For
378 # that reason, we cannot allow targets to enable or disable these flags, for
379 # example by disabling the optimize configuration.
380 # TODO(pcc): Make this conditional on is_official_build rather than on gn
381 # flags for specific features.
382 if (!is_debug && (allow_posix_link_time_opt || is_cfi) && !is_nacl) {
383 cflags += [ "-flto" ]
384 ldflags += [ "-flto" ]
385
386 # Apply a lower LTO optimization level as the default is too slow.
387 if (is_linux) {
388 ldflags += [ "-Wl,-plugin-opt,O1" ]
389 } else if (is_mac) {
390 ldflags += [ "-Wl,-mllvm,-O1" ]
391 }
392
393 # Work-around for http://openradar.appspot.com/20356002
394 if (is_mac) {
395 ldflags += [ "-Wl,-all_load" ]
396 }
397
398 # Allows the linker to apply ICF to the LTO object file. Also, when targetin g
brettw 2016/04/06 06:25:36 80 cols.
pcc1 2016/04/06 21:42:01 Done.
399 # ARM, without this flag, LTO produces a .text section that is larger than t he
400 # maximum call displacement, preventing the linker from relocating calls
401 # (http://llvm.org/PR22999).
402 if (is_linux) {
403 ldflags += [ "-Wl,-plugin-opt,-function-sections" ]
404 }
405
406 # TODO(pcc): Make these flags work correctly with CFI.
407 if (!is_cfi) {
408 cflags += [
409 "-fwhole-program-vtables",
410
411 # TODO(pcc): Remove this flag once the upstream interface change
412 # (http://reviews.llvm.org/D18635) lands.
413 "-fwhole-program-vtables-blacklist=" +
414 rebase_path("//tools/cfi/blacklist.txt", root_build_dir),
415 ]
416 ldflags += [ "-fwhole-program-vtables" ]
417 }
418 }
419
373 # Pass the same C/C++ flags to the objective C/C++ compiler. 420 # Pass the same C/C++ flags to the objective C/C++ compiler.
374 cflags_objc += cflags_c 421 cflags_objc += cflags_c
375 cflags_objcc += cflags_cc 422 cflags_objcc += cflags_cc
376 423
377 # Assign any flags set for the C compiler to asmflags so that they are sent 424 # Assign any flags set for the C compiler to asmflags so that they are sent
378 # to the assembler. The Windows assembler takes different types of flags 425 # to the assembler. The Windows assembler takes different types of flags
379 # so only do so for posix platforms. 426 # so only do so for posix platforms.
380 if (is_posix) { 427 if (is_posix) {
381 asmflags += cflags 428 asmflags += cflags
382 asmflags += cflags_c 429 asmflags += cflags_c
(...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 if (symbol_level == 0) { 1369 if (symbol_level == 0) {
1323 configs = [ ":no_symbols" ] 1370 configs = [ ":no_symbols" ]
1324 } else if (symbol_level == 1) { 1371 } else if (symbol_level == 1) {
1325 configs = [ ":minimal_symbols" ] 1372 configs = [ ":minimal_symbols" ]
1326 } else if (symbol_level == 2) { 1373 } else if (symbol_level == 2) {
1327 configs = [ ":symbols" ] 1374 configs = [ ":symbols" ]
1328 } else { 1375 } else {
1329 assert(false) 1376 assert(false)
1330 } 1377 }
1331 } 1378 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698