# 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("//third_party/abseil-cpp/absl.gni")

absl_source_set("traits") {
  public = [ "traits.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/numeric:int128",
  ]
}

absl_source_set("distribution_caller") {
  public = [ "distribution_caller.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:fast_type_id",
    "//third_party/abseil-cpp/absl/utility",
  ]
}

absl_source_set("fast_uniform_bits") {
  public = [ "fast_uniform_bits.h" ]
  deps = [
    ":traits",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/meta:type_traits",
  ]
}

absl_source_set("seed_material") {
  public = [ "seed_material.h" ]
  sources = [ "seed_material.cc" ]
  if (is_win) {
    # TODO(mbonadei): In the bazel file this is -DEFAULTLIB:bcrypt.lib.
    libs = [ "bcrypt.lib" ]
  }
  deps = [
    ":fast_uniform_bits",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:dynamic_annotations",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

absl_source_set("pool_urbg") {
  public = [ "pool_urbg.h" ]
  sources = [ "pool_urbg.cc" ]
  deps = [
    ":randen",
    ":seed_material",
    ":traits",
    "//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:endian",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/random:seed_gen_exception",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

absl_source_set("explicit_seed_seq") {
  testonly = true
  public = [ "explicit_seed_seq.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:endian",
  ]
}

absl_source_set("sequence_urbg") {
  testonly = true
  public = [ "sequence_urbg.h" ]
  deps = [ "//third_party/abseil-cpp/absl/base:config" ]
}

absl_source_set("salted_seed_seq") {
  public = [ "salted_seed_seq.h" ]
  deps = [
    ":seed_material",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

absl_source_set("iostream_state_saver") {
  public = [ "iostream_state_saver.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:int128",
  ]
}

absl_source_set("generate_real") {
  public = [ "generate_real.h" ]
  deps = [
    ":fastmath",
    ":traits",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:bits",
  ]
}

absl_source_set("fastmath") {
  public = [ "fastmath.h" ]
  deps = [ "//third_party/abseil-cpp/absl/numeric:bits" ]
}

absl_source_set("wide_multiply") {
  public = [ "wide_multiply.h" ]
  deps = [
    ":traits",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/numeric:int128",
  ]
}

absl_source_set("nonsecure_base") {
  public = [ "nonsecure_base.h" ]
  deps = [
    ":pool_urbg",
    ":salted_seed_seq",
    ":seed_material",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

absl_source_set("pcg_engine") {
  public = [ "pcg_engine.h" ]
  deps = [
    ":fastmath",
    ":iostream_state_saver",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/numeric:int128",
  ]
}

absl_source_set("randen_engine") {
  public = [ "randen_engine.h" ]
  deps = [
    ":iostream_state_saver",
    ":randen",
    "//third_party/abseil-cpp/absl/base:endian",
    "//third_party/abseil-cpp/absl/meta:type_traits",
  ]
}

absl_source_set("platform") {
  public = [
    "platform.h",
    "randen_traits.h",
  ]
  sources = [ "randen_round_keys.cc" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
  ]
}

absl_source_set("randen") {
  public = [ "randen.h" ]
  sources = [ "randen.cc" ]
  deps = [
    ":platform",
    ":randen_hwaes",
    ":randen_slow",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
}

absl_source_set("randen_slow") {
  public = [ "randen_slow.h" ]
  sources = [ "randen_slow.cc" ]
  deps = [
    ":platform",
    "//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/numeric:int128",
  ]
}

absl_source_set("randen_hwaes") {
  public = [
    "randen_detect.h",
    "randen_hwaes.h",
  ]
  sources = [ "randen_detect.cc" ]
  deps = [
    ":platform",
    ":randen_hwaes_impl",
    "//third_party/abseil-cpp/absl/base:config",
  ]
}

absl_source_set("randen_hwaes_impl") {
  sources = [
    "randen_hwaes.cc",
    "randen_hwaes.h",
  ]
  deps = [
    ":platform",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/numeric:int128",
  ]
}

executable("gaussian_distribution_gentables") {
  sources = [ "gaussian_distribution_gentables.cc" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/random:distributions",
  ]
}

absl_source_set("distribution_test_util") {
  testonly = true
  public = [
    "chi_square.h",
    "distribution_test_util.h",
  ]
  sources = [
    "chi_square.cc",
    "distribution_test_util.cc",
  ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:str_format",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

# TODO(danilchap): Enable when can be compiled on all chromium bots.
# nanobenchmark uses platform specific functions to take accurate current time,
# and fallbacks to clock_gettime. Several chromium configurations lack both
# dedicated code and the clock_gettime system function.
# absl_source_set("nanobenchmark") {
#  sources = [ "nanobenchmark.cc" ]
#  deps = [
#    ":platform",
#    ":randen_engine",
#    "//third_party/abseil-cpp/absl/base:config",
#    "//third_party/abseil-cpp/absl/base:core_headers",
#    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
#  ]
# }

absl_source_set("uniform_helper") {
  public = [ "uniform_helper.h" ]
  deps = [
    ":traits",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:int128",
  ]
}
