load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
load("@yuanrong_functionsystem//bazel:yr.bzl", "COPTS")

# function_proxy_inc: include-provider for -Ifunctionsystem/src/function_proxy/
# and -Ifunctionsystem/src/
cc_library(
    name = "function_proxy_inc",
    includes = [
        ".",
        "busproxy",
        "common",
        "common/flags",
        "common/posix_client",
        "common/posix_service",
        "common/posix_auth_interceptor",
        "common/exec_session",
        "common/communication",
        "common/data_view",
        "common/observer",
        "common/state_handler",
        "common/state_machine",
        "common/iam",
        "common/distribute_cache_client",
        "common/data_obj_client",
        "common/rate_limiter",
        "common/common_driver",
    ],
    deps = ["//functionsystem/src:src_root_inc"],
    visibility = ["//visibility:public"],
)

# function_proxy_base_lib — combined busproxy + function_proxy/common
# These two CMake libraries have deep mutual header includes (circular deps in Bazel terms),
# so they are merged into a single cc_library here.
cc_library(
    name = "function_proxy_base_lib",
    srcs = glob([
        "busproxy/instance_proxy/**/*.cpp",
        "busproxy/instance_view/**/*.cpp",
        "busproxy/invocation_handler/**/*.cpp",
        "busproxy/registry/**/*.cpp",
        "busproxy/startup/**/*.cpp",
        "busproxy/memory_monitor/**/*.cpp",
        "common/flags/**/*.cpp",
        "common/posix_client/**/*.cpp",
        "common/posix_service/**/*.cpp",
        "common/posix_auth_interceptor/**/*.cpp",
        "common/exec_session/**/*.cpp",
        "common/communication/**/*.cpp",
        "common/data_view/**/*.cpp",
        "common/observer/**/*.cpp",
        "common/state_handler/**/*.cpp",
        "common/state_machine/**/*.cpp",
        "common/iam/**/*.cpp",
        "common/distribute_cache_client/**/*.cpp",
        "common/data_obj_client/**/*.cpp",
        "common/rate_limiter/**/*.cpp",
        "common/common_driver/**/*.cpp",
    ]),
    hdrs = glob([
        "busproxy/**/*.h",
        "common/**/*.h",
        "common/**/*.hpp",
    ]),
    copts = COPTS + ["-fPIE"],
    deps = [
        ":function_proxy_inc",
        "@litebus//:litebus",
        "@datasystem_sdk//:datasystem_sdk",
        "//functionsystem/src/meta_store/client/cpp:meta_store_client",
        "//functionsystem/src/common:meta_store_adapter",
        "//functionsystem/src/common:utils",
        "//functionsystem/src/common:metadata",
        "//functionsystem/src/common:aksk",
        "//functionsystem/src/common:service_json",
        "//functionsystem/src/common:rpc",
        "//functionsystem/src/common:common_flags",
        "//functionsystem/src/common:resource_lock",
    ],
    visibility = ["//visibility:public"],
)

# function_proxy binary — mirrors CMake's function_proxy executable
cc_binary(
    name = "function_proxy",
    srcs = ["main.cpp"],
    copts = COPTS + ["-fPIE", "-fvisibility=hidden"],
    linkopts = ["-pie"],
    deps = [
        ":function_proxy_inc",
        ":function_proxy_base_lib",
        "//functionsystem/src/function_proxy/local_scheduler:local_scheduler_lib",
        "//functionsystem/src/common:utils",
        "//functionsystem/src/common:resource_lock",
        "//functionsystem/src/function_agent:function_agent_lib",
        "//functionsystem/src/runtime_manager:runtime_manager_lib",
        "//functionsystem/src/common:trace_adapter",
        "//functionsystem/src/common:all_schedule_plugins",
        "@litebus//:litebus",
        "@logs_sdk//:logs_sdk",
        "@securec//:securec",
        "@com_google_protobuf//:protobuf",
        "@com_github_grpc_grpc//:grpc++",
        "@com_github_grpc_grpc//:gpr",
    ],
    visibility = ["//visibility:public"],
)