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

import("//build/toolchain/toolchain.gni")

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-used-but-marked-unused",
    ]
    if (!use_xcode_clang) {
      # xcode clang does not recognize the following flags.
      cflags_cc += [
        "-Wno-unused-template",
        "-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
      ]
    }
  }
}
