# Licensed under the Apache-2.0 license

exports_files(["src/main.rs"])

load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
load("@pigweed//pw_kernel/tooling:rust_app.bzl", "rust_app")

rust_library(
    name = "mctp_server_lib",
    srcs = [
        "src/direct_client.rs",
        "src/dispatch.rs",
        "src/lib.rs",
        "src/server.rs",
    ],
    crate_features = ["direct-client"],
    crate_name = "openprot_mctp_server",
    edition = "2024",
    visibility = ["//visibility:public"],
    deps = [
        "//services/mctp/api:mctp_api",
        "@rust_crates//:heapless",
        "@rust_crates//:mctp",
        "@rust_crates//:mctp-lib",
        "@pigweed//pw_log/rust:pw_log",
    ],
)

rust_test(
    name = "mctp_server_test",
    crate = ":mctp_server_lib",
)

# Integration tests — each tests/ file is its own Bazel test target.
# All share tests/common/mod.rs for fixtures (BufferSender, DirectClient, etc.).
# No I2C transport dependency; the mock Sender replaces it entirely.

rust_test(
    name = "mctp_server_echo_test",
    srcs = [
        "tests/echo.rs",
        "tests/common/mod.rs",
    ],
    crate_root = "tests/echo.rs",
    edition = "2024",
    deps = [
        ":mctp_server_lib",
        "//services/mctp/api:mctp_api",
        "@rust_crates//:mctp",
        "@rust_crates//:mctp-lib",
    ],
)

rust_test(
    name = "mctp_server_dispatch_test",
    srcs = [
        "tests/dispatch.rs",
        "tests/common/mod.rs",
    ],
    crate_root = "tests/dispatch.rs",
    edition = "2024",
    deps = [
        ":mctp_server_lib",
        "//services/mctp/api:mctp_api",
        "@rust_crates//:mctp",
        "@rust_crates//:mctp-lib",
    ],
)

rust_test(
    name = "mctp_server_unit_test",
    srcs = [
        "tests/server_unit.rs",
        "tests/common/mod.rs",
    ],
    crate_root = "tests/server_unit.rs",
    edition = "2024",
    deps = [
        ":mctp_server_lib",
        "//services/mctp/api:mctp_api",
        "@rust_crates//:mctp",
        "@rust_crates//:mctp-lib",
    ],
)

rust_test(
    name = "mctp_server_integration_test",
    srcs = [
        "tests/integration.rs",
        "tests/common/mod.rs",
    ],
    crate_root = "tests/integration.rs",
    edition = "2024",
    deps = [
        ":mctp_server_lib",
        "//services/mctp/api:mctp_api",
        "@rust_crates//:mctp",
        "@rust_crates//:mctp-lib",
    ],
)

rust_app(
    name = "mctp_server",
    codegen_crate_name = "app_mctp_server",
    srcs = ["src/main.rs"],
    crate_features = [
        "i2c-polling",
        "direct-client",
        "in-process-responder",
    ],
    edition = "2024",
    system_config = "//target/ast1060-evb/mctp:system_config",
    tags = ["kernel"],
    visibility = ["//visibility:public"],
    deps = [
        ":mctp_server_lib",
        "//services/i2c/api:i2c_api",
        "//services/i2c/client:i2c_client",
        "//services/mctp/api:mctp_api",
        "//services/mctp/transport-i2c:mctp_transport_i2c",
        "//services/spdm/transport-mctp:spdm_transport_mctp",
        "//target/ast1060-evb/spdm-req-resp-test:mock_platform",
        "@rust_crates//:mctp",
        "@rust_crates//:mctp-lib",
        "@pigweed//pw_kernel/syscall:syscall_user",
        "@pigweed//pw_kernel/userspace",
        "@pigweed//pw_log/rust:pw_log",
        "@pigweed//pw_status/rust:pw_status",
        "@oot_crates_no_std//:spdm-lib",
    ],
)

# In-process SPDM requester variant (AST1060-EVB hardware target).
# Same src/main.rs as mctp_server, different feature set.
# The virt-ast1060-evb variant is expanded inline in
# //target/virt-ast1060-evb/mctp-requester/BUILD.bazel to avoid a
# codegen_crate_name collision (two rust_app rules in the same Bazel package
# cannot share codegen_crate_name).
rust_app(
    name = "mctp_server_requester",
    codegen_crate_name = "app_mctp_server_requester",
    srcs = ["src/main.rs"],
    crate_features = [
        "i2c-polling",
        "direct-client",
        "in-process-requester",
    ],
    edition = "2024",
    system_config = "//target/ast1060-evb/mctp-requester:system_config",
    tags = ["kernel"],
    visibility = ["//visibility:public"],
    deps = [
        ":mctp_server_lib",
        "//services/i2c/api:i2c_api",
        "//services/i2c/client:i2c_client",
        "//services/mctp/api:mctp_api",
        "//services/mctp/transport-i2c:mctp_transport_i2c",
        "//services/spdm/transport-mctp:spdm_transport_mctp",
        "//target/ast1060-evb/spdm-req-resp-test:mock_platform",
        "@rust_crates//:mctp",
        "@rust_crates//:mctp-lib",
        "@pigweed//pw_kernel/syscall:syscall_user",
        "@pigweed//pw_kernel/userspace",
        "@pigweed//pw_log/rust:pw_log",
        "@pigweed//pw_status/rust:pw_status",
        "@oot_crates_no_std//:spdm-lib",
    ],
)
