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

# absl specific compiler flags.
#
# Flags specified here must not impact ABI. Code compiled with and without these
# opts will be linked together, and in some cases headers compiled with and
# without these options will be part of the same program.

group("default") {
  deps = [
    "absl/types:any",
    "absl/types:bad_any_cast",
    "absl/types:span",
    "absl/types:optional",
    "absl/types:bad_optional_access",
  ]
}

config("absl_include_config") {
  # Using -isystem (with clang and GCC) and -imsvc (with clang-cl) instead of
  # include_dirs (-I), so we don't need to suppress warnings coming from
  # Abseil. Doing so would mask warnings in our own code.
  if (is_win) {
    if (is_clang) {
      # clang-cl:
      cflags = [
        "-imsvc",
        rebase_path(".", root_build_dir),
      ]
    } else {
      # MSVC doesn't have -isystem, in that case we fallback to include_dirs and
      # we use the warning suppression flags defined in :absl_default_cflags_cc.
      include_dirs = [ "." ]
    }
  } else {
    # GCC or clang:
    cflags = [
      "-isystem",
      rebase_path(".", root_build_dir),
    ]
  }
}

config("absl_define_config") {
  defines = [ "ABSL_ALLOCATOR_NOTHROW=1" ]
}

config("absl_default_cflags_cc") {
  if (is_clang) {
    cflags_cc = [
      # Abseil does not support C++98
      "-Wno-c++98-compat-pedantic",
      # Turns off all implicit conversion warnings. Most are re-enabled below.
      "-Wno-conversion",
      "-Wno-covered-switch-default",
      "-Wno-deprecated",
      "-Wno-disabled-macro-expansion",
      "-Wno-double-promotion",
      ###
      # Turned off as they include valid C++ code.
      "-Wno-comma",
      "-Wno-extra-semi",
      "-Wno-packed",
      "-Wno-padded",
      ###
      "-Wno-float-conversion",
      "-Wno-float-equal",
      "-Wno-format-nonliteral",
      # Too aggressive: warns on Clang extensions enclosed in Clang-only
      # compilation paths.
      "-Wno-gcc-compat",
      ###
      # Some internal globals are necessary. Don't do this at home.
      "-Wno-global-constructors",
      "-Wno-exit-time-destructors",
      ###
      "-Wno-nested-anon-types",
      "-Wno-non-modular-include-in-module",
      "-Wno-old-style-cast",
      # Warns on preferred usage of non-POD types such as string_view
      "-Wno-range-loop-analysis",
      "-Wno-reserved-id-macro",
      "-Wno-shorten-64-to-32",
      "-Wno-switch-enum",
      "-Wno-thread-safety-negative",
      "-Wno-undef",
      "-Wno-unknown-warning-option",
      "-Wno-unreachable-code",
      # Causes warnings on include guards
      "-Wno-unused-macros",
      "-Wno-weak-vtables",
      ###
      # Implicit conversion warnings turned off by -Wno-conversion
      # which are re-enabled below.
      "-Wbitfield-enum-conversion",
      "-Wbool-conversion",
      "-Wconstant-conversion",
      "-Wenum-conversion",
      "-Wint-conversion",
      "-Wliteral-conversion",
      "-Wnon-literal-null-conversion",
      "-Wnull-conversion",
      "-Wobjc-literal-conversion",
      "-Wno-sign-conversion",
      "-Wstring-conversion",
      ###
    ]
  } else {
    if (is_linux) {
      # GCC flags:
      cflags_cc = [
        # Google style does not use unsigned integers, though STL containers
        # have unsigned types.
        "-Wno-sign-compare",
      ]
    }
    if (is_win) {
      # MSVC flags:
      cflags_cc = [
        "/wd4005",  # macro-redefinition
        "/wd4068",  # unknown pragma
        "/wd4702",  # unreachable code
      ]
    }
  }
}

config("absl_test_cflags_cc") {
  if (is_clang) {
    cflags_cc = [
      "-Wno-c99-extensions",
      "-Wno-missing-noreturn",
      "-Wno-missing-prototypes",
      "-Wno-null-conversion",
      "-Wno-shadow",
      "-Wno-shift-sign-overflow",
      "-Wno-sign-compare",
      "-Wno-unused-function",
      "-Wno-unused-member-function",
      "-Wno-unused-parameter",
      "-Wno-unused-private-field",
      "-Wno-unused-template",
      "-Wno-used-but-marked-unused",
      "-Wno-zero-as-null-pointer-constant",
    ]
  } else {
    if (is_linux) {
      # GCC flags:
      cflags_cc = [
        "-Wno-conversion-null",
        "-Wno-missing-declarations",
        "-Wno-sign-compare",
        "-Wno-unused-function",
        "-Wno-unused-parameter",
        "-Wno-unused-private-field",
      ]
    }
    if (is_win) {
      # MSVC flags:
      cflags_cc = [
        "/wd4018",  # signed/unsigned mismatch
        "/wd4101",  # unreferenced local variable
      ]
    }
  }
}
