Driver Wrapper CodeGen Rev 1.1

(1) Add in driver jsons.
(2) Improve Python scripts to take JSON file directory and template
directory paths as arguments.
(3) Add in file augment template files to template common functionality
(4) render tempplates for Header files, ID generation and key
management.
(5) Changed driver ID nomenclature to be in synch with function names.

Signed-off-by: Archana <archana.madhavan@silabs.com>
Signed-off-by: Asfandyar Orakzai <asfandyar.orakzai@silabs.com>
This commit is contained in:
Archana 2021-12-24 12:50:36 +05:30 committed by Asfandyar Orakzai
parent c11bffe989
commit e829cd6953
8 changed files with 247 additions and 128 deletions

View file

@ -22,52 +22,90 @@
import sys
import os
import json
import argparse
import jinja2
from mbedtls_dev import build_tree
def render(template_path: str) -> str:
def render(template_path: str, driver_jsoncontext: list) -> str:
"""
Render template from the input file.
Render template from the input file and driver JSON.
"""
environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(template_path)),
keep_trailing_newline=True)
template = environment.get_template(os.path.basename(template_path))
return template.render()
return template.render(drivers = driver_jsoncontext)
def generate_driver_wrapper_file(mbedtls_root: str, output_dir: str) -> None:
def generate_driver_wrapper_file(template_dir: str, output_dir: str, driver_jsoncontext: list ) -> None:
"""
Generate the file psa_crypto_driver_wrapper.c.
"""
driver_wrapper_template_filename = \
os.path.join(mbedtls_root, \
"scripts/data_files/driver_templates/psa_crypto_driver_wrappers.c.jinja")
os.path.join(template_dir, "psa_crypto_driver_wrappers.c.jinja")
result = render(driver_wrapper_template_filename)
result = render(driver_wrapper_template_filename, driver_jsoncontext)
with open(os.path.join(output_dir, "psa_crypto_driver_wrappers.c"), 'w') as out_file:
out_file.write(result)
def validate_mergedjson(merged_driverjson: list) -> int:
"""
Validate the merged Driver JSON for errors that we can catch early
"""
return 0
def merge_driverjsonfiles(json_directory: str, jsondriverlistName: str) -> list:
"""
Merge driver JSON files into a single ordered JSON.
"""
result = list()
driverlist = list()
with open(os.path.join(json_directory, jsondriverlistName), 'r') as driverlistfile:
driverlist = json.load(driverlistfile)
for file_name in driverlist:
with open(os.path.join(json_directory, file_name), 'r') as infile:
result.extend(json.load(infile))
return result
def main() -> int:
"""
Main with command line arguments.
"""
def_arg_mbedtls_root = build_tree.guess_mbedtls_root()
def_arg_output_dir = os.path.join(def_arg_mbedtls_root, 'library')
def_arg_template_dir = os.path.join(def_arg_mbedtls_root, 'scripts/data_files/driver_templates/')
def_arg_json_dir = os.path.join(def_arg_mbedtls_root, 'scripts/data_files/driver_jsons/')
parser = argparse.ArgumentParser()
parser.add_argument('--mbedtls-root', nargs='?', default=def_arg_mbedtls_root,
help='root directory of mbedtls source code')
parser.add_argument('--template_dir', nargs='?', default=def_arg_template_dir,
help='root directory of mbedtls source code')
parser.add_argument('--json_dir', nargs='?', default=def_arg_json_dir,
help='root directory of mbedtls source code')
parser.add_argument('output_directory', nargs='?',
default=def_arg_output_dir, help='output file\'s location')
args = parser.parse_args()
mbedtls_root = os.path.abspath(args.mbedtls_root)
output_directory = args.output_directory
mbedtls_root = os.path.abspath(args.mbedtls_root)
output_directory = args.output_directory
template_directory = args.template_dir
json_directory = args.json_dir
generate_driver_wrapper_file(mbedtls_root, output_directory)
# load list of driver jsons from driverlist.json
merged_driverjson = merge_driverjsonfiles(json_directory, 'driverlist.json')
ret = validate_mergedjson(merged_driverjson)
if ret == 1:
print("Validation failed ")
return 1
generate_driver_wrapper_file(template_directory, output_directory, merged_driverjson)
return 0