| # 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", | |
| ], | |
| 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: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_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", | |
| ], | |
| ) |