| #!/usr/bin/env python3 | |
| # -*- coding: utf-8 -*- | |
| # | |
| # Copyright (C) 2017-2021 The Project X-Ray Authors. | |
| # | |
| # Use of this source code is governed by a ISC-style | |
| # license that can be found in the LICENSE file or at | |
| # https://opensource.org/licenses/ISC | |
| # | |
| # SPDX-License-Identifier: ISC | |
| import argparse | |
| import multiprocessing as mp | |
| import os | |
| import re | |
| import subprocess | |
| import yaml | |
| from prjxray import util | |
| def worker(arglist): | |
| part, cwd = arglist | |
| cmd = "make roi_only" | |
| env = os.environ.copy() | |
| env['XRAY_PART'] = part | |
| print("running subprocess") | |
| subprocess.run(cmd.split(' '), check=True, env=env, cwd=cwd) | |
| def main(): | |
| """Rois all parts for a family by calling "make roi_only" over all parts | |
| with the same device as XRAY_PART. | |
| Example: | |
| prjxray$ ./utils/roi_all.py --db-root database/artix7/ --part xc7a100tfgg676-1 | |
| """ | |
| env = os.environ.copy() | |
| db_root = util.get_db_root() | |
| assert db_root | |
| part = util.get_part() | |
| assert part | |
| information = util.get_part_information(db_root, part) | |
| valid_devices = [] | |
| for name, device in util.get_devices(db_root).items(): | |
| if device['fabric'] == information['device']: | |
| valid_devices.append(name) | |
| tasks = [] | |
| for part, data in util.get_parts(db_root).items(): | |
| if data['device'] in valid_devices: | |
| cwd = os.getenv('XRAY_FUZZERS_DIR') | |
| tasks.append((part, cwd)) | |
| with mp.Pool() as pool: | |
| for _ in pool.imap_unordered(worker, tasks): | |
| pass | |
| if __name__ == '__main__': | |
| main() |