Generate kelvin_simulator library and clean-ups

Generate a library (libkelvin_simulator.so) for kelvin core_mini_axi_simulator.
It will be used for Synpu. Also some minor clean-ups.

Change-Id: I847bedd7e4ee3d77ad58dc5fd4e51a50c963585d
diff --git a/hw_sim/BUILD b/hw_sim/BUILD
index 29432a8..e79024f 100644
--- a/hw_sim/BUILD
+++ b/hw_sim/BUILD
@@ -70,6 +70,8 @@
     ":core_mini_axi_wrapper",
     ":kelvin_simulator_headers",
   ],
+  linkstatic = True,
+  alwayslink = True,
 )
 
 cc_shared_library(
@@ -97,7 +99,13 @@
     deps = [
         ":core_mini_axi_simulator",
         "//tests/verilator_sim:elf",
-        "//hdl/chisel/src/kelvin:core_mini_axi_cc_library_cc",
         "@com_google_absl//absl/types:span",
     ],
 )
+
+cc_binary(
+    name = "libkelvin_simulator.so",
+    linkshared = 1,
+    visibility = ["//visibility:public"],
+    deps = [":core_mini_axi_simulator"],
+)
diff --git a/hw_sim/core_mini_axi_simulator.cc b/hw_sim/core_mini_axi_simulator.cc
index a71c485..d1f181e 100644
--- a/hw_sim/core_mini_axi_simulator.cc
+++ b/hw_sim/core_mini_axi_simulator.cc
@@ -33,9 +33,9 @@
   ~CoreMiniAxiSimulator() final = default;
 
   void ReadTCM(uint32_t addr, size_t size, char* data) final;
-  const Mailbox& ReadMailbox(void) final;
+  const KelvinMailbox& ReadMailbox(void) final;
   void WriteTCM(uint32_t addr, size_t size, const char* data) final;
-  void WriteMailbox(const Mailbox& mailbox) final;
+  void WriteMailbox(const KelvinMailbox& mailbox) final;
   void Run(uint32_t start_addr) final;
   bool WaitForTermination(int timeout) final;
 
@@ -52,7 +52,7 @@
   memcpy(data, read_result.data(), size);
 }
 
-const Mailbox& CoreMiniAxiSimulator::ReadMailbox(void) {
+const KelvinMailbox& CoreMiniAxiSimulator::ReadMailbox(void) {
   return wrapper_.ReadMailbox();
 }
 
@@ -61,7 +61,7 @@
   wrapper_.Write(addr, size, data);
 }
 
-void CoreMiniAxiSimulator::WriteMailbox(const Mailbox& mailbox) {
+void CoreMiniAxiSimulator::WriteMailbox(const KelvinMailbox& mailbox) {
   wrapper_.WriteMailbox(mailbox);
 }
 
@@ -77,7 +77,7 @@
 
 AxiWResp CoreMiniAxiSimulator::WriteCallback(const AxiAddr& addr,
                                              const AxiWData& data) {
-  Mailbox& mailbox = wrapper_.mailbox();
+  KelvinMailbox& mailbox = wrapper_.mailbox();
   uint8_t* mailbox_data = reinterpret_cast<uint8_t*>(mailbox.message);
   const uint8_t* write_data =
       reinterpret_cast<const uint8_t*>(&data.write_data_bits_data[0]);
@@ -94,7 +94,7 @@
 }
 
 AxiRData CoreMiniAxiSimulator::ReadCallback(const AxiAddr& addr) {
-  const Mailbox& mailbox = wrapper_.mailbox();
+  const KelvinMailbox& mailbox = wrapper_.mailbox();
   const uint8_t* mailbox_data =
       reinterpret_cast<const uint8_t*>(mailbox.message);
   AxiRData data;
diff --git a/hw_sim/core_mini_axi_simulator_example.cc b/hw_sim/core_mini_axi_simulator_example.cc
index 090c584..73c9f43 100644
--- a/hw_sim/core_mini_axi_simulator_example.cc
+++ b/hw_sim/core_mini_axi_simulator_example.cc
@@ -15,6 +15,7 @@
 #include <fcntl.h>
 #include <sys/mman.h>
 #include <sys/stat.h>
+#include <unistd.h>
 
 #include <bitset>
 #include <cstdint>
@@ -25,7 +26,6 @@
 #include <queue>
 #include <vector>
 
-#include "VCoreMiniAxi.h"
 #include "absl/types/span.h"
 #include "hw_sim/kelvin_simulator.h"
 #include "tests/verilator_sim/elf.h"
@@ -70,7 +70,7 @@
     std::cout << "Didn't halt" << std::endl;
   }
 
-  Mailbox m = simulator->ReadMailbox();
+  KelvinMailbox m = simulator->ReadMailbox();
   std::cout << "Mailbox value[0]=0x" << std::hex << m.message[0] << std::endl;
   std::cout << "Mailbox value[1]=0x" << std::hex << m.message[1] << std::endl;
 
diff --git a/hw_sim/core_mini_axi_wrapper.h b/hw_sim/core_mini_axi_wrapper.h
index fc69344..16efc56 100644
--- a/hw_sim/core_mini_axi_wrapper.h
+++ b/hw_sim/core_mini_axi_wrapper.h
@@ -117,13 +117,13 @@
 
   void Step() { clock_.Step(); }
 
-  Mailbox& mailbox() { return mailbox_; }
+  KelvinMailbox& mailbox() { return mailbox_; }
 
-  const Mailbox& mailbox() const { return mailbox_; }
+  const KelvinMailbox& mailbox() const { return mailbox_; }
 
-  const Mailbox& ReadMailbox(void) { return mailbox_; }
+  const KelvinMailbox& ReadMailbox(void) { return mailbox_; }
 
-  void WriteMailbox(const Mailbox& mailbox) {
+  void WriteMailbox(const KelvinMailbox& mailbox) {
     for (int i = 0; i < 4; i++) {
       mailbox_.message[i] = mailbox.message[i];
     }
@@ -207,7 +207,7 @@
 
  private:
   VerilatedContext* const context_;
-  Mailbox mailbox_;
+  KelvinMailbox mailbox_;
   VCoreMiniAxi core_;
   Clock clock_;
   AxiSlaveWriteDriver slave_write_driver_;
diff --git a/hw_sim/core_mini_axi_wrapper_example.cc b/hw_sim/core_mini_axi_wrapper_example.cc
index acb8081..740f6cd 100644
--- a/hw_sim/core_mini_axi_wrapper_example.cc
+++ b/hw_sim/core_mini_axi_wrapper_example.cc
@@ -12,6 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
 #include <bitset>
 #include <cstdint>
 #include <future>
@@ -21,16 +26,9 @@
 #include <queue>
 #include <vector>
 
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-
-#include "hw_sim/core_mini_axi_wrapper.h"
-
 #include "absl/types/span.h"
+#include "hw_sim/core_mini_axi_wrapper.h"
 #include "tests/verilator_sim/elf.h"
-#include "VCoreMiniAxi.h"
-
 
 int main() {
   VerilatedContext context;
@@ -75,4 +73,4 @@
   }
 
   return 0;
-}
\ No newline at end of file
+}
diff --git a/hw_sim/kelvin_simulator.h b/hw_sim/kelvin_simulator.h
index a48da57..f512490 100644
--- a/hw_sim/kelvin_simulator.h
+++ b/hw_sim/kelvin_simulator.h
@@ -27,9 +27,9 @@
 
   // Functions for reading/writing TCMs and Mailbox.
   virtual void ReadTCM(uint32_t addr, size_t size, char* data) = 0;
-  virtual const Mailbox& ReadMailbox(void) = 0;
+  virtual const KelvinMailbox& ReadMailbox(void) = 0;
   virtual void WriteTCM(uint32_t addr, size_t size, const char* data) = 0;
-  virtual void WriteMailbox(const Mailbox& mailbox) = 0;
+  virtual void WriteMailbox(const KelvinMailbox& mailbox) = 0;
 
   // Wait for interrupt
   virtual bool WaitForTermination(int timeout) = 0;
diff --git a/hw_sim/mailbox.h b/hw_sim/mailbox.h
index 730c5ea..7e62ee0 100644
--- a/hw_sim/mailbox.h
+++ b/hw_sim/mailbox.h
@@ -15,8 +15,8 @@
 #ifndef HW_SIM_MAILBOX_H_
 #define HW_SIM_MAILBOX_H_
 
-struct Mailbox {
+struct KelvinMailbox {
   uint32_t message[4] = {0, 0, 0, 0};
 };
 
-#endif  // HW_SIM_MAILBOX_H_
\ No newline at end of file
+#endif  // HW_SIM_MAILBOX_H_