| #!/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() |