diff options
| author | Charles Giessen <charles@lunarg.com> | 2020-04-25 18:53:21 -0600 |
|---|---|---|
| committer | Charles Giessen <46324611+charles-lunarg@users.noreply.github.com> | 2020-05-26 10:39:18 -0600 |
| commit | 5aaa64364e7a255948a44ef151208fe85dcd5834 (patch) | |
| tree | cad5f8be54d1e988a33a6fc83d0b1ed967f1d993 /scripts/generate_source.py | |
| parent | 0c4ea014bf289e8b0a8501c3e89c8bc4ecf9f0a4 (diff) | |
| download | usermoji-5aaa64364e7a255948a44ef151208fe85dcd5834.tar.xz | |
vulkaninfo: use generate_source.py for autogen
Previously, to update the autogen for vulkaninfo required running a
separate cmake target. This commit puts it all into the same target
for ease of maintenance.
Change-Id: I98e35b01ee164e9917564f6b603e4a78c6138041
Diffstat (limited to 'scripts/generate_source.py')
| -rwxr-xr-x | scripts/generate_source.py | 99 |
1 files changed, 60 insertions, 39 deletions
diff --git a/scripts/generate_source.py b/scripts/generate_source.py index c4be24f5..a2002aae 100755 --- a/scripts/generate_source.py +++ b/scripts/generate_source.py @@ -39,52 +39,72 @@ def main(argv): group.add_argument('-v', '--verify', action='store_true', help='verify repo files match generator output') args = parser.parse_args(argv) - gen_cmds = [[common_codegen.repo_relative('scripts/kvt_genvk.py'), - '-registry', os.path.abspath(os.path.join(args.registry, 'vk.xml')), - '-quiet', - filename] for filename in ['vk_typemap_helper.h', + # output paths and the list of files in the path + files_to_gen = {str(os.path.join('icd','generated')) : ['vk_typemap_helper.h', 'mock_icd.h', - 'mock_icd.cpp']] + 'mock_icd.cpp'], + str(os.path.join('vulkaninfo','generated')): ['vulkaninfo.hpp']} - repo_dir = common_codegen.repo_relative('icd/generated') + #base directory for the source repository + repo_dir = common_codegen.repo_relative('') - # get directory where generators will run + # get directory where generators will run if needed if args.verify or args.incremental: # generate in temp directory so we can compare or copy later temp_obj = tempfile.TemporaryDirectory(prefix='VulkanLoader_generated_source_') temp_dir = temp_obj.name - gen_dir = temp_dir - else: - # generate directly in the repo - gen_dir = repo_dir + for path in files_to_gen.keys(): + os.makedirs(os.path.join(temp_dir, path)) # run each code generator - for cmd in gen_cmds: - print(' '.join(cmd)) - try: - subprocess.check_call([sys.executable] + cmd, cwd=gen_dir) - except Exception as e: - print('ERROR:', str(e)) - return 1 + for path, filenames in files_to_gen.items(): + for filename in filenames: + if args.verify or args.incremental: + output_path = os.path.join(temp_dir, path) + else: + output_path = common_codegen.repo_relative(path) + + cmd = [common_codegen.repo_relative(os.path.join('scripts','kvt_genvk.py')), + '-registry', os.path.abspath(os.path.join(args.registry, 'vk.xml')), + '-quiet', '-directory', output_path, filename] + print(' '.join(cmd)) + try: + if args.verify or args.incremental: + subprocess.check_call([sys.executable] + cmd, cwd=temp_dir) + else: + subprocess.check_call([sys.executable] + cmd, cwd=repo_dir) + + except Exception as e: + print('ERROR:', str(e)) + return 1 # optional post-generation steps if args.verify: # compare contents of temp dir and repo - temp_files = set(os.listdir(temp_dir)) - repo_files = set(os.listdir(repo_dir)) + temp_files = {} + for path in files_to_gen.keys(): + temp_files[path] = set() + temp_files[path].update(set(os.listdir(os.path.join(temp_dir, path)))) + + repo_files = {} + for path in files_to_gen.keys(): + repo_files[path] = set() + repo_files[path].update(set(os.listdir(os.path.join(repo_dir, path))) - set(verify_exclude)) + files_match = True - for filename in sorted((temp_files | repo_files) - set(verify_exclude)): - if filename not in repo_files: - print('ERROR: Missing repo file', filename) - files_match = False - elif filename not in temp_files: - print('ERROR: Missing generator for', filename) - files_match = False - elif not filecmp.cmp(os.path.join(temp_dir, filename), - os.path.join(repo_dir, filename), - shallow=False): - print('ERROR: Repo files do not match generator output for', filename) - files_match = False + for path in files_to_gen.keys(): + for filename in sorted((temp_files[path] | repo_files[path])): + if filename not in repo_files[path]: + print('ERROR: Missing repo file', filename) + files_match = False + elif filename not in temp_files[path]: + print('ERROR: Missing generator for', filename) + files_match = False + elif not filecmp.cmp(os.path.join(temp_dir, path, filename), + os.path.join(repo_dir, path, filename), + shallow=False): + print('ERROR: Repo files do not match generator output for', filename) + files_match = False # return code for test scripts if files_match: @@ -94,13 +114,14 @@ def main(argv): elif args.incremental: # copy missing or differing files from temp directory to repo - for filename in os.listdir(temp_dir): - temp_filename = os.path.join(temp_dir, filename) - repo_filename = os.path.join(repo_dir, filename) - if not os.path.exists(repo_filename) or \ - not filecmp.cmp(temp_filename, repo_filename, shallow=False): - print('update', repo_filename) - shutil.copyfile(temp_filename, repo_filename) + for path in files_to_gen.keys(): + for filename in os.listdir(os.path.join(temp_dir,path)): + temp_filename = os.path.join(temp_dir, path, filename) + repo_filename = os.path.join(repo_dir, path, filename) + if not os.path.exists(repo_filename) or \ + not filecmp.cmp(temp_filename, repo_filename, shallow=False): + print('update', repo_filename) + shutil.copyfile(temp_filename, repo_filename) return 0 |
