# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/android/config.gni")
if (cpu_arch == "arm") {
  import("//build/config/arm.gni")
}
if (is_posix) {
  import("//build/config/gcc/gcc_version.gni")
}

import("//build/toolchain/ccache.gni")

declare_args() {
  # Normally, Android builds are lightly optimized, even for debug builds, to
  # keep binary size down. Setting this flag to true disables such optimization
  android_full_debug = false

  # Whether to use the binary binutils checked into third_party/binutils.
  # These are not multi-arch so cannot be used except on x86 and x86-64 (the
  # only two architectures that are currently checked in). Turn this off when
  # you are using a custom toolchain and need to control -B in cflags.
  linux_use_bundled_binutils = is_linux && cpu_arch == "x64"

  # Compile in such a way as to enable profiling of the generated code. For
  # example, don't omit the frame pointer and leave in symbols.
  enable_profiling = false

  # Compile in such a way as to make it possible for the profiler to unwind full
  # stack frames. Setting this flag has a large effect on the performance of the
  # generated code than just setting profiling, but gives the profiler more
  # information to analyze.
  # Requires profiling to be set to true.
  enable_full_stack_frames_for_profiling = false
}

use_gold = is_linux && cpu_arch == "x64"

if (!is_win) {
  # linux_use_debug_fission: whether to use split DWARF debug info
  # files. This can reduce link time significantly, but is incompatible
  # with some utilities such as icecc and ccache. Requires gold and
  # gcc >= 4.8 or clang.
  # http://gcc.gnu.org/wiki/DebugFission
  use_debug_fission = use_gold && linux_use_bundled_binutils && !use_ccache
}

# default_include_dirs ---------------------------------------------------------
#
# This is a separate config so that third_party code (which would not use the
# source root and might have conflicting versions of some headers) can remove
# this and specify their own include paths.
config("default_include_dirs") {
  include_dirs = [
    "//",
    root_gen_dir,
  ]
}

# TODO(GYP): is_ubsan, is_ubsan_vptr
if (!is_win) {
  using_sanitizer = is_asan || is_lsan || is_tsan || is_msan
}

# compiler ---------------------------------------------------------------------
#
# Base compiler configuration.
#
# See also "runtime_library" below for related stuff and a discusison about
# where stuff should go. Put warning related stuff in the "warnings" config.

config("compiler") {
  cflags = []
  cflags_c = []
  cflags_cc = []
  ldflags = []
  defines = []

  # In general, Windows is totally different, but all the other builds share
  # some common GCC configuration. This section sets up Windows and the common
  # GCC flags, and then we handle the other non-Windows platforms specifically
  # below.
  if (is_win) {
    # Windows compiler flags setup.
    # -----------------------------
    cflags += [
      "/Gy",  # Enable function-level linking.
      "/GS",  # Enable buffer security checking.
      "/FS",  # Preserve previous PDB behavior.
    ]
    if (is_component_build) {
      cflags += [ "/EHsc" ]  # Assume C functions can't throw exceptions and don't catch
                             # structured exceptions (only C++ ones).
    }
  } else {
    # Common GCC compiler flags setup.
    # --------------------------------
    cflags += [ "-fno-strict-aliasing" ]  # See http://crbug.com/32204
    cflags_cc += [
      "-fno-threadsafe-statics",

      # Not exporting C++ inline functions can generally be applied anywhere
      # so we do so here. Normal function visibility is controlled by
      # //build/config/gcc:symbol_visibility_hidden.
      "-fvisibility-inlines-hidden",
    ]

    # Stack protection.
    if (is_mac) {
      cflags += [ "-fstack-protector-all" ]
    } else if (is_linux) {
      cflags += [
        "-fstack-protector",
        "--param=ssp-buffer-size=4",
      ]
    }

    # Linker warnings.
    if (!(is_chromeos && cpu_arch == "arm") && !is_mac) {
      # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580
      ldflags += [ "-Wl,--fatal-warnings" ]
    }

    # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer and
    # MemorySanitizer
    if (using_sanitizer) {
      cflags += [
        "-fno-omit-frame-pointer",
        "-gline-tables-only",
      ]
    }
    if (is_asan) {
      cflags += [ "-fsanitize=address" ]
      if (is_mac) {
        cflags += [ "-mllvm -asan-globals=0" ]  # http://crbug.com/352073
        # TODO(GYP): deal with mac_bundles.
      }
    }
  }

  if (is_clang && is_debug) {
    # Allow comparing the address of references and 'this' against 0
    # in debug builds. Technically, these can never be null in
    # well-defined C/C++ and Clang can optimize such checks away in
    # release builds, but they may be used in asserts in debug builds.
    cflags_cc += [
      "-Wno-undefined-bool-conversion",
      "-Wno-tautological-undefined-compare",
    ]
  }

  if (is_clang && !is_win) {
    # This is here so that all files get recompiled after a clang roll and
    # when turning clang on or off. (defines are passed via the command line,
    # and build system rebuild things when their commandline changes). Nothing
    # should ever read this define.
    defines += [ "CR_CLANG_REVISION=" +
                 exec_script("//tools/clang/scripts/posix-print-revision.py",
                             [],
                             "value") ]
  }

  # Mac-specific compiler flags setup.
  # ----------------------------------
  if (is_mac || is_ios) {
    # These flags are shared between the C compiler and linker.
    common_mac_flags = []

    # CPU architecture.
    if (cpu_arch == "x64") {
      common_mac_flags += [
        "-arch",
        "x86_64",
      ]
    } else if (cpu_arch == "x86") {
      common_mac_flags += [
        "-arch",
        "i386",
      ]
    }

    cflags += common_mac_flags

    # Without this, the constructors and destructors of a C++ object inside
    # an Objective C struct won't be called, which is very bad.
    cflags_objcc = [ "-fobjc-call-cxx-cdtors" ]

    cflags_c += [ "-std=c99" ]
    cflags_cc += [ "-std=gnu++11" ]

    ldflags += common_mac_flags
  } else if (is_posix) {
    # Non-Mac Posix compiler flags setup.
    # -----------------------------------
    if (gcc_version >= 48) {
      cflags_cc += [ "-std=gnu++11" ]
    }

    if (enable_profiling && !is_debug) {
      # The GYP build spams this define into every compilation unit, as we do
      # here, but it only appears to be used in base and a couple other places.
      # TODO(abarth): Should we move this define closer to where it's used?
      defines += [ "ENABLE_PROFILING" ]

      cflags += [
        "-fno-omit-frame-pointer",
        "-g",
      ]

      if (enable_full_stack_frames_for_profiling) {
        cflags += [
          "-fno-inline",
          "-fno-optimize-sibling-calls",
        ]
      }
    }

    # CPU architecture. We may or may not be doing a cross compile now, so for
    # simplicity we always explicitly set the architecture.
    if (cpu_arch == "x64") {
      cflags += [
        "-m64",
        "-march=x86-64",
      ]
      ldflags += [ "-m64" ]
    } else if (cpu_arch == "x86") {
      cflags += [ "-m32" ]
      ldflags += [ "-m32" ]
      if (is_clang) {
        cflags += [
          # Else building libyuv gives clang's register allocator issues,
          # see llvm.org/PR15798 / crbug.com/233709
          "-momit-leaf-frame-pointer",

          # Align the stack on 16-byte boundaries, http://crbug.com/418554.
          "-mstack-alignment=16",
          "-mstackrealign",
        ]
      }
    } else if (cpu_arch == "arm") {
      # Don't set the compiler flags for the WebView build. These will come
      # from the Android build system.
      if (!is_android_webview_build) {
        cflags += [
          "-march=$arm_arch",
          "-mfloat-abi=$arm_float_abi",
        ]
        if (arm_tune != "") {
          cflags += [ "-mtune=$arm_tune" ]
        }
        if (arm_use_thumb) {
          cflags += [ "-mthumb" ]
          if (is_android && !is_clang) {  # Clang doesn't support this option.
            cflags += [ "-mthumb-interwork" ]
          }
        }
        if (!is_clang) {
          # Clang doesn't support these flags.
          cflags += [
            # The tree-sra optimization (scalar replacement for
            # aggregates enabling subsequent optimizations) leads to
            # invalid code generation when using the Android NDK's
            # compiler (r5-r7). This can be verified using
            # webkit_unit_tests' WTF.Checked_int8_t test.
            "-fno-tree-sra",

            # The following option is disabled to improve binary
            # size and performance in gcc 4.9.
            "-fno-caller-saves",
          ]
        }
      }
    }

    defines += [ "_FILE_OFFSET_BITS=64" ]

    # Omit unwind support in official builds to save space. We can use breakpad
    # for these builds.
    if (is_chrome_branded && is_official_build) {
      cflags += [
        "-fno-unwind-tables",
        "-fno-asynchronous-unwind-tables",
      ]
    } else {
      cflags += [ "-funwind-tables" ]
    }
  }

  # Linux/Android common flags setup.
  # ---------------------------------
  if (is_linux || is_android) {
    cflags += [
      "-fPIC",
      "-pipe",  # Use pipes for communicating between sub-processes. Faster.
    ]

    ldflags += [
      "-fPIC",
      "-Wl,-z,noexecstack",
      "-Wl,-z,now",
      "-Wl,-z,relro",
    ]
  }

  # Linux-specific compiler flags setup.
  # ------------------------------------
  if (is_linux) {
    cflags += [ "-pthread" ]
    ldflags += [ "-pthread" ]
  }
  if (use_gold) {
    # Use gold for linking on 64-bit Linux only (on 32-bit it runs out of
    # address space, and it doesn't support cross-compiling).
    gold_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin",
                            root_build_dir)
    ldflags += [
      "-B$gold_path",

      # Newer gccs and clangs support -fuse-ld, use the flag to force gold
      # selection.
      # gcc -- http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Optimize-Options.html
      "-fuse-ld=gold",

      # TODO(brettw) common.gypi has this only for target toolset.
      "-Wl,--icf=safe",

      # Experimentation found that using four linking threads
      # saved ~20% of link time.
      # https://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/281527606915bb36
      # Only apply this to the target linker, since the host
      # linker might not be gold, but isn't used much anyway.
      # TODO(raymes): Disable threading because gold is frequently
      # crashing on the bots: crbug.com/161942.
      #"-Wl,--threads",
      #"-Wl,--thread-count=4",
    ]
  }

  if (linux_use_bundled_binutils) {
    binutils_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin",
                                root_build_dir)
    cflags += [ "-B$binutils_path" ]
  }

  # Clang-specific compiler flags setup.
  # ------------------------------------
  if (is_clang) {
    cflags += [ "-fcolor-diagnostics" ]
    cflags_cc += [ "-std=gnu++11" ]
  }

  # Android-specific flags setup.
  # -----------------------------
  if (is_android) {
    cflags += [
      "-ffunction-sections",
      "-funwind-tables",
      "-fno-short-enums",
    ]
    if (!is_clang) {
      # Clang doesn't support these flags.
      cflags += [ "-finline-limit=64" ]
    }
    if (is_android_webview_build) {
      # Android predefines this as 1; undefine it here so Chromium can redefine
      # it later to be 2 for chromium code and unset for third party code. This
      # works because cflags are added before defines.
      # TODO(brettw) the above comment seems incorrect. We specify defines
      # before cflags on our compiler command lines.
      cflags += [ "-U_FORTIFY_SOURCE" ]
    }

    if (is_asan) {
      # Android build relies on -Wl,--gc-sections removing unreachable code.
      # ASan instrumentation for globals inhibits this and results in a library
      # with unresolvable relocations.
      # TODO(eugenis): find a way to reenable this.
      cflags += [ "-mllvm -asan-globals=0" ]
    }

    defines += [ "ANDROID" ]
    if (!is_android_webview_build) {
      # The NDK has these things, but doesn't define the constants
      # to say that it does. Define them here instead.
      defines += [ "HAVE_SYS_UIO_H" ]
    }

    # Use gold for Android for most CPU architectures.
    if (cpu_arch == "x86" || cpu_arch == "x64" || cpu_arch == "arm") {
      ldflags += [ "-fuse-ld=gold" ]
      if (is_clang) {
        # Let clang find the ld.gold in the NDK.
        ldflags += [ "--gcc-toolchain=" +
                     rebase_path(android_toolchain_root, root_build_dir) ]
      }
    }

    ldflags += [
      "-Wl,--no-undefined",

      # Don't export symbols from statically linked libraries.
      "-Wl,--exclude-libs=ALL",
    ]
    if (cpu_arch == "arm") {
      ldflags += [
        # Enable identical code folding to reduce size.
        "-Wl,--icf=safe",
      ]
    }

    if (is_clang) {
      if (cpu_arch == "arm") {
        cflags += [ "-target arm-linux-androideabi" ]
        ldflags += [ "-target arm-linux-androideabi" ]
      } else if (cpu_arch == "x86") {
        cflags += [ "-target x86-linux-androideabi" ]
        ldflags += [ "-target x86-linux-androideabi" ]
      }
    }
  }
}

config("compiler_arm_fpu") {
  if (cpu_arch == "arm" && !is_android_webview_build) {
    cflags = [ "-mfpu=$arm_fpu" ]
  }
}

# runtime_library -------------------------------------------------------------
#
# Sets the runtime library and associated options.
#
# How do you determine what should go in here vs. "compiler" above? Consider if
# a target might choose to use a different runtime library (ignore for a moment
# if this is possible or reasonable on your system). If such a target would want
# to change or remove your option, put it in the runtime_library config. If a
# target wants the option regardless, put it in the compiler config.

config("runtime_library") {
  cflags = []
  defines = []
  ldflags = []
  lib_dirs = []
  libs = []

  if (is_component_build) {
    # Component mode: dynamic CRT.
    defines += [ "COMPONENT_BUILD" ]
    if (is_win) {
      # Since the library is shared, it requires exceptions or will give errors
      # about things not matching, so keep exceptions on.
      if (is_debug) {
        cflags += [ "/MDd" ]
      } else {
        cflags += [ "/MD" ]
      }
    }
  } else {
    # Static CRT.
    if (is_win) {
      # We don't use exceptions, and when we link statically we can just get
      # rid of them entirely.
      defines += [ "_HAS_EXCEPTIONS=0" ]
      if (is_debug) {
        cflags += [ "/MTd" ]
      } else {
        cflags += [ "/MT" ]
      }
    }
  }

  if (is_win) {
    defines += [
      "__STD_C",
      "__STDC_CONSTANT_MACROS",
      "__STDC_FORMAT_MACROS",
      "_CRT_RAND_S",
      "_CRT_SECURE_NO_DEPRECATE",
      "_SCL_SECURE_NO_DEPRECATE",
    ]
  }

  # Stlport setup. Android uses a different (smaller) version of the STL.
  if (is_android) {
    if (is_clang) {
      # Work around incompatibilities between bionic and clang headers.
      defines += [
        "__compiler_offsetof=__builtin_offsetof",
        "nan=__builtin_nan",
      ]
    }

    defines += [
      "USE_STLPORT=1",
      "_STLP_USE_PTR_SPECIALIZATIONS=1",
      "__GNU_SOURCE=1",  # Necessary for clone().
    ]

    ldflags += [
      "-Wl,--warn-shared-textrel",
      "-nostdlib",
    ]

    # NOTE: The stlport header include paths below are specified in cflags
    # rather than include_dirs because they need to come after include_dirs.
    # Think of them like system headers, but don't use '-isystem' because the
    # arm-linux-androideabi-4.4.3 toolchain (circa Gingerbread) will exhibit
    # strange errors. The include ordering here is important; change with
    # caution.
    android_stlport_root = "$android_ndk_root/sources/cxx-stl/stlport"

    cflags += [ "-isystem" +
                rebase_path("$android_stlport_root/stlport", root_build_dir) ]
    lib_dirs += [ "$android_stlport_root/libs/$android_app_abi" ]

    if (component_mode == "shared_library") {
      libs += [ "stlport_shared" ]
    } else {
      libs += [ "stlport_static" ]
    }

    if (cpu_arch == "mipsel") {
      libs += [
        # ld linker is used for mips Android, and ld does not accept library
        # absolute path prefixed by "-l"; Since libgcc does not exist in mips
        # sysroot the proper library will be linked.
        # TODO(gordanac): Remove once gold linker is used for mips Android.
        "gcc",
      ]
    } else {
      libs += [
        # Manually link the libgcc.a that the cross compiler uses. This is
        # absolute because the linker will look inside the sysroot if it's not.
        rebase_path(android_libgcc_file),
      ]
    }

    libs += [
      "c",
      "dl",
      "m",
    ]
  }
}

# chromium_code ---------------------------------------------------------------
#
# Toggles between higher and lower warnings for code that is (or isn't)
# part of Chromium.

config("chromium_code") {
  if (is_win) {
    cflags = [ "/W4" ]  # Warning level 4.
  } else {
    cflags = [
      "-Wall",

      # GCC turns on -Wsign-compare for C++ under -Wall, but clang doesn't,
      # so we specify it explicitly.
      # TODO(fischman): remove this if http://llvm.org/PR10448 obsoletes it.
      # http://code.google.com/p/chromium/issues/detail?id=90453
      "-Wsign-compare",
    ]

    # In Chromium code, we define __STDC_foo_MACROS in order to get the
    # C99 macros on Mac and Linux.
    defines = [
      "__STDC_CONSTANT_MACROS",
      "__STDC_FORMAT_MACROS",
    ]
  }
}
config("no_chromium_code") {
  cflags = []
  cflags_cc = []
  defines = []

  if (is_win) {
    cflags += [
      "/W3",  # Warning level 3.
      "/wd4800",  # Disable warning when forcing value to bool.
      "/wd4267",  # TODO(jschuh): size_t to int.
      "/wd4996",  # Deprecated function warning.
    ]
    defines += [
      "_CRT_NONSTDC_NO_WARNINGS",
      "_CRT_NONSTDC_NO_DEPRECATE",
    ]
  }

  if (is_linux) {
    # Don't warn about ignoring the return value from e.g. close(). This is
    # off by default in some gccs but on by default in others. BSD systems do
    # not support this option, since they are usually using gcc 4.2.1, which
    # does not have this flag yet.
    cflags += [ "-Wno-unused-result" ]
  }

  if (is_linux || is_android) {
    cflags += [
      # Don't warn about printf format problems. This is off by default in gcc
      # but on in Ubuntu's gcc(!).
      "-Wno-format",
    ]
    cflags_cc += [
      # Don't warn about hash_map in third-party code.
      "-Wno-deprecated",
    ]
  }

  if (is_android_webview_build) {
    # There is a class of warning which:
    #  1) Android always enables and also treats as errors
    #  2) Chromium ignores in third party code
    # So we re-enable those warnings when building Android.
    cflags += [
      "-Wno-address",
      "-Wno-format-security",
      "-Wno-return-type",
      "-Wno-sequence-point",
    ]
    cflags_cc += [ "-Wno-non-virtual-dtor" ]
  }
}

# rtti ------------------------------------------------------------------------
#
# Allows turning Run-Time Type Identification on or off.

config("rtti") {
  if (is_win) {
    cflags_cc = [ "/GR" ]
  }
}
config("no_rtti") {
  if (is_win) {
    cflags_cc = [ "/GR-" ]
  } else {
    cflags_cc = [ "-fno-rtti" ]
  }
}

# Warnings ---------------------------------------------------------------------
#
# This is where we disable various warnings that we've decided aren't
# worthwhile, and enable special warnings.

config("default_warnings") {
  if (is_win) {
    cflags = [
      "/WX",  # Treat warnings as errors.
      # Warnings permanently disabled:

      # TODO(GYP) The GYP build doesn't have this globally enabled but disabled
      # for a bunch of individual targets. Re-enable this globally when those
      # targets are fixed.
      "/wd4018",  # Comparing signed and unsigned values.

      # C4127: conditional expression is constant
      # This warning can in theory catch dead code and other problems, but
      # triggers in far too many desirable cases where the conditional
      # expression is either set by macros or corresponds some legitimate
      # compile-time constant expression (due to constant template args,
      # conditionals comparing the sizes of different types, etc.).  Some of
      # these can be worked around, but it's not worth it.
      "/wd4127",

      # C4251: 'identifier' : class 'type' needs to have dll-interface to be
      #        used by clients of class 'type2'
      # This is necessary for the shared library build.
      "/wd4251",

      # C4351: new behavior: elements of array 'array' will be default
      #        initialized
      # This is a silly "warning" that basically just alerts you that the
      # compiler is going to actually follow the language spec like it's
      # supposed to, instead of not following it like old buggy versions did.
      # There's absolutely no reason to turn this on.
      "/wd4351",

      # C4355: 'this': used in base member initializer list
      # It's commonly useful to pass |this| to objects in a class' initializer
      # list.  While this warning can catch real bugs, most of the time the
      # constructors in question don't attempt to call methods on the passed-in
      # pointer (until later), and annotating every legit usage of this is
      # simply more hassle than the warning is worth.
      "/wd4355",

      # C4503: 'identifier': decorated name length exceeded, name was
      #        truncated
      # This only means that some long error messages might have truncated
      # identifiers in the presence of lots of templates.  It has no effect on
      # program correctness and there's no real reason to waste time trying to
      # prevent it.
      "/wd4503",

      # C4611: interaction between 'function' and C++ object destruction is
      #        non-portable
      # This warning is unavoidable when using e.g. setjmp/longjmp.  MSDN
      # suggests using exceptions instead of setjmp/longjmp for C++, but
      # Chromium code compiles without exception support.  We therefore have to
      # use setjmp/longjmp for e.g. JPEG decode error handling, which means we
      # have to turn off this warning (and be careful about how object
      # destruction happens in such cases).
      "/wd4611",
      # Warnings to evaluate and possibly fix/reenable later:

      "/wd4100",  # Unreferenced formal function parameter.
      "/wd4121",  # Alignment of a member was sensitive to packing.
      "/wd4244",  # Conversion: possible loss of data.
      "/wd4481",  # Nonstandard extension: override specifier.
      "/wd4505",  # Unreferenced local function has been removed.
      "/wd4510",  # Default constructor could not be generated.
      "/wd4512",  # Assignment operator could not be generated.
      "/wd4610",  # Class can never be instantiated, constructor required.
      "/wd4996",  # Deprecated function warning.
    ]
  } else {
    # Common GCC warning setup.
    cflags = [
      # Enables.
      "-Wendif-labels",  # Weird old-style text after an #endif.
      "-Werror",  # Warnings as errors.

      # Disables.
      "-Wno-missing-field-initializers",  # "struct foo f = {0};"
      "-Wno-unused-parameter",  # Unused function parameters.
    ]
    cflags_cc = []

    if (is_mac) {
      cflags += [ "-Wnewline-eof" ]
    }

    if (is_clang) {
      cflags += [
        # This warns on using ints as initializers for floats in
        # initializer lists (e.g. |int a = f(); CGSize s = { a, a };|),
        # which happens in several places in chrome code. Not sure if
        # this is worth fixing.
        "-Wno-c++11-narrowing",

        # Don't die on dtoa code that uses a char as an array index.
        # This is required solely for base/third_party/dmg_fp/dtoa.cc.
        # TODO(brettw) move this to that project then!
        "-Wno-char-subscripts",

        # Warns on switches on enums that cover all enum values but
        # also contain a default: branch. Chrome is full of that.
        "-Wno-covered-switch-default",

        # Clang considers the `register` keyword as deprecated, but e.g.
        # code generated by flex (used in angle) contains that keyword.
        # http://crbug.com/255186
        "-Wno-deprecated-register",

        # TODO(thakis): This used to be implied by -Wno-unused-function,
        # which we no longer use. Check if it makes sense to remove
        # this as well. http://crbug.com/316352
        "-Wno-unneeded-internal-declaration",

        # TODO(thakis): Remove, http://crbug.com/263960
        "-Wno-reserved-user-defined-literal",
      ]

      # NaCl's Clang compiler and Chrome's hermetic Clang compiler will almost
      # always have different versions. Certain flags may not be recognized by
      # one version or the other.
      if (!is_nacl) {
        # Flags NaCl does not recognize.
        cflags += [
          # TODO(hans): Get this cleaned up.
          "-Wno-inconsistent-missing-override",
        ]
      }
    }
    if (gcc_version >= 48) {
      cflags_cc += [
        # See comment for -Wno-c++11-narrowing.
        "-Wno-narrowing",

        # TODO(thakis): Remove, http://crbug.com/263960
        "-Wno-literal-suffix",
      ]
    }

    # Suppress warnings about ABI changes on ARM (Clang doesn't give this
    # warning).
    if (cpu_arch == "arm" && !is_clang) {
      cflags += [ "-Wno-psabi" ]
    }

    if (is_android) {
      # Disable any additional warnings enabled by the Android build system but
      # which chromium does not build cleanly with (when treating warning as
      # errors).
      cflags += [
        "-Wno-extra",
        "-Wno-ignored-qualifiers",
        "-Wno-type-limits",
      ]
      cflags_cc += [
        # Disabling c++0x-compat should be handled in WebKit, but
        # this currently doesn't work because gcc_version is not set
        # correctly when building with the Android build system.
        # TODO(torne): Fix this in WebKit.
        "-Wno-error=c++0x-compat",

        # Other things unrelated to -Wextra:
        "-Wno-non-virtual-dtor",
        "-Wno-sign-promo",
      ]
    }

    if (gcc_version >= 48) {
      # Don't warn about the "typedef 'foo' locally defined but not used"
      # for gcc 4.8.
      # TODO: remove this flag once all builds work. See crbug.com/227506
      cflags += [ "-Wno-unused-local-typedefs" ]
    }
  }
}

# This will generate warnings when using Clang if code generates exit-time
# destructors, which will slow down closing the program.
# TODO(thakis): Make this a blacklist instead, http://crbug.com/101600
config("wexit_time_destructors") {
  if (is_clang) {
    cflags = [ "-Wexit-time-destructors" ]
  }
}

# Optimization -----------------------------------------------------------------
#
# Note that BUILDCONFIG.gn sets up a variable "default_optimization_config"
# which it will assign to the config it implicitly applies to every target. If
# you want to override the optimization level for your target, remove this
# config (which will expand differently for debug or release builds), and then
# add back the one you want to override it with:
#
#   configs -= default_optimization_config
#   configs += [ "//build/config/compiler/optimize_max" ]

# Shared settings for both "optimize" and "optimize_max" configs.
if (is_win) {
  common_optimize_on_cflags = [
    "/O2",
    "/Ob2",  # both explicit and auto inlining.
    "/Oy-",  # disable omitting frame pointers, must be after /o2.
    "/Os",  # favor size over speed.
  ]
  common_optimize_on_ldflags = []
} else {
  common_optimize_on_cflags = [
    # Don't emit the GCC version ident directives, they just end up in the
    # .comment section taking up binary size.
    "-fno-ident",

    # Put data and code in their own sections, so that unused symbols
    # can be removed at link time with --gc-sections.
    "-fdata-sections",
    "-ffunction-sections",
  ]
  common_optimize_on_ldflags = []

  if (is_android) {
    if (!using_sanitizer) {
      common_optimize_on_cflags += [ "-fomit-frame-pointer" ]
    }
    common_optimize_on_ldflags += [
      # Warn in case of text relocations.
      "-Wl,--warn-shared-textrel",
    ]
  }

  if (is_mac) {
    if (symbol_level == 2) {
      # Mac dead code stripping requires symbols.
      common_optimize_on_ldflags += [ "-Wl,-dead_strip" ]
    }
  } else {
    # Non-Mac Posix linker flags.
    common_optimize_on_ldflags += [
      # Specifically tell the linker to perform optimizations.
      # See http://lwn.net/Articles/192624/ .
      "-Wl,-O1",
      "-Wl,--as-needed",
      "-Wl,--gc-sections",
    ]
  }
}

# Default "optimization on" config. On Windows, this favors size over speed.
config("optimize") {
  cflags = common_optimize_on_cflags
  ldflags = common_optimize_on_ldflags
  if (is_win) {
    cflags += [ "/Os" ]  # favor size over speed.
  } else if (is_android || is_ios) {
    cflags += [ "-Os" ]  # Favor size over speed.
  } else {
    cflags += [ "-O2" ]
  }
}

# Turn off optimizations.
config("no_optimize") {
  if (is_win) {
    cflags = [
      "/Od",  # Disable optimization.
      "/Ob0",  # Disable all inlining (on by default).
      "/RTC1",  # Runtime checks for stack frame and uninitialized variables.
    ]
  } else if (is_android && !android_full_debug) {
    # On Android we kind of optimize some things that don't affect debugging
    # much even when optimization is disabled to get the binary size down.
    cflags = [
      "-Os",
      "-fdata-sections",
      "-ffunction-sections",
    ]
    if (!using_sanitizer) {
      cflags += [ "-fomit-frame-pointer" ]
    }
    ldflags = common_optimize_on_ldflags
  } else {
    cflags = [ "-O0" ]
  }
}

# Turns up the optimization level. On Windows, this implies whole program
# optimization and link-time code generation which is very expensive and should
# be used sparingly.
config("optimize_max") {
  cflags = common_optimize_on_cflags
  ldflags = common_optimize_on_ldflags
  if (is_win) {
    cflags -= [ "/Os" ]
    cflags += [ "/Ot" ]  # Favor speed over size.
    if (is_official_build) {
      # TODO(GYP): TODO(dpranke): Should these only be on in an official
      # build, or on all the time? For now we'll require official build so
      # that the compile is clean.
      cflags += [
        "/GL",  # Whole program optimization.

        # Disable Warning 4702 ("Unreachable code") for the WPO/PGO builds.
        # Probably anything that this would catch that wouldn't be caught in a
        # normal build isn't going to actually be a bug, so the incremental
        # value of C4702 for PGO builds is likely very small.
        "/wd4702",
      ]
      ldflags += [ "/LTCG" ]
    }
  } else {
    cflags += [ "-O2" ]
  }
}

# Symbols ----------------------------------------------------------------------

config("symbols") {
  if (is_win) {
    import("//build/toolchain/goma.gni")
    if (use_goma) {
      cflags = [ "/Z7" ]  # No PDB file
    } else {
      cflags = [ "/Zi" ]  # Produce PDB file, no edit and continue.
    }
    ldflags = [ "/DEBUG" ]
  } else {
    cflags = [ "-g2" ]
    if (use_debug_fission) {
      cflags += [ "-gsplit-dwarf" ]
    }
  }
}

config("minimal_symbols") {
  if (is_win) {
    # Linker symbols for backtraces only.
    ldflags = [ "/DEBUG" ]
  } else {
    cflags = [ "-g1" ]
    if (use_debug_fission) {
      cflags += [ "-gsplit-dwarf" ]
    }
  }
}

config("no_symbols") {
  if (!is_win) {
    cflags = [ "-g0" ]
  }
}
