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

import("//build_overrides/build.gni")
import("//third_party/abseil-cpp/absl.gni")

absl_source_set("hash") {
  sources = [
    "internal/hash.cc",
    "internal/hash.h",
  ]
  public = [ "hash.h" ]
  deps = [
    ":city",
    ":low_level_hash",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:endian",
    "//third_party/abseil-cpp/absl/container:fixed_array",
    "//third_party/abseil-cpp/absl/functional:function_ref",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:int128",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:variant",
    "//third_party/abseil-cpp/absl/utility",
  ]
}

absl_source_set("hash_testing") {
  testonly = true
  public = [ "hash_testing.h" ]
  deps = [
    ":spy_hash_state",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:variant",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("hash_test") {
  testonly = true
  sources = [ "hash_test.cc" ]
  deps = [
    ":hash",
    ":hash_testing",
    ":spy_hash_state",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/container:btree",
    "//third_party/abseil-cpp/absl/container:flat_hash_map",
    "//third_party/abseil-cpp/absl/container:flat_hash_set",
    "//third_party/abseil-cpp/absl/container:node_hash_map",
    "//third_party/abseil-cpp/absl/container:node_hash_set",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:int128",
    "//third_party/abseil-cpp/absl/strings:cord_test_helpers",
    "//third_party/googletest:gtest",
    "//third_party/googletest:gmock",
  ]
}

absl_source_set("spy_hash_state") {
  testonly = true
  public = [ "internal/spy_hash_state.h" ]
  deps = [
    ":hash",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:str_format",
  ]
  visibility = [ "//third_party/abseil-cpp/absl/*" ]
}

absl_source_set("city") {
  public = [ "internal/city.h" ]
  sources = [ "internal/city.cc" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:endian",
  ]
}

absl_source_set("low_level_hash") {
  public = [ "internal/low_level_hash.h" ]
  sources = [ "internal/low_level_hash.cc" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:endian",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/numeric:int128",
  ]
  visibility = [ ":*" ]
}

absl_source_set("low_level_hash_test") {
  testonly = true
  sources = [ "internal/low_level_hash_test.cc" ]
  deps = [
    ":low_level_hash",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/googletest:gtest",
    "//third_party/googletest:gmock",
  ]
}
