# 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")
import("//build/config/chrome_build.gni")
if (current_cpu == "arm") {
  import("//build/config/arm.gni")
}
if (current_cpu == "mipsel" || current_cpu == "mips64el") {
  import("//build/config/mips.gni")
}
if (is_posix) {
  import("//build/config/gcc/gcc_version.gni")
}
import("//build/config/nacl/config.gni")
import("//build/toolchain/ccache.gni")
import("//build/config/sanitizers/sanitizers.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 && current_cpu == "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 && current_cpu == "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 = 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
using_sanitizer = is_asan || is_lsan || is_tsan || is_msan

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

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

  # 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_mac && !is_ios) {
    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) {
    asan_blacklist_path =
        rebase_path("//tools/memory/asan/blacklist.txt", root_build_dir)
    cflags += [
      "-fsanitize=address",
      "-fsanitize-blacklist=$asan_blacklist_path",
    ]
    if (is_mac) {
      cflags += [ "-mllvm -asan-globals=0" ]  # http://crbug.com/352073
      # TODO(GYP): deal with mac_bundles.
    }
  }
  if (is_lsan) {
    cflags += [ "-fsanitize=leak" ]
  }
  if (is_tsan) {
    tsan_blacklist_path =
        rebase_path("//tools/memory/tsan_v2/ignores.txt", root_build_dir)
    cflags += [
      "-fsanitize=thread",
      "-fsanitize-blacklist=$tsan_blacklist_path",
    ]
  }
  if (is_msan) {
    msan_blacklist_path =
        rebase_path("//tools/msan/blacklist.txt", root_build_dir)
    cflags += [
      "-fsanitize=memory",
      "-fsanitize-memory-track-origins=$msan_track_origins",
      "-fsanitize-blacklist=$msan_blacklist_path",
    ]
  }

  if (use_custom_libcxx) {
    cflags_cc += [ "-nostdinc++" ]
    include_dirs = [
      "//buildtools/third_party/libc++/trunk/include",
      "//buildtools/third_party/libc++abi/trunk/include",
    ]
  }

  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_nacl) {
    # 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/update.py",
                                             [ "--print-revision" ],
                                             "trim string") ]
  }

  # 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 (current_cpu == "x64") {
      common_mac_flags += [
        "-arch",
        "x86_64",
      ]
    } else if (current_cpu == "x86") {
      common_mac_flags += [
        "-arch",
        "i386",
      ]
    } else if (current_cpu == "arm") {
      common_mac_flags += [
        "-arch",
        "armv7",
      ]
    }

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

    ldflags += common_mac_flags
  } else if (is_posix) {
    # Non-Mac Posix compiler flags setup.
    # -----------------------------------
    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 (current_cpu == "x64") {
      cflags += [
        "-m64",
        "-march=x86-64",
      ]
      ldflags += [ "-m64" ]
    } else if (current_cpu == "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 (current_cpu == "arm") {
      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 (current_cpu == "mipsel") {
      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",
        ]
        if (mips_float_abi == "hard" && mips_fpu_mode != "") {
          cflags += [ "-m$mips_fpu_mode" ]
        }
      } else if (mips_arch_variant == "r1") {
        cflags += [
          "-mips32",
          "-Wa,-mips32",
        ]
      }

      if (mips_dsp_rev == 1) {
        cflags += [ "-mdsp" ]
      } else if (mips_dsp_rev == 2) {
        cflags += [ "-mdspr2" ]
      }

      cflags += [ "-m${mips_float_abi}-float" ]
    } else if (current_cpu == "mips64el") {
      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" ]

    if (!is_android) {
      defines += [
        "_LARGEFILE_SOURCE",
        "_LARGEFILE64_SOURCE",
      ]
    }

    # 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",
      ]
      defines += [ "NO_UNWIND_TABLES" ]
    } else {
      cflags += [ "-funwind-tables" ]
    }

    if (is_clang && !is_nacl && !is_debug) {
      # Non-unique section names appears to make linker dead stripping
      # less effective. See http://crbug.com/483026#c20
      # TODO(hans): Remove this if resolved upstream.
      cflags += [ "-funique-section-names" ]
    }
  }

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

      # 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 (!is_asan && !is_msan && !is_lsan && !is_tsan) {
      # TODO(brettw) common.gypi has this only for target toolset.
      if (current_cpu == "x64") {
        # --icf=safe disables much more folding on x86_64 than elsewhere, see
        # http://crbug.com/492177.  Turning it on saves over 12 MB of binary
        # size, but it seems to regress cold startup time by over a second
        # (see http://crbug.com/492809).
        # TODO(thakis): Check if disabling ICF would inmprove android cold start
        # times by several seconds too.
        ldflags += [ "-Wl,--icf=safe" ]
      } else {
        ldflags += [ "-Wl,--icf=all" ]
      }
    }
  }

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

  # C++11 compiler flags setup.
  # ---------------------------
  if (is_nacl) {
    # gnu++11 instead of c++11 is needed because some code uses typeof() (a
    # GNU extension).
    # TODO(thakis): Eventually switch this to c++11 instead,
    # http://crbug.com/427584
    cflags_cc += [ "-std=gnu++11" ]
  } else {
    cflags_cc += [ "-std=c++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_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" ]

    # 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 (current_cpu == "x86" || current_cpu == "x64" || current_cpu == "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 allow visible symbols from libgcc or libc++ to be
      # re-exported.
      "-Wl,--exclude-libs=libgcc.a",
      "-Wl,--exclude-libs=libc++_static.a",

      # Don't allow visible symbols from libraries that contain
      # assembly code with symbols that aren't hidden properly.
      # http://crbug.com/448386
      "-Wl,--exclude-libs=libvpx_assembly_arm.a",
    ]
    if (current_cpu == "arm") {
      ldflags += [
        # Enable identical code folding to reduce size.
        "-Wl,--icf=safe",
      ]
    }

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

  # Assign any flags set for the C compiler to asmflags so that they are sent
  # to the assembler.
  asmflags += cflags
  asmflags += cflags_c
}

# This provides the basic options to select the target CPU and ABI.
# It is factored out of "compiler" so that special cases can use this
# without using everything that "compiler" brings in.  Options that
# tweak code generation for a particular CPU do not belong here!
# See "compiler_codegen", below.
config("compiler_cpu_abi") {
  cflags = []
  ldflags = []

  if (is_posix && !(is_mac || is_ios)) {
    # CPU architecture. We may or may not be doing a cross compile now, so for
    # simplicity we always explicitly set the architecture.
    if (current_cpu == "x64") {
      cflags += [
        "-m64",
        "-march=x86-64",
      ]
      ldflags += [ "-m64" ]
    } else if (current_cpu == "x86") {
      cflags += [ "-m32" ]
      ldflags += [ "-m32" ]
    } else if (current_cpu == "arm") {
      if (is_clang && !is_android && !is_nacl) {
        cflags += [
          "-target",
          "arm-linux-gnueabihf",
        ]
        ldflags += [
          "-target",
          "arm-linux-gnueabihf",
        ]
      }
      if (!is_nacl) {
        cflags += [
          "-march=$arm_arch",
          "-mfloat-abi=$arm_float_abi",
        ]
        if (arm_use_thumb) {
          cflags += [ "-mthumb" ]
          if (is_android && !is_clang) {
            # Clang doesn't support this option.
            cflags += [ "-mthumb-interwork" ]
          }
        }
      }
      if (arm_tune != "") {
        cflags += [ "-mtune=$arm_tune" ]
      }
    } else if (current_cpu == "mipsel") {
      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",
        ]
        if (mips_float_abi == "hard" && mips_fpu_mode != "") {
          cflags += [ "-m$mips_fpu_mode" ]
        }
      } else if (mips_arch_variant == "r1") {
        cflags += [
          "-mips32",
          "-Wa,-mips32",
        ]
      }

      if (mips_dsp_rev == 1) {
        cflags += [ "-mdsp" ]
      } else if (mips_dsp_rev == 2) {
        cflags += [ "-mdspr2" ]
      }

      cflags += [ "-m${mips_float_abi}-float" ]
    } else if (current_cpu == "mips64el") {
      if (mips_arch_variant == "r6") {
        cflags += [
          "-mips64r6",
          "-Wa,-mips64r6",
        ]
        ldflags += [ "-mips64r6" ]
      } else if (mips_arch_variant == "r2") {
        cflags += [
          "-mips64r2",
          "-Wa,-mips64r2",
        ]
        ldflags += [ "-mips64r2" ]
      }
    }
  }

  asmflags = cflags
}

config("compiler_arm_fpu") {
  if (current_cpu == "arm" && !is_ios) {
    cflags = [ "-mfpu=$arm_fpu" ]
    asmflags = cflags
  }
}

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

  # 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().

    # TODO(jdduke) Re-enable on mips after resolving linking
    # issues with libc++ (crbug.com/456380).
    if (current_cpu != "mipsel" && current_cpu != "mips64el") {
      ldflags += [ "-Wl,--warn-shared-textrel" ]
    }
    ldflags += [ "-nostdlib" ]

    # NOTE: The libc++ 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_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" ]

    if (current_cpu == "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",
    ]

    # Clang with libc++ does not require an explicit atomic library reference.
    if (!is_clang) {
      libs += [ "atomic" ]
    }
  }
}

# default_warning_flags collects all warning flags that are used by default.
# This is in a variable instead of a config so that it can be used in
# both chromium_code and no_chromium_code.  This way these flags are guaranteed
# to appear on the compile command line after -Wall.

default_warning_flags = []
default_warning_flags_cc = []

# Common GCC warning setup.
default_warning_flags += [
  # 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.
]

if (is_mac) {
  default_warning_flags += [ "-Wnewline-eof" ]
  if (!is_nacl) {
    # When compiling Objective-C, warns if a method is used whose
    # availability is newer than the deployment target. This is not
    # required when compiling Chrome for iOS.
    default_warning_flags += [ "-Wpartial-availability" ]
  }
}

if (gcc_version >= 48) {
  default_warning_flags_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 (current_cpu == "arm" && !is_clang) {
  default_warning_flags += [ "-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).
  default_warning_flags += [
    "-Wno-extra",
    "-Wno-ignored-qualifiers",
    "-Wno-type-limits",
  ]
  default_warning_flags_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
  default_warning_flags += [ "-Wno-unused-local-typedefs" ]
}

if (is_clang) {
  default_warning_flags += [
    # 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): Get this cleaned up.
    "-Wno-inconsistent-missing-override",
  ]

  # 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 (Clang 3.7) does not recognize.
    default_warning_flags += [
      # TODO(smklein): Enable this, crbug.com/507717
      "-Wno-shift-negative-value",

      # TODO(smklein): Consider enabling this once not broken by third party
      "-Wno-bitfield-width",
    ]
  }
}

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

config("chromium_code") {
  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",
  ]

  if (!is_debug && !using_sanitizer &&
      (!is_linux || !is_clang || is_official_build)) {
    # _FORTIFY_SOURCE isn't really supported by Clang now, see
    # http://llvm.org/bugs/show_bug.cgi?id=16821.
    # It seems to work fine with Ubuntu 12 headers though, so use it in
    # official builds.
    #
    # Non-chromium code is not guaranteed to compile cleanly with
    # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
    # disabled, so only do that for Release build.
    defines += [ "_FORTIFY_SOURCE=2" ]
  }

  cflags += default_warning_flags
  cflags_cc = default_warning_flags_cc
}
config("no_chromium_code") {
  cflags = []
  cflags_cc = []
  defines = []

  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-logical-not-parentheses",
      "-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",
    ]
  }
  cflags += default_warning_flags
  cflags_cc += default_warning_flags_cc
}

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

config("rtti") {
}
config("no_rtti") {
  cflags_cc = [ "-fno-rtti" ]
}

# Warnings ---------------------------------------------------------------------

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

# On Windows compiling on x64, VC will issue a warning when converting
# size_t to int because it will truncate the value. Our code should not have
# these warnings and one should use a static_cast or a checked_cast for the
# conversion depending on the case. However, a lot of code still needs to be
# fixed. Apply this config to such targets to disable the warning.
#
# Note that this can be applied regardless of platform and architecture to
# clean up the call sites. This will only apply the flag when necessary.
#
# TODO(jschuh): crbug.com/167187 fix this and delete this config.
config("no_size_t_to_int_warning") {
}

# Some code presumes that pointers to structures/objects are compatible
# regardless of whether what they point to is already known to be valid.
config("no_incompatible_pointer_warnings") {
  cflags = []
  if (is_clang) {
    cflags += [ "-Wno-incompatible-pointer-types" ]
  }
}

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

  # TODO(jdduke) Re-enable on mips after resolving linking
  # issues with libc++ (crbug.com/456380).
  if (current_cpu != "mipsel" && current_cpu != "mips64el") {
    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_android || is_ios) {
    cflags += [ "-Os" ]  # Favor size over speed.
  } else {
    cflags += [ "-O2" ]
  }
}

# Turn off optimizations.
config("no_optimize") {
  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 if (is_pnacl) {
    # Linking and optimization is the slowest part of building code
    # using the PNaCl toolchain. Optimizing actually makes these passes faster,
    # and results in a smaller building/translation time.
    cflags = common_optimize_on_cflags
    cflags += [ "-Os" ]
  } 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

  cflags += [ "-O2" ]
}

# The default optimization applied to all targets. This will be equivalent to
# either "optimize" or "no_optimize", depending on the build flags.
config("default_optimization") {
  if (is_nacl_irt) {
    # The NaCl IRT is a special case and always wants its own config.
    # It gets optimized the same way regardless of the type of build.
    configs = [ "//build/config/nacl:irt_optimize" ]
  } else if (is_debug) {
    configs = [ ":no_optimize" ]
  } else {
    configs = [ ":optimize" ]
  }
}

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

config("symbols") {
  cflags = [ "-g2" ]
  if (use_debug_fission) {
    cflags += [ "-gsplit-dwarf" ]
  }
  asmflags = cflags
  ldflags = []
}

config("minimal_symbols") {
  cflags = [ "-g1" ]
  if (use_debug_fission) {
    cflags += [ "-gsplit-dwarf" ]
  }
  asmflags = cflags
  ldflags = []
}

config("no_symbols") {
  cflags = [ "-g0" ]
  asmflags = cflags
}

# Default symbols.
config("default_symbols") {
  if (symbol_level == 0) {
    configs = [ ":no_symbols" ]
  } else if (symbol_level == 1) {
    configs = [ ":minimal_symbols" ]
  } else if (symbol_level == 2) {
    configs = [ ":symbols" ]
  } else {
    assert(false)
  }
}
