12385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# Copyright (c) 2013 The Chromium Authors. All rights reserved.
22385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# Use of this source code is governed by a BSD-style license that can be
32385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# found in the LICENSE file.
42385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
52385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# Base compiler configuration.
62385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconfig("compiler") {
72385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  includes = [ "//" ]
82385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_win) {
92385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags = [
102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # TODO(brettw) these probably need to be refactored.
112385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/Od", "/WX", "/Zi", "/Gy", "/GS", "/RTC1", "/EHsc",
122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
132385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  } else {
142385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags = [
152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # TODO(brettw) obviously this needs to be parameterized.
162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-arch i386",
172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # See http://crbug.com/32204
192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-fno-strict-aliasing",
202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-fno-threadsafe-statics",
222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-fstack-protector-all",
233240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      "-fvisibility=hidden",
242385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-fvisibility-inlines-hidden",
252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    # !!! Please keep additions sorted alphabetically.
272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    # TODO(brettw) these should be clang-only.
292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    # if (is_clang) {
302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      cflags += [
312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "-fcolor-diagnostics",
322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      ]
332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    #}
342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags_c = [
362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-std=c99",
372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
392385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags_cc = [
402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-fno-exceptions",
412385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-std=gnu++11",
422385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
442385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_mac) {
463240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    # These are used for both compiler and linker flags on Mac.
473240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    common_mac_flags = [
483240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      # TODO(brettw) obviously this needs to be parameterized.
493240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      "-arch i386",
503240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # Set which SDK to use.
522385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # TODO(brettw) this needs to be configurable somehow.
532385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-isysroot", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk",
542385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-mmacosx-version-min=10.6",
562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
583240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    # Mac compiler flags.
593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    cflags += [
603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      # Without this, the constructors and destructors of a C++ object inside
613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      # an Objective C struct won't be called, which is very bad.
623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      "-fobjc-call-cxx-cdtors",
633240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    ]
643240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    cflags += common_mac_flags
653240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
663240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    # Mac linker flags.
673240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    ldflags = [
683240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      "-L.",
693240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
703240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      # TODO(brettW) I don't understand these options.
713240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      "-Wl,-rpath,@loader_path/.",
723240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      "-Wl,-rpath,@loader_path/../../..",
733240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    ]
743240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    ldflags += common_mac_flags
752385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
762385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# runtime_library -------------------------------------------------------------
792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#
802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# Sets the runtime library and associated options.
812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#
822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# We don't bother making multiple versions that are toggle-able since there
832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# is more than one axis of control (which makes it complicated) and there's
842385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# no practical reason for anybody to change this since the CRT must agree.
852385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconfig("runtime_library") {
872385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_component_build) {
882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    # Component mode: dynamic CRT.
892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    defines = [ "COMPONENT_BUILD" ]
902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    if (is_win) {
912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # Since the library is shared, it requires exceptions or will give errors
922385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # about things not matching, so keep exceptions on.
932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      if (is_debug) {
942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        cflags = [ "/MDd" ]
952385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      } else {
962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        cflags = [ "/MD" ]
972385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      }
982385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    }
992385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  } else {
1002385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    # Static CRT.
1012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    if (is_win) {
1022385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # We don't use exceptions, and when we link statically we can just get
1032385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # rid of them entirely.
1042385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      defines = [ "_HAS_EXCEPTIONS=0" ]
1052385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      if (is_debug) {
1062385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        cflags = [ "/MTd" ]
1072385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      } else {
1082385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        cflags = [ "/MT" ]
1092385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      }
1102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    }
1112385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
1122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1132385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_win) {
1142385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    defines += [
1152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "__STD_C",
1162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "__STDC_CONSTANT_MACROS",
1172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "__STDC_FORMAT_MACROS",
1182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "_CRT_RAND_S",
1192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "_CRT_SECURE_NO_DEPRECATE",
1202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "_SCL_SECURE_NO_DEPRECATE",
1212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "_UNICODE",
1222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "UNICODE",
1232385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
1242385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
1252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# chromium_code ---------------------------------------------------------------
1282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#
1292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# Toggles between higher and lower warnings for code that is (or isn't)
1302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# part of Chromium.
1312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconfig("chromium_code") {
1332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_win) {
1342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags = [
1352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/W4",  # Warning level 4.
1362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
1372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  } else if (is_mac) {
1382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags = [
1393240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      "-Wall",
1402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-Werror",
1412385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-Wextra",
1422385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
1432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
1442385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconfig("no_chromium_code") {
1462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_win) {
1472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags = [
1482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/W3",  # Warning level 3.
1492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4800",  # Disable warning when forcing value to bool.
1502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
1512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    defines = [
1522385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "_CRT_NONSTDC_NO_WARNINGS",
1532385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "_CRT_NONSTDC_NO_DEPRECATE",
1542385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
1552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
1562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1572385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1582385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# rtti ------------------------------------------------------------------------
1592385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#
1602385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# Allows turning Run-Time Type Identification on or off.
1612385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1622385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconfig("rtti") {
1632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_win) {
1642385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags_cc = [ "/GR" ]
1652385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
1662385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1672385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconfig("no_rtti") {
1682385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_win) {
1692385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags_cc = [ "/GR-" ]
1702385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  } else {
1712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags_cc = [ "-fno-rtti" ]
1722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
1732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1742385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1752385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch# Warnings ---------------------------------------------------------------------
1762385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconfig("default_warnings") {
1782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_win) {
1792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    # Please keep ordered and add names if you add more.
1802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags = [
1812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4018",  # Comparing signed and unsigned values.
1822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4100",  # Unreferenced formal function parameter.
1832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4121",  # Alignment of a member was sensitive to packing.
1842385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4125",  # Decimal digit terminates octal escape sequence.
1852385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4127",  # Conditional expression is constant.
1862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4130",  # Logical operation on address of string constant.
1872385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # TODO(brettw) is this necessary? If so, it should probably be on whoever
1882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # is silly enough to be doing this rather than globally.
1892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      #"/wd4131",  # Function uses old-style declarator.
1902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4189",  # A variable was declared and initialized but never used.
1912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4201",  # Nonstandard extension used: nameless struct/union.
1922385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4238",  # Nonstandard extension used: class rvalue used as lvalue.
1932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4244",  # Conversion: possible loss of data.
1942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4245",  # Conversion: signed/unsigned mismatch,
1952385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4251",  # Class needs to have dll-interface.
1962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4310",  # Cast truncates constant value.
1972385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4351",  # Elements of array will be default initialized.
1982385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4355",  # 'this' used in base member initializer list.
1992385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4396",  # Inline friend template thing.
2002385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4428",  # Universal character name encountered in source.
2012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4481",  # Nonstandard extension: override specifier.
2022385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4503",  # Decorated name length exceeded, name was truncated.
2032385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4505",  # Unreferenced local function has been removed.
2042385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4510",  # Default constructor could not be generated.
2052385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4512",  # Assignment operator could not be generated.
2062385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4530",  # Exception handler used, but unwind semantics not enabled.
2072385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4610",  # Class can never be instantiated, constructor required.
2082385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4611",  # C++ object destruction and 'catch'.
2092385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4701",  # Potentially uninitialized local variable name used.
2102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4702",  # Unreachable code.
2112385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4706",  # Assignment within conditional expression.
2122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "/wd4819",  # Character not in the current code page.
2132385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
2142385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
2152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  # TODO(brettw) this should probably be if(clang).
2172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (is_mac) {
2182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    cflags = [
2192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # Warn for weird old-style text after an #endif.
2202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-Wendif-labels",
2212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-Wnewline-eof",
2232385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2242385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # Don't warn about the "struct foo f = {0};" initialization pattern.
2252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-Wno-missing-field-initializers",
2262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      # Don't warn about unused function parameters.
2282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      "-Wno-unused-parameter",
2292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ]
2302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    # TODO(brettw) Ones below here should be clang-only when we have a flag
2322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    # for it.
2332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    #if (is_clang) {
2342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      cflags += [
2352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "-Wheader-hygiene",
2362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # This warns on using ints as initializers for floats in
2382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # initializer lists (e.g. |int a = f(); CGSize s = { a, a };|),
2392385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # which happens in several places in chrome code. Not sure if
2402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # this is worth fixing.
2412385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "-Wno-c++11-narrowing",
2422385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # Don't die on dtoa code that uses a char as an array index.
2442385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # This is required solely for base/third_party/dmg_fp/dtoa.cc.
2452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # TODO(brettw) move this to that project then!
2462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "-Wno-char-subscripts",
2472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # Warns on switches on enums that cover all enum values but
2492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # also contain a default: branch. Chrome is full of that.
2502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "-Wno-covered-switch-default",
2512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2522385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # Clang considers the `register` keyword as deprecated, but e.g.
2532385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # code generated by flex (used in angle) contains that keyword.
2542385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # http://crbug.com/255186
2552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "-Wno-deprecated-register",
2562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2572385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # Clang spots more unused functions.
2582385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "-Wno-unused-function",
2592385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2602385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        # Warns when a const char[] is converted to bool.
2612385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "-Wstring-conversion",
2622385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      ]
2632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    #}  #is_clang
2642385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
2652385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
266