STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
-ROOT_DIR := $(dir, $(ROOT_MAKEFILE))
+ROOT_DIR := $(dir $(ROOT_MAKEFILE))
ifeq ($(ROOT_DIR),)
ROOT_DIR := .
endif
PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
-QUANTUM_DIR:=$(ROOT_DIR)/quantum
+MAKEFILE_INCLUDED=yes
define NEXT_PATH_ELEMENT
$$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
endif
$(info $(ROOT_DIR)/keyboards)
-KEYBOARDS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/*/.)))
+# Only consider folders with makefiles, to prevent errors in case there are extra folders
+KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile)))
+
+#Compability with the old make variables
+ifdef keyboard
+ KEYBOARD := $(keyboard)
+endif
+ifdef sub
+ SUBPROJECT := $(sub)
+endif
+ifdef subproject
+ SUBPROJECT := $(subproject)
+endif
+ifdef keymap
+ KEYMAP := $(keymap)
+endif
$(info Keyboard: $(KEYBOARD))
$(info Keymap: $(KEYMAP))
$(info Subproject: $(SUBPROJECT))
$(info Keyboards: $(KEYBOARDS))
+ifneq ($(KEYMAP),)
+ ifeq ($(SUBPROJECT),)
+ .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP)
+ else
+ .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-$(KEYMAP)
+ endif
+else ifneq ($(SUBPROJECT),)
+ .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-allkm
+else ifneq ($(KEYBOARD),)
+ .DEFAULT_GOAL := $(KEYBOARD)-allsp-allkm
+endif
+
# Compare the start of the RULE_VARIABLE with the first argument($1)
# If the rules equals $1 or starts with $1-, RULE_FOUND is set to true
define PARSE_RULE
RULE := $1
COMMANDS :=
+ $$(info $$(RULE))
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true)
$$(eval $$(call PARSE_ALL_KEYBOARDS))
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true)
+ $$(info $$(MATCHED_ITEM))
$$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
+ else ifneq ($$(KEYBOARD),)
+ # If there's no match in the beginning, then use the working directory instead
+ # First add the keymap to the commandline if we are in a keymap subdirectory
+ ifneq ($$(KEYMAP),)
+ RULE := $$(KEYMAP)-$$(RULE)
+ endif
+ # If we are in a subproject subdirectory add the subproject
+ ifneq ($$(SUBPROJECT),)
+ RULE := $$(SUBPROJECT)-$$(RULE)
+ endif
+ $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD)))
+ else
+ $$(info make: *** No rule to make target '$1'. Stop.)
+ exit 1
endif
endef
# $1 Subproject
define PARSE_SUBPROJECT
ifeq ($1,defaultsp)
+ SUBPROJECT_DEFAULT=
$$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile)
CURRENT_SP := $$(SUBPROJECT_DEFAULT)
else
CURRENT_SP := $1
endif
- KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.)))
- ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true)
- $$(eval $$(call PARSE_ALL_KEYMAPS))
- else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true)
- $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM)))
+ # If current subproject is empty (the default was not defined), and we have a list of subproject
+ # then make all
+ ifeq ($$(CURRENT_SP),)
+ ifneq ($$(SUBPROJECTS),)
+ CURRENT_SP := allsp
+ endif
+ endif
+ ifneq ($$(CURRENT_SP),allsp)
+ KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.)))
+ ifneq ($$(CURRENT_SP),)
+ SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.)))
+ KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS))
+ endif
+ ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true)
+ $$(eval $$(call PARSE_ALL_KEYMAPS))
+ else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true)
+ $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM)))
+ else
+ ifeq ($$(CURRENT_SP),)
+ $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(RULE)'. Stop.)
+ else
+ $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(CURRENT_SP)-$$(RULE)'. Stop.)
+ endif
+ exit 1
+ endif
+ else
+ $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS)))
endif
endef
$(eval $(call PARSE_RULE,$@))
$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
+
+.PHONY: all
+all:
+ echo "Compiling"
+
.PHONY: all-keyboards
all-keyboards: allkb
.PHONY: all-keyboards-defaults
all-keyboards-defaults: allkb-default-default
-
-.PHONY: all
-all:
- echo "Compiling"
\ No newline at end of file