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