Add hw/kelvin to top level build system.

Change-Id: I58a7fcaa5767be780801444cc09c6f453491f414
diff --git a/platforms/nexus/kelvin.mk b/platforms/nexus/kelvin.mk
index 9c7036a..10d4505 100644
--- a/platforms/nexus/kelvin.mk
+++ b/platforms/nexus/kelvin.mk
@@ -5,6 +5,11 @@
 KELVIN_SW_BAZEL_OUT_DIR := $(KELVIN_SW_OUT_DIR)/bazel_out
 KELVIN_SW_TESTLOG_DIR := $(KELVIN_SW_OUT_DIR)/bazel_testlog
 
+KELVIN_HW_SRC_DIR := $(ROOTDIR)/hw/kelvin
+KELVIN_HW_OUT_DIR := $(OUT)/kelvin/hw
+KELVIN_HW_BAZEL_OUT_DIR := $(KELVIN_HW_OUT_DIR)/bazel_out
+KELVIN_HW_TESTLOG_DIR := $(KELVIN_HW_OUT_DIR)/bazel_testlog
+
 KELVIN_SIM_SRC_DIR := $(ROOTDIR)/sim/kelvin
 KELVIN_SIM_OUT_DIR := $(OUT)/kelvin/sim
 
@@ -41,6 +46,36 @@
 	cd "$(KELVIN_SW_SRC_DIR)" && bazel clean --expunge
 
 
+$(KELVIN_HW_BAZEL_OUT_DIR):
+       mkdir -p "$(KELVIN_HW_BAZEL_OUT_DIR)"
+
+$(KELVIN_HW_TESTLOG_DIR):
+       mkdir -p "$(KELVIN_HW_TESTLOG_DIR)"
+
+## Verilog Source for Kelvin
+kelvin_hw_verilog: | $(KELVIN_HW_OUT_DIR)
+       cd "$(KELVIN_HW_SRC_DIR)" && \
+               bazel build //hdl/chisel:kelvin_cc_library_emit_verilog && \
+               cp bazel-bin/hdl/chisel/Kelvin.v "$(KELVIN_HW_BAZEL_OUT_DIR)"
+
+## Verilated Kelvin HW simulator
+kelvin_hw_sim: | $(KELVIN_HW_OUT_DIR)
+       cd "$(KELVIN_HW_SRC_DIR)" && \
+               bazel build //tests/verilator_sim:core_sim && \
+               cp bazel-bin/tests/verilator_sim/core_sim "$(KELVIN_HW_BAZEL_OUT_DIR)"
+
+## Tests for Kelvin HW
+kelvin_hw_test: | $(KELVIN_HW_TESTLOG_DIR)
+       cd "$(KELVIN_HW_SRC_DIR)"; \
+               bazel test --test_output=errors //... ; \
+               cp -rf bazel-testlogs/tests "$(KELVIN_HW_TESTLOG_DIR)"
+
+## Clean Kelvin HW artifacts
+kelvin_hw_clean:
+       rm -rf "$(KELVIN_HW_OUT_DIR)"
+       cd "$(KELVIN_HW_SRC_DIR)" && bazel clean --expunge
+
+
 $(KELVIN_SIM_OUT_DIR):
 	mkdir -p "$(KELVIN_SIM_OUT_DIR)"
 
@@ -62,5 +97,6 @@
 		bazel clean --expunge
 	rm -rf $(KELVIN_SIM_OUT_DIR)
 
+PHONY:: kelvin_hw_clean kelvin_hw_sim kelvin_hw_test kelvin_hw_verilog
 PHONY:: kelvin_sw kelvin_sw_clean kelvin_sw_test
 PHONY:: kelvin_sim kelvin_sim_clean
diff --git a/platforms/shodan/kelvin.mk b/platforms/shodan/kelvin.mk
index 9c7036a..e3556c7 100644
--- a/platforms/shodan/kelvin.mk
+++ b/platforms/shodan/kelvin.mk
@@ -5,6 +5,11 @@
 KELVIN_SW_BAZEL_OUT_DIR := $(KELVIN_SW_OUT_DIR)/bazel_out
 KELVIN_SW_TESTLOG_DIR := $(KELVIN_SW_OUT_DIR)/bazel_testlog
 
+KELVIN_HW_SRC_DIR := $(ROOTDIR)/hw/kelvin
+KELVIN_HW_OUT_DIR := $(OUT)/kelvin/hw
+KELVIN_HW_BAZEL_OUT_DIR := $(KELVIN_HW_OUT_DIR)/bazel_out
+KELVIN_HW_TESTLOG_DIR := $(KELVIN_HW_OUT_DIR)/bazel_testlog
+
 KELVIN_SIM_SRC_DIR := $(ROOTDIR)/sim/kelvin
 KELVIN_SIM_OUT_DIR := $(OUT)/kelvin/sim
 
@@ -41,6 +46,36 @@
 	cd "$(KELVIN_SW_SRC_DIR)" && bazel clean --expunge
 
 
+$(KELVIN_HW_BAZEL_OUT_DIR):
+	mkdir -p "$(KELVIN_HW_BAZEL_OUT_DIR)"
+
+$(KELVIN_HW_TESTLOG_DIR):
+	mkdir -p "$(KELVIN_HW_TESTLOG_DIR)"
+
+## Verilog Source for Kelvin
+kelvin_hw_verilog: | $(KELVIN_HW_OUT_DIR)
+	cd "$(KELVIN_HW_SRC_DIR)" && \
+		bazel build //hdl/chisel:kelvin_cc_library_emit_verilog && \
+		cp bazel-bin/hdl/chisel/Kelvin.v "$(KELVIN_HW_BAZEL_OUT_DIR)"
+
+## Verilated Kelvin HW simulator
+kelvin_hw_sim: | $(KELVIN_HW_OUT_DIR)
+	cd "$(KELVIN_HW_SRC_DIR)" && \
+		bazel build //tests/verilator_sim:core_sim && \
+		cp bazel-bin/tests/verilator_sim/core_sim "$(KELVIN_HW_BAZEL_OUT_DIR)"
+
+## Tests for Kelvin HW
+kelvin_hw_test: | $(KELVIN_HW_TESTLOG_DIR)
+	cd "$(KELVIN_HW_SRC_DIR)"; \
+		bazel test --test_output=errors //... ; \
+		cp -rf bazel-testlogs/tests "$(KELVIN_HW_TESTLOG_DIR)"
+
+## Clean Kelvin HW artifacts
+kelvin_hw_clean:
+	rm -rf "$(KELVIN_HW_OUT_DIR)"
+	cd "$(KELVIN_HW_SRC_DIR)" && bazel clean --expunge
+
+
 $(KELVIN_SIM_OUT_DIR):
 	mkdir -p "$(KELVIN_SIM_OUT_DIR)"
 
@@ -62,5 +97,6 @@
 		bazel clean --expunge
 	rm -rf $(KELVIN_SIM_OUT_DIR)
 
+PHONY:: kelvin_hw_clean kelvin_hw_sim kelvin_hw_test kelvin_hw_verilog
 PHONY:: kelvin_sw kelvin_sw_clean kelvin_sw_test
 PHONY:: kelvin_sim kelvin_sim_clean