| OLD | NEW |
| 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 if (current_cpu == "arm") { | 6 if (current_cpu == "arm") { |
| 7 import("//build/config/arm.gni") | 7 import("//build/config/arm.gni") |
| 8 } | 8 } |
| 9 if (current_cpu == "mipsel" || current_cpu == "mips64el") { | 9 if (current_cpu == "mipsel" || current_cpu == "mips64el") { |
| 10 import("//build/config/mips.gni") | 10 import("//build/config/mips.gni") |
| 11 } | 11 } |
| 12 if (is_posix) { | 12 if (is_posix) { |
| 13 import("//build/config/gcc/gcc_version.gni") | 13 import("//build/config/gcc/gcc_version.gni") |
| 14 } | 14 } |
| 15 if (is_win) { | 15 if (is_win) { |
| 16 import("//build/config/win/visual_studio_version.gni") | 16 import("//build/config/win/visual_studio_version.gni") |
| 17 } | 17 } |
| 18 | 18 |
| 19 import("//build/toolchain/ccache.gni") | 19 import("//build/toolchain/ccache.gni") |
| 20 import("//build/config/sanitizers/sanitizers.gni") | 20 import("//build/config/sanitizers/sanitizers.gni") |
| 21 | 21 |
| 22 declare_args() { | |
| 23 if (is_win) { | |
| 24 # Whether the VS xtree header has been patched to disable warning 4702. If | |
| 25 # it has, then we don't need to disable 4702 (unreachable code warning). | |
| 26 # The patch is preapplied to the internal toolchain and hence all bots. | |
| 27 msvs_xtree_patched = false | |
| 28 } | |
| 29 } | |
| 30 | |
| 31 # default_include_dirs --------------------------------------------------------- | 22 # default_include_dirs --------------------------------------------------------- |
| 32 # | 23 # |
| 33 # This is a separate config so that third_party code (which would not use the | 24 # This is a separate config so that third_party code (which would not use the |
| 34 # source root and might have conflicting versions of some headers) can remove | 25 # source root and might have conflicting versions of some headers) can remove |
| 35 # this and specify their own include paths. | 26 # this and specify their own include paths. |
| 36 config("default_include_dirs") { | 27 config("default_include_dirs") { |
| 37 include_dirs = [ | 28 include_dirs = [ |
| 38 "//", | 29 "//", |
| 39 root_gen_dir, | 30 root_gen_dir, |
| 40 ] | 31 ] |
| 41 } | 32 } |
| 42 | 33 |
| 43 # TODO(GYP): is_ubsan, is_ubsan_vptr | |
| 44 if (!is_win) { | 34 if (!is_win) { |
| 45 using_sanitizer = is_asan || is_lsan || is_tsan || is_msan | 35 using_sanitizer = is_asan || is_lsan || is_tsan || is_msan |
| 46 } | 36 } |
| 47 | 37 |
| 48 # compiler --------------------------------------------------------------------- | 38 # compiler --------------------------------------------------------------------- |
| 49 # | 39 # |
| 50 # Base compiler configuration. | 40 # Base compiler configuration. |
| 51 # | 41 # |
| 52 # See also "runtime_library" below for related stuff and a discussion about | 42 # See also "runtime_library" below for related stuff and a discussion about |
| 53 # where stuff should go. Put warning related stuff in the "warnings" config. | 43 # where stuff should go. Put warning related stuff in the "warnings" config. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 66 # GCC flags, and then we handle the other non-Windows platforms specifically | 56 # GCC flags, and then we handle the other non-Windows platforms specifically |
| 67 # below. | 57 # below. |
| 68 if (is_win) { | 58 if (is_win) { |
| 69 # Windows compiler flags setup. | 59 # Windows compiler flags setup. |
| 70 # ----------------------------- | 60 # ----------------------------- |
| 71 cflags += [ | 61 cflags += [ |
| 72 "/Gy", # Enable function-level linking. | 62 "/Gy", # Enable function-level linking. |
| 73 "/GS", # Enable buffer security checking. | 63 "/GS", # Enable buffer security checking. |
| 74 "/FS", # Preserve previous PDB behavior. | 64 "/FS", # Preserve previous PDB behavior. |
| 75 ] | 65 ] |
| 76 | |
| 77 # Building with Clang on Windows is a work in progress and very | |
| 78 # experimental. See crbug.com/82385. | |
| 79 # Keep this in sync with the similar block in build/common.gypi | |
| 80 if (is_clang) { | |
| 81 cflags += [ | |
| 82 # Many files use intrinsics without including this header. | |
| 83 # TODO(hans): Fix those files, or move this to sub-GYPs. | |
| 84 "/FIIntrin.h", | |
| 85 ] | |
| 86 | |
| 87 if (visual_studio_version == "2013") { | |
| 88 cflags += [ "-fmsc-version=1800" ] | |
| 89 } else if (visual_studio_version == "2015") { | |
| 90 cflags += [ "-fmsc-version=1900" ] | |
| 91 } | |
| 92 | |
| 93 if (current_cpu == "x86") { | |
| 94 cflags += [ | |
| 95 "/fallback", | |
| 96 "-m32", | |
| 97 ] | |
| 98 } else { | |
| 99 cflags += [ "-m64" ] | |
| 100 } | |
| 101 if (exec_script("//build/win/use_ansi_codes.py", [], "trim string") == | |
| 102 "True") { | |
| 103 cflags += [ | |
| 104 # cmd.exe doesn't understand ANSI escape codes by default, | |
| 105 # so only enable them if something emulating them is around. | |
| 106 "-fansi-escape-codes", | |
| 107 ] | |
| 108 } | |
| 109 } | |
| 110 } else { | 66 } else { |
| 111 # Common GCC compiler flags setup. | 67 # Common GCC compiler flags setup. |
| 112 # -------------------------------- | 68 # -------------------------------- |
| 113 common_flags = [ | 69 common_flags = [ |
| 114 # Not exporting C++ inline functions can generally be applied anywhere | 70 # Not exporting C++ inline functions can generally be applied anywhere |
| 115 # so we do so here. Normal function visibility is controlled by | 71 # so we do so here. Normal function visibility is controlled by |
| 116 # //build/config/gcc:symbol_visibility_hidden. | 72 # //build/config/gcc:symbol_visibility_hidden. |
| 117 "-fvisibility-inlines-hidden", | 73 "-fvisibility-inlines-hidden", |
| 118 | 74 |
| 119 # We need the frame pointer for CPU and heap profiling. | 75 # We need the frame pointer for CPU and heap profiling. |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 cflags = [ "-mfpu=$arm_fpu" ] | 419 cflags = [ "-mfpu=$arm_fpu" ] |
| 464 } | 420 } |
| 465 } | 421 } |
| 466 | 422 |
| 467 # runtime_library ------------------------------------------------------------- | 423 # runtime_library ------------------------------------------------------------- |
| 468 # | 424 # |
| 469 # Sets the runtime library and associated options. | 425 # Sets the runtime library and associated options. |
| 470 # | 426 # |
| 471 # How do you determine what should go in here vs. "compiler" above? Consider if | 427 # How do you determine what should go in here vs. "compiler" above? Consider if |
| 472 # a target might choose to use a different runtime library (ignore for a moment | 428 # a target might choose to use a different runtime library (ignore for a moment |
| 473 # if this is possible or reasonable on your system). If such a target would want | 429 # if this is possible or reasonable on your system). If such a target would |
| 474 # to change or remove your option, put it in the runtime_library config. If a | 430 # want to change or remove your option, put it in the runtime_library config. |
| 475 # target wants the option regardless, put it in the compiler config. | 431 # If a target wants the option regardless, put it in the compiler config. |
| 476 | 432 |
| 477 config("runtime_library") { | 433 config("runtime_library") { |
| 478 cflags = [] | 434 cflags = [] |
| 479 defines = [] | 435 defines = [] |
| 480 ldflags = [] | 436 ldflags = [] |
| 481 lib_dirs = [] | 437 lib_dirs = [] |
| 482 libs = [] | 438 libs = [] |
| 483 | 439 |
| 484 if (is_component_build) { | 440 # Static CRT. |
| 485 # Component mode: dynamic CRT. | 441 if (is_win) { |
| 486 defines += [ "COMPONENT_BUILD" ] | 442 if (is_debug) { |
| 487 if (is_win) { | 443 cflags += [ "/MTd" ] |
| 488 # Since the library is shared, it requires exceptions or will give errors | 444 } else { |
| 489 # about things not matching, so keep exceptions on. | 445 cflags += [ "/MT" ] |
| 490 if (is_debug) { | |
| 491 cflags += [ "/MDd" ] | |
| 492 } else { | |
| 493 cflags += [ "/MD" ] | |
| 494 } | |
| 495 } | 446 } |
| 496 } else { | |
| 497 # Static CRT. | |
| 498 if (is_win) { | |
| 499 if (is_debug) { | |
| 500 cflags += [ "/MTd" ] | |
| 501 } else { | |
| 502 cflags += [ "/MT" ] | |
| 503 } | |
| 504 } | |
| 505 } | |
| 506 | |
| 507 if (is_win) { | |
| 508 defines += [ | 447 defines += [ |
| 509 "__STD_C", | 448 "__STD_C", |
| 510 "_CRT_RAND_S", | 449 "_CRT_RAND_S", |
| 511 "_CRT_SECURE_NO_DEPRECATE", | 450 "_CRT_SECURE_NO_DEPRECATE", |
| 512 "_HAS_EXCEPTIONS=0", | 451 "_HAS_EXCEPTIONS=0", |
| 513 "_SCL_SECURE_NO_DEPRECATE", | 452 "_SCL_SECURE_NO_DEPRECATE", |
| 514 ] | 453 ] |
| 515 } | 454 } |
| 516 | 455 |
| 517 # Android standard library setup. | 456 # Android standard library setup. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 } | 522 } |
| 584 | 523 |
| 585 # default_warning_flags collects all warning flags that are used by default. | 524 # default_warning_flags collects all warning flags that are used by default. |
| 586 # This is in a variable instead of a config so that it can be used in | 525 # This is in a variable instead of a config so that it can be used in |
| 587 # both chromium_code and no_chromium_code. This way these flags are guaranteed | 526 # both chromium_code and no_chromium_code. This way these flags are guaranteed |
| 588 # to appear on the compile command line after -Wall. | 527 # to appear on the compile command line after -Wall. |
| 589 | 528 |
| 590 default_warning_flags = [] | 529 default_warning_flags = [] |
| 591 default_warning_flags_cc = [] | 530 default_warning_flags_cc = [] |
| 592 if (is_win) { | 531 if (is_win) { |
| 593 if (!is_clang || current_cpu != "x86") { | 532 if (current_cpu != "x86") { |
| 594 default_warning_flags += [ "/WX" ] # Treat warnings as errors. | 533 default_warning_flags += [ "/WX" ] # Treat warnings as errors. |
| 595 } | 534 } |
| 596 | 535 |
| 597 default_warning_flags += [ | 536 default_warning_flags += [ |
| 598 # Warnings permanently disabled: | 537 # Permanent. |
| 599 | 538 "/wd4091", # typedef warning from dbghelp.h |
| 600 # TODO(GYP) The GYP build doesn't have this globally enabled but disabled | 539 # Investigate. |
| 601 # for a bunch of individual targets. Re-enable this globally when those | 540 "/wd4312", # int to pointer of greater size conversion. |
| 602 # targets are fixed. | 541 "/wd4838", # Narrowing conversion required. |
| 603 "/wd4018", # Comparing signed and unsigned values. | 542 "/wd4172", # Returning address of local. |
| 604 | 543 "/wd4005", # Redefinition of macros for PRId64 etc. |
| 605 # C4127: conditional expression is constant | 544 "/wd4311", # Pointer truncation from PVOID to DWORD. |
| 606 # This warning can in theory catch dead code and other problems, but | 545 "/wd4477", # Format string requires wchar_t* |
| 607 # triggers in far too many desirable cases where the conditional | |
| 608 # expression is either set by macros or corresponds some legitimate | |
| 609 # compile-time constant expression (due to constant template args, | |
| 610 # conditionals comparing the sizes of different types, etc.). Some of | |
| 611 # these can be worked around, but it's not worth it. | |
| 612 "/wd4127", | |
| 613 | |
| 614 # C4251: 'identifier' : class 'type' needs to have dll-interface to be | |
| 615 # used by clients of class 'type2' | |
| 616 # This is necessary for the shared library build. | |
| 617 "/wd4251", | |
| 618 | |
| 619 # C4351: new behavior: elements of array 'array' will be default | |
| 620 # initialized | |
| 621 # This is a silly "warning" that basically just alerts you that the | |
| 622 # compiler is going to actually follow the language spec like it's | |
| 623 # supposed to, instead of not following it like old buggy versions did. | |
| 624 # There's absolutely no reason to turn this on. | |
| 625 "/wd4351", | |
| 626 | |
| 627 # C4355: 'this': used in base member initializer list | |
| 628 # It's commonly useful to pass |this| to objects in a class' initializer | |
| 629 # list. While this warning can catch real bugs, most of the time the | |
| 630 # constructors in question don't attempt to call methods on the passed-in | |
| 631 # pointer (until later), and annotating every legit usage of this is | |
| 632 # simply more hassle than the warning is worth. | |
| 633 "/wd4355", | |
| 634 | |
| 635 # C4503: 'identifier': decorated name length exceeded, name was | |
| 636 # truncated | |
| 637 # This only means that some long error messages might have truncated | |
| 638 # identifiers in the presence of lots of templates. It has no effect on | |
| 639 # program correctness and there's no real reason to waste time trying to | |
| 640 # prevent it. | |
| 641 "/wd4503", | |
| 642 | |
| 643 # Warning C4589 says: "Constructor of abstract class ignores | |
| 644 # initializer for virtual base class." Disable this warning because it | |
| 645 # is flaky in VS 2015 RTM. It triggers on compiler generated | |
| 646 # copy-constructors in some cases. | |
| 647 "/wd4589", | |
| 648 | |
| 649 # C4611: interaction between 'function' and C++ object destruction is | |
| 650 # non-portable | |
| 651 # This warning is unavoidable when using e.g. setjmp/longjmp. MSDN | |
| 652 # suggests using exceptions instead of setjmp/longjmp for C++, but | |
| 653 # Chromium code compiles without exception support. We therefore have to | |
| 654 # use setjmp/longjmp for e.g. JPEG decode error handling, which means we | |
| 655 # have to turn off this warning (and be careful about how object | |
| 656 # destruction happens in such cases). | |
| 657 "/wd4611", | |
| 658 | |
| 659 # Warnings to evaluate and possibly fix/reenable later: | |
| 660 | |
| 661 "/wd4100", # Unreferenced formal function parameter. | |
| 662 "/wd4121", # Alignment of a member was sensitive to packing. | |
| 663 "/wd4244", # Conversion: possible loss of data. | |
| 664 "/wd4481", # Nonstandard extension: override specifier. | |
| 665 "/wd4505", # Unreferenced local function has been removed. | |
| 666 "/wd4510", # Default constructor could not be generated. | |
| 667 "/wd4512", # Assignment operator could not be generated. | |
| 668 "/wd4610", # Class can never be instantiated, constructor required. | |
| 669 "/wd4996", # Deprecated function warning. | |
| 670 ] | 546 ] |
| 671 | |
| 672 # VS xtree header file needs to be patched or 4702 (unreachable code | |
| 673 # warning) is reported if _HAS_EXCEPTIONS=0. Disable the warning if xtree is | |
| 674 # not patched. | |
| 675 if (!msvs_xtree_patched && | |
| 676 exec_script("../../win_is_xtree_patched.py", [], "value") == 0) { | |
| 677 default_warning_flags += [ "/wd4702" ] # Unreachable code. | |
| 678 } | |
| 679 | |
| 680 # Building with Clang on Windows is a work in progress and very | |
| 681 # experimental. See crbug.com/82385. | |
| 682 # Keep this in sync with the similar block in build/common.gypi | |
| 683 if (is_clang) { | |
| 684 default_warning_flags += [ | |
| 685 # TODO(hans): Make this list shorter eventually, http://crbug.com/504657 | |
| 686 "-Qunused-arguments", # http://crbug.com/504658 | |
| 687 "-Wno-microsoft", # http://crbug.com/505296 | |
| 688 "-Wno-switch", # http://crbug.com/505308 | |
| 689 "-Wno-unknown-pragmas", # http://crbug.com/505314 | |
| 690 "-Wno-unused-function", # http://crbug.com/505316 | |
| 691 "-Wno-unused-value", # http://crbug.com/505318 | |
| 692 "-Wno-unused-local-typedef", # http://crbug.com/411648 | |
| 693 ] | |
| 694 } | |
| 695 } else { | 547 } else { |
| 696 # Common GCC warning setup. | 548 # Common GCC warning setup. |
| 697 default_warning_flags += [ | 549 default_warning_flags += [ |
| 698 # Enables. | 550 # Enables. |
| 699 "-Wendif-labels", # Weird old-style text after an #endif. | 551 "-Wendif-labels", # Weird old-style text after an #endif. |
| 700 | 552 |
| 701 # Disables. | 553 # Disables. |
| 702 "-Wno-missing-field-initializers", # "struct foo f = {0};" | 554 "-Wno-missing-field-initializers", # "struct foo f = {0};" |
| 703 "-Wno-unused-parameter", # Unused function parameters. | 555 "-Wno-unused-parameter", # Unused function parameters. |
| 704 ] | 556 ] |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 } | 602 } |
| 751 } | 603 } |
| 752 | 604 |
| 753 # chromium_code --------------------------------------------------------------- | 605 # chromium_code --------------------------------------------------------------- |
| 754 # | 606 # |
| 755 # Toggles between higher and lower warnings for code that is (or isn't) | 607 # Toggles between higher and lower warnings for code that is (or isn't) |
| 756 # part of Chromium. | 608 # part of Chromium. |
| 757 | 609 |
| 758 config("chromium_code") { | 610 config("chromium_code") { |
| 759 if (is_win) { | 611 if (is_win) { |
| 760 cflags = [ "/W4" ] # Warning level 4. | 612 # TODO(zra): Enable higher warning levels. |
| 613 # cflags = [ "/W4" ] # Warning level 4. |
| 614 cflags = [] |
| 761 } else { | 615 } else { |
| 762 cflags = [ | 616 cflags = [ |
| 763 "-Wall", | 617 "-Wall", |
| 764 "-Wextra", | 618 "-Wextra", |
| 765 "-Werror", | 619 "-Werror", |
| 766 ] | 620 ] |
| 767 | 621 |
| 768 defines = [] | 622 defines = [] |
| 769 if (!using_sanitizer && (!is_linux || !is_clang)) { | 623 if (!using_sanitizer && (!is_linux || !is_clang)) { |
| 770 # _FORTIFY_SOURCE isn't really supported by Clang now, see | 624 # _FORTIFY_SOURCE isn't really supported by Clang now, see |
| 771 # http://llvm.org/bugs/show_bug.cgi?id=16821. | 625 # http://llvm.org/bugs/show_bug.cgi?id=16821. |
| 772 # It seems to work fine with Ubuntu 12 headers though, so use it in | 626 # It seems to work fine with Ubuntu 12 headers though, so use it in |
| 773 # official builds. | 627 # official builds. |
| 774 # | 628 # |
| 775 # Non-chromium code is not guaranteed to compile cleanly with | 629 # Non-chromium code is not guaranteed to compile cleanly with |
| 776 # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are | 630 # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are |
| 777 # disabled, so only do that for Release build. | 631 # disabled, so only do that for Release build. |
| 778 defines += [ "_FORTIFY_SOURCE=2" ] | 632 defines += [ "_FORTIFY_SOURCE=2" ] |
| 779 } | 633 } |
| 780 } | 634 } |
| 781 cflags += default_warning_flags | 635 cflags += default_warning_flags |
| 782 cflags_cc = default_warning_flags_cc | 636 cflags_cc = default_warning_flags_cc |
| 783 } | 637 } |
| 784 config("no_chromium_code") { | 638 config("no_chromium_code") { |
| 785 cflags = [] | 639 cflags = [] |
| 786 cflags_cc = [] | 640 cflags_cc = [] |
| 787 defines = [] | 641 defines = [] |
| 788 | 642 |
| 789 if (is_win) { | 643 if (is_win) { |
| 790 cflags += [ | |
| 791 "/W3", # Warning level 3. | |
| 792 "/wd4800", # Disable warning when forcing value to bool. | |
| 793 "/wd4267", # TODO(jschuh): size_t to int. | |
| 794 "/wd4996", # Deprecated function warning. | |
| 795 ] | |
| 796 defines += [ | 644 defines += [ |
| 797 "_CRT_NONSTDC_NO_WARNINGS", | 645 "_CRT_NONSTDC_NO_WARNINGS", |
| 798 "_CRT_NONSTDC_NO_DEPRECATE", | 646 "_CRT_NONSTDC_NO_DEPRECATE", |
| 799 ] | 647 ] |
| 800 } | 648 } |
| 801 | 649 |
| 802 cflags += default_warning_flags | 650 cflags += default_warning_flags |
| 803 cflags_cc += default_warning_flags_cc | 651 cflags_cc += default_warning_flags_cc |
| 804 } | 652 } |
| 805 | 653 |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 943 cflags = [ "/Zi" ] # Produce PDB file, no edit and continue. | 791 cflags = [ "/Zi" ] # Produce PDB file, no edit and continue. |
| 944 } | 792 } |
| 945 ldflags = [ "/DEBUG" ] | 793 ldflags = [ "/DEBUG" ] |
| 946 } else { | 794 } else { |
| 947 cflags = [ | 795 cflags = [ |
| 948 "-g3", | 796 "-g3", |
| 949 "-ggdb3", | 797 "-ggdb3", |
| 950 ] | 798 ] |
| 951 } | 799 } |
| 952 } | 800 } |
| OLD | NEW |