summaryrefslogtreecommitdiffstats
path: root/builddefs/build_layout.mk
diff options
context:
space:
mode:
Diffstat (limited to 'builddefs/build_layout.mk')
-rw-r--r--builddefs/build_layout.mk32
1 files changed, 32 insertions, 0 deletions
diff --git a/builddefs/build_layout.mk b/builddefs/build_layout.mk
new file mode 100644
index 0000000000..6166bd847c
--- /dev/null
+++ b/builddefs/build_layout.mk
@@ -0,0 +1,32 @@
+LAYOUTS_PATH := layouts
+LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
+
+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))","")
+ -include $$(LAYOUT_KEYMAP_PATH)/rules.mk
+ KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON)
+ KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
+ else 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)))