mirror of
https://github.com/Mbed-TLS/mbedtls-framework.git
synced 2026-09-20 00:47:23 +00:00
make_generated_files.py: Add --check option
Add --check option to be able to check that make_generated_files.py and the build systems are in-sync. Signed-off-by: Ronald Cron <[email protected]>
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
Generate the TF-PSA-Crypto generated files
|
||||
"""
|
||||
import argparse
|
||||
import filecmp
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
@@ -22,7 +24,9 @@ class GenerationScript:
|
||||
Representation of a script generating a configuration independent file.
|
||||
"""
|
||||
# pylint: disable=too-few-public-methods
|
||||
def __init__(self, script: Path, files: List[Path]):
|
||||
def __init__(self, script: Path, files: List[Path],
|
||||
output_dir_option: Optional[str] = None,
|
||||
output_file_option: Optional[str] = None):
|
||||
""" Path from the root of Mbed TLS or TF-PSA-Crypto of the generation script """
|
||||
self.script = script
|
||||
"""
|
||||
@@ -30,6 +34,16 @@ class GenerationScript:
|
||||
files the script generates.
|
||||
"""
|
||||
self.files = files
|
||||
"""
|
||||
Output directory script argument. Can be an empty string in case it is a
|
||||
positional argument.
|
||||
"""
|
||||
self.output_dir_option = output_dir_option
|
||||
"""
|
||||
Output file script argument. Can be an empty string in case it is a
|
||||
positional argument.
|
||||
"""
|
||||
self.output_file_option = output_file_option
|
||||
|
||||
def get_generation_script_files(generation_script: str):
|
||||
"""
|
||||
@@ -50,30 +64,37 @@ if build_tree.looks_like_tf_psa_crypto_root("."):
|
||||
Path("scripts/generate_driver_wrappers.py"),
|
||||
[Path("core/psa_crypto_driver_wrappers.h"),
|
||||
Path("core/psa_crypto_driver_wrappers_no_static.c")],
|
||||
"", None
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_test_keys.py"),
|
||||
[Path("tests/include/test/test_keys.h")],
|
||||
None, "--output"
|
||||
),
|
||||
GenerationScript(
|
||||
Path("scripts/generate_psa_constants.py"),
|
||||
[Path("programs/psa/psa_constant_names_generated.c")],
|
||||
"", None
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_bignum_tests.py"),
|
||||
get_generation_script_files("framework/scripts/generate_bignum_tests.py"),
|
||||
"--directory", None
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_config_tests.py"),
|
||||
get_generation_script_files("framework/scripts/generate_config_tests.py"),
|
||||
"--directory", None
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_ecp_tests.py"),
|
||||
get_generation_script_files("framework/scripts/generate_ecp_tests.py"),
|
||||
"--directory", None
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_psa_tests.py"),
|
||||
get_generation_script_files("framework/scripts/generate_psa_tests.py"),
|
||||
"--directory", None
|
||||
),
|
||||
]
|
||||
|
||||
@@ -83,38 +104,51 @@ if build_tree.looks_like_mbedtls_root(".") and not build_tree.is_mbedtls_3_6():
|
||||
GenerationScript(
|
||||
Path("scripts/generate_errors.pl"),
|
||||
[Path("library/error.c")],
|
||||
None, "tf-psa-crypto/drivers/builtin/include/mbedtls \
|
||||
include/mbedtls/ \
|
||||
scripts/data_files"
|
||||
),
|
||||
GenerationScript(
|
||||
Path("scripts/generate_features.pl"),
|
||||
[Path("library/version_features.c")],
|
||||
None, "include/mbedtls/ scripts/data_files"
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_ssl_debug_helpers.py"),
|
||||
[Path("library/ssl_debug_helpers_generated.c")],
|
||||
"", None
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_test_keys.py"),
|
||||
[Path("tests/include/test/test_keys.h")],
|
||||
None, "--output"
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_test_cert_macros.py"),
|
||||
[Path("tests/include/test/test_certs.h")],
|
||||
None, "--output"
|
||||
),
|
||||
GenerationScript(
|
||||
Path("scripts/generate_query_config.pl"),
|
||||
[Path("programs/test/query_config.c")],
|
||||
None, "include/mbedtls/mbedtls_config.h \
|
||||
tf-psa-crypto/include/psa/crypto_config.h \
|
||||
scripts/data_files/query_config.fmt"
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_config_tests.py"),
|
||||
get_generation_script_files("framework/scripts/generate_config_tests.py"),
|
||||
"--directory", None
|
||||
),
|
||||
GenerationScript(
|
||||
Path("framework/scripts/generate_tls13_compat_tests.py"),
|
||||
[Path("tests/opt-testcases/tls13-compat.sh")],
|
||||
None, "--output"
|
||||
),
|
||||
GenerationScript(
|
||||
Path("scripts/generate_visualc_files.pl"),
|
||||
get_generation_script_files("scripts/generate_visualc_files.pl"),
|
||||
"--directory", None
|
||||
),
|
||||
]
|
||||
|
||||
@@ -137,6 +171,41 @@ def make_generated_files(generation_scripts: List[GenerationScript]):
|
||||
for generation_script in generation_scripts:
|
||||
subprocess.run([str(generation_script.script)], check=True)
|
||||
|
||||
def check_generated_files(generation_scripts: List[GenerationScript], root: Path):
|
||||
"""
|
||||
Check that the given root directory contains the generated files as expected/
|
||||
generated by this script.
|
||||
"""
|
||||
for generation_script in generation_scripts:
|
||||
for file in generation_script.files:
|
||||
file = root / file
|
||||
bak_file = file.with_name(file.name + ".bak")
|
||||
if bak_file.exists():
|
||||
bak_file.unlink()
|
||||
file.rename(bak_file)
|
||||
|
||||
command = [str(generation_script.script)]
|
||||
if generation_script.output_dir_option is not None:
|
||||
command += [generation_script.output_dir_option,
|
||||
str(root / Path(generation_script.files[0].parent))]
|
||||
elif generation_script.output_file_option is not None:
|
||||
command += generation_script.output_file_option.split()
|
||||
command += [str(root / Path(generation_script.files[0]))]
|
||||
subprocess.run([item for item in command if item.strip()], check=True)
|
||||
|
||||
for file in generation_script.files:
|
||||
file = root / file
|
||||
bak_file = file.with_name(file.name + ".bak")
|
||||
if not filecmp.cmp(file, bak_file):
|
||||
ref_file = file.with_name(file.name + ".ref")
|
||||
ref_file = root / ref_file
|
||||
if ref_file.exists():
|
||||
ref_file.unlink()
|
||||
shutil.copy(file, ref_file)
|
||||
print(f"Generated file {file} not identical to the reference one {ref_file}.")
|
||||
file.unlink()
|
||||
bak_file.rename(file)
|
||||
|
||||
def main():
|
||||
"""
|
||||
Main function of this program
|
||||
@@ -145,6 +214,11 @@ def main():
|
||||
|
||||
parser.add_argument('--list', action='store_true',
|
||||
default=False, help='List generated files.')
|
||||
parser.add_argument('--root', metavar='DIR',
|
||||
help='Root of the tree containing the generated files \
|
||||
to check (default: Mbed TLS or TF-PSA-Cryto root.)')
|
||||
parser.add_argument('--check', action='store_true',
|
||||
default=False, help='Check the generated files in root')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -162,6 +236,8 @@ def main():
|
||||
files = get_generated_files(generation_scripts)
|
||||
for file in files:
|
||||
print(str(file))
|
||||
elif args.check:
|
||||
check_generated_files(generation_scripts, Path(args.root or "."))
|
||||
else:
|
||||
make_generated_files(generation_scripts)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user