mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-03 23:02:34 +01:00 
			
		
		
		
	Generate make dependency file during build for info.json's etc. (#20451)
				
					
				
			This commit is contained in:
		
							parent
							
								
									d6f8df4be8
								
							
						
					
					
						commit
						507e32b28c
					
				@ -343,6 +343,15 @@ $(KEYBOARD_OUTPUT)/src/default_keyboard.h: $(INFO_JSON_FILES)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
generated-files: $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/default_keyboard.c $(KEYBOARD_OUTPUT)/src/default_keyboard.h
 | 
					generated-files: $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/default_keyboard.c $(KEYBOARD_OUTPUT)/src/default_keyboard.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					generated-files: $(KEYMAP_OUTPUT)/src/info_deps.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(KEYMAP_OUTPUT)/src/info_deps.d:
 | 
				
			||||||
 | 
						@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
 | 
				
			||||||
 | 
						$(eval CMD=$(QMK_BIN) generate-make-dependencies -kb $(KEYBOARD) -km $(KEYMAP) -o $(KEYMAP_OUTPUT)/src/info_deps.d)
 | 
				
			||||||
 | 
						@$(BUILD_CMD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(KEYMAP_OUTPUT)/src/info_deps.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.INTERMEDIATE : generated-files
 | 
					.INTERMEDIATE : generated-files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Userspace setup and definitions
 | 
					# Userspace setup and definitions
 | 
				
			||||||
 | 
				
			|||||||
@ -57,6 +57,7 @@ subcommands = [
 | 
				
			|||||||
    'qmk.cli.generate.keyboard_h',
 | 
					    'qmk.cli.generate.keyboard_h',
 | 
				
			||||||
    'qmk.cli.generate.keycodes',
 | 
					    'qmk.cli.generate.keycodes',
 | 
				
			||||||
    'qmk.cli.generate.keycodes_tests',
 | 
					    'qmk.cli.generate.keycodes_tests',
 | 
				
			||||||
 | 
					    'qmk.cli.generate.make_dependencies',
 | 
				
			||||||
    'qmk.cli.generate.rgb_breathe_table',
 | 
					    'qmk.cli.generate.rgb_breathe_table',
 | 
				
			||||||
    'qmk.cli.generate.rules_mk',
 | 
					    'qmk.cli.generate.rules_mk',
 | 
				
			||||||
    'qmk.cli.generate.version_h',
 | 
					    'qmk.cli.generate.version_h',
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										56
									
								
								lib/python/qmk/cli/generate/make_dependencies.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										56
									
								
								lib/python/qmk/cli/generate/make_dependencies.py
									
									
									
									
									
										Executable file
									
								
							@ -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])
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user