load("@fbsource//tools/build_defs/dirsync:fb_dirsync_cpp_library.bzl", "fb_dirsync_cpp_library")

oncall("fbcode_entropy_wardens_folly")

fb_dirsync_cpp_library(
    name = "checksum",
    srcs = [
        "Checksum.cpp",
    ],
    headers = [
        "Checksum.h",
    ],
    compiler_flags = [
        "-fno-omit-frame-pointer",
    ],
    use_raw_headers = True,
    deps = [
        "//folly:cpu_id",
        "//folly/detail:traponavx512",
        "//folly/external/fast-crc32:avx512_crc32c_v8s3x4",  # @manual
        "//folly/external/fast-crc32:neon_crc32c_v3s4x2e_v2",  # @manual
        "//folly/external/fast-crc32:neon_eor3_crc32_v8s2x4e_s1x2",  # @manual
        "//folly/external/fast-crc32:neon_eor3_crc32c_v8s2x4e_s2x1",  # @manual
        "//folly/external/fast-crc32:sse_crc32c_v8s3x3",  # @manual
        "//folly/hash/detail:checksum_detail",
    ],
    external_deps = [
        "boost",
    ],
)

fb_dirsync_cpp_library(
    name = "farm_hash",
    headers = ["FarmHash.h"],
    use_raw_headers = True,
    exported_deps = [
        "//folly/external/farmhash:farmhash",
    ],
)

fb_dirsync_cpp_library(
    name = "hash",
    headers = ["Hash.h"],
    use_raw_headers = True,
    exported_deps = [
        ":fnv_hash",
        ":hsieh_hash",
        ":murmur_hash",
        ":spooky_hash_v1",
        ":spooky_hash_v2",
        "//folly:c_portability",
        "//folly:portability",
        "//folly:traits",
        "//folly:utility",
        "//folly/lang:bits",
        "//folly/lang:cstring_view",
    ],
)

fb_dirsync_cpp_library(
    name = "murmur_hash",
    headers = ["MurmurHash.h"],
    use_raw_headers = True,
    exported_deps = [
        "//folly:c_portability",
        "//folly/lang:bits",
        "//folly/portability:constexpr",
    ],
)

fb_dirsync_cpp_library(
    name = "rapidhash",
    headers = ["rapidhash.h"],
    use_raw_headers = True,
    exported_deps = [
        "//folly/external/rapidhash:rapidhash",
    ],
)

fb_dirsync_cpp_library(
    name = "spooky_hash_v1",
    srcs = ["SpookyHashV1.cpp"],
    headers = ["SpookyHashV1.h"],
    use_raw_headers = True,
)

fb_dirsync_cpp_library(
    name = "spooky_hash_v2",
    srcs = ["SpookyHashV2.cpp"],
    headers = ["SpookyHashV2.h"],
    use_raw_headers = True,
    exported_deps = [
        "//folly:c_portability",
        "//folly:portability",
        "//folly/lang:c_string",
    ],
)

fb_dirsync_cpp_library(
    name = "traits",
    headers = ["traits.h"],
    use_raw_headers = True,
    exported_deps = [
        "//folly:traits",
    ],
)

fb_dirsync_cpp_library(
    name = "fnv_hash",
    headers = [
        "FnvHash.h",
    ],
    use_raw_headers = True,
)

fb_dirsync_cpp_library(
    name = "hsieh_hash",
    headers = [
        "HsiehHash.h",
    ],
    use_raw_headers = True,
    exported_deps = [
        "//folly/lang:bits",
    ],
)

fb_dirsync_cpp_library(
    name = "unique_hash_key",
    srcs = ["UniqueHashKey.cpp"],
    headers = ["UniqueHashKey.h"],
    use_raw_headers = True,
    deps = [
        "//folly/portability:openssl",
        "//folly/portability:unistd",
    ],
    exported_deps = [
        "fbsource//third-party/blake3:blake3",  # @manual
        "fbsource//third-party/xxHash:xxhash",  # @manual
        "//folly/container:span",
    ],
)
