# 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.

# runtime_library -------------------------------------------------------------
#
# Sets the runtime library and associated options.
#
# We don't bother making multiple versions that are toggle-able since there
# is more than one axis of control (which makes it complicated) and there's
# no practical reason for anybody to change this since the CRT must agree.

config("runtime_library") {
  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",
      "_UNICODE",
      "UNICODE", 
    ]
  }
}

# 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.
    ]
  }
}
config("no_chromium_code") {
  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",
    ]
  }
}

# rtti ------------------------------------------------------------------------
#
# Allows turning Run-Time Type Identification on or off.

config("rtti") {
  if (is_win) {
    cflags = [ "/GR" ]
  }
}
config("no_rtti") {
  if (is_win) {
    cflags = [ "/GR-" ]
  }
}

# Warnings ---------------------------------------------------------------------

config("disable_annoying_warnings") {
  if (is_win) {
    # Please keep ordered and add names if you add more.
    cflags = [
      "/wd4018",  # Comparing signed and unsigned values.
      "/wd4100",  # Unreferenced formal function parameter.
      "/wd4121",  # Alignment of a member was sensitive to packing.
      "/wd4125",  # Decimal digit terminates octal escape sequence.
      "/wd4127",  # Conditional expression is constant.
      "/wd4130",  # Logical operation on address of string constant.
      # TODO(brettw) is this necessary? If so, it should probably be on whoever
      # is silly enough to be doing this rather than globally.
      #"/wd4131",  # Function uses old-style declarator.
      "/wd4189",  # A variable was declared and initialized but never used.
      "/wd4201",  # Nonstandard extension used: nameless struct/union.
      "/wd4238",  # Nonstandard extension used: class rvalue used as lvalue.
      "/wd4244",  # Conversion: possible loss of data.
      "/wd4245",  # Conversion: signed/unsigned mismatch,
      "/wd4251",  # Class needs to have dll-interface.
      "/wd4310",  # Cast truncates constant value.
      "/wd4351",  # Elements of array will be default initialized.
      "/wd4355",  # 'this' used in base member initializer list.
      "/wd4396",  # Inline friend template thing.
      "/wd4428",  # Universal character name encountered in source.
      "/wd4481",  # Nonstandard extension: override specifier.
      "/wd4503",  # Decorated name length exceeded, name was truncated.
      "/wd4505",  # Unreferenced local function has been removed.
      "/wd4510",  # Default constructor could not be generated.
      "/wd4512",  # Assignment operator could not be generated.
      "/wd4530",  # Exception handler used, but unwind semantics not enabled.
      "/wd4610",  # Class can never be instantiated, constructor required.
      "/wd4611",  # C++ object destruction and 'catch'.
      "/wd4701",  # Potentially uninitialized local variable name used.
      "/wd4702",  # Unreachable code.
      "/wd4706",  # Assignment within conditional expression.
      "/wd4819",  # Character not in the current code page.
    ]
  }
}
