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 | |
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
-rw-r--r-- | build_json.mk | 14 | ||||
-rw-r--r-- | build_keyboard.mk | 46 | ||||
-rw-r--r-- | build_layout.mk | 5 | ||||
-rw-r--r-- | data/mappings/info_config.json | 2 | ||||
-rw-r--r-- | data/schemas/keymap.jsonschema | 24 | ||||
-rw-r--r-- | keyboards/thevankeyboards/minivan/keymaps/via/keymap.json | 11 | ||||
-rw-r--r-- | keyboards/thevankeyboards/minivan/keymaps/via/rules.mk | 2 | ||||
-rwxr-xr-x | lib/python/qmk/cli/generate/config_h.py | 29 | ||||
-rwxr-xr-x | lib/python/qmk/cli/generate/keyboard_h.py | 7 | ||||
-rwxr-xr-x | lib/python/qmk/cli/generate/rules_mk.py | 30 |
10 files changed, 101 insertions, 69 deletions
diff --git a/build_json.mk b/build_json.mk index 28659f260..0c034eb2a 100644 --- a/build_json.mk +++ b/build_json.mk | |||
@@ -1,31 +1,17 @@ | |||
1 | # Look for a json keymap file | 1 | # Look for a json keymap file |
2 | ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)","") | 2 | ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)","") |
3 | KEYMAP_C := $(KEYMAP_OUTPUT)/keymap.c | ||
4 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_5)/keymap.json | 3 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_5)/keymap.json |
5 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5) | 4 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5) |
6 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.json)","") | 5 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.json)","") |
7 | KEYMAP_C := $(KEYMAP_OUTPUT)/keymap.c | ||
8 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_4)/keymap.json | 6 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_4)/keymap.json |
9 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4) | 7 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4) |
10 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.json)","") | 8 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.json)","") |
11 | KEYMAP_C := $(KEYMAP_OUTPUT)/keymap.c | ||
12 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_3)/keymap.json | 9 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_3)/keymap.json |
13 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3) | 10 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3) |
14 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.json)","") | 11 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.json)","") |
15 | KEYMAP_C := $(KEYMAP_OUTPUT)/keymap.c | ||
16 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_2)/keymap.json | 12 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_2)/keymap.json |
17 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2) | 13 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2) |
18 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","") | 14 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","") |
19 | KEYMAP_C := $(KEYMAP_OUTPUT)/keymap.c | ||
20 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_1)/keymap.json | 15 | KEYMAP_JSON := $(MAIN_KEYMAP_PATH_1)/keymap.json |
21 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1) | 16 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1) |
22 | endif | 17 | endif |
23 | |||
24 | # Load the keymap-level rules.mk if exists | ||
25 | ifneq ("$(wildcard $(KEYMAP_PATH))", "") | ||
26 | -include $(KEYMAP_PATH)/rules.mk | ||
27 | endif | ||
28 | |||
29 | # Generate the keymap.c | ||
30 | $(KEYMAP_C): $(KEYMAP_JSON) | ||
31 | $(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON) | ||
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 += \ |
diff --git a/build_layout.mk b/build_layout.mk index 649dfb2c7..b4b00793e 100644 --- a/build_layout.mk +++ b/build_layout.mk | |||
@@ -7,7 +7,6 @@ define SEARCH_LAYOUTS_REPO | |||
7 | LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c | 7 | LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c |
8 | ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_JSON))","") | 8 | ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_JSON))","") |
9 | -include $$(LAYOUT_KEYMAP_PATH)/rules.mk | 9 | -include $$(LAYOUT_KEYMAP_PATH)/rules.mk |
10 | KEYMAP_C := $(KEYMAP_OUTPUT)/keymap.c | ||
11 | KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON) | 10 | KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON) |
12 | KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH) | 11 | KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH) |
13 | else ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","") | 12 | else ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","") |
@@ -31,7 +30,3 @@ ifneq ($(FORCE_LAYOUT),) | |||
31 | endif | 30 | endif |
32 | 31 | ||
33 | $(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS))) | 32 | $(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS))) |
34 | |||
35 | # Use rule from build_json.mk, but update prerequisite in case KEYMAP_JSON was updated | ||
36 | $(KEYMAP_C): $(KEYMAP_JSON) | ||
37 | $(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON) | ||
diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json index 18477f912..72bb0f4a1 100644 --- a/data/mappings/info_config.json +++ b/data/mappings/info_config.json | |||
@@ -18,6 +18,8 @@ | |||
18 | "DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false}, | 18 | "DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false}, |
19 | "DIODE_DIRECTION": {"info_key": "diode_direction"}, | 19 | "DIODE_DIRECTION": {"info_key": "diode_direction"}, |
20 | "FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"}, | 20 | "FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"}, |
21 | "DYNAMIC_KEYMAP_EEPROM_MAX_ADDR": {"info_key": "dynamic_keymap.eeprom_max_addr", "value_type": "int"}, | ||
22 | "DYNAMIC_KEYMAP_LAYER_COUNT": {"info_key": "dynamic_keymap.layer_count", "value_type": "int"}, | ||
21 | "IGNORE_MOD_TAP_INTERRUPT": {"info_key": "tapping.ignore_mod_tap_interrupt", "value_type": "bool"}, | 23 | "IGNORE_MOD_TAP_INTERRUPT": {"info_key": "tapping.ignore_mod_tap_interrupt", "value_type": "bool"}, |
22 | "IGNORE_MOD_TAP_INTERRUPT_PER_KEY": {"info_key": "tapping.ignore_mod_tap_interrupt_per_key", "value_type": "bool"}, | 24 | "IGNORE_MOD_TAP_INTERRUPT_PER_KEY": {"info_key": "tapping.ignore_mod_tap_interrupt_per_key", "value_type": "bool"}, |
23 | "LAYOUTS": {"info_key": "layout_aliases", "value_type": "mapping"}, | 25 | "LAYOUTS": {"info_key": "layout_aliases", "value_type": "mapping"}, |
diff --git a/data/schemas/keymap.jsonschema b/data/schemas/keymap.jsonschema new file mode 100644 index 000000000..35c5b5c98 --- /dev/null +++ b/data/schemas/keymap.jsonschema | |||
@@ -0,0 +1,24 @@ | |||
1 | { | ||
2 | "$schema": "http://json-schema.org/draft-07/schema#", | ||
3 | "$id": "qmk.keymap.v1", | ||
4 | "title": "Keymap Information", | ||
5 | "type": "object", | ||
6 | "properties": { | ||
7 | "author": {"$ref": "qmk.definitions.v1#/text_identifier"}, | ||
8 | "keyboard": {"$ref": "qmk.definitions.v1#/text_identifier"}, | ||
9 | "keymap": {"$ref": "qmk.definitions.v1#/text_identifier"}, | ||
10 | "layout": {"$ref": "qmk.definitions.v1#/layout_macro"}, | ||
11 | "layers": { | ||
12 | "type": "array", | ||
13 | "items": { | ||
14 | "type": "array", | ||
15 | "items": {"type": "string"} | ||
16 | } | ||
17 | }, | ||
18 | "config": {"$ref": "qmk.keyboard.v1"}, | ||
19 | "notes": { | ||
20 | "type": "string", | ||
21 | "description": "asdf" | ||
22 | } | ||
23 | } | ||
24 | } \ No newline at end of file | ||
diff --git a/keyboards/thevankeyboards/minivan/keymaps/via/keymap.json b/keyboards/thevankeyboards/minivan/keymaps/via/keymap.json index 1e9ef8810..54ceb5c34 100644 --- a/keyboards/thevankeyboards/minivan/keymaps/via/keymap.json +++ b/keyboards/thevankeyboards/minivan/keymaps/via/keymap.json | |||
@@ -7,5 +7,14 @@ | |||
7 | ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], | 7 | ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], |
8 | ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], | 8 | ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], |
9 | ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"] | 9 | ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"] |
10 | ] | 10 | ], |
11 | "config": { | ||
12 | "features": { | ||
13 | "via": true, | ||
14 | "lto": true | ||
15 | }, | ||
16 | "dynamic_keymap": { | ||
17 | "layer_count": 4 | ||
18 | } | ||
19 | } | ||
11 | } | 20 | } |
diff --git a/keyboards/thevankeyboards/minivan/keymaps/via/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/via/rules.mk deleted file mode 100644 index 36b7ba9cb..000000000 --- a/keyboards/thevankeyboards/minivan/keymaps/via/rules.mk +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | VIA_ENABLE = yes | ||
2 | LTO_ENABLE = yes | ||
diff --git a/lib/python/qmk/cli/generate/config_h.py b/lib/python/qmk/cli/generate/config_h.py index c0c148f1c..ca7e14fe6 100755 --- a/lib/python/qmk/cli/generate/config_h.py +++ b/lib/python/qmk/cli/generate/config_h.py | |||
@@ -5,11 +5,11 @@ from pathlib import Path | |||
5 | from dotty_dict import dotty | 5 | from dotty_dict import dotty |
6 | from milc import cli | 6 | from milc import cli |
7 | 7 | ||
8 | from qmk.decorators import automagic_keyboard, automagic_keymap | ||
9 | from qmk.info import info_json | 8 | from qmk.info import info_json |
10 | from qmk.json_schema import json_load | 9 | from qmk.json_schema import json_load, validate |
11 | from qmk.keyboard import keyboard_completer, keyboard_folder | 10 | from qmk.keyboard import keyboard_completer, keyboard_folder |
12 | from qmk.path import is_keyboard, normpath | 11 | from qmk.keymap import locate_keymap |
12 | from qmk.path import normpath | ||
13 | 13 | ||
14 | 14 | ||
15 | def direct_pins(direct_pins, postfix): | 15 | def direct_pins(direct_pins, postfix): |
@@ -157,25 +157,22 @@ def generate_split_config(kb_info_json, config_h_lines): | |||
157 | 157 | ||
158 | @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') | 158 | @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') |
159 | @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") | 159 | @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") |
160 | @cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, help='Keyboard to generate config.h for.') | 160 | @cli.argument('-kb', '--keyboard', arg_only=True, type=keyboard_folder, completer=keyboard_completer, required=True, help='Keyboard to generate config.h for.') |
161 | @cli.argument('-km', '--keymap', arg_only=True, help='Keymap to generate config.h for.') | ||
161 | @cli.subcommand('Used by the make system to generate info_config.h from info.json', hidden=True) | 162 | @cli.subcommand('Used by the make system to generate info_config.h from info.json', hidden=True) |
162 | @automagic_keyboard | ||
163 | @automagic_keymap | ||
164 | def generate_config_h(cli): | 163 | def generate_config_h(cli): |
165 | """Generates the info_config.h file. | 164 | """Generates the info_config.h file. |
166 | """ | 165 | """ |
167 | # Determine our keyboard(s) | 166 | # Determine our keyboard/keymap |
168 | if not cli.config.generate_config_h.keyboard: | 167 | if cli.args.keymap: |
169 | cli.log.error('Missing parameter: --keyboard') | 168 | km = locate_keymap(cli.args.keyboard, cli.args.keymap) |
170 | cli.subcommands['info'].print_help() | 169 | km_json = json_load(km) |
171 | return False | 170 | validate(km_json, 'qmk.keymap.v1') |
172 | 171 | kb_info_json = dotty(km_json.get('config', {})) | |
173 | if not is_keyboard(cli.config.generate_config_h.keyboard): | 172 | else: |
174 | cli.log.error('Invalid keyboard: "%s"', cli.config.generate_config_h.keyboard) | 173 | kb_info_json = dotty(info_json(cli.args.keyboard)) |
175 | return False | ||
176 | 174 | ||
177 | # Build the info_config.h file. | 175 | # Build the info_config.h file. |
178 | kb_info_json = dotty(info_json(cli.config.generate_config_h.keyboard)) | ||
179 | config_h_lines = ['/* This file was generated by `qmk generate-config-h`. Do not edit or copy.' ' */', '', '#pragma once'] | 176 | config_h_lines = ['/* This file was generated by `qmk generate-config-h`. Do not edit or copy.' ' */', '', '#pragma once'] |
180 | 177 | ||
181 | generate_config_items(kb_info_json, config_h_lines) | 178 | generate_config_items(kb_info_json, config_h_lines) |
diff --git a/lib/python/qmk/cli/generate/keyboard_h.py b/lib/python/qmk/cli/generate/keyboard_h.py index 22500dbc9..c9d7f549b 100755 --- a/lib/python/qmk/cli/generate/keyboard_h.py +++ b/lib/python/qmk/cli/generate/keyboard_h.py | |||
@@ -2,7 +2,6 @@ | |||
2 | """ | 2 | """ |
3 | from milc import cli | 3 | from milc import cli |
4 | 4 | ||
5 | from qmk.decorators import automagic_keyboard, automagic_keymap | ||
6 | from qmk.info import info_json | 5 | from qmk.info import info_json |
7 | from qmk.keyboard import keyboard_completer, keyboard_folder | 6 | from qmk.keyboard import keyboard_completer, keyboard_folder |
8 | from qmk.path import normpath | 7 | from qmk.path import normpath |
@@ -29,14 +28,12 @@ def would_populate_layout_h(keyboard): | |||
29 | 28 | ||
30 | @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') | 29 | @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') |
31 | @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") | 30 | @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") |
32 | @cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, required=True, help='Keyboard to generate keyboard.h for.') | 31 | @cli.argument('-kb', '--keyboard', arg_only=True, type=keyboard_folder, completer=keyboard_completer, required=True, help='Keyboard to generate keyboard.h for.') |
33 | @cli.subcommand('Used by the make system to generate keyboard.h from info.json', hidden=True) | 32 | @cli.subcommand('Used by the make system to generate keyboard.h from info.json', hidden=True) |
34 | @automagic_keyboard | ||
35 | @automagic_keymap | ||
36 | def generate_keyboard_h(cli): | 33 | def generate_keyboard_h(cli): |
37 | """Generates the keyboard.h file. | 34 | """Generates the keyboard.h file. |
38 | """ | 35 | """ |
39 | has_layout_h = would_populate_layout_h(cli.config.generate_keyboard_h.keyboard) | 36 | has_layout_h = would_populate_layout_h(cli.args.keyboard) |
40 | 37 | ||
41 | # Build the layouts.h file. | 38 | # Build the layouts.h file. |
42 | keyboard_h_lines = ['/* This file was generated by `qmk generate-keyboard-h`. Do not edit or copy.' ' */', '', '#pragma once', '#include "quantum.h"'] | 39 | keyboard_h_lines = ['/* This file was generated by `qmk generate-keyboard-h`. Do not edit or copy.' ' */', '', '#pragma once', '#include "quantum.h"'] |
diff --git a/lib/python/qmk/cli/generate/rules_mk.py b/lib/python/qmk/cli/generate/rules_mk.py index 2712b81cb..cdf17dfbc 100755 --- a/lib/python/qmk/cli/generate/rules_mk.py +++ b/lib/python/qmk/cli/generate/rules_mk.py | |||
@@ -5,11 +5,11 @@ from pathlib import Path | |||
5 | from dotty_dict import dotty | 5 | from dotty_dict import dotty |
6 | from milc import cli | 6 | from milc import cli |
7 | 7 | ||
8 | from qmk.decorators import automagic_keyboard, automagic_keymap | ||
9 | from qmk.info import info_json | 8 | from qmk.info import info_json |
10 | from qmk.json_schema import json_load | 9 | from qmk.json_schema import json_load, validate |
11 | from qmk.keyboard import keyboard_completer, keyboard_folder | 10 | from qmk.keyboard import keyboard_completer, keyboard_folder |
12 | from qmk.path import is_keyboard, normpath | 11 | from qmk.keymap import locate_keymap |
12 | from qmk.path import normpath | ||
13 | 13 | ||
14 | 14 | ||
15 | def process_mapping_rule(kb_info_json, rules_key, info_dict): | 15 | def process_mapping_rule(kb_info_json, rules_key, info_dict): |
@@ -39,23 +39,21 @@ def process_mapping_rule(kb_info_json, rules_key, info_dict): | |||
39 | @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') | 39 | @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') |
40 | @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") | 40 | @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") |
41 | @cli.argument('-e', '--escape', arg_only=True, action='store_true', help="Escape spaces in quiet mode") | 41 | @cli.argument('-e', '--escape', arg_only=True, action='store_true', help="Escape spaces in quiet mode") |
42 | @cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, help='Keyboard to generate config.h for.') | 42 | @cli.argument('-kb', '--keyboard', arg_only=True, type=keyboard_folder, completer=keyboard_completer, required=True, help='Keyboard to generate rules.mk for.') |
43 | @cli.subcommand('Used by the make system to generate info_config.h from info.json', hidden=True) | 43 | @cli.argument('-km', '--keymap', arg_only=True, help='Keymap to generate rules.mk for.') |
44 | @automagic_keyboard | 44 | @cli.subcommand('Used by the make system to generate rules.mk from info.json', hidden=True) |
45 | @automagic_keymap | ||
46 | def generate_rules_mk(cli): | 45 | def generate_rules_mk(cli): |
47 | """Generates a rules.mk file from info.json. | 46 | """Generates a rules.mk file from info.json. |
48 | """ | 47 | """ |
49 | if not cli.config.generate_rules_mk.keyboard: | 48 | # Determine our keyboard/keymap |
50 | cli.log.error('Missing parameter: --keyboard') | 49 | if cli.args.keymap: |
51 | cli.subcommands['info'].print_help() | 50 | km = locate_keymap(cli.args.keyboard, cli.args.keymap) |
52 | return False | 51 | km_json = json_load(km) |
53 | 52 | validate(km_json, 'qmk.keymap.v1') | |
54 | if not is_keyboard(cli.config.generate_rules_mk.keyboard): | 53 | kb_info_json = dotty(km_json.get('config', {})) |
55 | cli.log.error('Invalid keyboard: "%s"', cli.config.generate_rules_mk.keyboard) | 54 | else: |
56 | return False | 55 | kb_info_json = dotty(info_json(cli.args.keyboard)) |
57 | 56 | ||
58 | kb_info_json = dotty(info_json(cli.config.generate_rules_mk.keyboard)) | ||
59 | info_rules_map = json_load(Path('data/mappings/info_rules.json')) | 57 | info_rules_map = json_load(Path('data/mappings/info_rules.json')) |
60 | rules_mk_lines = ['# This file was generated by `qmk generate-rules-mk`. Do not edit or copy.', ''] | 58 | rules_mk_lines = ['# This file was generated by `qmk generate-rules-mk`. Do not edit or copy.', ''] |
61 | 59 | ||