# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

load("//rules:kelvin_v2.bzl", "kelvin_v2_binary")

cc_library(
    name = "hw_primitives",
    srcs = [
        "hw_primitives.cc",
    ],
    hdrs = [
        "hw_primitives.h",
    ],
    deps = [
        "@com_google_absl//absl/types:span",
        "@verilator//:libverilator",
    ],
)

cc_library(
    name = "core_mini_axi_wrapper",
    hdrs = [
        "core_mini_axi_wrapper.h",
        "mailbox.h",
    ],
    deps = [
        ":hw_primitives",
        "//hdl/chisel/src/kelvin:core_mini_axi_cc_library_cc",
        "//hdl/chisel/src/kelvin:rvv_core_mini_axi_cc_library_cc",
    ],
)

cc_binary(
    name = "core_mini_axi_wrapper_example",
    srcs = [
        "core_mini_axi_wrapper_example.cc",
    ],
    data = [
        "//tests/cocotb:wfi_slot_0.elf",
    ],
    deps = [
        ":core_mini_axi_wrapper",
        "//tests/verilator_sim:elf",
    ],
)

cc_library(
    name = "kelvin_simulator_headers",
    hdrs = [
        "kelvin_simulator.h",
        "mailbox.h",
    ],
)

cc_library(
    name = "core_mini_axi_simulator",
    srcs = ["core_mini_axi_simulator.cc"],
    linkstatic = True,
    deps = [
        ":core_mini_axi_wrapper",
        ":kelvin_simulator_headers",
    ],
    alwayslink = True,
)

cc_library(
    name = "core_mini_axi_simulator_rvv",
    srcs = ["core_mini_axi_simulator.cc"],
    copts = ["-DENABLE_RVV"],
    linkstatic = True,
    deps = [
        ":core_mini_axi_wrapper",
        ":kelvin_simulator_headers",
    ],
    alwayslink = True,
)

kelvin_v2_binary(
    name = "mailbox_example",
    srcs = [
        "mailbox_example.cc",
    ],
)

cc_binary(
    name = "core_mini_axi_simulator_example",
    srcs = [
        "core_mini_axi_simulator_example.cc",
    ],
    data = [
        ":mailbox_example.elf",
    ],
    deps = [
        ":core_mini_axi_simulator",
        "//tests/verilator_sim:elf",
    ],
)

# generate libraries for external projects
cc_binary(
    name = "libkelvin_simulator.so",
    linkshared = True,
    visibility = ["//visibility:public"],
    deps = [":core_mini_axi_simulator"],
)

cc_binary(
    name = "libkelvin_simulator_rvv.so",
    linkshared = True,
    visibility = ["//visibility:public"],
    deps = [":core_mini_axi_simulator_rvv"],
)
