diff options
| author | Joel Challis <git@zvecr.com> | 2021-08-18 21:52:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-18 21:52:41 +0100 |
| commit | 2e734fb6b9e3480854b794218d381559aab431b7 (patch) | |
| tree | 2bec5639b3dd200c640cd8c76b8c2b614f67e34b /build_keyboard.mk | |
| parent | 10fab4ec077354f41d19f01798a49e5864a189cd (diff) | |
| download | qmk_firmware-2e734fb6b9e3480854b794218d381559aab431b7.tar.gz qmk_firmware-2e734fb6b9e3480854b794218d381559aab431b7.zip | |
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.mk | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk index 46d1e4566..daef76080 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk | |||
| @@ -23,6 +23,15 @@ KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE) | |||
| 23 | # Force expansion | 23 | # Force expansion |
| 24 | TARGET := $(TARGET) | 24 | TARGET := $(TARGET) |
| 25 | 25 | ||
| 26 | ifneq ($(FORCE_LAYOUT),) | ||
| 27 | TARGET := $(TARGET)_$(FORCE_LAYOUT) | ||
| 28 | endif | ||
| 29 | |||
| 30 | # Object files and generated keymap directory | ||
| 31 | # To put object files in current directory, use a dot (.), do NOT make | ||
| 32 | # this an empty or blank macro! | ||
| 33 | KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET) | ||
| 34 | |||
| 26 | # For split boards we need to set a master half. | 35 | # For split boards we need to set a master half. |
| 27 | MASTER ?= left | 36 | MASTER ?= left |
| 28 | ifdef master | 37 | ifdef master |
| @@ -100,18 +109,9 @@ MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP) | |||
| 100 | MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP) | 109 | MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP) |
| 101 | 110 | ||
| 102 | # Pull in rules from info.json | 111 | # Pull in rules from info.json |
| 103 | INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/rules.mk) | 112 | INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_rules.mk) |
| 104 | include $(INFO_RULES_MK) | 113 | include $(INFO_RULES_MK) |
| 105 | 114 | ||
| 106 | ifneq ($(FORCE_LAYOUT),) | ||
| 107 | TARGET := $(TARGET)_$(FORCE_LAYOUT) | ||
| 108 | endif | ||
| 109 | |||
| 110 | # Object files and generated keymap directory | ||
| 111 | # To put object files in current directory, use a dot (.), do NOT make | ||
| 112 | # this an empty or blank macro! | ||
| 113 | KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET) | ||
| 114 | |||
| 115 | # Check for keymap.json first, so we can regenerate keymap.c | 115 | # Check for keymap.json first, so we can regenerate keymap.c |
| 116 | include build_json.mk | 116 | include build_json.mk |
| 117 | 117 | ||
| @@ -146,6 +146,29 @@ ifeq ("$(wildcard $(KEYMAP_PATH))", "") | |||
| 146 | endif | 146 | endif |
| 147 | endif | 147 | endif |
| 148 | 148 | ||
| 149 | # Have we found a keymap.json? | ||
| 150 | ifneq ("$(wildcard $(KEYMAP_JSON))", "") | ||
| 151 | KEYMAP_C := $(KEYMAP_OUTPUT)/keymap.c | ||
| 152 | KEYMAP_H := $(KEYMAP_OUTPUT)/config.h | ||
| 153 | |||
| 154 | # Load the keymap-level rules.mk if exists | ||
| 155 | -include $(KEYMAP_PATH)/rules.mk | ||
| 156 | |||
| 157 | # Load any rules.mk content from keymap.json | ||
| 158 | INFO_RULES_MK = $(shell (QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_OUTPUT)/rules.mk) | ||
| 159 | include $(INFO_RULES_MK) | ||
| 160 | |||
| 161 | # Add rules to enerate the keymap files - indentation here is important | ||
| 162 | $(KEYMAP_OUTPUT)/keymap.c: $(KEYMAP_JSON) | ||
| 163 | (QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON) | ||
| 164 | |||
| 165 | $(KEYMAP_OUTPUT)/config.h: $(KEYMAP_JSON) | ||
| 166 | (QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_OUTPUT)/config.h | ||
| 167 | |||
| 168 | generated-files: $(KEYMAP_OUTPUT)/config.h $(KEYMAP_OUTPUT)/keymap.c | ||
| 169 | |||
| 170 | endif | ||
| 171 | |||
| 149 | ifeq ($(strip $(CTPC)), yes) | 172 | ifeq ($(strip $(CTPC)), yes) |
| 150 | CONVERT_TO_PROTON_C=yes | 173 | CONVERT_TO_PROTON_C=yes |
| 151 | endif | 174 | endif |
| @@ -336,6 +359,9 @@ endif | |||
| 336 | ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") | 359 | ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") |
| 337 | CONFIG_H += $(KEYMAP_PATH)/config.h | 360 | CONFIG_H += $(KEYMAP_PATH)/config.h |
| 338 | endif | 361 | endif |
| 362 | ifneq ("$(KEYMAP_H)","") | ||
| 363 | CONFIG_H += $(KEYMAP_H) | ||
| 364 | endif | ||
| 339 | 365 | ||
| 340 | # project specific files | 366 | # project specific files |
| 341 | SRC += \ | 367 | SRC += \ |
