forked from Imagelibrary/seL4
66 lines
2.5 KiB
Python
66 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright 2024, UNSW Sydney
|
|
#
|
|
# SPDX-License-Identifier: BSD-2-Clause or GPL-2.0-only
|
|
#
|
|
|
|
import argparse
|
|
import json
|
|
import xml.dom.minidom
|
|
from condition import condition_to_bool
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(description='Generate JSON file containing list of seL4 \
|
|
invocations.')
|
|
parser.add_argument('--gen_config', type=argparse.FileType('r'),
|
|
help="Location of gen_config JSON file", required=True)
|
|
parser.add_argument('--invocations', type=argparse.FileType('r'),
|
|
help='Location of XML file with invocation definitions', required=True)
|
|
parser.add_argument('--arch_invocations', type=argparse.FileType('r'),
|
|
help='Location of XML file with arch invocation definitions', required=True)
|
|
parser.add_argument('--sel4_arch_invocations', type=argparse.FileType('r'),
|
|
help='Location of XML file with seL4 arch invocation definitions', required=True)
|
|
parser.add_argument('--dest', type=argparse.FileType('w+'),
|
|
help='Location of JSON file to store invocations', required=True)
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
def xml_to_json_invocations(xml, gen_config, counter, invocations_dict, ):
|
|
for method in xml.getElementsByTagName("method"):
|
|
label = str(method.getAttribute("id"))
|
|
exists = condition_to_bool(method.getElementsByTagName("condition"), gen_config)
|
|
if exists:
|
|
invocations_dict[label] = counter
|
|
counter += 1
|
|
|
|
return counter
|
|
|
|
|
|
if __name__ == "__main__":
|
|
args = parse_args()
|
|
|
|
try:
|
|
invocations = xml.dom.minidom.parse(args.invocations)
|
|
arch_invocations = xml.dom.minidom.parse(args.arch_invocations)
|
|
sel4_arch_invocations = xml.dom.minidom.parse(args.sel4_arch_invocations)
|
|
except:
|
|
print('Error: invalid XML file provided', file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
try:
|
|
gen_config = json.load(args.gen_config)
|
|
except:
|
|
print('Error: invalid JSON file provided', file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
invocations_dict = {}
|
|
counter = 1
|
|
counter = xml_to_json_invocations(invocations, gen_config, counter, invocations_dict)
|
|
counter = xml_to_json_invocations(sel4_arch_invocations, gen_config, counter, invocations_dict)
|
|
counter = xml_to_json_invocations(arch_invocations, gen_config, counter, invocations_dict)
|
|
|
|
json.dump(invocations_dict, args.dest)
|