forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Generate
make
dependency file during build for info.json's etc. (qm…
- Loading branch information
Showing
3 changed files
with
66 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
"""Used by the make system to generate dependency lists for each of the generated files. | ||
""" | ||
from pathlib import Path | ||
from milc import cli | ||
|
||
from argcomplete.completers import FilesCompleter | ||
|
||
from qmk.commands import dump_lines | ||
from qmk.constants import QMK_FIRMWARE | ||
from qmk.keyboard import keyboard_completer, keyboard_folder | ||
from qmk.keymap import keymap_completer, locate_keymap | ||
from qmk.path import normpath, FileType | ||
|
||
|
||
@cli.argument('filename', nargs='?', arg_only=True, type=FileType('r'), completer=FilesCompleter('.json'), help='A configurator export JSON.') | ||
@cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') | ||
@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") | ||
@cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, required=True, help='Keyboard to generate dependency file for.') | ||
@cli.argument('-km', '--keymap', completer=keymap_completer, help='The keymap to build a firmware for. Ignored when a configurator export is supplied.') | ||
@cli.subcommand('Generates the list of dependencies associated with a keyboard build and its generated files.', hidden=True) | ||
def generate_make_dependencies(cli): | ||
"""Generates the list of dependent info.json, rules.mk, and config.h files for a keyboard. | ||
""" | ||
interesting_files = [ | ||
'info.json', | ||
'keymap.json', | ||
'rules.mk', | ||
'post_rules.mk', | ||
'config.h', | ||
'post_config.h', | ||
] | ||
|
||
found_files = [] | ||
|
||
# Walk up the keyboard's directory tree looking for the files we're interested in | ||
keyboards_root = Path('keyboards') | ||
parent_path = Path('keyboards') / cli.args.keyboard | ||
while parent_path != keyboards_root: | ||
for file in interesting_files: | ||
test_path = parent_path / file | ||
if test_path.exists(): | ||
found_files.append(test_path) | ||
parent_path = parent_path.parent | ||
|
||
# Find the keymap and include any of the interesting files | ||
if cli.args.keymap is not None: | ||
km = locate_keymap(cli.args.keyboard, cli.args.keymap) | ||
if km is not None: | ||
for file in interesting_files: | ||
found_files.extend(km.parent.glob(f'**/{file}')) | ||
|
||
# If we have a matching userspace, include those too | ||
for file in interesting_files: | ||
found_files.extend((QMK_FIRMWARE / 'users' / cli.args.keymap).glob(f'**/{file}')) | ||
|
||
dump_lines(cli.args.output, [f'generated-files: {found.resolve()}\n' for found in found_files]) |