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

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

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
}

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

    # 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",
      "-Wextra",

      # 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.
    ]
    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.
      "/wd4189",  # A variable was declared and initialized but never used.
      "/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.
    ]
  } 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",

        # TODO(hans): Clean this up. Or disable with finer granularity.
        "-Wno-unused-local-typedef",
      ]
    }
    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 += [
      "/Ot",   # Favor speed over size.
      "/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",
    ]
  } else {
    cflags += [
      "-O2",
    ]
  }
}

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

config("symbols") {
  if (is_win) {
    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" ]
  }
}
