summaryrefslogtreecommitdiffstats
path: root/build_keyboard.mk
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2021-08-18 21:52:41 +0100
committerGitHub <noreply@github.com>2021-08-18 21:52:41 +0100
commit2e734fb6b9e3480854b794218d381559aab431b7 (patch)
tree2bec5639b3dd200c640cd8c76b8c2b614f67e34b /build_keyboard.mk
parent10fab4ec077354f41d19f01798a49e5864a189cd (diff)
Add config.h and rules.mk support for data driven keymaps (#12859)
* Add config.h and rules.mk support for data driven keymaps * tidy up after rebase * Rename key as it can contain more than just keyboard overrides * tidy up after rebase * Add validation
Diffstat (limited to 'build_keyboard.mk')
-rw-r--r--build_keyboard.mk46
1 files changed, 36 insertions, 10 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk
index 46d1e45667..daef76080a 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -23,6 +23,15 @@ KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
# Force expansion
TARGET := $(TARGET)
+ifneq ($(FORCE_LAYOUT),)
+ TARGET := $(TARGET)_$(FORCE_LAYOUT)
+endif
+
+# Object files and generated keymap directory
+# To put object files in current directory, use a dot (.), do NOT make
+# this an empty or blank macro!
+KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
+
# For split boards we need to set a master half.
MASTER ?= left
ifdef master
@@ -100,18 +109,9 @@ MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
# Pull in rules from info.json
-INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/rules.mk)
+INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_rules.mk)
include $(INFO_RULES_MK)
-ifneq ($(FORCE_LAYOUT),)
- TARGET := $(TARGET)_$(FORCE_LAYOUT)
-endif
-
-# Object files and generated keymap directory
-# To put object files in current directory, use a dot (.), do NOT make
-# this an empty or blank macro!
-KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
-
# Check for keymap.json first, so we can regenerate keymap.c
include build_json.mk
@@ -146,6 +146,29 @@ ifeq ("$(wildcard $(KEYMAP_PATH))", "")
endif
endif
+# Have we found a keymap.json?
+ifneq ("$(wildcard $(KEYMAP_JSON))", "")
+ KEYMAP_C := $(KEYMAP_OUTPUT)/keymap.c
+ KEYMAP_H := $(KEYMAP_OUTPUT)/config.h
+
+ # Load the keymap-level rules.mk if exists
+ -include $(KEYMAP_PATH)/rules.mk
+
+ # Load any rules.mk content from keymap.json
+ INFO_RULES_MK = $(shell (QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_OUTPUT)/rules.mk)
+ include $(INFO_RULES_MK)
+
+# Add rules to enerate the keymap files - indentation here is important
+$(KEYMAP_OUTPUT)/keymap.c: $(KEYMAP_JSON)
+ (QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
+
+$(KEYMAP_OUTPUT)/config.h: $(KEYMAP_JSON)
+ (QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_OUTPUT)/config.h
+
+generated-files: $(KEYMAP_OUTPUT)/config.h $(KEYMAP_OUTPUT)/keymap.c
+
+endif
+
ifeq ($(strip $(CTPC)), yes)
CONVERT_TO_PROTON_C=yes
endif
@@ -336,6 +359,9 @@ endif
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
CONFIG_H += $(KEYMAP_PATH)/config.h
endif
+ifneq ("$(KEYMAP_H)","")
+ CONFIG_H += $(KEYMAP_H)
+endif
# project specific files
SRC += \