| #!/usr/bin/env python3 |
| # Copyright 2025 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import json |
| import os |
| import subprocess |
| import sys |
| from pathlib import Path # noqa: F401 |
| |
| _CWD = os.getcwd() |
| |
| |
| def main(argv): |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--util_path', required=True) |
| parser.add_argument('--in_folder', required=True) |
| parser.add_argument('--in_files', nargs='*', required=True) |
| parser.add_argument('--out_folder', required=True) |
| parser.add_argument('--out_manifest', required=True) |
| # The target's V8 snapshot. The flag name tells the generator which kind of |
| # snapshot it is, and Blink only deserializes contexts from a context |
| # snapshot. The generator's own build flags cannot tell, since a cross build |
| # compiles it in another toolchain. See tools/code_cache_generator/README.md. |
| snapshot_group = parser.add_mutually_exclusive_group() |
| snapshot_group.add_argument('--snapshot_blob') |
| snapshot_group.add_argument('--context_snapshot') |
| |
| args = parser.parse_args(argv) |
| |
| util_path = os.path.normpath( |
| os.path.join(_CWD, args.util_path).replace('\\', '/') |
| ) |
| in_folder = os.path.normpath( |
| os.path.join(_CWD, args.in_folder).replace('\\', '/') |
| ) |
| out_folder = os.path.normpath( |
| os.path.join(_CWD, args.out_folder).replace('\\', '/') |
| ) |
| out_manifest = os.path.normpath( |
| os.path.join(_CWD, args.out_manifest).replace('\\', '/') |
| ) |
| out_file_suffix = '.code_cache' |
| |
| snapshot_args = [] |
| for name in ('snapshot_blob', 'context_snapshot'): |
| value = getattr(args, name) |
| if value: |
| path = os.path.normpath(os.path.join(_CWD, value).replace('\\', '/')) |
| snapshot_args.append(f'--{name}={path}') |
| |
| subprocess.run( |
| [ |
| util_path, |
| f'--in_folder={in_folder}', |
| '--in_files=' + ','.join(args.in_files), |
| f'--out_folder={out_folder}', |
| f'--out_file_suffix={out_file_suffix}', |
| *snapshot_args, |
| ], |
| check=True, |
| ) |
| |
| manifest_data = { |
| 'base_dir': args.out_folder, |
| 'files': [], |
| } |
| for in_file in args.in_files: |
| manifest_data['files'].append(in_file + out_file_suffix) |
| |
| with open(out_manifest, 'w', newline='', encoding='utf-8') as manifest_file: |
| json.dump(manifest_data, manifest_file) |
| |
| |
| if __name__ == '__main__': |
| main(sys.argv[1:]) |