| 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 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/toolchain/ccache.gni") | 8 import("//build/toolchain/ccache.gni") |
| 9 | 9 |
| 10 if (current_cpu == "arm") { | 10 if (current_cpu == "arm") { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 config("compiler") { | 95 config("compiler") { |
| 96 cflags = [] | 96 cflags = [] |
| 97 cflags_c = [] | 97 cflags_c = [] |
| 98 cflags_cc = [] | 98 cflags_cc = [] |
| 99 cflags_objc = [] | 99 cflags_objc = [] |
| 100 cflags_objcc = [] | 100 cflags_objcc = [] |
| 101 ldflags = [] | 101 ldflags = [] |
| 102 defines = [] | 102 defines = [] |
| 103 configs = [] | 103 configs = [] |
| 104 | 104 |
| 105 # System-specific flags. If your compiler flags apply to one of the |
| 106 # categories here, add it to the associated file to keep this shared config |
| 107 # smaller. |
| 108 if (is_win) { |
| 109 configs += [ "//build/config/win:compiler" ] |
| 110 } else if (is_android) { |
| 111 configs += [ "//build/config/android:compiler" ] |
| 112 } |
| 113 |
| 105 # In general, Windows is totally different, but all the other builds share | 114 # In general, Windows is totally different, but all the other builds share |
| 106 # some common GCC configuration. This section sets up Windows and the common | 115 # some common GCC configuration. |
| 107 # GCC flags, and then we handle the other non-Windows platforms specifically | 116 if (!is_win) { |
| 108 # below. | |
| 109 if (is_win) { | |
| 110 # Windows compiler flags setup. | |
| 111 # ----------------------------- | |
| 112 cflags += [ | |
| 113 "/Gy", # Enable function-level linking. | |
| 114 "/GS", # Enable buffer security checking. | |
| 115 "/FS", # Preserve previous PDB behavior. | |
| 116 "/bigobj", # Some of our files are bigger than the regular limits. | |
| 117 ] | |
| 118 | |
| 119 if (visual_studio_version == "2015") { | |
| 120 # Work around crbug.com/526851, bug in VS 2015 RTM compiler. | |
| 121 cflags += [ "/Zc:sizedDealloc-" ] | |
| 122 } | |
| 123 | |
| 124 # Force C/C++ mode for the given GN detected file type. This is necessary | |
| 125 # for precompiled headers where the same source file is compiled in both | |
| 126 # modes. | |
| 127 cflags_c += [ "/TC" ] | |
| 128 cflags_cc += [ "/TP" ] | |
| 129 | |
| 130 # Building with Clang on Windows is a work in progress and very | |
| 131 # experimental. See crbug.com/82385. | |
| 132 # Keep this in sync with the similar block in build/common.gypi | |
| 133 if (is_clang) { | |
| 134 cflags += [ | |
| 135 # Many files use intrinsics without including this header. | |
| 136 # TODO(hans): Fix those files, or move this to sub-GYPs. | |
| 137 "/FIIntrin.h", | |
| 138 ] | |
| 139 | |
| 140 if (visual_studio_version == "2013") { | |
| 141 cflags += [ "-fmsc-version=1800" ] | |
| 142 } else if (visual_studio_version == "2015") { | |
| 143 cflags += [ "-fmsc-version=1900" ] | |
| 144 } | |
| 145 | |
| 146 if (current_cpu == "x86") { | |
| 147 cflags += [ "-m32" ] | |
| 148 } else { | |
| 149 cflags += [ "-m64" ] | |
| 150 } | |
| 151 | |
| 152 if (exec_script("//build/win/use_ansi_codes.py", [], "trim string") == | |
| 153 "True") { | |
| 154 cflags += [ | |
| 155 # cmd.exe doesn't understand ANSI escape codes by default, | |
| 156 # so only enable them if something emulating them is around. | |
| 157 "-fansi-escape-codes", | |
| 158 ] | |
| 159 } | |
| 160 } | |
| 161 | |
| 162 if (is_syzyasan) { | |
| 163 # SyzyAsan needs /PROFILE turned on to produce appropriate pdbs. | |
| 164 assert(!is_win_fastlink, "/PROFILE and /DEBUG:FASTLINK are incompatible") | |
| 165 ldflags += [ "/PROFILE" ] | |
| 166 } | |
| 167 } else { | |
| 168 # Common GCC compiler flags setup. | 117 # Common GCC compiler flags setup. |
| 169 # -------------------------------- | 118 # -------------------------------- |
| 170 cflags += [ "-fno-strict-aliasing" ] # See http://crbug.com/32204 | 119 cflags += [ "-fno-strict-aliasing" ] # See http://crbug.com/32204 |
| 171 cflags_cc += [ | 120 cflags_cc += [ |
| 172 "-fno-threadsafe-statics", | 121 "-fno-threadsafe-statics", |
| 173 | 122 |
| 174 # Not exporting C++ inline functions can generally be applied anywhere | 123 # Not exporting C++ inline functions can generally be applied anywhere |
| 175 # so we do so here. Normal function visibility is controlled by | 124 # so we do so here. Normal function visibility is controlled by |
| 176 # //build/config/gcc:symbol_visibility_hidden. | 125 # //build/config/gcc:symbol_visibility_hidden. |
| 177 "-fvisibility-inlines-hidden", | 126 "-fvisibility-inlines-hidden", |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 # http://crbug.com/427584 | 543 # http://crbug.com/427584 |
| 595 cflags_cc += [ "-std=gnu++11" ] | 544 cflags_cc += [ "-std=gnu++11" ] |
| 596 } else if (!is_win && !is_nacl) { | 545 } else if (!is_win && !is_nacl) { |
| 597 # TODO(mcgrathr) - the NaCl GCC toolchain doesn't support either gnu++11 | 546 # TODO(mcgrathr) - the NaCl GCC toolchain doesn't support either gnu++11 |
| 598 # or c++11; we technically don't need this toolchain any more, but there | 547 # or c++11; we technically don't need this toolchain any more, but there |
| 599 # are still a few buildbots using it, so until those are turned off | 548 # are still a few buildbots using it, so until those are turned off |
| 600 # we need the !is_nacl clause and the (is_nacl && is_clang) clause, above. | 549 # we need the !is_nacl clause and the (is_nacl && is_clang) clause, above. |
| 601 cflags_cc += [ "-std=c++11" ] | 550 cflags_cc += [ "-std=c++11" ] |
| 602 } | 551 } |
| 603 | 552 |
| 604 # Android-specific flags setup. | |
| 605 # ----------------------------- | |
| 606 if (is_android) { | |
| 607 configs += [ "//build/config/android:compiler" ] | |
| 608 } | |
| 609 | |
| 610 # Pass the same C/C++ flags to the objective C/C++ compiler. | 553 # Pass the same C/C++ flags to the objective C/C++ compiler. |
| 611 cflags_objc += cflags_c | 554 cflags_objc += cflags_c |
| 612 cflags_objcc += cflags_cc | 555 cflags_objcc += cflags_cc |
| 613 } | 556 } |
| 614 | 557 |
| 615 config("compiler_arm_fpu") { | 558 config("compiler_arm_fpu") { |
| 616 if (current_cpu == "arm" && !is_ios && !is_nacl) { | 559 if (current_cpu == "arm" && !is_ios && !is_nacl) { |
| 617 cflags = [ "-mfpu=$arm_fpu" ] | 560 cflags = [ "-mfpu=$arm_fpu" ] |
| 618 } | 561 } |
| 619 } | 562 } |
| 620 | 563 |
| 621 # runtime_library ------------------------------------------------------------- | 564 # runtime_library ------------------------------------------------------------- |
| 622 # | 565 # |
| 623 # Sets the runtime library and associated options. | 566 # Sets the runtime library and associated options. |
| 624 # | 567 # |
| 625 # How do you determine what should go in here vs. "compiler" above? Consider if | 568 # How do you determine what should go in here vs. "compiler" above? Consider if |
| 626 # a target might choose to use a different runtime library (ignore for a moment | 569 # a target might choose to use a different runtime library (ignore for a moment |
| 627 # if this is possible or reasonable on your system). If such a target would want | 570 # if this is possible or reasonable on your system). If such a target would want |
| 628 # to change or remove your option, put it in the runtime_library config. If a | 571 # to change or remove your option, put it in the runtime_library config. If a |
| 629 # target wants the option regardless, put it in the compiler config. | 572 # target wants the option regardless, put it in the compiler config. |
| 630 | 573 |
| 631 config("runtime_library") { | 574 config("runtime_library") { |
| 632 cflags = [] | |
| 633 defines = [] | 575 defines = [] |
| 634 ldflags = [] | 576 configs = [] |
| 635 lib_dirs = [] | 577 |
| 636 libs = [] | 578 # System-specific flags. If your compiler flags apply to one of the |
| 579 # categories here, add it to the associated file to keep this shared config |
| 580 # smaller. |
| 581 if (is_win) { |
| 582 configs += [ "//build/config/win:runtime_library" ] |
| 583 } else if (is_android) { |
| 584 configs += [ "//build/config/android:runtime_library" ] |
| 585 } |
| 637 | 586 |
| 638 if (is_component_build) { | 587 if (is_component_build) { |
| 639 # Component mode: dynamic CRT. | |
| 640 defines += [ "COMPONENT_BUILD" ] | 588 defines += [ "COMPONENT_BUILD" ] |
| 641 if (is_win) { | |
| 642 # Since the library is shared, it requires exceptions or will give errors | |
| 643 # about things not matching, so keep exceptions on. | |
| 644 if (is_debug) { | |
| 645 cflags += [ "/MDd" ] | |
| 646 } else { | |
| 647 cflags += [ "/MD" ] | |
| 648 } | |
| 649 } | |
| 650 } else { | |
| 651 if (is_win && current_os != "win") { | |
| 652 # WindowsRT: use the dynamic CRT. | |
| 653 if (is_debug) { | |
| 654 cflags += [ "/MDd" ] | |
| 655 } else { | |
| 656 cflags += [ "/MD" ] | |
| 657 } | |
| 658 } else if (is_win) { | |
| 659 # Desktop Windows: static CRT. | |
| 660 if (is_debug) { | |
| 661 cflags += [ "/MTd" ] | |
| 662 } else { | |
| 663 cflags += [ "/MT" ] | |
| 664 } | |
| 665 } | |
| 666 } | |
| 667 | |
| 668 if (is_win) { | |
| 669 defines += [ | |
| 670 "__STD_C", | |
| 671 "_CRT_RAND_S", | |
| 672 "_CRT_SECURE_NO_DEPRECATE", | |
| 673 "_HAS_EXCEPTIONS=0", | |
| 674 "_SCL_SECURE_NO_DEPRECATE", | |
| 675 ] | |
| 676 } | |
| 677 | |
| 678 # Android standard library setup. | |
| 679 if (is_android) { | |
| 680 if (is_clang) { | |
| 681 # Work around incompatibilities between bionic and clang headers. | |
| 682 defines += [ | |
| 683 "__compiler_offsetof=__builtin_offsetof", | |
| 684 "nan=__builtin_nan", | |
| 685 ] | |
| 686 } | |
| 687 | |
| 688 defines += [ "__GNU_SOURCE=1" ] # Necessary for clone(). | |
| 689 | |
| 690 # TODO(jdduke) Re-enable on mips after resolving linking | |
| 691 # issues with libc++ (crbug.com/456380). | |
| 692 if (current_cpu != "mipsel" && current_cpu != "mips64el") { | |
| 693 ldflags += [ "-Wl,--warn-shared-textrel" ] | |
| 694 } | |
| 695 ldflags += [ "-nostdlib" ] | |
| 696 | |
| 697 # NOTE: The libc++ header include paths below are specified in cflags | |
| 698 # rather than include_dirs because they need to come after include_dirs. | |
| 699 # Think of them like system headers, but don't use '-isystem' because the | |
| 700 # arm-linux-androideabi-4.4.3 toolchain (circa Gingerbread) will exhibit | |
| 701 # strange errors. The include ordering here is important; change with | |
| 702 # caution. | |
| 703 cflags += [ | |
| 704 "-isystem" + | |
| 705 rebase_path("$android_libcpp_root/libcxx/include", root_build_dir), | |
| 706 "-isystem" + rebase_path( | |
| 707 "$android_ndk_root/sources/cxx-stl/llvm-libc++abi/libcxxabi/includ
e", | |
| 708 root_build_dir), | |
| 709 "-isystem" + | |
| 710 rebase_path("$android_ndk_root/sources/android/support/include", | |
| 711 root_build_dir), | |
| 712 ] | |
| 713 | |
| 714 lib_dirs += [ "$android_libcpp_root/libs/$android_app_abi" ] | |
| 715 libs += [ "$android_libcpp_library" ] | |
| 716 | |
| 717 if (current_cpu == "mipsel") { | |
| 718 libs += [ | |
| 719 # ld linker is used for mips Android, and ld does not accept library | |
| 720 # absolute path prefixed by "-l"; Since libgcc does not exist in mips | |
| 721 # sysroot the proper library will be linked. | |
| 722 # TODO(gordanac): Remove once gold linker is used for mips Android. | |
| 723 "gcc", | |
| 724 ] | |
| 725 } else { | |
| 726 libs += [ | |
| 727 # Manually link the libgcc.a that the cross compiler uses. This is | |
| 728 # absolute because the linker will look inside the sysroot if it's not. | |
| 729 rebase_path(android_libgcc_file), | |
| 730 ] | |
| 731 } | |
| 732 | |
| 733 libs += [ | |
| 734 "c", | |
| 735 "dl", | |
| 736 "m", | |
| 737 ] | |
| 738 | |
| 739 # Clang with libc++ does not require an explicit atomic library reference. | |
| 740 if (!is_clang) { | |
| 741 libs += [ "atomic" ] | |
| 742 } | |
| 743 } | 589 } |
| 744 } | 590 } |
| 745 | 591 |
| 746 # default_warning_flags collects all warning flags that are used by default. | 592 # default_warning_flags collects all warning flags that are used by default. |
| 747 # This is in a variable instead of a config so that it can be used in | 593 # This is in a variable instead of a config so that it can be used in |
| 748 # both chromium_code and no_chromium_code. This way these flags are guaranteed | 594 # both chromium_code and no_chromium_code. This way these flags are guaranteed |
| 749 # to appear on the compile command line after -Wall. | 595 # to appear on the compile command line after -Wall. |
| 750 | 596 |
| 751 default_warning_flags = [] | 597 default_warning_flags = [] |
| 752 default_warning_flags_cc = [] | 598 default_warning_flags_cc = [] |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1003 # | 849 # |
| 1004 # Non-chromium code is not guaranteed to compile cleanly with | 850 # Non-chromium code is not guaranteed to compile cleanly with |
| 1005 # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are | 851 # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are |
| 1006 # disabled, so only do that for Release build. | 852 # disabled, so only do that for Release build. |
| 1007 defines += [ "_FORTIFY_SOURCE=2" ] | 853 defines += [ "_FORTIFY_SOURCE=2" ] |
| 1008 } | 854 } |
| 1009 } | 855 } |
| 1010 cflags += default_warning_flags | 856 cflags += default_warning_flags |
| 1011 cflags_cc = default_warning_flags_cc | 857 cflags_cc = default_warning_flags_cc |
| 1012 } | 858 } |
| 859 |
| 1013 config("no_chromium_code") { | 860 config("no_chromium_code") { |
| 1014 cflags = [] | 861 cflags = [] |
| 1015 cflags_cc = [] | 862 cflags_cc = [] |
| 1016 defines = [] | 863 defines = [] |
| 1017 | 864 |
| 1018 if (is_win) { | 865 if (is_win) { |
| 1019 cflags += [ | 866 cflags += [ |
| 1020 "/W3", # Warning level 3. | 867 "/W3", # Warning level 3. |
| 1021 "/wd4800", # Disable warning when forcing value to bool. | 868 "/wd4800", # Disable warning when forcing value to bool. |
| 1022 "/wd4267", # TODO(jschuh): size_t to int. | 869 "/wd4267", # TODO(jschuh): size_t to int. |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1374 if (symbol_level == 0) { | 1221 if (symbol_level == 0) { |
| 1375 configs = [ ":no_symbols" ] | 1222 configs = [ ":no_symbols" ] |
| 1376 } else if (symbol_level == 1) { | 1223 } else if (symbol_level == 1) { |
| 1377 configs = [ ":minimal_symbols" ] | 1224 configs = [ ":minimal_symbols" ] |
| 1378 } else if (symbol_level == 2) { | 1225 } else if (symbol_level == 2) { |
| 1379 configs = [ ":symbols" ] | 1226 configs = [ ":symbols" ] |
| 1380 } else { | 1227 } else { |
| 1381 assert(false) | 1228 assert(false) |
| 1382 } | 1229 } |
| 1383 } | 1230 } |
| OLD | NEW |