# Copyright 2023 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
#
#     https://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.

# This is the base library for the fundamental interfaces and data structures
# used in the simulator. All pieces are meant to be generic. If any
# specialization is required, architecture dependent projects should define
# appropriate (possibly derived) supplementary structures.

load("@rules_cc//cc:cc_library.bzl", "cc_library")

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

# Core piece of the simulator.
cc_library(
    name = "core",
    srcs = [
        "data_buffer.cc",
        "resource_bitset.cc",
        "simple_resource.cc",
        "state_item_base.cc",
    ],
    hdrs = [
        "data_buffer.h",
        "decoder_interface.h",
        "delay_line.h",
        "delay_line_interface.h",
        "function_delay_line.h",
        "immediate_operand.h",
        "literal_operand.h",
        "operand_interface.h",
        "ref_count.h",
        "resource_bitset.h",
        "resource_operand_interface.h",
        "simple_resource.h",
        "simple_resource_operand.h",
        "state_item.h",
        "state_item_base.h",
        "wrapper_operand.h",
    ],
    copts = ["-O3"],
    deps = [
        "@com_google_absl//absl/base:core_headers",
        "@com_google_absl//absl/container:btree",
        "@com_google_absl//absl/container:flat_hash_map",
        "@com_google_absl//absl/log",
        "@com_google_absl//absl/numeric:bits",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/status:statusor",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/types:any",
        "@com_google_absl//absl/types:span",
    ],
)

cc_library(
    name = "arch_state",
    srcs = [
        "arch_state.cc",
        "complex_resource.cc",
        "complex_resource_operand.cc",
        "control_register.cc",
        "fifo.cc",
        "fifo_with_notify.cc",
        "register.cc",
        "token_fifo.cc",
    ],
    hdrs = [
        "arch_state.h",
        "complex_resource.h",
        "complex_resource_operand.h",
        "control_register.h",
        "devnull_operand.h",
        "fifo.h",
        "fifo_with_notify.h",
        "register.h",
        "status_register.h",
        "token_fifo.h",
    ],
    copts = ["-O3"],
    deps = [
        ":component",
        ":config",
        ":core",
        ":internal",
        ":program_error",
        "@com_google_absl//absl/container:flat_hash_map",
        "@com_google_absl//absl/container:flat_hash_set",
        "@com_google_absl//absl/functional:any_invocable",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/types:span",
    ],
)

cc_library(
    name = "debug_command_shell_interface",
    srcs = [],
    hdrs = [
        "debug_command_shell_interface.h",
    ],
    deps = [
        ":arch_state",
        ":core_debug_interface",
        "//mpact/sim/util/program_loader:elf_loader",
        "@com_google_absl//absl/container:btree",
        "@com_google_absl//absl/functional:any_invocable",
        "@com_google_absl//absl/strings:string_view",
    ],
)

cc_library(
    name = "core_debug_interface",
    srcs = [],
    hdrs = [
        "core_debug_interface.h",
    ],
    deps = [
        ":core",
        ":instruction",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/status:statusor",
    ],
)

cc_library(
    name = "instruction",
    srcs = [
        "instruction.cc",
    ],
    hdrs = [
        "instruction.h",
        "instruction_helpers.h",
    ],
    copts = ["-O3"],
    deps = [
        ":arch_state",
        ":core",
        ":type_helpers",
        "@com_google_absl//absl/numeric:int128",
        "@com_google_absl//absl/types:span",
    ],
)

cc_library(
    name = "decode_cache",
    srcs = [
        "decode_cache.cc",
    ],
    hdrs = [
        "decode_cache.h",
    ],
    copts = ["-O3"],
    deps = [
        ":core",
        ":instruction",
        "@com_google_absl//absl/numeric:bits",
    ],
)

cc_library(
    name = "program_error",
    srcs = [
        "program_error.cc",
    ],
    hdrs = [
        "program_error.h",
    ],
    copts = ["-O3"],
    deps = [
        "@com_google_absl//absl/container:flat_hash_map",
        "@com_google_absl//absl/container:flat_hash_set",
        "@com_google_absl//absl/memory",
        "@com_google_absl//absl/strings",
    ],
)

cc_library(
    name = "config",
    hdrs = [
        "config.h",
    ],
    copts = ["-O3"],
    deps = [
        ":internal",
        "//mpact/sim/proto:component_data_cc_proto",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/strings:string_view",
    ],
)

cc_library(
    name = "counters",
    srcs = [
    ],
    hdrs = [
        "counters.h",
        "counters_base.h",
    ],
    copts = ["-O3"],
    deps = [
        ":internal",
        "//mpact/sim/proto:component_data_cc_proto",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/types:variant",
    ],
)

cc_library(
    name = "component",
    srcs = [
        "component.cc",
    ],
    hdrs = [
        "component.h",
    ],
    copts = ["-O3"],
    deps = [
        ":config",
        ":counters",
        "//mpact/sim/proto:component_data_cc_proto",
        "@com_google_absl//absl/container:btree",
        "@com_google_absl//absl/log",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/strings:string_view",
    ],
)

cc_library(
    name = "internal",
    hdrs = [
        "signed_type.h",
        "variant_helper.h",
    ],
    copts = ["-O3"],
    visibility = ["//visibility:private"],
    deps = [
        "@com_google_absl//absl/types:variant",
    ],
)

cc_library(
    name = "type_helpers",
    hdrs = [
        "type_helpers.h",
    ],
    deps = [
        "@com_google_absl//absl/numeric:int128",
    ],
)

cc_library(
    name = "action_points",
    srcs = [
        "action_point_manager_base.cc",
        "breakpoint_manager.cc",
    ],
    hdrs = [
        "action_point_manager_base.h",
        "breakpoint_manager.h",
    ],
    deps = [
        ":core_debug_interface",
        "@com_google_absl//absl/container:btree",
        "@com_google_absl//absl/functional:any_invocable",
        "@com_google_absl//absl/functional:bind_front",
        "@com_google_absl//absl/log",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/status:statusor",
        "@com_google_absl//absl/strings",
    ],
)
