version_h.py (2306B)
1 """Used by the make system to generate version.h for use in code. 2 """ 3 from time import strftime 4 5 from milc import cli 6 7 from qmk.path import normpath 8 from qmk.commands import dump_lines 9 from qmk.git import git_get_qmk_hash, git_get_version, git_is_dirty 10 from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE 11 from qmk.util import triplet_to_bcd 12 13 TIME_FMT = '%Y-%m-%d-%H:%M:%S' 14 15 16 @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') 17 @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") 18 @cli.argument('--skip-git', arg_only=True, action='store_true', help='Skip Git operations') 19 @cli.argument('--skip-all', arg_only=True, action='store_true', help='Use placeholder values for all defines (implies --skip-git)') 20 @cli.subcommand('Used by the make system to generate version.h for use in code', hidden=True) 21 def generate_version_h(cli): 22 """Generates the version.h file. 23 """ 24 if cli.args.skip_all: 25 cli.args.skip_git = True 26 27 if cli.args.skip_all: 28 current_time = "1970-01-01-00:00:00" 29 else: 30 current_time = strftime(TIME_FMT) 31 32 if cli.args.skip_git: 33 git_dirty = False 34 git_version = "NA" 35 git_qmk_hash = "NA" 36 git_bcd_version = "0x00000000" 37 chibios_version = "NA" 38 chibios_contrib_version = "NA" 39 else: 40 git_dirty = git_is_dirty() 41 git_version = git_get_version() or current_time 42 git_qmk_hash = git_get_qmk_hash() or "Unknown" 43 git_bcd_version = triplet_to_bcd(git_version) 44 chibios_version = git_get_version("chibios", "os") or current_time 45 chibios_contrib_version = git_get_version("chibios-contrib", "os") or current_time 46 47 # Build the version.h file. 48 version_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once'] 49 50 version_h_lines.append( 51 f""" 52 #define QMK_VERSION "{git_version}" 53 #define QMK_BUILDDATE "{current_time}" 54 #define QMK_VERSION_BCD {git_bcd_version} 55 #define QMK_GIT_HASH "{git_qmk_hash}{'*' if git_dirty else ''}" 56 #define CHIBIOS_VERSION "{chibios_version}" 57 #define CHIBIOS_CONTRIB_VERSION "{chibios_contrib_version}" 58 """ 59 ) 60 61 # Show the results 62 dump_lines(cli.args.output, version_h_lines, cli.args.quiet)