load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "bool_setting")
load("@bazel_skylib//rules:copy_directory.bzl", "copy_directory")
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
load("@rules_cc//cc:defs.bzl", "cc_shared_library")

licenses(["notice"])

exports_files(["LICENSE"])

package(default_visibility = ["//visibility:public"])

config_setting(
    name = "linux_x86_64",
    constraint_values = [
        "@platforms//cpu:x86_64",
        "@platforms//os:linux",
    ],
)

config_setting(
    name = "linux_aarch64",
    constraint_values = [
        "@platforms//cpu:arm64",
        "@platforms//os:linux",
    ],
)

config_setting(
    name = "enable_urma",
    define_values = {"enable_urma": "true"},
    visibility = ["//visibility:public"],
)

config_setting(
    name = "enable_pipeline_h2d",
    define_values = {
        "enable_pipeline_h2d": "true",
        "enable_urma": "true",
    },
    visibility = ["//visibility:public"],
)

config_setting(
    name = "with_tests",
    define_values = {"with_tests": "true"},
    visibility = ["//visibility:public"],
)

cc_shared_library(
    name = "datasystem",
    additional_linker_inputs = ["export_datasystem_symbols.lds"],
    exports_filter = [
        # Required for dynamic_deps consumers (libds_client_py.so):
        # these transitive deps must be declared as exported so Bazel
        # knows their symbols are available from the shared library.
        "//src/datasystem/common/flags:ds_flags",
        "//src/datasystem/common/object_cache:buffer",
        "//src/datasystem/common/perf:common_perf",
        "//src/datasystem/common/util:format",
        "//src/datasystem/common/util:status_helper",
        "//src/datasystem/common/log/spdlog:log_rate_limiter",
        "//src/datasystem/client:client_flags_monitor",
        "//src/datasystem/client:client_worker_common_api",
        "//src/datasystem/client:datasystem",
        "//src/datasystem/client:embedded_client_worker_api",
        "//src/datasystem/client:listen_worker",
        "//src/datasystem/client:mmap_manager",
        "//src/datasystem/client/context",
        "//src/datasystem/client/hetero_cache:hetero_client",
        "//src/datasystem/client/kv_cache:kv_client",
        "//src/datasystem/client/kv_cache:read_only_buffer",
        "//src/datasystem/client/object_cache:client_memory_ref_table",
        "//src/datasystem/client/object_cache:object_client",
        "//src/datasystem/client/object_cache:object_client_impl",
        "//src/datasystem/client/object_cache/client_worker_api:client_worker_base_api",
        "//src/datasystem/client/object_cache/client_worker_api:client_worker_local_api",
        "//src/datasystem/client/object_cache/client_worker_api:client_worker_remote_api",
        "//src/datasystem/client/object_cache/device:client_device_object_manager",
        "//src/datasystem/client/object_cache/device:comm_factory_and_hccl_comm",
        "//src/datasystem/client/object_cache/device:device_memory_unit",
        "//src/datasystem/client/object_cache/device:future",
        "//src/datasystem/client/object_cache/device:p2p_subscribe",
        "//src/datasystem/client/object_cache/device:page_attn_utils",
        "//src/datasystem/client/stream_cache:client_worker_api",
        "//src/datasystem/client/stream_cache:consumer",
        "//src/datasystem/client/stream_cache:producer",
        "//src/datasystem/client/stream_cache:producer_consumer_worker_api",
        "//src/datasystem/client/stream_cache:stream_cache_impl",
        "//src/datasystem/client/stream_cache:stream_client",
        "//src/datasystem/client/perf_client:perf_client_lib",
        # tbb, spdlog, securec - required by dynamic_deps consumers
        "@tbb//:tbb",
        "@ds-spdlog//:ds-spdlog",
        "@securec//:securec",
        # absl - transitive deps required by dynamic_deps consumers
        "@com_google_absl//absl/base:base",
        "@com_google_absl//absl/base:log_severity",
        "@com_google_absl//absl/base:malloc_internal",
        "@com_google_absl//absl/base:raw_logging_internal",
        "@com_google_absl//absl/base:spinlock_wait",
        "@com_google_absl//absl/base:strerror",
        "@com_google_absl//absl/base:throw_delegate",
        "@com_google_absl//absl/base:tracing_internal",
        "@com_google_absl//absl/debugging:debugging_internal",
        "@com_google_absl//absl/debugging:demangle_internal",
        "@com_google_absl//absl/debugging:demangle_rust",
        "@com_google_absl//absl/debugging:decode_rust_punycode",
        "@com_google_absl//absl/debugging:examine_stack",
        "@com_google_absl//absl/debugging:stacktrace",
        "@com_google_absl//absl/debugging:symbolize",
        "@com_google_absl//absl/debugging:utf8_for_code_point",
        "@com_google_absl//absl/hash:hash",
        "@com_google_absl//absl/hash:city",
        "@com_google_absl//absl/hash:low_level_hash",
        "@com_google_absl//absl/log:globals",
        "@com_google_absl//absl/log:log_entry",
        "@com_google_absl//absl/log:log_sink",
        "@com_google_absl//absl/log/internal:conditions",
        "@com_google_absl//absl/log/internal:fnmatch",
        "@com_google_absl//absl/log/internal:format",
        "@com_google_absl//absl/log/internal:globals",
        "@com_google_absl//absl/log/internal:log_message",
        "@com_google_absl//absl/log/internal:log_sink_set",
        "@com_google_absl//absl/log/internal:nullguard",
        "@com_google_absl//absl/log/internal:proto",
        "@com_google_absl//absl/log/internal:structured_proto",
        "@com_google_absl//absl/log/internal:vlog_config",
        "@com_google_absl//absl/numeric:int128",
        "@com_google_absl//absl/strings:internal",
        "@com_google_absl//absl/strings:str_format_internal",
        "@com_google_absl//absl/strings:string_view",
        "@com_google_absl//absl/strings:strings",
        "@com_google_absl//absl/synchronization:graphcycles_internal",
        "@com_google_absl//absl/synchronization:kernel_timeout_internal",
        "@com_google_absl//absl/synchronization:synchronization",
        "@com_google_absl//absl/time:time",
        "@com_google_absl//absl/time/internal/cctz:civil_time",
        "@com_google_absl//absl/time/internal/cctz:time_zone",
        "@com_google_absl//absl/types:bad_optional_access",
        "@com_google_absl//absl/types:bad_variant_access",
        # absl - additional deps for dsbench_cpp/worker dynamic_deps
        "@com_google_absl//absl/status:statusor",
        "@com_google_absl//absl/status:status",
        "@com_google_absl//absl/container:raw_hash_set",
        "@com_google_absl//absl/strings:cord",
        "@com_google_absl//absl/strings:cordz_info",
        "@com_google_absl//absl/strings:cord_internal",
        "@com_google_absl//absl/strings:cordz_functions",
        "@com_google_absl//absl/strings:cordz_handle",
        "@com_google_absl//absl/crc:crc_cord_state",
        "@com_google_absl//absl/crc:crc32c",
        "@com_google_absl//absl/crc:crc_internal",
        "@com_google_absl//absl/crc:cpu_detect",
        "@com_google_absl//absl/container:hashtablez_sampler",
        "@com_google_absl//absl/profiling:exponential_biased",
        "@com_google_absl//absl/log/internal:check_op",
        "@com_google_absl//absl/debugging:leak_check",
        # protobuf - required for dsbench_cpp/worker dynamic_deps
        "@zlib//:zlib",
        "@re2//:re2",
        "@zmq//:zmq",
        "@boringssl//src:crypto_cxx",
        "@boringssl//src:crypto_internal",
        "@boringssl//src:ssl_internal",
        "@com_google_protobuf//src/google/protobuf/io:printer",
        "@com_google_protobuf//src/google/protobuf/io:zero_copy_sink",
        "@com_google_protobuf//third_party/utf8_range:utf8_validity",
        "@com_google_protobuf//third_party/utf8_range:utf8_range",
        "@com_google_protobuf//src/google/protobuf/io:tokenizer",
        "@com_google_protobuf//src/google/protobuf/io:io",
        "@com_google_protobuf//src/google/protobuf/io:io_win32",
        "@com_google_protobuf//src/google/protobuf:arena",
        "@com_google_protobuf//src/google/protobuf:arena_align",
        "@com_google_protobuf//src/google/protobuf/stubs:lite",
        "@com_google_protobuf//src/google/protobuf:port",
        "@com_google_protobuf//src/google/protobuf/io:gzip_stream",
        "@com_google_protobuf//src/google/protobuf:protobuf",
        "@com_google_protobuf//src/google/protobuf:protobuf_lite",
        "@com_google_protobuf//src/google/protobuf:any_proto",
        "@com_google_protobuf//src/google/protobuf:api_proto",
        "@com_google_protobuf//src/google/protobuf:duration_proto",
        "@com_google_protobuf//src/google/protobuf:empty_proto",
        "@com_google_protobuf//src/google/protobuf:field_mask_proto",
        "@com_google_protobuf//src/google/protobuf:source_context_proto",
        "@com_google_protobuf//src/google/protobuf:struct_proto",
        "@com_google_protobuf//src/google/protobuf:timestamp_proto",
        "@com_google_protobuf//src/google/protobuf:type_proto",
        "@com_google_protobuf//src/google/protobuf:wrappers_proto",
        "@com_google_protobuf//src/google/protobuf/util:delimited_message_util",
        "@com_google_protobuf//src/google/protobuf/util:differencer",
        "@com_google_protobuf//src/google/protobuf/util:field_mask_util",
        "@com_google_protobuf//src/google/protobuf/util:time_util",
        "@com_google_protobuf//src/google/protobuf/util:type_resolver",
        "@com_google_protobuf//src/google/protobuf/json:json",
        "@com_google_protobuf//src/google/protobuf/json:lexer",
        "@com_google_protobuf//src/google/protobuf/json:message_path",
        "@com_google_protobuf//src/google/protobuf/json:parser",
        "@com_google_protobuf//src/google/protobuf/json:unparser",
        "@com_google_protobuf//src/google/protobuf/json:untyped_message",
        "@com_google_protobuf//src/google/protobuf/json:writer",
        "@com_google_protobuf//src/google/protobuf/json:zero_copy_buffered_stream",
        "@com_google_protobuf//src/google/protobuf/testing:file",
        "@com_google_protobuf//src/google/protobuf/compiler:code_generator",
        "@com_google_protobuf//src/google/protobuf/compiler:command_line_interface",
        "@com_google_protobuf//src/google/protobuf/compiler:importer",
        "@com_google_protobuf//src/google/protobuf/compiler:protoc_lib",
        "@com_google_protobuf//src/google/protobuf/compiler:retention",
        "@com_google_protobuf//src/google/protobuf/compiler:versions",
        "@com_google_protobuf//src/google/protobuf/compiler/cpp:cpp",
        "@com_google_protobuf//src/google/protobuf/compiler/cpp:names_internal",
        "@com_google_protobuf//src/google/protobuf/compiler/csharp:csharp",
        "@com_google_protobuf//src/google/protobuf/compiler/csharp:names",
        "@com_google_protobuf//src/google/protobuf/compiler/java/full:eg",
        "@com_google_protobuf//src/google/protobuf/compiler/java/full:fgs",
        "@com_google_protobuf//src/google/protobuf/compiler/java/full:full",
        "@com_google_protobuf//src/google/protobuf/compiler/java/full:mfg",
        "@com_google_protobuf//src/google/protobuf/compiler/java/full:service",
        "@com_google_protobuf//src/google/protobuf/compiler/java/lite:field_generators",
        "@com_google_protobuf//src/google/protobuf/compiler/java/lite:lite",
        "@com_google_protobuf//src/google/protobuf/compiler/java:generator_common",
        "@com_google_protobuf//src/google/protobuf/compiler/java:helpers",
        "@com_google_protobuf//src/google/protobuf/compiler/java:internal_helpers",
        "@com_google_protobuf//src/google/protobuf/compiler/java:java",
        "@com_google_protobuf//src/google/protobuf/compiler/java:java_features_bootstrap",
        "@com_google_protobuf//src/google/protobuf/compiler/java:kotlin",
        "@com_google_protobuf//src/google/protobuf/compiler/java:message_serialization",
        "@com_google_protobuf//src/google/protobuf/compiler/objectivec:line_consumer",
        "@com_google_protobuf//src/google/protobuf/compiler/objectivec:names_internal",
        "@com_google_protobuf//src/google/protobuf/compiler/objectivec:objectivec",
        "@com_google_protobuf//src/google/protobuf/compiler/php:names",
        "@com_google_protobuf//src/google/protobuf/compiler/php:php",
        "@com_google_protobuf//src/google/protobuf/compiler/python:python",
        "@com_google_protobuf//src/google/protobuf/compiler/ruby:ruby",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:context",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:crate_mapping",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:enum",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:message",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:naming",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:oneof",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:relative_path",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:rust",
        "@com_google_protobuf//src/google/protobuf/compiler/rust:rust_field_type",
        "@com_google_protobuf//src/google/protobuf/compiler/rust/accessors:accessors",
        "@com_google_protobuf//upb_generator:mangle",
        # absl flags - additional for dsbench_cpp/worker
        "@com_google_absl//absl/flags:commandlineflag",
        "@com_google_absl//absl/flags:commandlineflag_internal",
        "@com_google_absl//absl/flags:config",
        "@com_google_absl//absl/flags:flag_internal",
        "@com_google_absl//absl/flags:marshalling",
        "@com_google_absl//absl/flags:private_handle_accessor",
        "@com_google_absl//absl/flags:program_name",
        "@com_google_absl//absl/flags:reflection",
        "@com_google_absl//absl/log:die_if_null",
        "@com_google_absl//absl/log:initialize",
        # internal targets also needed
        "//src/datasystem/common/inject:common_inject",
        "//src/datasystem/common/rpc/zmq:zmq_message",
        "//src/datasystem/common/util:common_util_impl",
        "//src/datasystem/common/util:strings_util",
    ],
    user_link_flags = [
        "-Wl,--exclude-libs,ALL",
        "-Wl,--version-script,$(location export_datasystem_symbols.lds)",
        "-Wl,-Bsymbolic",
        "-Wl,-rpath,$$ORIGIN",
        "-Wl,-rpath,$$ORIGIN/lib",
    ],
    visibility = ["//visibility:public"],
    deps = [
        "//src/datasystem/client:client_flags_monitor",
        "//src/datasystem/client:client_worker_common_api",
        "//src/datasystem/client:datasystem",
        "//src/datasystem/client:embedded_client_worker_api",
        "//src/datasystem/client:listen_worker",
        "//src/datasystem/client:mmap_manager",
        "//src/datasystem/client/context",
        "//src/datasystem/client/hetero_cache:hetero_client",
        "//src/datasystem/client/kv_cache:kv_client",
        "//src/datasystem/client/kv_cache:read_only_buffer",
        "//src/datasystem/client/object_cache:client_memory_ref_table",
        "//src/datasystem/client/object_cache:object_client",
        "//src/datasystem/client/object_cache:object_client_impl",
        "//src/datasystem/client/object_cache/client_worker_api:client_worker_base_api",
        "//src/datasystem/client/object_cache/client_worker_api:client_worker_local_api",
        "//src/datasystem/client/object_cache/client_worker_api:client_worker_remote_api",
        "//src/datasystem/client/object_cache/device:client_device_object_manager",
        "//src/datasystem/client/object_cache/device:comm_factory_and_hccl_comm",
        "//src/datasystem/client/object_cache/device:device_memory_unit",
        "//src/datasystem/client/object_cache/device:future",
        "//src/datasystem/client/object_cache/device:p2p_subscribe",
        "//src/datasystem/client/object_cache/device:page_attn_utils",
        "//src/datasystem/client/stream_cache:client_worker_api",
        "//src/datasystem/client/stream_cache:consumer",
        "//src/datasystem/client/stream_cache:producer",
        "//src/datasystem/client/stream_cache:producer_consumer_worker_api",
        "//src/datasystem/client/stream_cache:stream_cache_impl",
        "//src/datasystem/client/stream_cache:stream_client",
        "//src/datasystem/client/perf_client:perf_client_lib",
        "//src/datasystem/common/object_cache:buffer",
        "@com_google_protobuf//upb:wire",
    ],
)

# --- Strip + Symbol for datasystem_worker ---
genrule(
    name = "datasystem_worker_sym",
    srcs = ["//src/datasystem/worker:datasystem_worker"],
    outs = ["datasystem_worker.sym"],
    cmd = "objcopy --only-keep-debug $(location //src/datasystem/worker:datasystem_worker) $@",
    output_to_bindir = True,
)

genrule(
    name = "datasystem_worker_stripped",
    srcs = [
        "//src/datasystem/worker:datasystem_worker",
        ":datasystem_worker_sym",
    ],
    outs = ["datasystem_worker.stripped"],
    cmd = """
cp $(location //src/datasystem/worker:datasystem_worker) $@
chmod +w $@
objcopy --add-gnu-debuglink=$(location :datasystem_worker_sym) $@
objcopy --strip-all $@
""",
    output_to_bindir = True,
)

copy_file(
    name = "datasystem_worker_file",
    src = ":datasystem_worker_stripped",
    out = "yr/datasystem/datasystem_worker",
    visibility = [
        "//bazel:__pkg__",
    ],
)

copy_file(
    name = "datasystem_worker_sym_file",
    src = ":datasystem_worker_sym",
    out = "yr/datasystem/service/DATASYSTEM_SYM/datasystem_worker.sym",
    visibility = [
        "//bazel:__pkg__",
    ],
)

# --- Worker shared library ---
copy_file(
    name = "libdatasystem_worker_shared_file",
    src = "//src/datasystem/worker:datasystem_worker_shared",
    out = "yr/datasystem/service/libdatasystem_worker.so",
    visibility = [
        "//bazel:__pkg__",
    ],
)

# --- Strip for libds_client_py.so ---
genrule(
    name = "libds_client_py_sym",
    srcs = ["//src/datasystem/pybind_api:libds_client_py"],
    outs = ["libds_client_py.so.sym"],
    cmd = "objcopy --only-keep-debug $(location //src/datasystem/pybind_api:libds_client_py) $@",
    output_to_bindir = True,
)

genrule(
    name = "libds_client_py_stripped",
    srcs = [
        "//src/datasystem/pybind_api:libds_client_py",
        ":libds_client_py_sym",
    ],
    outs = ["libds_client_py.so.stripped"],
    cmd = """
cp $(location //src/datasystem/pybind_api:libds_client_py) $@
chmod +w $@
objcopy --add-gnu-debuglink=$(location :libds_client_py_sym) $@
objcopy --strip-all $@
""",
    output_to_bindir = True,
)

copy_file(
    name = "libds_client_py_file",
    src = ":libds_client_py_stripped",
    out = "yr/datasystem/lib/libds_client_py.so",
    visibility = [
        "//bazel:__pkg__",
        "//python:__subpackages__",
    ],
)

# --- Strip for dsbench_cpp ---
genrule(
    name = "dsbench_cpp_sym",
    srcs = ["//dsbench/src:dsbench_cpp"],
    outs = ["dsbench_cpp.sym"],
    cmd = "objcopy --only-keep-debug $(location //dsbench/src:dsbench_cpp) $@",
    output_to_bindir = True,
)

genrule(
    name = "dsbench_cpp_stripped",
    srcs = [
        "//dsbench/src:dsbench_cpp",
        ":dsbench_cpp_sym",
    ],
    outs = ["dsbench_cpp.stripped"],
    cmd = """
cp $(location //dsbench/src:dsbench_cpp) $@
chmod +w $@
objcopy --add-gnu-debuglink=$(location :dsbench_cpp_sym) $@
objcopy --strip-all $@
""",
    output_to_bindir = True,
)

copy_file(
    name = "dsbench_file",
    src = ":dsbench_cpp_stripped",
    out = "yr/datasystem/dsbench_cpp",
    visibility = [
        "//bazel:__pkg__",
    ],
)

# --- Strip + Symbol for libdatasystem.so ---
genrule(
    name = "libdatasystem_sym",
    srcs = ["//:datasystem"],
    outs = ["libdatasystem.so.sym"],
    cmd = "objcopy --only-keep-debug $(location //:datasystem) $@",
    output_to_bindir = True,
)

genrule(
    name = "libdatasystem_stripped",
    srcs = [
        "//:datasystem",
        ":libdatasystem_sym",
    ],
    outs = ["libdatasystem.so.stripped"],
    cmd = """
cp $(location //:datasystem) $@
chmod +w $@
objcopy --add-gnu-debuglink=$(location :libdatasystem_sym) $@
objcopy --strip-all $@
""",
    output_to_bindir = True,
)

copy_file(
    name = "libdatasystem_file",
    src = ":libdatasystem_stripped",
    out = "yr/datasystem/lib/libdatasystem.so",
    visibility = [
        "//bazel:__pkg__",
    ],
)

copy_file(
    name = "libdatasystem_sym_file",
    src = ":libdatasystem_sym",
    out = "yr/datasystem/DATASYSTEM_SYM/libdatasystem.so.sym",
    visibility = [
        "//bazel:__pkg__",
    ],
)

copy_directory(
    name = "cli_files",
    src = "cli",
    out = "yr/datasystem/cli",
)

copy_directory(
    name = "cpp_template_files",
    src = "cli/cpp_template",
    out = "yr/datasystem/cpp_template",
)

# Daemonset entrypoint files - use genrule with explicit file listing
genrule(
    name = "dockerentry_daemonset_files",
    srcs = [
        "k8s/docker/entrypoint/check_taint.sh",
        "k8s/docker/entrypoint/file_check.sh",
        "k8s/docker/entrypoint/install.sh",
        "k8s/docker/entrypoint/liveness_check.sh",
        "k8s/docker/entrypoint/utils.sh",
        "k8s/docker/entrypoint/worker_entry.sh",
        "k8s/docker/exitpoint/uninstall.sh",
    ],
    outs = [
        "yr/datasystem/docker_entryfile/daemonset/check_taint.sh",
        "yr/datasystem/docker_entryfile/daemonset/file_check.sh",
        "yr/datasystem/docker_entryfile/daemonset/install.sh",
        "yr/datasystem/docker_entryfile/daemonset/liveness_check.sh",
        "yr/datasystem/docker_entryfile/daemonset/utils.sh",
        "yr/datasystem/docker_entryfile/daemonset/worker_entry.sh",
        "yr/datasystem/docker_entryfile/daemonset/uninstall.sh",
    ],
    cmd = " && ".join([
        "cp $(location k8s/docker/entrypoint/check_taint.sh) $(@D)/yr/datasystem/docker_entryfile/daemonset/",
        "cp $(location k8s/docker/entrypoint/file_check.sh) $(@D)/yr/datasystem/docker_entryfile/daemonset/",
        "cp $(location k8s/docker/entrypoint/install.sh) $(@D)/yr/datasystem/docker_entryfile/daemonset/",
        "cp $(location k8s/docker/entrypoint/liveness_check.sh) $(@D)/yr/datasystem/docker_entryfile/daemonset/",
        "cp $(location k8s/docker/entrypoint/utils.sh) $(@D)/yr/datasystem/docker_entryfile/daemonset/",
        "cp $(location k8s/docker/entrypoint/worker_entry.sh) $(@D)/yr/datasystem/docker_entryfile/daemonset/",
        "cp $(location k8s/docker/exitpoint/uninstall.sh) $(@D)/yr/datasystem/docker_entryfile/daemonset/",
    ]),
)

# Deployment entrypoint files
genrule(
    name = "dockerentry_deployment_files",
    srcs = [
        "k8s_deployment/docker/entrypoint/file_check.sh",
        "k8s_deployment/docker/entrypoint/liveness_check.sh",
        "k8s_deployment/docker/entrypoint/utils.sh",
        "k8s_deployment/docker/entrypoint/worker_entry.sh",
        "k8s_deployment/docker/exitpoint/uninstall.sh",
    ],
    outs = [
        "yr/datasystem/docker_entryfile/deployment/file_check.sh",
        "yr/datasystem/docker_entryfile/deployment/liveness_check.sh",
        "yr/datasystem/docker_entryfile/deployment/utils.sh",
        "yr/datasystem/docker_entryfile/deployment/worker_entry.sh",
        "yr/datasystem/docker_entryfile/deployment/uninstall.sh",
    ],
    cmd = " && ".join([
        "cp $(location k8s_deployment/docker/entrypoint/file_check.sh) $(@D)/yr/datasystem/docker_entryfile/deployment/",
        "cp $(location k8s_deployment/docker/entrypoint/liveness_check.sh) $(@D)/yr/datasystem/docker_entryfile/deployment/",
        "cp $(location k8s_deployment/docker/entrypoint/utils.sh) $(@D)/yr/datasystem/docker_entryfile/deployment/",
        "cp $(location k8s_deployment/docker/entrypoint/worker_entry.sh) $(@D)/yr/datasystem/docker_entryfile/deployment/",
        "cp $(location k8s_deployment/docker/exitpoint/uninstall.sh) $(@D)/yr/datasystem/docker_entryfile/deployment/",
    ]),
)

copy_directory(
    name = "helm_chart_files",
    src = "k8s/helm_chart",
    out = "yr/datasystem/helm_chart",
)

copy_directory(
    name = "datasystem_header_files",
    src = "include/datasystem",
    out = "yr/datasystem/include/datasystem",
)

copy_file(
    name = "readme_file",
    src = "README.md",
    out = "yr/datasystem/README.md",
)

copy_file(
    name = "version_file",
    src = "VERSION",
    out = "yr/datasystem/VERSION",
)

load("//bazel:git_version.bzl", "commit_id_file")

commit_id_file(
    name = "commit_id_file",
    out = "yr/datasystem/.commit_id",
)

copy_file(
    name = "cluster_config_file",
    src = "cli/deploy/conf/cluster_config.json",
    out = "yr/datasystem/cluster_config.json",
)

copy_file(
    name = "worker_config_file",
    src = "cli/deploy/conf/worker_config.json",
    out = "yr/datasystem/worker_config.json",
)

# --- Tools ---
copy_file(
    name = "hashring_parser_file",
    src = "//tests/st:hashring_parser",
    out = "yr/datasystem/tools/hashring_parser",
    visibility = [
        "//bazel:__pkg__",
    ],
)

copy_file(
    name = "curve_keygen_file",
    src = "//tests/st/common/rpc:curvekey_generator",
    out = "yr/datasystem/tools/curve_keygen",
    visibility = [
        "//bazel:__pkg__",
    ],
)