]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - Makefile
Proper default goals when inside keyboard fodlers
[qmk_firmware.git] / Makefile
index 1e11dd5ff8591509a536e354743ba9ce159ab4b3..38bead90a55be70b8346d93a5687b458d2a4edad 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 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
@@ -12,7 +12,7 @@ STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
 
 PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
 
-QUANTUM_DIR:=$(ROOT_DIR)/quantum
+MAKEFILE_INCLUDED=yes
 
 define NEXT_PATH_ELEMENT
     $$(eval CURRENT_PATH_ELEMENT := $$(firstword  $$(PATH_ELEMENTS)))
@@ -39,13 +39,40 @@ ifeq ($(CURRENT_PATH_ELEMENT),keyboards)
 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
@@ -99,10 +126,26 @@ endef
 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
 
@@ -131,16 +174,39 @@ 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
 
@@ -170,12 +236,13 @@ RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND));
        $(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