#!/usr/bin/env python3 """Generate library/psa_crypto_driver_wrappers.c This module is invoked by the build scripts 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() 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.c.jinja") 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) 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') parser = argparse.ArgumentParser() parser.add_argument('--mbedtls-root', nargs='?', default=def_arg_mbedtls_root, 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 generate_driver_wrapper_file(mbedtls_root, output_directory) return 0 if __name__ == '__main__': sys.exit(main())