diff --git a/Makefile b/Makefile index 5bb4f0d8eb3..62c3d3c2843 100644 --- a/Makefile +++ b/Makefile @@ -190,41 +190,9 @@ endef # Parses a rule in the format : # 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 diff --git a/builddefs/build_json.mk b/builddefs/build_json.mk deleted file mode 100644 index 54f256480b4..00000000000 --- a/builddefs/build_json.mk +++ /dev/null @@ -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 diff --git a/builddefs/build_keyboard.mk b/builddefs/build_keyboard.mk index 0df95342f93..aa527f79b5e 100644 --- a/builddefs/build_keyboard.mk +++ b/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) diff --git a/builddefs/build_layout.mk b/builddefs/build_layout.mk deleted file mode 100644 index 7a5dbf58b64..00000000000 --- a/builddefs/build_layout.mk +++ /dev/null @@ -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))) diff --git a/builddefs/locate_keymap.mk b/builddefs/locate_keymap.mk new file mode 100644 index 00000000000..3e95424a6c1 --- /dev/null +++ b/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