diff options
Diffstat (limited to 'lib/python/qmk/cli')
-rwxr-xr-x | lib/python/qmk/cli/compile.py | 53 | ||||
-rw-r--r-- | lib/python/qmk/cli/compile/__init__.py | 0 | ||||
-rwxr-xr-x | lib/python/qmk/cli/compile/json.py | 44 |
3 files changed, 53 insertions, 44 deletions
diff --git a/lib/python/qmk/cli/compile.py b/lib/python/qmk/cli/compile.py new file mode 100755 index 000000000..7e14ad8fb --- /dev/null +++ b/lib/python/qmk/cli/compile.py @@ -0,0 +1,53 @@ +"""Compile a QMK Firmware. + +You can compile a keymap already in the repo or using a QMK Configurator export. +""" +import json +import os +import sys +import subprocess +from argparse import FileType + +from milc import cli + +import qmk.keymap +import qmk.path + + +@cli.argument('filename', nargs='?', type=FileType('r'), help='The configurator export to compile') +@cli.argument('-kb', '--keyboard', help='The keyboard to build a firmware for. Ignored when a configurator export is supplied.') +@cli.argument('-km', '--keymap', help='The keymap to build a firmware for. Ignored when a configurator export is supplied.') +@cli.entrypoint('Compile a QMK Firmware.') +def main(cli): + """Compile a QMK Firmware. + + If a Configurator export is supplied this command will create a new keymap, overwriting an existing keymap if one exists. + + FIXME(skullydazed): add code to check and warn if the keymap already exists + + If --keyboard and --keymap are provided this command will build a firmware based on that. + + """ + if cli.args.filename: + # Parse the configurator json + user_keymap = json.load(cli.args.filename) + + # Generate the keymap + keymap_path = qmk.path.keymap(user_keymap['keyboard']) + cli.log.info('Creating {fg_cyan}%s{style_reset_all} keymap in {fg_cyan}%s', user_keymap['keymap'], keymap_path) + qmk.keymap.write(user_keymap['keyboard'], user_keymap['keymap'], user_keymap['layout'], user_keymap['layers']) + cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap']) + + # Compile the keymap + command = ['make', ':'.join((user_keymap['keyboard'], user_keymap['keymap']))] + + elif cli.config.general.keyboard and cli.config.general.keymap: + # Generate the make command for a specific keyboard/keymap. + command = ['make', ':'.join((cli.config.general.keyboard, cli.config.general.keymap))] + + else: + cli.log.error('You must supply a configurator export or both `--keyboard` and `--keymap`.') + return False + + cli.log.info('Compiling keymap with {fg_cyan}%s\n\n', ' '.join(command)) + subprocess.run(command) diff --git a/lib/python/qmk/cli/compile/__init__.py b/lib/python/qmk/cli/compile/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/lib/python/qmk/cli/compile/__init__.py +++ /dev/null diff --git a/lib/python/qmk/cli/compile/json.py b/lib/python/qmk/cli/compile/json.py deleted file mode 100755 index 89c16b206..000000000 --- a/lib/python/qmk/cli/compile/json.py +++ /dev/null @@ -1,44 +0,0 @@ -"""Create a keymap directory from a configurator export. -""" -import json -import os -import sys -import subprocess - -from milc import cli - -import qmk.keymap -import qmk.path - - -@cli.argument('filename', help='Configurator JSON export') -@cli.entrypoint('Compile a QMK Configurator export.') -def main(cli): - """Compile a QMK Configurator export. - - This command creates a new keymap from a configurator export, overwriting an existing keymap if one exists. - - FIXME(skullydazed): add code to check and warn if the keymap already exists - """ - # Error checking - if cli.args.filename == ('-'): - cli.log.error('Reading from STDIN is not (yet) supported.') - exit(1) - if not os.path.exists(qmk.path.normpath(cli.args.filename)): - cli.log.error('JSON file does not exist!') - exit(1) - - # Parse the configurator json - with open(qmk.path.normpath(cli.args.filename), 'r') as fd: - user_keymap = json.load(fd) - - # Generate the keymap - keymap_path = qmk.path.keymap(user_keymap['keyboard']) - cli.log.info('Creating {fg_cyan}%s{style_reset_all} keymap in {fg_cyan}%s', user_keymap['keymap'], keymap_path) - qmk.keymap.write(user_keymap['keyboard'], user_keymap['keymap'], user_keymap['layout'], user_keymap['layers']) - cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap']) - - # Compile the keymap - command = ['make', ':'.join((user_keymap['keyboard'], user_keymap['keymap']))] - cli.log.info('Compiling keymap with {fg_cyan}%s\n\n', ' '.join(command)) - subprocess.run(command) |