forked from mirrors/qmk_userspace
		
	Adding SKIP_GIT to speed up compiles.
This commit is contained in:
		
					parent
					
						
							
								9e6c57af2a
							
						
					
				
			
			
				commit
				
					
						78976d8f7a
					
				
			
		
					 1 changed files with 39 additions and 18 deletions
				
			
		
							
								
								
									
										57
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										57
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue