From e03960e4605da5aad699ba47aae32df9cbd82794 Mon Sep 17 00:00:00 2001 From: Archana Date: Sun, 19 Dec 2021 09:17:04 +0530 Subject: [PATCH] Restructure Python script to use argparse and main Signed-off-by: Archana --- library/CMakeLists.txt | 4 +- library/Makefile | 3 +- scripts/generate_driver_wrappers.py | 75 +++++++++++++++++++++-------- 3 files changed, 59 insertions(+), 23 deletions(-) diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 7b7fca406..d7407c3c9 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -164,8 +164,8 @@ if(GEN_FILES) COMMAND ${MBEDTLS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_driver_wrappers.py - ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.conf - ${CMAKE_CURRENT_BINARY_DIR}/psa_crypto_driver_wrappers.c + --mbedtls-root ${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_driver_wrappers.py ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.conf diff --git a/library/Makefile b/library/Makefile index eb8b78e63..de747acae 100644 --- a/library/Makefile +++ b/library/Makefile @@ -323,8 +323,7 @@ psa_crypto_driver_wrappers.c: ../scripts/generate_driver_wrappers.py psa_crypto_driver_wrappers.c: ../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.conf psa_crypto_driver_wrappers.c: echo " Gen $@" - $(PYTHON) ../scripts/generate_driver_wrappers.py \ - "../" + $(PYTHON) ../scripts/generate_driver_wrappers.py --mbedtls-root .. . clean: ifndef WINDOWS diff --git a/scripts/generate_driver_wrappers.py b/scripts/generate_driver_wrappers.py index b05612ebc..3c59a5ba9 100755 --- a/scripts/generate_driver_wrappers.py +++ b/scripts/generate_driver_wrappers.py @@ -1,35 +1,72 @@ #!/usr/bin/env python3 -"""This script is required for the auto generation of the - psa_crypto_driver_wrappers.c file""" +"""Generate library/psa_crypto_driver_wrappers.c + + This module is invoked by the build sripts to auto generate the + psa_crypto_driver_wrappers.c based on template files in + script/data_files/driver_templates/. +""" +# Copyright The Mbed TLS Contributors +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import sys import os +import argparse import jinja2 +from mbedtls_dev import build_tree def render(template_path: str) -> str: + """ + Render template from the input file. + """ 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() -N = len(sys.argv) -if N != 2: -# This is the Root directory. - ROOT_DIR = "" -else: -# Set the root based on the argument passed. - ROOT_DIR = sys.argv[1] +def generate_driver_wrapper_file(mbedtls_root: str, output_dir: str) -> 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.conf") -# Set template file name, output file name from the root directory -DRIVER_WRAPPER_TEMPLATE_FILENAME = ROOT_DIR +\ - "scripts/data_files/driver_templates/psa_crypto_driver_wrappers.conf" -DRIVER_WRAPPER_OUTPUT_FILENAME = ROOT_DIR + "library/psa_crypto_driver_wrappers.c" + result = render(driver_wrapper_template_filename) -# Render the template -RESULT = render(DRIVER_WRAPPER_TEMPLATE_FILENAME) + with open(os.path.join(output_dir, "psa_crypto_driver_wrappers.c"), 'w') as out_file: + out_file.write(result) + out_file.close() -# Write output to file -OUT_FILE = open(DRIVER_WRAPPER_OUTPUT_FILENAME, "w") -OUT_FILE.write(RESULT) -OUT_FILE.close() +def main() -> int: + """ + Main with command line arguments. + """ + parser = argparse.ArgumentParser() + parser.add_argument('--mbedtls-root', nargs='?', default=None, + help='root directory of mbedtls source code') + parser.add_argument('output_directory', nargs='?', + default='library', help='output file\'s location') + args = parser.parse_args() + mbedtls_root = os.path.abspath(args.mbedtls_root or build_tree.guess_mbedtls_root()) + output_directory = args.output_directory + + generate_driver_wrapper_file(mbedtls_root, output_directory) + + return 0 + +if __name__ == '__main__': + sys.exit(main())