Add m target for matcha fpga tests

Change-Id: I028a5106ac6c28fa617c2332f9a01f919457e727
diff --git a/platforms/nexus/matcha_hw.mk b/platforms/nexus/matcha_hw.mk
index 8b5cd09..e1dd7cb 100644
--- a/platforms/nexus/matcha_hw.mk
+++ b/platforms/nexus/matcha_hw.mk
@@ -12,11 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-MATCHA_SRC_DIR             := $(ROOTDIR)/hw/matcha
-MATCHA_OUT_DIR             := $(OUT)/matcha/hw
-MATCHA_VERILATOR_TB        := $(MATCHA_OUT_DIR)/sim-verilator/Vchip_sim_tb
-MATCHA_TESTLOG_DIR         := $(MATCHA_OUT_DIR)/test-log
-MATCHA_FPGA_BINARY_DIR     := $(MATCHA_OUT_DIR)/fpga_tests
+MATCHA_SRC_DIR                := $(ROOTDIR)/hw/matcha
+MATCHA_OUT_DIR                := $(OUT)/matcha/hw
+MATCHA_VERILATOR_TB           := $(MATCHA_OUT_DIR)/sim-verilator/Vchip_sim_tb
+MATCHA_TESTLOG_DIR            := $(MATCHA_OUT_DIR)/test-log
+MATCHA_FPGA_BINARY_DIR        := $(MATCHA_OUT_DIR)/fpga_tests
+MATCHA_FPGA_MATCHA_BINARY_DIR := $(MATCHA_FPGA_BINARY_DIR)/matcha
 MATCHA_FPGA_KELVIN_BINARY_DIR := $(MATCHA_FPGA_BINARY_DIR)/kelvin
 
 $(MATCHA_OUT_DIR):
@@ -76,6 +77,24 @@
 	  bazel build --define DISABLE_VERILATOR_BUILD=true --build_tag_filters="-kelvin_fpga" \
 			//sw/device/...
 
+$(MATCHA_FPGA_MATCHA_BINARY_DIR):
+	mkdir -p $(MATCHA_FPGA_MATCHA_BINARY_DIR)
+
+## Build test binaries that run on FPGA
+matcha_fpga_tests: | $(MATCHA_FPGA_MATCHA_BINARY_DIR)
+	cd $(MATCHA_SRC_DIR) && \
+		bazel query //sw/device/tests/... \
+			| grep 'fpga_nexus' \
+			| egrep '_bin$$' \
+			| grep -v '/smc:' \
+			| grep -v 'kelvin' \
+			| grep -v 'example_test_from_rom_rom_prog_fpga_nexus_bin' \
+			| xargs bazel build
+	cd $(MATCHA_SRC_DIR) && \
+		find 'bazel-out/' \
+			-type f \
+			\( -wholename "*ST-*/*fpga_nexus.elf" -o -wholename "*ST-*/*fpga_nexus.bin" \) \
+			-exec cp -f '{}' "$(MATCHA_FPGA_MATCHA_BINARY_DIR)" \;
 
 $(MATCHA_FPGA_KELVIN_BINARY_DIR):
 	mkdir -p "$(MATCHA_FPGA_KELVIN_BINARY_DIR)"