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

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

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

absl_source_set("crc_internal") {
  public = [
    "internal/crc.h",
    "internal/crc32_x86_arm_combined_simd.h",
  ]
  sources = [
    "internal/crc.cc",
    "internal/crc_internal.h",
    "internal/crc_x86_arm_combined.cc",
  ]
  deps = [
    ":cpu_detect",
    "//flutter/third_party/abseil-cpp/absl/base:config",
    "//flutter/third_party/abseil-cpp/absl/base:core_headers",
    "//flutter/third_party/abseil-cpp/absl/base:endian",
    "//flutter/third_party/abseil-cpp/absl/base:prefetch",
    "//flutter/third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//flutter/third_party/abseil-cpp/absl/memory",
    "//flutter/third_party/abseil-cpp/absl/numeric:bits",
  ]
  visibility = [ ":*" ]
}

absl_source_set("crc32c") {
  public = [
    "crc32c.h",
    "internal/crc32c.h",
    "internal/crc_memcpy.h",
  ]
  sources = [
    "crc32c.cc",
    "internal/crc32c_inline.h",
    "internal/crc_memcpy_fallback.cc",
    "internal/crc_memcpy_x86_arm_combined.cc",
    "internal/crc_non_temporal_memcpy.cc",
  ]
  deps = [
    ":cpu_detect",
    ":crc_internal",
    ":non_temporal_memcpy",
    "//flutter/third_party/abseil-cpp/absl/base:config",
    "//flutter/third_party/abseil-cpp/absl/base:core_headers",
    "//flutter/third_party/abseil-cpp/absl/base:endian",
    "//flutter/third_party/abseil-cpp/absl/base:prefetch",
    "//flutter/third_party/abseil-cpp/absl/strings:str_format",
    "//flutter/third_party/abseil-cpp/absl/strings:string_view",
  ]
}

absl_test("crc32c_test") {
  sources = [ "crc32c_test.cc" ]
  deps = [
    ":crc32c",
    "//flutter/third_party/abseil-cpp/absl/strings",
    "//flutter/third_party/abseil-cpp/absl/strings:str_format",
    "//flutter/third_party/abseil-cpp/absl/strings:string_view",
  ]
}

absl_source_set("non_temporal_arm_intrinsics") {
  public = [ "internal/non_temporal_arm_intrinsics.h" ]
  deps = [ "//flutter/third_party/abseil-cpp/absl/base:config" ]
  visibility = [ ":*" ]
}

absl_source_set("non_temporal_memcpy") {
  public = [ "internal/non_temporal_memcpy.h" ]
  deps = [
    ":non_temporal_arm_intrinsics",
    "//flutter/third_party/abseil-cpp/absl/base:config",
    "//flutter/third_party/abseil-cpp/absl/base:core_headers",
  ]
  visibility = [ ":*" ]
}

absl_test("crc_memcpy_test") {
  sources = [ "internal/crc_memcpy_test.cc" ]
  deps = [
    ":crc32c",
    "//flutter/third_party/abseil-cpp/absl/memory",
    "//flutter/third_party/abseil-cpp/absl/random",
    "//flutter/third_party/abseil-cpp/absl/random:distributions",
    "//flutter/third_party/abseil-cpp/absl/strings",
    "//flutter/third_party/abseil-cpp/absl/strings:string_view",
  ]
}

absl_test("non_temporal_memcpy_test") {
  sources = [ "internal/non_temporal_memcpy_test.cc" ]
  deps = [ ":non_temporal_memcpy" ]
}

absl_source_set("crc_cord_state") {
  public = [ "internal/crc_cord_state.h" ]
  sources = [ "internal/crc_cord_state.cc" ]
  deps = [
    ":crc32c",
    "//flutter/third_party/abseil-cpp/absl/base:config",
    "//flutter/third_party/abseil-cpp/absl/base:no_destructor",
    "//flutter/third_party/abseil-cpp/absl/numeric:bits",
  ]
  visibility = [
    "//flutter/third_party/abseil-cpp/absl/crc/*",
    "//flutter/third_party/abseil-cpp/absl/strings:*",
  ]
}

absl_test("crc_cord_state_test") {
  sources = [ "internal/crc_cord_state_test.cc" ]
  deps = [
    ":crc32c",
    ":crc_cord_state",
  ]
}
