load("@fbcode_macros//build_defs:build_file_migration.bzl", "fbcode_target", "non_fbcode_target")
load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library")
load(
    "@fbsource//xplat/folly:defs.bzl",
    "DEFAULT_APPLE_SDKS",
    "folly_xplat_library",
)
load("@fbsource//xplat/pfh/triage_InfrastructureSupermoduleOptou:DEFS.bzl", "triage_InfrastructureSupermoduleOptou")

oncall("fbcode_entropy_wardens_folly")

# xplat build rules

non_fbcode_target(
    _kind = folly_xplat_library,
    name = "base",
    apple_sdks = DEFAULT_APPLE_SDKS,
    feature = triage_InfrastructureSupermoduleOptou,
    raw_headers = [
        "Base.h",
        "Base-inl.h",
    ],
    deps = [
        "fbsource//xplat/folly/gen:core",
        "//third-party/range-v3:range-v3",
        "//xplat/folly:conv",
        "//xplat/folly:optional",
        "//xplat/folly:portability",
        "//xplat/folly:range",
        "//xplat/folly:utility",
        "//xplat/folly/container:access",
        "//xplat/folly/container:f14_hash",
        "//xplat/folly/functional:invoke",
    ],
)

non_fbcode_target(
    _kind = folly_xplat_library,
    name = "combine",
    feature = triage_InfrastructureSupermoduleOptou,
    raw_headers = [
        "Combine.h",
        "Combine-inl.h",
    ],
    deps = [
        "fbsource//xplat/folly/gen:base",
    ],
)

non_fbcode_target(
    _kind = folly_xplat_library,
    name = "core",
    feature = triage_InfrastructureSupermoduleOptou,
    raw_headers = [
        "Core.h",
        "Core-inl.h",
    ],
    deps = [
        "//xplat/folly:portability",
    ],
)

non_fbcode_target(
    _kind = folly_xplat_library,
    name = "file",
    feature = triage_InfrastructureSupermoduleOptou,
    raw_headers = [
        "File.h",
        "File-inl.h",
    ],
    deps = [
        "fbsource//xplat/folly/io:iobuf",
        ":base",
        ":string",
        "//xplat/folly:exception",
        "//xplat/folly:file",
    ],
)

non_fbcode_target(
    _kind = folly_xplat_library,
    name = "istream",
    feature = triage_InfrastructureSupermoduleOptou,
    raw_headers = [
        "IStream.h",
    ],
    deps = [
        "fbsource//xplat/folly/gen:core",
    ],
)

non_fbcode_target(
    _kind = folly_xplat_library,
    name = "parallel",
    feature = triage_InfrastructureSupermoduleOptou,
    raw_headers = [
        "Parallel.h",
        "Parallel-inl.h",
    ],
    deps = [
        "fbsource//xplat/folly/experimental:event_count",
        ":base",
        "//xplat/folly:mpmc_queue",
        "//xplat/folly:scope_guard",
    ],
)

non_fbcode_target(
    _kind = folly_xplat_library,
    name = "parallel_map",
    feature = triage_InfrastructureSupermoduleOptou,
    raw_headers = [
        "ParallelMap.h",
        "ParallelMap-inl.h",
    ],
    deps = [
        "fbsource//xplat/folly/experimental:event_count",
        ":core",
        "//xplat/folly:expected",
        "//xplat/folly:mpmc_pipeline",
        "//xplat/folly/functional:invoke",
    ],
)

non_fbcode_target(
    _kind = folly_xplat_library,
    name = "string",
    feature = triage_InfrastructureSupermoduleOptou,
    raw_headers = [
        "String.h",
        "String-inl.h",
    ],
    exported_deps = [
        "fbsource//xplat/folly/io:iobuf",
        ":base",
        "//xplat/folly:conv",
        "//xplat/folly:portability",
        "//xplat/folly:range",
        "//xplat/folly:string",
    ],
)

# fbcode build rules

fbcode_target(
    _kind = cpp_library,
    name = "base",
    headers = [
        "Base.h",
        "Base-inl.h",
    ],
    exported_deps = [
        "fbsource//third-party/range-v3:range-v3",
        ":core",
        "//folly:conv",
        "//folly:function",
        "//folly:optional",
        "//folly:portability",
        "//folly:range",
        "//folly:utility",
        "//folly/container:access",
        "//folly/container:f14_hash",
        "//folly/functional:invoke",
    ],
)

fbcode_target(
    _kind = cpp_library,
    name = "combine",
    headers = [
        "Combine.h",
        "Combine-inl.h",
    ],
    exported_deps = [":base"],
)

fbcode_target(
    _kind = cpp_library,
    name = "core",
    headers = [
        "Core.h",
        "Core-inl.h",
    ],
    exported_deps = ["//folly:portability"],
)

fbcode_target(
    _kind = cpp_library,
    name = "file",
    headers = [
        "File.h",
        "File-inl.h",
    ],
    exported_deps = [
        ":base",
        ":string",
        "//folly:exception",
        "//folly:file",
        "//folly/io:iobuf",
    ],
)

fbcode_target(
    _kind = cpp_library,
    name = "parallel",
    headers = [
        "Parallel.h",
        "Parallel-inl.h",
    ],
    exported_deps = [
        ":base",
        "//folly:mpmc_queue",
        "//folly:scope_guard",
        "//folly/synchronization:event_count",
    ],
)

fbcode_target(
    _kind = cpp_library,
    name = "parallel_map",
    headers = [
        "ParallelMap.h",
        "ParallelMap-inl.h",
    ],
    exported_deps = [
        ":core",
        "//folly:expected",
        "//folly:mpmc_pipeline",
        "//folly/functional:invoke",
        "//folly/synchronization:event_count",
    ],
)

fbcode_target(
    _kind = cpp_library,
    name = "string",
    headers = [
        "String.h",
        "String-inl.h",
    ],
    exported_deps = [
        ":base",
        "//folly:conv",
        "//folly:portability",
        "//folly:range",
        "//folly:string",
        "//folly/io:iobuf",
    ],
)

fbcode_target(
    _kind = cpp_library,
    name = "istream",
    headers = [
        "IStream.h",
    ],
    exported_deps = [
        ":core",
    ],
)
