diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 57 | 
1 files changed, 39 insertions, 18 deletions
| @@ -38,7 +38,7 @@ ERROR_FILE := $(BUILD_DIR)/error_occured  MAKEFILE_INCLUDED=yes -# Helper function to process the newt element of a space separated path  +# Helper function to process the newt element of a space separated path  # It works a bit like the traditional functional head tail  # so the CURRENT_PATH_ELEMENT will beome the new head  # and the PATH_ELEMENTS are the rest that are still unprocessed @@ -47,16 +47,16 @@ define NEXT_PATH_ELEMENT      $$(eval PATH_ELEMENTS := $$(wordlist  2,9999,$$(PATH_ELEMENTS)))  endef -# We change the / to spaces so that we more easily can work with the elements  +# We change the / to spaces so that we more easily can work with the elements  # separately  PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))  # Initialize the path elements list for further processing  $(eval $(call NEXT_PATH_ELEMENT)) -# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct  +# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct  # variables depending on which directory you stand in. -# It's really a very simple if else chain, if you squint enough,  -# but the makefile syntax makes it very verbose.  +# It's really a very simple if else chain, if you squint enough, +# but the makefile syntax makes it very verbose.  # If we are in a subfolder of keyboards  ifeq ($(CURRENT_PATH_ELEMENT),keyboards)      $(eval $(call NEXT_PATH_ELEMENT)) @@ -111,7 +111,7 @@ endif  .DEFAULT_GOAL := all  ifneq ($(KEYMAP),)      ifeq ($(SUBPROJECT),) -         # Inside a keymap folder, just build the keymap, with the  +         # Inside a keymap folder, just build the keymap, with the           # default subproject          .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP)      else @@ -163,7 +163,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3      ifneq ($1,)          ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true)              MATCHED_ITEM := $$(firstword $1) -        else  +        else              $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1)))          endif      endif @@ -171,10 +171,10 @@ endef  # A recursive helper function for finding the longest match  # $1 The list to be checed -# It works by always removing the currently matched item from the list  +# It works by always removing the currently matched item from the list  # and call itself recursively, until a match is found  define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2 -    # Stop the recursion when the list is empty  +    # Stop the recursion when the list is empty      ifneq ($1,)          RULE_BEFORE := $$(RULE)          $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1)) @@ -270,7 +270,7 @@ define PARSE_KEYBOARD          $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT)))  	# If there's no matching subproject, we assume it's the default  	# This will allow you to leave the subproject part of the target out -    else  +    else          $$(eval $$(call PARSE_SUBPROJECT,))      endif  endef @@ -285,7 +285,7 @@ endef  # When entering this, the keyboard and subproject are known, so now we need  # to determine which keymaps are going to get compiled  define PARSE_SUBPROJECT -    # If we want to compile the default subproject, then we need to  +    # If we want to compile the default subproject, then we need to      # include the correct makefile to determine the actual name of it      CURRENT_SP := $1      ifeq ($$(CURRENT_SP),) @@ -304,7 +304,7 @@ define PARSE_SUBPROJECT           endif      endif      # The special allsp is handled later -    ifneq ($$(CURRENT_SP),allsp)  +    ifneq ($$(CURRENT_SP),allsp)          # get a list of all keymaps          KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.)))          ifneq ($$(CURRENT_SP),) @@ -343,7 +343,7 @@ define PARSE_SUBPROJECT      endif  endef -# If we want to parse all subprojects, but the keyboard doesn't have any,  +# If we want to parse all subprojects, but the keyboard doesn't have any,  # then use defaultsp instead  define PARSE_ALL_SUBPROJECTS      ifeq ($$(SUBPROJECTS),) @@ -448,7 +448,7 @@ endef  # Set the silent mode depending on if we are trying to compile multiple keyboards or not -# By default it's on in that case, but it can be overriden by specifying silent=false  +# By default it's on in that case, but it can be overriden by specifying silent=false  # from the command line  define SET_SILENT_MODE      ifdef SUB_IS_SILENT @@ -481,11 +481,12 @@ endef  # Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps  SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile)))  .PHONY: $(SUBPROJECTS) -$(SUBPROJECTS): %: %-allkm  +$(SUBPROJECTS): %: %-allkm  # Let's match everything, we handle all the rule parsing ourselves  .PHONY: % -%:  +ifndef SKIP_GIT +%:  	# Check if we have the CMP tool installed  	cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;  	# Check if the submodules are dirty, and display a warning if they are @@ -505,8 +506,24 @@ $(SUBPROJECTS): %: %-allkm  	# But we return the error code at the end, to trigger travis failures  	$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))  	if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; -	$(foreach TEST,$(TESTS),$(RUN_TEST))  +	$(foreach TEST,$(TESTS),$(RUN_TEST)) +	if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; +else +%: +	# Check if we have the CMP tool installed +	cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; +	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 +	$(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; +endif  # All should compile everything  .PHONY: all @@ -526,7 +543,11 @@ test: test-all  test-clean: test-all-clean  # Generate the version.h file -GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +ifndef SKIP_GIT +    GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +else +    GIT_VERSION := NA +endif  BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")  $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h)  $(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) | 
