keymap_hash.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. """Used by the make system to generate header.
  2. """
  3. from fnvhash import fnv1a_32
  4. from milc import cli
  5. from qmk.commands import dump_lines
  6. from qmk.keymap import locate_keymap
  7. from qmk.keyboard import keyboard_completer, keyboard_folder
  8. from qmk.path import normpath
  9. from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
  10. @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to')
  11. @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
  12. @cli.argument('-kb', '--keyboard', arg_only=True, type=keyboard_folder, completer=keyboard_completer, required=True, help='Keyboard to generate header for.')
  13. @cli.argument('-km', '--keymap', arg_only=True, required=True, help='Keymap to generate header for.')
  14. @cli.subcommand('Used by the make system to generate header', hidden=True)
  15. def generate_keymap_hash(cli):
  16. # Build the header file.
  17. header_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once']
  18. keymap_folder = locate_keymap(cli.args.keyboard, cli.args.keymap).parent
  19. keymap_files = list(keymap_folder.glob('**/*'))
  20. keymap_files.sort()
  21. content = ""
  22. for file in keymap_files:
  23. content += file.read_text(encoding='utf-8')
  24. val = fnv1a_32(bytes(content, 'utf-8'))
  25. header_lines.append(f'#define KEYMAP_HASH 0x{val:08X}ul')
  26. # Show the results
  27. dump_lines(cli.args.output, header_lines, cli.args.quiet)