# 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:check",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/strings:str_format",
        "@com_google_mpact-riscv//riscv:riscv_state",
    ],
)

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: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",
    ],
    isa_name = "Kelvin",
    deps = [
        ":kelvin_instructions",
        "@com_google_absl//absl/functional:bind_front",
        "@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",
    ],
    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:type_helpers",
        "@com_google_mpact-sim//mpact/sim/util/memory",
    ],
)

cc_library(
    name = "kelvin_top",
    srcs = [
        "kelvin_top.cc",
    ],
    hdrs = [
        "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: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_arm_semihost",
        "@com_google_mpact-riscv//riscv:riscv_breakpoint",
        "@com_google_mpact-riscv//riscv:riscv_state",
        "@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/util/program_loader:elf_loader",
        "@com_googlesource_code_re2//:re2",
    ],
)
