Adding SKIP_GIT to speed up compiles.

master
IBNobody 2016-11-01 11:52:58 -05:00
parent 9e6c57af2a
commit 78976d8f7a
1 changed files with 39 additions and 18 deletions

View File

@ -38,7 +38,7 @@ ERROR_FILE := $(BUILD_DIR)/error_occured
MAKEFILE_INCLUDED=yes 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 # It works a bit like the traditional functional head tail
# so the CURRENT_PATH_ELEMENT will beome the new head # so the CURRENT_PATH_ELEMENT will beome the new head
# and the PATH_ELEMENTS are the rest that are still unprocessed # 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))) $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS)))
endef 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 # separately
PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
# Initialize the path elements list for further processing # Initialize the path elements list for further processing
$(eval $(call NEXT_PATH_ELEMENT)) $(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. # variables depending on which directory you stand in.
# It's really a very simple if else chain, if you squint enough, # It's really a very simple if else chain, if you squint enough,
# but the makefile syntax makes it very verbose. # but the makefile syntax makes it very verbose.
# If we are in a subfolder of keyboards # If we are in a subfolder of keyboards
ifeq ($(CURRENT_PATH_ELEMENT),keyboards) ifeq ($(CURRENT_PATH_ELEMENT),keyboards)
$(eval $(call NEXT_PATH_ELEMENT)) $(eval $(call NEXT_PATH_ELEMENT))
@ -111,7 +111,7 @@ endif
.DEFAULT_GOAL := all .DEFAULT_GOAL := all
ifneq ($(KEYMAP),) ifneq ($(KEYMAP),)
ifeq ($(SUBPROJECT),) 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 subproject
.DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP) .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP)
else else
@ -163,7 +163,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
ifneq ($1,) ifneq ($1,)
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true)
MATCHED_ITEM := $$(firstword $1) MATCHED_ITEM := $$(firstword $1)
else else
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1))) $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1)))
endif endif
endif endif
@ -171,10 +171,10 @@ endef
# A recursive helper function for finding the longest match # A recursive helper function for finding the longest match
# $1 The list to be checed # $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 # and call itself recursively, until a match is found
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2 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,) ifneq ($1,)
RULE_BEFORE := $$(RULE) RULE_BEFORE := $$(RULE)
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1)) $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
@ -270,7 +270,7 @@ define PARSE_KEYBOARD
$$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT))) $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT)))
# If there's no matching subproject, we assume it's the default # 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 # This will allow you to leave the subproject part of the target out
else else
$$(eval $$(call PARSE_SUBPROJECT,)) $$(eval $$(call PARSE_SUBPROJECT,))
endif endif
endef endef
@ -285,7 +285,7 @@ endef
# When entering this, the keyboard and subproject are known, so now we need # When entering this, the keyboard and subproject are known, so now we need
# to determine which keymaps are going to get compiled # to determine which keymaps are going to get compiled
define PARSE_SUBPROJECT 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 # include the correct makefile to determine the actual name of it
CURRENT_SP := $1 CURRENT_SP := $1
ifeq ($$(CURRENT_SP),) ifeq ($$(CURRENT_SP),)
@ -304,7 +304,7 @@ define PARSE_SUBPROJECT
endif endif
endif endif
# The special allsp is handled later # The special allsp is handled later
ifneq ($$(CURRENT_SP),allsp) ifneq ($$(CURRENT_SP),allsp)
# get a list of all keymaps # get a list of all keymaps
KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.)))
ifneq ($$(CURRENT_SP),) ifneq ($$(CURRENT_SP),)
@ -343,7 +343,7 @@ define PARSE_SUBPROJECT
endif endif
endef 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 # then use defaultsp instead
define PARSE_ALL_SUBPROJECTS define PARSE_ALL_SUBPROJECTS
ifeq ($$(SUBPROJECTS),) ifeq ($$(SUBPROJECTS),)
@ -448,7 +448,7 @@ endef
# Set the silent mode depending on if we are trying to compile multiple keyboards or not # 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 # from the command line
define SET_SILENT_MODE define SET_SILENT_MODE
ifdef SUB_IS_SILENT ifdef SUB_IS_SILENT
@ -481,11 +481,12 @@ 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)))
.PHONY: $(SUBPROJECTS) .PHONY: $(SUBPROJECTS)
$(SUBPROJECTS): %: %-allkm $(SUBPROJECTS): %: %-allkm
# Let's match everything, we handle all the rule parsing ourselves # Let's match everything, we handle all the rule parsing ourselves
.PHONY: % .PHONY: %
%: ifndef SKIP_GIT
%:
# Check if we have the CMP tool installed # 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; 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 # 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 # But we return the error code at the end, to trigger travis failures
$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; 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; 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 # All should compile everything
.PHONY: all .PHONY: all
@ -526,7 +543,11 @@ test: test-all
test-clean: test-all-clean test-clean: test-all-clean
# Generate the version.h file # 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") 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_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h)
$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) $(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h)