# 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 (cpu_arch == "mipsel" || cpu_arch == "mips64el") {
  import("//build/config/mips.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 for linking on 64-bit Linux only (on 32-bit it runs out of
  # address space, and it doesn't support cross-compiling).
  use_gold = is_linux && cpu_arch == "x64"

  # 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 =
      !is_win && 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",
          ]
        }
      }
    } else if (cpu_arch == "mipsel") {
      # Don't set the compiler flags for the WebView build. These will come
      # from the Android build system.
      if (!is_android_webview_build) {
        if (mips_arch_variant == "r6") {
          cflags += [
            "-mips32r6",
            "-Wa,-mips32r6",
          ]
          if (is_android) {
            ldflags += [
              "-mips32r6",
              "-Wl,-melf32ltsmip",
            ]
          }
        } else if (mips_arch_variant == "r2") {
          cflags += [
            "-mips32r2",
            "-Wa,-mips32r2",
          ]
        } else if (mips_arch_variant == "r1") {
          cflags += [
            "-mips32",
            "-Wa,-mips32",
          ]
        }
      }
    } else if (cpu_arch == "mips64el") {
      # Don't set the compiler flags for the WebView build. These will come
      # from the Android build system.
      if (!is_android_webview_build) {
        if (mips_arch_variant == "r6") {
          cflags += [
            "-mips64r6",
            "-Wa,-mips64r6",
          ]
          ldflags += [ "-mips64r6" ]
        } else if (mips_arch_variant == "r2") {
          cflags += [
            "-mips64r2",
            "-Wa,-mips64r2",
          ]
          ldflags += [ "-mips64r2" ]
        }
      }
    }

    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",
    ]
    if (!using_sanitizer) {
      ldflags += [ "-Wl,-z,defs" ]
    }
  }

  # Linux-specific compiler flags setup.
  # ------------------------------------
  if (is_linux) {
    cflags += [ "-pthread" ]
    ldflags += [ "-pthread" ]
  }
  if (use_gold) {
    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.
      "-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",
    ]
  }

  # Android standard library setup.
  if (is_android) {
    if (is_clang) {
      # Work around incompatibilities between bionic and clang headers.
      defines += [
        "__compiler_offsetof=__builtin_offsetof",
        "nan=__builtin_nan",
      ]
    }

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

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

    android_libcpp_root = "$android_ndk_root/sources/cxx-stl/llvm-libc++"

    cflags += [
      "-isystem" +
          rebase_path("$android_libcpp_root/libcxx/include", root_build_dir),
      "-isystem" + rebase_path(
              "$android_ndk_root/sources/cxx-stl/llvm-libc++abi/libcxxabi/include",
              root_build_dir),
      "-isystem" +
          rebase_path("$android_ndk_root/sources/android/support/include",
                      root_build_dir),
    ]

    lib_dirs += [ "$android_libcpp_root/libs/$android_app_abi" ]

    if (component_mode == "shared_library") {
      android_libcpp_library = "c++_shared"
    } else {
      android_libcpp_library = "c++_static"
    }

    libs += [
      "$android_libcpp_library",
      "atomic",

      # 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),
      "m",
      "c",
      "dl",
    ]
  }
}

# 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.
  ]
  if (!is_asan) {
    common_optimize_on_cflags += [
      # Put data in separate COMDATs. This allows the linker
      # to put bit-identical constants at the same address even if
      # they're unrelated constants, which saves binary size.
      # This optimization can't be used when ASan is enabled because
      # it is not compatible with the ASan ODR checker.
      "/Gw",
    ]
  }
  common_optimize_on_ldflags = [ "/OPT:REF" ]
} 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,--gc-sections",
    ]

    if (!using_sanitizer) {
      # Functions interposed by the sanitizers can make ld think
      # that some libraries aren't needed when they actually are,
      # http://crbug.com/234010. As workaround, disable --as-needed.
      common_optimize_on_ldflags += [ "-Wl,--as-needed" ]
    }
  }
}

# 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" ]
  }
}
