#!/usr/bin/env python3 # # Copyright 2020 The Hafnium Authors. # # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file or at # https://opensource.org/licenses/BSD-3-Clause. import argparse import sys import os import json """ This script aims at generating a json file that contains the artifacts of partitions that will execute alongside in the same test setup. A partition can be: - Virtual Machine (VM) - to execute in EL1; - Secure Partition (SP) - to execute in S-EL1. A setup can have multiple VMs and multiple SPs executing alongside. The json file shall list the VMs and SPs, such as: { "SPs" : [ , ... , ], "VMs" : [ , ... , ] } Where the information of each partition shall obey the following format: { "img" : .img, "dts" : .dts } In the arguments of this script provide the path to partition's artifacts separated by the character defined as 'ARG_SPLITTER'. Example: --sp , --vm , """ ARG_SPLITTER = ',' ARG_FORMAT = f"{ARG_SPLITTER}" def split_partition_arg(sp_arg : str): ret = sp_arg.split(ARG_SPLITTER) if len(ret) != 2: raise Exception(f"Argument should follow format {ARG_FORMAT}") return ret def partition_info(img, dts): return {"img": img, "dts": dts} def list_of_partitions(partitions : list): return [partition_info(*split_partition_arg(p)) for p in partitions] def Main(): parser = argparse.ArgumentParser() parser.add_argument("--sp", action="append") parser.add_argument("--vm", action="append") parser.add_argument("--out", action="store", required=True) args = parser.parse_args() #Arguments sanity check: if args.vm is None and args.sp is None: raise Exception("Specify at least one VM (--vm) or one SP (--sp)") partitions = dict() if args.sp is not None: partitions["SPs"] = list_of_partitions(args.sp) if args.vm is not None: partitions["VMs"] = list_of_partitions(args.vm) json.dump(partitions, open(args.out, "w+")) return 0 if __name__ == "__main__": sys.exit(Main())