# 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.

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 = [
        "@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",
        "@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",
    ],
)
