# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# 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/config/c++/c++.gni")
import("//build/config/nacl/config.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/toolchain/toolchain.gni")
import("//build_overrides/build.gni")
import("//third_party/abseil-cpp/absl.gni")

config("absl_component_build") {
  defines = [ "ABSL_CONSUME_DLL" ]
}

assert(!is_nacl || is_nacl_saigo,
       "base must not be built in most nacl toolchains")

component("absl") {
  public_deps = [ ":absl_component_deps" ]
  if (is_component_build) {
    public_configs = [ ":absl_component_build" ]

    if (is_win && is_clang) {
      if (current_cpu == "x64") {
        if (is_debug) {
          sources = [ "symbols_x64_dbg.def" ]
        } else {
          if (is_asan) {
            sources = [ "symbols_x64_rel_asan.def" ]
          } else {
            sources = [ "symbols_x64_rel.def" ]
          }
        }
      }
      if (current_cpu == "x86") {
        if (is_debug) {
          sources = [ "symbols_x86_dbg.def" ]
        } else {
          sources = [ "symbols_x86_rel.def" ]
        }
      }
      if (current_cpu == "arm64") {
        if (is_debug) {
          sources = [ "symbols_arm64_dbg.def" ]
        } else {
          sources = [ "symbols_arm64_rel.def" ]
        }
      }
    }
  }
}

group("absl_component_deps") {
  public_deps = [
    "//third_party/abseil-cpp/absl/algorithm",
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/base",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:log_severity",
    "//third_party/abseil-cpp/absl/base:no_destructor",
    "//third_party/abseil-cpp/absl/base:nullability",
    "//third_party/abseil-cpp/absl/base:prefetch",
    "//third_party/abseil-cpp/absl/cleanup",
    "//third_party/abseil-cpp/absl/container:btree",
    "//third_party/abseil-cpp/absl/container:fixed_array",
    "//third_party/abseil-cpp/absl/container:flat_hash_map",
    "//third_party/abseil-cpp/absl/container:flat_hash_set",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/container:node_hash_map",
    "//third_party/abseil-cpp/absl/container:node_hash_set",
    "//third_party/abseil-cpp/absl/debugging:failure_signal_handler",
    "//third_party/abseil-cpp/absl/debugging:stacktrace",
    "//third_party/abseil-cpp/absl/debugging:symbolize",
    "//third_party/abseil-cpp/absl/functional:any_invocable",
    "//third_party/abseil-cpp/absl/functional:bind_front",
    "//third_party/abseil-cpp/absl/functional:function_ref",
    "//third_party/abseil-cpp/absl/functional:overload",
    "//third_party/abseil-cpp/absl/hash",
    "//third_party/abseil-cpp/absl/log:absl_check",
    "//third_party/abseil-cpp/absl/log:absl_log",
    "//third_party/abseil-cpp/absl/log:absl_vlog_is_on",
    "//third_party/abseil-cpp/absl/log:die_if_null",
    "//third_party/abseil-cpp/absl/log:globals",
    "//third_party/abseil-cpp/absl/log:initialize",
    "//third_party/abseil-cpp/absl/log:log_entry",
    "//third_party/abseil-cpp/absl/log:log_sink",
    "//third_party/abseil-cpp/absl/log:log_sink_registry",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/numeric:int128",
    "//third_party/abseil-cpp/absl/random",
    "//third_party/abseil-cpp/absl/random:bit_gen_ref",
    "//third_party/abseil-cpp/absl/random:distributions",
    "//third_party/abseil-cpp/absl/status",
    "//third_party/abseil-cpp/absl/status:statusor",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:cord",
    "//third_party/abseil-cpp/absl/strings:has_ostream_operator",
    "//third_party/abseil-cpp/absl/strings:str_format",
    "//third_party/abseil-cpp/absl/strings:string_view",
    "//third_party/abseil-cpp/absl/synchronization",
    "//third_party/abseil-cpp/absl/time",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:span",
    "//third_party/abseil-cpp/absl/types:variant",
    "//third_party/abseil-cpp/absl/utility",
  ]

  # Dependencies that preferably shouldn't be public in chromium.
  public_deps += [
    # public in abseil, but deprecated in chromium, yet used.
    "//third_party/abseil-cpp/absl/base:dynamic_annotations",

    # base/logging.cc uses this non-public absl dependency while there no better
    # alternative to inject abort hook. See notes in `base/logging.cc`.
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",

    # absl internal utilities used by protobuf.
    "//third_party/abseil-cpp/absl/container:layout",
  ]

  if (is_component_build) {
    public_deps += [ ":absl_full_deps" ]
  }

  # The following dependencies currently don't build with NaCl.
  # TODO(https://crbug.com/1114625): Fix build errors and remove this section.
  if (is_nacl) {
    public_deps -=
        [ "//third_party/abseil-cpp/absl/debugging:failure_signal_handler" ]
  }

  visibility = [ ":absl" ]
}

# Some third-party libraries use additional parts of absl that are banned in
# Chrome (e.g. flags generates static initializers that are undesirable in
# non-test binaries). These third-party libraries can depend on `absl_full`
# instead of `absl` to use those banned subsets of Abseil as well.
source_set("absl_full") {
  public_deps = [ ":absl" ]

  # In component builds, `absl` itself depends on `absl_full_deps` directly so
  # that all of absl is built as a single shared library. This is to prevent
  # globals from being duplicated between both `absl` and `absl_full` (e.g.
  # inline variables), and the subtle breakage that could cause.
  #
  # Deps violations will still be enforced by the non-component build.
  if (!is_component_build) {
    public_deps += [ ":absl_full_deps" ]
  }

  if (build_with_chromium) {
    visibility = [
      # Used by some test executables, but not by anything that is a
      # part of Chrome.
      "//components/optimization_guide/internal/*",
      "//third_party/fuzztest:*",
      "//third_party/webrtc/*",

      # GoogleTest doesn't actually need absl_full, but this makes gn check
      # happier.
      "//third_party/googletest:*",
    ]
  }
}

group("absl_full_deps") {
  public_deps = [
    # Banned because each flag registration generates a static initializer, and
    # the flag registration mechanism is problematic in component builds.
    "//third_party/abseil-cpp/absl/flags:config",
    "//third_party/abseil-cpp/absl/flags:flag",
    "//third_party/abseil-cpp/absl/flags:parse",
    "//third_party/abseil-cpp/absl/flags:reflection",
    "//third_party/abseil-cpp/absl/flags:usage",

    # Banned because the LOG and CHECK macros conflict with Chrome's version of
    # those macros.
    "//third_party/abseil-cpp/absl/log",
    "//third_party/abseil-cpp/absl/log:check",
  ]

  visibility = [
    ":absl_component_deps",
    ":absl_full",
  ]

  public_configs = [ "//third_party/abseil-cpp/absl/flags:absl_flags_config" ]
}

config("absl_include_config") {
  include_dirs = [ "." ]
}

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

  if (is_win && !use_custom_libcxx) {
    defines += [
      # See crbug.com/1101367: Acknowledge extended alignment when using
      # MSVC's standard library.
      "_ENABLE_EXTENDED_ALIGNED_STORAGE",
    ]
  }
}

config("absl_default_cflags_cc") {
  cflags_cc = []
  if (is_clang) {
    cflags_cc += [
      # TODO(crbug.com/588506): Explicitly enable conversion warnings.
      "-Wbool-conversion",
      "-Wconstant-conversion",
      "-Wenum-conversion",
      "-Wint-conversion",
      "-Wliteral-conversion",
      "-Wnon-literal-null-conversion",
      "-Wnull-conversion",
      "-Wobjc-literal-conversion",
      "-Wstring-conversion",
    ]
    if (!is_nacl) {
      cflags_cc += [ "-Wbitfield-enum-conversion" ]
    }
  }
}

config("absl_test_cflags_cc") {
  cflags_cc = []
  if (is_clang || !is_win) {
    cflags_cc += [
      "-Wno-conversion-null",
      "-Wno-missing-declarations",
      "-Wno-unused-function",
      "-Wno-unused-parameter",
      "-Wno-unused-private-field",
    ]
  }
  if (is_win) {
    cflags_cc += [
      "/wd4101",  # unreferenced local variable
    ]
  }
}

config("absl_test_config") {
  cflags_cc = []
  if (is_win && !is_clang) {
    cflags_cc += [ "/wd4996" ]
  }
  if (is_clang) {
    cflags_cc += [
      "-Wno-deprecated-declarations",
      "-Wno-implicit-const-int-float-conversion",
      "-Wno-unused-private-field",
      "-Wno-unused-function",
    ]
  }
}

if (absl_build_tests) {
  import("//testing/test.gni")

  if (!is_component_build) {
    test("absl_tests") {
      testonly = true
      deps = [
        "absl/algorithm:algorithm_test",
        "absl/algorithm:container_test",
        "absl/base:attributes_test",
        "absl/base:config_test",
        "absl/base:iterator_traits_test",
        "absl/base:no_destructor_test",
        "absl/base:nullability_default_nonnull_test",
        "absl/base:nullability_test",
        "absl/base:poison_test",
        "absl/base:prefetch_test",
        "absl/base:tracing_internal_strong_test",
        "absl/base:tracing_internal_weak_test",
        "absl/cleanup:cleanup_test",
        "absl/container:common_policy_traits_test",
        "absl/container:fixed_array_test",
        "absl/container:flat_hash_map_test",
        "absl/container:flat_hash_set_test",
        "absl/container:hash_function_defaults_test",
        "absl/container:inlined_vector_test",
        "absl/container:node_hash_map_test",
        "absl/container:node_hash_set_test",
        "absl/container:node_slot_policy_test",
        "absl/container:raw_hash_set_allocator_test",
        "absl/container:sample_element_size_test",
        "absl/crc:crc32c_test",
        "absl/crc:crc_cord_state_test",
        "absl/crc:crc_memcpy_test",
        "absl/crc:non_temporal_memcpy_test",
        "absl/debugging:bounded_utf8_length_sequence_test",
        "absl/debugging:decode_rust_punycode_test",
        "absl/debugging:demangle_rust_test",
        "absl/debugging:stacktrace_test",
        "absl/debugging:utf8_for_code_point_test",
        "absl/flags:flag_test",
        "absl/functional:any_invocable_test",
        "absl/functional:function_ref_test",
        "absl/functional:overload_test",
        "absl/hash:hash_instantiated_test",
        "absl/hash:hash_test",
        "absl/hash:low_level_hash_test",
        "absl/log:absl_check_test",
        "absl/log:absl_log_basic_test",
        "absl/log:die_if_null_test",
        "absl/log:flags_test",
        "absl/log:globals_test",
        "absl/log:log_entry_test",
        "absl/log:log_format_test",
        "absl/log:log_macro_hygiene_test",
        "absl/log:log_modifier_methods_test",
        "absl/log:log_sink_test",
        "absl/log:log_streamer_test",
        "absl/log:scoped_mock_log_test",
        "absl/log:stripping_test",
        "absl/log:vlog_is_on_test",
        "absl/log/internal:fnmatch_test",
        "absl/log/internal:stderr_log_sink_test",
        "absl/log/internal:structured_proto_test",
        "absl/memory:memory_test",
        "absl/meta:type_traits_test",
        "absl/numeric:int128_test",
        "absl/profiling:exponential_biased_test",
        "absl/profiling:periodic_sampler_test",
        "absl/random:distributions_test",
        "absl/random:mock_distributions_test",
        "absl/random/internal:nonsecure_base_test",
        "absl/status:status_matchers_test",
        "absl/status:status_test",
        "absl/status:statusor_test",
        "absl/strings:ascii_test",
        "absl/strings:char_formatting_test",
        "absl/strings:charset_test",
        "absl/strings:cord_buffer_test",
        "absl/strings:cord_data_edge_test",
        "absl/strings:cord_rep_btree_navigator_test",
        "absl/strings:cord_rep_btree_reader_test",
        "absl/strings:cord_rep_btree_test",
        "absl/strings:cord_rep_crc_test",
        "absl/strings:cord_test",
        "absl/strings:cordz_functions_test",
        "absl/strings:cordz_handle_test",
        "absl/strings:cordz_info_statistics_test",
        "absl/strings:cordz_info_test",
        "absl/strings:cordz_sample_token_test",
        "absl/strings:cordz_test",
        "absl/strings:cordz_update_scope_test",
        "absl/strings:cordz_update_tracker_test",
        "absl/strings:damerau_levenshtein_distance_test",
        "absl/strings:has_absl_stringify_test",
        "absl/strings:has_ostream_operator_test",
        "absl/strings:match_test",
        "absl/strings:str_cat_test",
        "absl/strings:str_format_arg_test",
        "absl/strings:str_format_bind_test",
        "absl/strings:str_format_checker_test",
        "absl/strings:str_format_convert_test",
        "absl/strings:str_format_extension_test",
        "absl/strings:str_format_output_test",
        "absl/strings:str_format_parser_test",
        "absl/strings:str_format_test",
        "absl/strings:str_replace_test",
        "absl/strings:string_view_test",
        "absl/synchronization:barrier_test",
        "absl/synchronization:graphcycles_test",
        "absl/synchronization:kernel_timeout_internal_test",
        "absl/synchronization:mutex_test",
        "absl/synchronization:per_thread_sem_test",
        "absl/synchronization:waiter_test",
        "absl/time:time_test",
        "absl/types:span_test",
        "absl/types:variant_test",
        "//third_party/googletest:gtest_main",
      ]
    }
  }

  test("absl_hardening_tests") {
    testonly = true
    sources = [ "absl_hardening_test.cc" ]
    deps = [
      ":absl",
      "//base/test:run_all_unittests",
      "//third_party/googletest:gtest",
    ]
  }
}
