]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - Makefile
Detect failures when running multiple tests
[qmk_firmware.git] / Makefile
index 67b981d51ebb6e988acb173ca8334d08047d3ec9..b7ef5f92a3ef10e473885065c6a955b9a6160f9a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -28,6 +28,7 @@ ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
 ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
 ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
 STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
+TEST_DIR := $(ROOT_DIR)/.build/test
 
 MAKEFILE_INCLUDED=yes
 
@@ -394,7 +395,10 @@ define BUILD
         fi;
     COMMAND_false_$$(COMMAND) := \
         printf "$$(MAKE_MSG)\n\n"; \
-        $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false;
+        $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \
+        if [ $$$$? -gt 0 ]; \
+            then error_occured=1; \
+        fi;
 endef
 
 # Just parse all the keymaps for a specifc keyboard
@@ -410,9 +414,20 @@ define BUILD_TEST
     MAKE_VARS := TEST=$$(TEST_NAME)
     MAKE_MSG := $$(MSG_MAKE_TEST)
     $$(eval $$(call BUILD))
+    TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf
+    TESTS += $$(TEST_NAME)
+    TEST_MSG := $$(MSG_TEST)
+    $$(TEST_NAME)_COMMAND := \
+        printf "$$(TEST_MSG)\n"; \
+        $$(TEST_EXECUTABLE); \
+        if [ $$$$? -gt 0 ]; \
+            then error_occured=1; \
+        fi; \
+        printf "\n";
 endef
 
 define PARSE_TEST
+    TESTS :=
     TEST_NAME := $$(firstword $$(subst -, ,$$(RULE)))
     TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME)-,,$$(RULE)))
     MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),))
@@ -464,8 +479,9 @@ $(SUBPROJECTS): %: %-allkm
        # But we return the error code at the end, to trigger travis failures
        +error_occured=0; \
        $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \
-       if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi
-       
+       if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\
+       $(foreach TEST,$(TESTS),$($(TEST)_COMMAND)) \
+       if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\
 
 # All should compile everything
 .PHONY: all