diff options
| -rw-r--r-- | lib/python/qmk/commands.py | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/lib/python/qmk/commands.py b/lib/python/qmk/commands.py index ba225bf55..529c41c0c 100644 --- a/lib/python/qmk/commands.py +++ b/lib/python/qmk/commands.py | |||
| @@ -7,12 +7,15 @@ import subprocess | |||
| 7 | import shlex | 7 | import shlex |
| 8 | import shutil | 8 | import shutil |
| 9 | from pathlib import Path | 9 | from pathlib import Path |
| 10 | from time import strftime | ||
| 10 | 11 | ||
| 11 | from milc import cli | 12 | from milc import cli |
| 12 | 13 | ||
| 13 | import qmk.keymap | 14 | import qmk.keymap |
| 14 | from qmk.constants import KEYBOARD_OUTPUT_PREFIX | 15 | from qmk.constants import KEYBOARD_OUTPUT_PREFIX |
| 15 | 16 | ||
| 17 | time_fmt = '%Y-%m-%d-%H:%M:%S' | ||
| 18 | |||
| 16 | 19 | ||
| 17 | def _find_make(): | 20 | def _find_make(): |
| 18 | """Returns the correct make command for this environment. | 21 | """Returns the correct make command for this environment. |
| @@ -62,6 +65,39 @@ def create_make_command(keyboard, keymap, target=None, parallel=1, **env_vars): | |||
| 62 | return [make_cmd, '-j', str(parallel), *env, ':'.join(make_args)] | 65 | return [make_cmd, '-j', str(parallel), *env, ':'.join(make_args)] |
| 63 | 66 | ||
| 64 | 67 | ||
| 68 | def get_git_version(repo_dir='.', check_dir='.'): | ||
| 69 | """Returns the current git version for a repo, or the current time. | ||
| 70 | """ | ||
| 71 | git_describe_cmd = ['git', 'describe', '--abbrev=6', '--dirty', '--always', '--tags'] | ||
| 72 | |||
| 73 | if Path(check_dir).exists(): | ||
| 74 | git_describe = cli.run(git_describe_cmd, cwd=repo_dir) | ||
| 75 | |||
| 76 | if git_describe.returncode == 0: | ||
| 77 | return git_describe.stdout.strip() | ||
| 78 | |||
| 79 | else: | ||
| 80 | cli.args.warn(f'"{" ".join(git_describe_cmd)}" returned error code {git_describe.returncode}') | ||
| 81 | print(git_describe.stderr) | ||
| 82 | return strftime(time_fmt) | ||
| 83 | |||
| 84 | return strftime(time_fmt) | ||
| 85 | |||
| 86 | |||
| 87 | def write_version_h(git_version, build_date, chibios_version, chibios_contrib_version): | ||
| 88 | """Generate and write quantum/version.h | ||
| 89 | """ | ||
| 90 | version_h = [ | ||
| 91 | f'#define QMK_VERSION "{git_version}"', | ||
| 92 | f'#define QMK_BUILD_DATE "{build_date}"', | ||
| 93 | f'#define CHIBIOS_VERSION "{chibios_version}"', | ||
| 94 | f'#define CHIBIOS_CONTRIB_VERSION "{chibios_contrib_version}"', | ||
| 95 | ] | ||
| 96 | |||
| 97 | version_h_file = Path('quantum/version.h') | ||
| 98 | version_h_file.write_text('\n'.join(version_h)) | ||
| 99 | |||
| 100 | |||
| 65 | def compile_configurator_json(user_keymap, parallel=1, **env_vars): | 101 | def compile_configurator_json(user_keymap, parallel=1, **env_vars): |
| 66 | """Convert a configurator export JSON file into a C file and then compile it. | 102 | """Convert a configurator export JSON file into a C file and then compile it. |
| 67 | 103 | ||
| @@ -92,23 +128,39 @@ def compile_configurator_json(user_keymap, parallel=1, **env_vars): | |||
| 92 | keymap_dir.mkdir(exist_ok=True, parents=True) | 128 | keymap_dir.mkdir(exist_ok=True, parents=True) |
| 93 | keymap_c.write_text(c_text) | 129 | keymap_c.write_text(c_text) |
| 94 | 130 | ||
| 131 | # Write the version.h file | ||
| 132 | git_version = get_git_version() | ||
| 133 | build_date = strftime('%Y-%m-%d-%H:%M:%S') | ||
| 134 | chibios_version = get_git_version("lib/chibios", "lib/chibios/os") | ||
| 135 | chibios_contrib_version = get_git_version("lib/chibios-contrib", "lib/chibios-contrib/os") | ||
| 136 | |||
| 137 | write_version_h(git_version, build_date, chibios_version, chibios_contrib_version) | ||
| 138 | |||
| 95 | # Return a command that can be run to make the keymap and flash if given | 139 | # Return a command that can be run to make the keymap and flash if given |
| 96 | verbose = 'true' if cli.config.general.verbose else 'false' | 140 | verbose = 'true' if cli.config.general.verbose else 'false' |
| 97 | color = 'true' if cli.config.general.color else 'false' | 141 | color = 'true' if cli.config.general.color else 'false' |
| 98 | make_command = [ | 142 | make_command = [_find_make()] |
| 99 | _find_make(), | 143 | |
| 144 | if not cli.config.general.verbose: | ||
| 145 | make_command.append('-s') | ||
| 146 | |||
| 147 | make_command.extend([ | ||
| 100 | '-j', | 148 | '-j', |
| 101 | str(parallel), | 149 | str(parallel), |
| 102 | '-r', | 150 | '-r', |
| 103 | '-R', | 151 | '-R', |
| 104 | '-f', | 152 | '-f', |
| 105 | 'build_keyboard.mk', | 153 | 'build_keyboard.mk', |
| 106 | ] | 154 | ]) |
| 107 | 155 | ||
| 108 | for key, value in env_vars.items(): | 156 | for key, value in env_vars.items(): |
| 109 | make_command.append(f'{key}={value}') | 157 | make_command.append(f'{key}={value}') |
| 110 | 158 | ||
| 111 | make_command.extend([ | 159 | make_command.extend([ |
| 160 | f'GIT_VERSION={git_version}', | ||
| 161 | f'BUILD_DATE={build_date}', | ||
| 162 | f'CHIBIOS_VERSION={chibios_version}', | ||
| 163 | f'CHIBIOS_CONTRIB_VERSION={chibios_contrib_version}', | ||
| 112 | f'KEYBOARD={user_keymap["keyboard"]}', | 164 | f'KEYBOARD={user_keymap["keyboard"]}', |
| 113 | f'KEYMAP={user_keymap["keymap"]}', | 165 | f'KEYMAP={user_keymap["keymap"]}', |
| 114 | f'KEYBOARD_FILESAFE={keyboard_filesafe}', | 166 | f'KEYBOARD_FILESAFE={keyboard_filesafe}', |
