mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	Merge pull request #857 from fredizzimo/fix_makefile_too_long_bash
Run each sumbmake in a separate shell
This commit is contained in:
		
						commit
						b0317abe42
					
				
							
								
								
									
										31
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								Makefile
									
									
									
									
									
								
							@ -32,7 +32,9 @@ 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
 | 
			
		||||
BUILD_DIR := $(ROOT_DIR)/.build
 | 
			
		||||
TEST_DIR := $(BUILD_DIR)/test
 | 
			
		||||
ERROR_FILE := $(BUILD_DIR)/error_occured
 | 
			
		||||
 | 
			
		||||
MAKEFILE_INCLUDED=yes
 | 
			
		||||
 | 
			
		||||
@ -460,8 +462,21 @@ endef
 | 
			
		||||
 | 
			
		||||
include $(ROOT_DIR)/message.mk
 | 
			
		||||
 | 
			
		||||
RUN_COMMAND = \
 | 
			
		||||
$(COMMAND_$(SILENT_MODE)_$(COMMAND))
 | 
			
		||||
# The empty line is important here, as it will force a new shell to be created for each 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
 | 
			
		||||
SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile)))
 | 
			
		||||
@ -481,17 +496,17 @@ $(SUBPROJECTS): %: %-allkm
 | 
			
		||||
			*) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
 | 
			
		||||
		esac \
 | 
			
		||||
	done
 | 
			
		||||
	rm -f $(ERROR_FILE) > /dev/null 2>&1
 | 
			
		||||
	$(eval $(call PARSE_RULE,$@))
 | 
			
		||||
	$(eval $(call SET_SILENT_MODE))
 | 
			
		||||
	# 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
 | 
			
		||||
	# 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
 | 
			
		||||
	+error_occured=0; \
 | 
			
		||||
	$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) \
 | 
			
		||||
	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;\
 | 
			
		||||
	$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
 | 
			
		||||
	if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
 | 
			
		||||
	$(foreach TEST,$(TESTS),$(RUN_TEST)) 
 | 
			
		||||
	if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
 | 
			
		||||
 | 
			
		||||
# All should compile everything
 | 
			
		||||
.PHONY: all
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user