Browse Source

Refactor Makefile logic for locating keymaps (#25808)

Joel Challis 8 months ago
parent
commit
57b284dfa9
5 changed files with 67 additions and 177 deletions
  1. 1 33
      Makefile
  2. 0 36
      builddefs/build_json.mk
  3. 2 72
      builddefs/build_keyboard.mk
  4. 0 36
      builddefs/build_layout.mk
  5. 64 0
      builddefs/locate_keymap.mk

+ 1 - 33
Makefile

@@ -190,41 +190,9 @@ endef
 # Parses a rule in the format <keymap>:<target>
 # the keyboard is already known when entering this function
 define PARSE_KEYBOARD
-    # If we want to compile the default subproject, then we need to
-    # include the correct makefile to determine the actual name of it
     CURRENT_KB := $1
 
-    # 5/4/3/2/1
-    KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB)
-    KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1)))
-    KEYBOARD_FOLDER_PATH_3 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_2)))
-    KEYBOARD_FOLDER_PATH_4 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_3)))
-    KEYBOARD_FOLDER_PATH_5 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_4)))
-
-    KEYMAPS :=
-    # get a list of all keymaps
-    KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/keymaps/*/.)))
-    KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/keymaps/*/.)))
-    KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/keymaps/*/.)))
-    KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
-    KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
-
-    ifneq ($(QMK_USERSPACE),)
-        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/keymaps/*/.)))
-        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/keymaps/*/.)))
-        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/keymaps/*/.)))
-        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
-        KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
-    endif
-
-    KEYBOARD_LAYOUTS := $(shell $(QMK_BIN) list-layouts --keyboard $1)
-    LAYOUT_KEYMAPS :=
-    $$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/layouts/*/$$(LAYOUT)/*/.)))))
-    ifneq ($(QMK_USERSPACE),)
-        $$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/layouts/$$(LAYOUT)/*/.)))))
-    endif
-
-    KEYMAPS := $$(sort $$(KEYMAPS) $$(LAYOUT_KEYMAPS))
+    KEYMAPS := $(shell $(QMK_BIN) list-keymaps --keyboard $1)
 
     # if the rule after removing the start of it is empty (we haven't specified a kemap or target)
     # compile all the keymaps

+ 0 - 36
builddefs/build_json.mk

@@ -1,36 +0,0 @@
-# Look for a json keymap file
-ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)","")
-    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_5)/keymap.json
-    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_5)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.json)","")
-    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_4)/keymap.json
-    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_4)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.json)","")
-    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_3)/keymap.json
-    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_3)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.json)","")
-    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_2)/keymap.json
-    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_2)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
-    KEYMAP_JSON := $(MAIN_KEYMAP_PATH_1)/keymap.json
-    KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_1)
-endif
-
-ifneq ($(QMK_USERSPACE),)
-    ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.json)","")
-        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.json
-        KEYMAP_JSON_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
-    else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.json)","")
-        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.json
-        KEYMAP_JSON_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
-    else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.json)","")
-        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.json
-        KEYMAP_JSON_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
-    else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.json)","")
-        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.json
-        KEYMAP_JSON_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
-    else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.json)","")
-        KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.json
-        KEYMAP_JSON_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
-    endif
-endif

+ 2 - 72
builddefs/build_keyboard.mk

@@ -138,75 +138,12 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/keyboard.json)","")
     DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/keyboard.json
 endif
 
-MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
-
 # Pull in rules from DD keyboard config
 INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/info_rules.mk)
 include $(INFO_RULES_MK)
 
-# Check for keymap.json first, so we can regenerate keymap.c
-include $(BUILDDEFS_PATH)/build_json.mk
-
-# Pull in keymap level rules.mk
-ifeq ("$(wildcard $(KEYMAP_PATH))", "")
-    # Look through the possible keymap folders until we find a matching keymap.c
-    ifneq ($(QMK_USERSPACE),)
-        ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.c)","")
-            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/rules.mk
-            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.c
-            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
-        else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.c)","")
-            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/rules.mk
-            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.c
-            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
-        else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.c)","")
-            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/rules.mk
-            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.c
-            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
-        else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.c)","")
-            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/rules.mk
-            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.c
-            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
-        else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.c)","")
-            -include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/rules.mk
-            KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.c
-            KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
-        endif
-    endif
-    ifeq ($(KEYMAP_PATH),)
-        ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
-            -include $(MAIN_KEYMAP_PATH_1)/rules.mk
-            KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
-            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
-        else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
-            -include $(MAIN_KEYMAP_PATH_2)/rules.mk
-            KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
-            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
-        else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
-            -include $(MAIN_KEYMAP_PATH_3)/rules.mk
-            KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
-            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
-        else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
-            -include $(MAIN_KEYMAP_PATH_4)/rules.mk
-            KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
-            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
-        else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
-            -include $(MAIN_KEYMAP_PATH_5)/rules.mk
-            KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
-            KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
-        else ifneq ($(LAYOUTS),)
-            # If we haven't found a keymap yet fall back to community layouts
-            include $(BUILDDEFS_PATH)/build_layout.mk
-        else ifeq ("$(wildcard $(KEYMAP_JSON_PATH))", "") # Not finding keymap.c is fine if we found a keymap.json
-            $(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
-            # this state should never be reached
-        endif
-    endif
-endif
+include $(BUILDDEFS_PATH)/locate_keymap.mk
+-include $(KEYMAP_PATH)/rules.mk
 
 # Have we found a keymap.json?
 ifneq ("$(wildcard $(KEYMAP_JSON))", "")
@@ -217,16 +154,9 @@ ifneq ("$(wildcard $(KEYMAP_JSON))", "")
         OPT_DEFS += -DOTHER_KEYMAP_C=\"$(OTHER_KEYMAP_C)\"
     endif
 
-    KEYMAP_PATH := $(KEYMAP_JSON_PATH)
-
     KEYMAP_C := $(INTERMEDIATE_OUTPUT)/src/keymap.c
     KEYMAP_H := $(INTERMEDIATE_OUTPUT)/src/config.h
 
-    ifeq ($(OTHER_KEYMAP_C),)
-        # Load the keymap-level rules.mk if exists (and we havent already loaded it for keymap.c)
-        -include $(KEYMAP_PATH)/rules.mk
-    endif
-
     # Load any rules.mk content from keymap.json
     INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/rules.mk $(KEYMAP_JSON))
     include $(INFO_RULES_MK)

+ 0 - 36
builddefs/build_layout.mk

@@ -1,36 +0,0 @@
-LAYOUTS_PATH := layouts
-LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
-
-ifneq ($(QMK_USERSPACE),)
-    LAYOUTS_REPOS += $(patsubst %/,%,$(QMK_USERSPACE)/$(LAYOUTS_PATH))
-endif
-
-define SEARCH_LAYOUTS_REPO
-    LAYOUT_KEYMAP_PATH := $$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP)
-    LAYOUT_KEYMAP_JSON := $$(LAYOUT_KEYMAP_PATH)/keymap.json
-    LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c
-    ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_JSON))","")
-        KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON)
-        KEYMAP_JSON_PATH := $$(LAYOUT_KEYMAP_PATH)
-    endif
-    ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","")
-        -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
-        KEYMAP_C := $$(LAYOUT_KEYMAP_C)
-        KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
-    endif
-endef
-
-define SEARCH_LAYOUTS
-    $$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_LAYOUTS_REPO)))
-endef
-
-ifneq ($(FORCE_LAYOUT),)
-    ifneq (,$(findstring $(FORCE_LAYOUT),$(LAYOUTS)))
-        $(info Forcing layout: $(FORCE_LAYOUT))
-        LAYOUTS := $(FORCE_LAYOUT)
-    else
-        $(call CATASTROPHIC_ERROR,Invalid layout,Forced layout does not exist)
-    endif
-endif
-
-$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))

+ 64 - 0
builddefs/locate_keymap.mk

@@ -0,0 +1,64 @@
+MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
+
+POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_1)
+POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_2)
+POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_3)
+POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_4)
+POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_5)
+
+ifneq ($(QMK_USERSPACE),)
+    POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
+    POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
+    POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
+    POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
+    POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
+endif
+
+define SEARCH_POTENTIAL_LOCATION
+    POTENTIAL_DIR := $1
+    ifeq ("$$(wildcard $$(KEYMAP_PATH))", "")
+        POTENTIAL_KEYMAP_JSON := $$(POTENTIAL_DIR)/keymap.json
+        POTENTIAL_KEYMAP_C := $$(POTENTIAL_DIR)/keymap.c
+        ifneq ("$$(wildcard $$(POTENTIAL_KEYMAP_JSON))","")
+            KEYMAP_JSON := $$(POTENTIAL_KEYMAP_JSON)
+            KEYMAP_PATH := $$(POTENTIAL_DIR)
+        endif
+        ifneq ("$$(wildcard $$(POTENTIAL_KEYMAP_C))","")
+            KEYMAP_C := $$(POTENTIAL_KEYMAP_C)
+            KEYMAP_PATH := $$(POTENTIAL_DIR)
+        endif
+    endif
+endef
+
+$(foreach KM_DIR,$(POTENTIAL_KEYMAP_PATHS),$(eval $(call SEARCH_POTENTIAL_LOCATION, $(KM_DIR))))
+
+LAYOUTS_PATH := layouts
+LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
+
+ifneq ($(QMK_USERSPACE),)
+    LAYOUTS_REPOS += $(patsubst %/,%,$(QMK_USERSPACE)/$(LAYOUTS_PATH))
+endif
+
+define SEARCH_LAYOUTS
+    $$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_POTENTIAL_LOCATION,$$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP))))
+endef
+
+ifneq ($(FORCE_LAYOUT),)
+    ifneq (,$(findstring $(FORCE_LAYOUT),$(LAYOUTS)))
+        $(info Forcing layout: $(FORCE_LAYOUT))
+        LAYOUTS := $(FORCE_LAYOUT)
+    else
+        $(call CATASTROPHIC_ERROR,Invalid layout,Forced layout does not exist)
+    endif
+endif
+
+$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))
+
+ifeq ("$$(wildcard $$(KEYMAP_PATH))", "")
+    $(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
+    # this state should never be reached
+endif