forked from forks/qmk_firmware
Run each sumbmake in a separate shell
This will fix the situation where the commandline gets too long when there are many keyboards and keymaps.
This commit is contained in:
parent
0d8844dcb8
commit
d956dd1248
31
Makefile
31
Makefile
|
@ -32,7 +32,9 @@ ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
|
||||||
ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
|
ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
|
||||||
ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
|
ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
|
||||||
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
|
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
|
||||||
TEST_DIR := $(ROOT_DIR)/.build/test
|
BUILD_DIR := $(ROOT_DIR)/.build
|
||||||
|
TEST_DIR := $(BUILD_DIR)/test
|
||||||
|
ERROR_FILE := $(BUILD_DIR)/error_occured
|
||||||
|
|
||||||
MAKEFILE_INCLUDED=yes
|
MAKEFILE_INCLUDED=yes
|
||||||
|
|
||||||
|
@ -460,8 +462,21 @@ endef
|
||||||
|
|
||||||
include $(ROOT_DIR)/message.mk
|
include $(ROOT_DIR)/message.mk
|
||||||
|
|
||||||
RUN_COMMAND = \
|
# The empty line is important here, as it will force a new shell to be created for each command
|
||||||
$(COMMAND_$(SILENT_MODE)_$(COMMAND))
|
# Otherwise the command line will become too long with a lot of keyboards and keymaps
|
||||||
|
define RUN_COMMAND
|
||||||
|
+error_occured=0;\
|
||||||
|
$(COMMAND_$(SILENT_MODE)_$(COMMAND))\
|
||||||
|
if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
|
||||||
|
|
||||||
|
|
||||||
|
endef
|
||||||
|
define RUN_TEST
|
||||||
|
+error_occured=0;\
|
||||||
|
$($(TEST)_COMMAND))\
|
||||||
|
if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
|
||||||
|
|
||||||
|
endef
|
||||||
|
|
||||||
# Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps
|
# Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps
|
||||||
SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile)))
|
SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile)))
|
||||||
|
@ -481,17 +496,17 @@ $(SUBPROJECTS): %: %-allkm
|
||||||
*) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
|
*) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
|
||||||
esac \
|
esac \
|
||||||
done
|
done
|
||||||
|
rm -f $(ERROR_FILE) > /dev/null 2>&1
|
||||||
$(eval $(call PARSE_RULE,$@))
|
$(eval $(call PARSE_RULE,$@))
|
||||||
$(eval $(call SET_SILENT_MODE))
|
$(eval $(call SET_SILENT_MODE))
|
||||||
# Run all the commands in the same shell, notice the + at the first line
|
# Run all the commands in the same shell, notice the + at the first line
|
||||||
# it has to be there to allow parallel execution of the submake
|
# it has to be there to allow parallel execution of the submake
|
||||||
# This always tries to compile everything, even if error occurs in the middle
|
# This always tries to compile everything, even if error occurs in the middle
|
||||||
# But we return the error code at the end, to trigger travis failures
|
# But we return the error code at the end, to trigger travis failures
|
||||||
+error_occured=0; \
|
$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
|
||||||
$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \
|
if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
|
||||||
if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\
|
$(foreach TEST,$(TESTS),$(RUN_TEST))
|
||||||
$(foreach TEST,$(TESTS),$($(TEST)_COMMAND)) \
|
if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
|
||||||
if [ $$error_occured -gt 0 ]; then printf "$(MSG_ERRORS)" & exit $$error_occured; fi;\
|
|
||||||
|
|
||||||
# All should compile everything
|
# All should compile everything
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
|
|
Loading…
Reference in a new issue