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

# Base compiler configuration.
config("compiler") {
  include_dirs = [ "//", root_gen_dir ]
  if (is_win) {
    cflags = [
      "/Gy",  # Enable function-level linking.
      "/GS",  # Enable buffer security checking.
      "/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
      "-fvisibility=hidden",
    ]
    cflags_c = [
    ]
    cflags_cc = [
      "-fno-exceptions",
      "-fno-threadsafe-statics",
      "-fvisibility-inlines-hidden",
    ]
    ldflags = [
    ]

    # Stack protection.
    # TODO(brettw) why do we have different values for all of these cases?
    if (is_mac) {
      cflags += "-fstack-protector-all"
    } else if (is_chromeos) {
      cflags += "-fstack-protector-strong"
    } else if (is_linux) {
      cflags += [ "-fstack-protector", "--param=ssp-buffer-size=4" ]
    }

    if (is_mac) {
      # Mac-specific compiler flags setup.
      # ----------------------------------

      # These flags are shared between the C compiler and linker.
      common_mac_flags = [
        # Set which SDK to use.
        # TODO(brettw) this needs to be configurable somehow.
        "-isysroot", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk",

        "-mmacosx-version-min=10.6",
      ]

      # CPU architecture.
      if (cpu_arch == "x64") {
        common_mac_flags += "-arch x86_64"
      } else if (cpu_arch == "x32") {
        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.
        "-fobjc-call-cxx-cdtors",
      ]

      cflags_c += [ "-std=c99" ]
      cflags_cc += [ "-std=gnu++11" ]

      ldflags += common_mac_flags + [
        "-L.",

        # TODO(brettW) I don't understand these options.
        "-Wl,-rpath,@loader_path/.",
        "-Wl,-rpath,@loader_path/../../..",
      ]
    } else {
      # Non-Mac Posix compiler flags setup.
      # -----------------------------------

      # 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"
        ldflags += "-m64"
      } else if (cpu_arch == "x32") {
        cflags += "-m32"
        ldflags += "-m32"
      }
    }

    # Linux-specific compiler flags setup.
    # ------------------------------------
    if (is_linux) {
      cflags += [
        "-fPIC",
        "-pthread",
        "-pipe",  # Use pipes for communicating between sub-processes. Faster.
      ]

      # 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).
      if (cpu_arch == "x64") {
        gold_path = rebase_path("//third_party/gold", ".", root_build_dir)
        ldflags += [
          "-B$gold_path",

          # There seems to be a conflict of --icf and -pie in gold which can
          # generate crashy binaries. As a security measure, -pie takes
          # precendence for now.
          # TODO(brettw) common.gypi has this only for target toolset.
          #"-Wl,--icf=safe",
          "-Wl,--icf=none",

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

      ldflags += [
        "-fPIC",
        "-pthread",
        "-Wl,-z,noexecstack",
        "-Wl,-z,now",
        "-Wl,-z,relro",
      ]
    }

    # Clang-specific compiler flags setup.
    # ------------------------------------
    if (is_clang) {
      cflags += [
        "-fcolor-diagnostics",
      ]
    }
  }
}

# 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.
      "/WX",  # Treat warnings as errors.
    ]
  } else {
    cflags = [
      "-Wall",
      "-Werror",

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

    # TODO(brettw) this should also be enabled on Linux but some files
    # currently fail.
    if (is_mac) {
      cflags += "-Wextra"
    }
  }
}
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_cc = [ "/GR" ]
  }
}
config("no_rtti") {
  if (is_win) {
    cflags_cc = [ "/GR-" ]
  } else {
    cflags_cc = [ "-fno-rtti" ]
  }
}

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

config("default_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.
    ]
  } else {
    # Common GCC warning setup.
    cflags = [
      # Enables.
      "-Wendif-labels",  # Weird old-style text after an #endif.

      # Disables.
      "-Wno-missing-field-initializers",  # "struct foo f = {0};"
      "-Wno-unused-parameter",  # Unused function parameters.
      "-Wno-write-strings",
    ]

    if (is_mac) {
      cflags += [
        "-Wnewline-eof",
      ]
    }

    # TODO(brettw) Ones below here should be clang-only when we have a flag
    # for it.
    if (is_clang) {
      cflags += [
        "-Wheader-hygiene",

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

        # Clang spots more unused functions.
        "-Wno-unused-function",

        # Warns when a const char[] is converted to bool.
        "-Wstring-conversion",
      ]
    }
  }
}

# Optimization -----------------------------------------------------------------

config("optimize") {
  if (is_win) {
    cflags = [
      "/O2",
      "/Ob2",  # Both explicit and auto inlining.
      "/Oy-",  # Disable omitting frame pointers, must be after /O2.
    ]
  } else {
    if (is_ios) {
      cflags = [ "-Os" ]
    } else {
      cflags = [ "-O2" ]
    }
  }
}

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 {
    cflags = [ "-O0" ]
  }
}

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

# TODO(brettw) Since this sets ldflags on Windows which is inherited across
# static library boundaries, if you want to remove the default symbol config
# and set a different one on a target, you also have to do it for all static
# libraries that go into that target, which is messed up. Either we need a
# more flexible system for defining linker flags, or we need to separate this
# out into a "symbols_linker" config that is only applied to DLLs and EXEs.
config("symbols") {
  if (is_win) {
    cflags = [ "/Zi" ]  # Produce PDB file, no edit and continue.
    ldflags = [ "/DEBUG" ]
  } else {
    cflags = [ "-g2" ]
  }
}

config("minimal_symbols") {
  if (is_win) {
    # Linker symbols for backtraces only.
    ldflags = [ "/DEBUG" ]
  } else {
    cflags = [ "-g1" ]
  }
}

config("no_symbols") {
  if (!is_win) {
    cflags = [ "-g0" ]
  }
}
