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

# function_master_inc: include-provider for -Ifunctionsystem/src/function_master/
# and -Ifunctionsystem/src/
cc_library(
    name = "function_master_inc",
    includes = [
        ".",
        "instance_manager",
        "global_scheduler",
        "scaler",
        "system_function_loader",
        "resource_group_manager",
        "snap_manager",
    ],
    deps = ["//functionsystem/src:src_root_inc"],
    visibility = ["//visibility:public"],
)

# function_master internal sub-libraries
cc_library(
    name = "function_master_common_lib",
    srcs = glob(["common/**/*.cpp"]),
    hdrs = glob(["common/**/*.h"]),
    copts = COPTS,
    deps = [
        ":function_master_inc",
        "//functionsystem/src/common:status",
        "//functionsystem/src/common:rpc",
    ],
    visibility = ["//visibility:private"],
)

cc_library(
    name = "function_master_sublibs",
    srcs = glob([
        "global_scheduler/**/*.cpp",
        "instance_manager/**/*.cpp",
        "scaler/**/*.cpp",
        "system_function_loader/**/*.cpp",
        "resource_group_manager/**/*.cpp",
        "snap_manager/**/*.cpp",
    ]),
    hdrs = glob([
        "global_scheduler/**/*.h",
        "instance_manager/**/*.h",
        "scaler/**/*.h",
        "system_function_loader/**/*.h",
        "resource_group_manager/**/*.h",
        "snap_manager/**/*.h",
    ]),
    copts = COPTS,
    deps = [
        ":function_master_inc",
        ":function_master_common_lib",
        "//functionsystem/src/common:rpc",
        "//functionsystem/src/common:status",
        "//functionsystem/src/meta_store/client/cpp:meta_store_client",
        "//functionsystem/src/common:scheduler",
        "//functionsystem/src/common:utils",
        "//functionsystem/src/common:heartbeat",
        "//functionsystem/src/common:explorer",
        "//functionsystem/src/common:metadata",
        "//functionsystem/src/common:metrics_adapter",
        "//functionsystem/src/common:trace_adapter",
        "//functionsystem/src/common:resource_view",
        "//functionsystem/src/common:leader",
        "//functionsystem/src/common:scheduler_topology",
        "//functionsystem/src/common:kv_client",
        "//functionsystem/src/common:service_json",
        "//functionsystem/src/domain_scheduler:domain_scheduler_lib",
        "//functionsystem/src/common:file_monitor",
        "//functionsystem/src/common:meta_store_adapter",
    ],
    visibility = ["//visibility:private"],
)

# function_master binary
cc_binary(
    name = "function_master",
    srcs = ["main.cpp"],
    copts = COPTS + ["-fPIE"],
    linkopts = ["-pie"],
    deps = [
        ":function_master_inc",
        ":function_master_common_lib",
        ":function_master_sublibs",
        "//functionsystem/src/meta_store/client/cpp:meta_store_client",
        "//functionsystem/src/meta_store/server:meta_store_lib",
        "//functionsystem/src/common:rpc",
        "//functionsystem/src/common:leader",
        "//functionsystem/src/common:utils",
        "//functionsystem/src/common:heartbeat",
        "//functionsystem/src/common:hex",
        "//functionsystem/src/common:trace_adapter",
        "//functionsystem/src/common:all_schedule_plugins",
        "@litebus//:litebus",
        "@logs_sdk//:logs_sdk",
        "@securec//:securec",
    ],
    visibility = ["//visibility:public"],
)