diff --git a/tools/build.py b/tools/build.py index cedf29ac3a..bde4561050 100644 --- a/tools/build.py +++ b/tools/build.py @@ -44,7 +44,7 @@ from tools.utils import argparse_filestring_type, args_error, argparse_many from tools.utils import argparse_dir_not_parent from tools.utils import NoValidToolchainException from tools.utils import print_end_warnings -from tools.psa import generate_psa_sources, clean_psa_autogen +from tools.psa import generate_psa_sources from tools.resources import OsAndSpeResourceFilter def main(): @@ -166,9 +166,6 @@ def main(): skipped = [] end_warnings = [] - if options.clean: - clean_psa_autogen() - for toolchain in toolchains: for target_name in targets: target = Target.get_target(target_name) diff --git a/tools/make.py b/tools/make.py index ed021be324..fe3f6584f7 100644 --- a/tools/make.py +++ b/tools/make.py @@ -55,7 +55,7 @@ from tools.utils import print_end_warnings from tools.utils import print_large_string from tools.settings import ROOT from tools.targets import Target -from tools.psa import generate_psa_sources, clean_psa_autogen +from tools.psa import generate_psa_sources from tools.resources import OsAndSpeResourceFilter def default_args_dict(options): @@ -305,10 +305,6 @@ def main(): elif options.list_tests is True: print('\n'.join(map(str, sorted(TEST_MAP.values())))) else: - - if options.clean: - clean_psa_autogen() - # Target if options.mcu is None: args_error(parser, "argument -m/--mcu is required") diff --git a/tools/project.py b/tools/project.py index 05a73cdc8f..76cc051bd4 100644 --- a/tools/project.py +++ b/tools/project.py @@ -53,7 +53,7 @@ from tools.utils import print_large_string from tools.utils import NotSupportedException from tools.options import extract_profile, list_profiles, extract_mcus from tools.notifier.term import TerminalNotifier -from tools.psa import generate_psa_sources, clean_psa_autogen +from tools.psa import generate_psa_sources from tools.resources import OsAndSpeResourceFilter """ The CLI entry point for exporting projects from the mbed tools to any of the @@ -380,7 +380,6 @@ def main(): if options.clean: clean(options.source_dir) - clean_psa_autogen() ide = resolve_exporter_alias(options.ide) exporter, toolchain_name = get_exporter_toolchain(ide) diff --git a/tools/psa/__init__.py b/tools/psa/__init__.py index 255971dc05..21e25ba464 100644 --- a/tools/psa/__init__.py +++ b/tools/psa/__init__.py @@ -57,23 +57,11 @@ def find_secure_image(notify, resources, ns_image_path, return secure_image - -def _get_psa_autogen_dir(): - return os.path.join(ROOT, 'PSA_AUTOGEN') - - -def clean_psa_autogen(): - psa_out_dir = _get_psa_autogen_dir() - - if os.path.isdir(psa_out_dir): - shutil.rmtree(psa_out_dir) - - def generate_psa_sources(source_dirs, ignore_paths): services, apps = manifests_discovery(root_dirs=source_dirs, ignore_paths=ignore_paths + ['.git']) assert len(services + apps), 'PSA manifest discovery failed' - psa_out_dir = _get_psa_autogen_dir() + psa_out_dir = os.path.join(ROOT, 'components', 'TARGET_PSA') generate_spm_code(services, apps, psa_out_dir) return psa_out_dir diff --git a/tools/psa/release.py b/tools/psa/release.py index f74985f3ae..8034df81f4 100644 --- a/tools/psa/release.py +++ b/tools/psa/release.py @@ -48,7 +48,7 @@ PSA_TESTS = { '*psa-crypto_access_control': ['USE_PSA_TEST_PARTITIONS', 'USE_CRYPTO_ACL_TEST'] } - +PSA_AUTOGEN_LOCATION = os.path.join(ROOT, 'components', 'TARGET_PSA') def _psa_backend(target): """ @@ -247,6 +247,34 @@ def commit_binaries(target, delivery_dir, toolchain): else: logger.info("No changes detected in {}, Skipping commit".format(target)) +def commit_psa_autogen(): + """ + Commit changes related to auto-generated PSA components and services + """ + changes_made = verbose_check_call([ + 'git', + '-C', ROOT, + 'diff', '--exit-code', '--quiet', + PSA_AUTOGEN_LOCATION], check_call=False) + + if changes_made: + logger.info("Change in PSA auto-generated files has been detected") + verbose_check_call([ + 'git', + '-C', ROOT, + 'add', PSA_AUTOGEN_LOCATION]) + + logger.info("Committing changes...") + commit_message = ('--message=Update PSA auto-generated components and ' + 'services') + verbose_check_call([ + 'git', + '-C', ROOT, + 'commit', + commit_message]) + else: + logger.info("No changes has been detected for PSA autogen, " + "Skipping commit") def build_psa_platform(target, toolchain, delivery_dir, debug, git_commit, skip_tests, args): @@ -268,6 +296,7 @@ def build_psa_platform(target, toolchain, delivery_dir, debug, git_commit, build_default_image(target, toolchain, profile, args) if git_commit: commit_binaries(target, delivery_dir, toolchain) + commit_psa_autogen() def get_parser(): diff --git a/tools/psa/spm_template_file_list.json b/tools/psa/spm_template_file_list.json index ae04c05558..2c4125114e 100644 --- a/tools/psa/spm_template_file_list.json +++ b/tools/psa/spm_template_file_list.json @@ -2,36 +2,36 @@ { "name": "Secure Partition ID definitions", "template": "tools/psa/templates/tfm_partition_defs.inc.tpl", - "output": "COMPONENT_SPE/TARGET_TFM/tfm_partition_defs.inc" + "output": "TARGET_TFM/COMPONENT_SPE/inc/tfm_partition_defs.inc" }, { "name": "Secure Partition declarations", "template": "tools/psa/templates/tfm_partition_list.inc.tpl", - "output": "COMPONENT_SPE/TARGET_TFM/tfm_partition_list.inc" + "output": "TARGET_TFM/COMPONENT_SPE/inc/tfm_partition_list.inc" }, { "name": "Secure Service list", "template": "tools/psa/templates/tfm_service_list.inc.tpl", - "output": "COMPONENT_SPE/TARGET_TFM/tfm_service_list.inc" + "output": "TARGET_TFM/COMPONENT_SPE/inc/tfm_service_list.inc" }, { "name": "Secure Service signals list", "template": "tools/psa/templates/tfm_spm_signal_defs.h.tpl", - "output": "COMPONENT_SPE/TARGET_TFM/tfm_spm_signal_defs.h" + "output": "TARGET_TFM/COMPONENT_SPE/inc/tfm_spm_signal_defs.h" }, { "name": "mbed-SPM database", "template": "tools/psa/templates/psa_setup.c.tpl", - "output": "COMPONENT_SPE/TARGET_MBED_SPM/psa_setup.c" + "output": "TARGET_MBED_SPM/COMPONENT_SPE/psa_setup.c" }, { "name": "Mappings from RoT Service names to SIDs", "template": "tools/psa/templates/sid.h.tpl", - "output": "autogen_sid.h" + "output": "services/inc/autogen_sid.h" }, { "name": "Details partition defines and structures", "template": "tools/psa/templates/mbed_spm_partitions.h.tpl", - "output": "mbed_spm_partitions.h" + "output": "services/inc/mbed_spm_partitions.h" } ] diff --git a/tools/test.py b/tools/test.py index 2ac70440f4..4d7803757b 100644 --- a/tools/test.py +++ b/tools/test.py @@ -43,7 +43,7 @@ from tools.utils import argparse_dir_not_parent from tools.utils import print_end_warnings from tools.settings import ROOT from tools.targets import Target -from tools.psa import generate_psa_sources, clean_psa_autogen +from tools.psa import generate_psa_sources from tools.resources import OsAndSpeResourceFilter, SpeOnlyResourceFilter def main(): @@ -220,10 +220,6 @@ def main(): print_tests(tests, options.format) sys.exit(0) else: - - if options.clean: - clean_psa_autogen() - # Build all tests if not options.build_dir: args_error(parser, "argument --build is required")