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

# Build rules for Kelvin simulator code.
load("@com_google_mpact-sim//mpact/sim/decoder:mpact_sim_isa.bzl", "mpact_bin_fmt_decoder", "mpact_isa_decoder")

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

cc_library(
    name = "kelvin_state",
    srcs = [
        "kelvin_state.cc",
    ],
    hdrs = [
        "kelvin_state.h",
    ],
    copts = [
        "-O3",
        "-ffp-model=strict",
        "-fprotect-parens",
    ],
    deps = [
        "@com_google_absl//absl/functional:any_invocable",
        "@com_google_absl//absl/log",
        "@com_google_absl//absl/log:check",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/strings:str_format",
        "@com_google_mpact-riscv//riscv:riscv_state",
        "@com_google_mpact-sim//mpact/sim/generic:instruction",
        "@com_google_mpact-sim//mpact/sim/util/memory",
    ],
)

cc_library(
    name = "kelvin_instructions",
    srcs = [
        "kelvin_instructions.cc",
        "kelvin_vector_convolution_instructions.cc",
        "kelvin_vector_instructions.cc",
        "kelvin_vector_memory_instructions.cc",
    ],
    hdrs = [
        "kelvin_instructions.h",
        "kelvin_vector_convolution_instructions.h",
        "kelvin_vector_instructions.h",
        "kelvin_vector_memory_instructions.h",
    ],
    copts = ["-O3"],
    deps = [
        ":kelvin_state",
        "@com_google_absl//absl/functional:bind_front",
        "@com_google_absl//absl/log:check",
        "@com_google_absl//absl/numeric:bits",
        "@com_google_absl//absl/types:span",
        "@com_google_mpact-riscv//riscv:riscv_state",
        "@com_google_mpact-sim//mpact/sim/generic:arch_state",
        "@com_google_mpact-sim//mpact/sim/generic:core",
        "@com_google_mpact-sim//mpact/sim/generic:instruction",
        "@com_google_mpact-sim//mpact/sim/generic:type_helpers",
    ],
)

mpact_isa_decoder(
    name = "kelvin_isa",
    src = "kelvin.isa",
    includes = [
        "kelvin_arith.isa",
        "kelvin_base.isa",
        "kelvin_memory.isa",
        "kelvin_mul.isa",
        "kelvin_shift.isa",
        "@com_google_mpact-riscv//riscv:riscv32zb.isa",
    ],
    isa_name = "Kelvin",
    deps = [
        ":kelvin_instructions",
        "@com_google_absl//absl/functional:bind_front",
        "@com_google_mpact-riscv//riscv:riscv_bitmanip_instructions",
        "@com_google_mpact-riscv//riscv:riscv_g",
    ],
)

mpact_bin_fmt_decoder(
    name = "kelvin_bin_fmt",
    src = "kelvin.bin_fmt",
    decoder_name = "Kelvin",
    includes = [
        "kelvin_arith.bin_fmt",
        "kelvin_base.bin_fmt",
        "kelvin_conv.bin_fmt",
        "kelvin_format.bin_fmt",
        "kelvin_memory.bin_fmt",
        "kelvin_mul.bin_fmt",
        "kelvin_shift.bin_fmt",
        "@com_google_mpact-riscv//riscv:riscv32zb.bin_fmt",
    ],
    deps = [
        ":kelvin_isa",
    ],
)

cc_library(
    name = "kelvin_decoder",
    srcs = [
        "decoder.cc",
        "kelvin_encoding.cc",
    ],
    hdrs = [
        "decoder.h",
        "kelvin_encoding.h",
    ],
    copts = ["-O3"],
    deps = [
        ":kelvin_bin_fmt",
        ":kelvin_isa",
        ":kelvin_state",
        "@com_google_absl//absl/container:flat_hash_map",
        "@com_google_absl//absl/functional:any_invocable",
        "@com_google_absl//absl/log",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/types:span",
        "@com_google_mpact-riscv//riscv:riscv_state",
        "@com_google_mpact-sim//mpact/sim/generic:arch_state",
        "@com_google_mpact-sim//mpact/sim/generic:core",
        "@com_google_mpact-sim//mpact/sim/generic:instruction",
        "@com_google_mpact-sim//mpact/sim/generic:program_error",
        "@com_google_mpact-sim//mpact/sim/generic:type_helpers",
        "@com_google_mpact-sim//mpact/sim/util/memory",
    ],
)

cc_library(
    name = "kelvin_top",
    srcs = [
        "kelvin_action_point_memory_interface.cc",
        "kelvin_top.cc",
    ],
    hdrs = [
        "kelvin_action_point_memory_interface.h",
        "kelvin_top.h",
    ],
    copts = ["-O3"],
    deps = [
        ":kelvin_decoder",
        ":kelvin_isa",
        ":kelvin_state",
        "//sim/proto:trace_cc_proto",
        "//sim/renode:kelvin_renode_memory",
        "@com_google_absl//absl/container:flat_hash_map",
        "@com_google_absl//absl/flags:flag",
        "@com_google_absl//absl/functional:any_invocable",
        "@com_google_absl//absl/functional:bind_front",
        "@com_google_absl//absl/log",
        "@com_google_absl//absl/log:check",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/status:statusor",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/synchronization",
        "@com_google_mpact-riscv//riscv:riscv_action_point_memory_interface",
        "@com_google_mpact-riscv//riscv:riscv_arm_semihost",
        "@com_google_mpact-riscv//riscv:riscv_fp_state",
        "@com_google_mpact-riscv//riscv:riscv_state",
        "@com_google_mpact-sim//mpact/sim/generic:action_points",
        "@com_google_mpact-sim//mpact/sim/generic:arch_state",
        "@com_google_mpact-sim//mpact/sim/generic:component",
        "@com_google_mpact-sim//mpact/sim/generic:core",
        "@com_google_mpact-sim//mpact/sim/generic:core_debug_interface",
        "@com_google_mpact-sim//mpact/sim/generic:counters",
        "@com_google_mpact-sim//mpact/sim/generic:decode_cache",
        "@com_google_mpact-sim//mpact/sim/generic:type_helpers",
        "@com_google_mpact-sim//mpact/sim/util/memory",
    ],
)

cc_binary(
    name = "kelvin_sim",
    srcs = ["kelvin_sim.cc"],
    copts = ["-O3"],
    data = [
        "//sim/test:testfiles/hello_world_rv32imf.elf",
        "//sim/test:testfiles/rv32i.elf",
        "//sim/test:testfiles/rv32m.elf",
        "//sim/test:testfiles/rv32soft_fp.elf",
    ],
    deps = [
        ":kelvin_state",
        ":kelvin_top",
        "@com_google_absl//absl/flags:flag",
        "@com_google_absl//absl/flags:parse",
        "@com_google_absl//absl/flags:usage",
        "@com_google_absl//absl/log",
        "@com_google_absl//absl/log:initialize",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/strings:str_format",
        "@com_google_absl//absl/time",
        "@com_google_mpact-riscv//riscv:debug_command_shell",
        "@com_google_mpact-riscv//riscv:riscv_state",
        "@com_google_mpact-sim//mpact/sim/generic:core_debug_interface",
        "@com_google_mpact-sim//mpact/sim/util/program_loader:elf_loader",
        "@com_googlesource_code_re2//:re2",
    ],
)
