From b81c0e59863316929b66ce92839ac7d6c5f24b07 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 16 Apr 2018 16:10:57 +0800 Subject: [PATCH 1/3] Fix build tool with ARMC6/ARMv8M 1. Add linking time preprocessor macro __DOMAIN_NS for non-secure build 2. For output .hex format, combine multiple .hex files (for multiple load regions) into one This can help for Greentea test. 3. Fix 'None' build_dir with cmse_lib.o on Greentea test --- tools/toolchains/arm.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tools/toolchains/arm.py b/tools/toolchains/arm.py index 9bb21ece5f2..a555defb946 100644 --- a/tools/toolchains/arm.py +++ b/tools/toolchains/arm.py @@ -233,6 +233,11 @@ def link(self, output, objects, libraries, lib_dirs, scatter_file): cmd_pre = self.ld + args cmd = self.hook.get_cmdline_linker(cmd_pre) + # Create Secure library + if self.target.core == "Cortex-M23" or self.target.core == "Cortex-M33": + secure_file = join(dirname(output), "cmse_lib.o") + cmd.extend(["--import_cmse_lib_out=%s" % secure_file]) + if self.RESPONSE_FILES: cmd_linker = cmd[0] link_files = self.get_link_file(cmd[1:]) @@ -252,7 +257,8 @@ def archive(self, objects, lib_path): @hook_tool def binary(self, resources, elf, bin): _, fmt = splitext(bin) - bin_arg = {".bin": "--bin", ".hex": "--i32"}[fmt] + # On .hex format, combine multiple .hex files (for multiple load regions) into one + bin_arg = {".bin": "--bin", ".hex": "--i32combined"}[fmt] cmd = [self.elf2bin, bin_arg, '-o', bin, elf] cmd = self.hook.get_cmdline_binary(cmd) @@ -357,13 +363,12 @@ def __init__(self, target, *args, **kwargs): if target.core == "Cortex-M23" or target.core == "Cortex-M33": self.flags['common'].append("-mcmse") - - # Create Secure library - if target.core == "Cortex-M23" or self.target.core == "Cortex-M33": - build_dir = kwargs['build_dir'] - secure_file = join(build_dir, "cmse_lib.o") - self.flags["ld"] += ["--import_cmse_lib_out=%s" % secure_file] - + + # Add linking time preprocessor macro __DOMAIN_NS + if target.core == "Cortex-M23-NS" or self.target.core == "Cortex-M33-NS": + define_string = self.make_ld_define("__DOMAIN_NS", 1) + self.flags["ld"].append(define_string) + asm_cpu = { "Cortex-M0+": "Cortex-M0", "Cortex-M4F": "Cortex-M4.fp", From bc8b98358d5ee1e5c986d263ed8874fa5a1e2aa4 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Tue, 17 Apr 2018 11:58:02 -0500 Subject: [PATCH 2/3] Correct exporting with cortex-M23 and M33 --- tools/test_api.py | 5 +++-- tools/toolchains/arm.py | 14 +++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/tools/test_api.py b/tools/test_api.py index aab28a4db26..a485fb99bb0 100644 --- a/tools/test_api.py +++ b/tools/test_api.py @@ -2077,8 +2077,9 @@ def find_tests(base_dir, target_name, toolchain_name, app_config=None): commons = [] # Prepare the toolchain - toolchain = prepare_toolchain([base_dir], None, target_name, toolchain_name, - silent=True, app_config=app_config) + toolchain = prepare_toolchain( + [base_dir], base_dir, target_name, toolchain_name, silent=True, + app_config=app_config) # Scan the directory for paths to probe for 'TESTS' folders base_resources = scan_resources([base_dir], toolchain) diff --git a/tools/toolchains/arm.py b/tools/toolchains/arm.py index a555defb946..72b277d3409 100644 --- a/tools/toolchains/arm.py +++ b/tools/toolchains/arm.py @@ -233,11 +233,6 @@ def link(self, output, objects, libraries, lib_dirs, scatter_file): cmd_pre = self.ld + args cmd = self.hook.get_cmdline_linker(cmd_pre) - # Create Secure library - if self.target.core == "Cortex-M23" or self.target.core == "Cortex-M33": - secure_file = join(dirname(output), "cmse_lib.o") - cmd.extend(["--import_cmse_lib_out=%s" % secure_file]) - if self.RESPONSE_FILES: cmd_linker = cmd[0] link_files = self.get_link_file(cmd[1:]) @@ -363,12 +358,17 @@ def __init__(self, target, *args, **kwargs): if target.core == "Cortex-M23" or target.core == "Cortex-M33": self.flags['common'].append("-mcmse") - + + # Create Secure library + if target.core == "Cortex-M23" or self.target.core == "Cortex-M33": + build_dir = kwargs['build_dir'] + secure_file = join(build_dir, "cmse_lib.o") + self.flags["ld"] += ["--import_cmse_lib_out=%s" % secure_file] # Add linking time preprocessor macro __DOMAIN_NS if target.core == "Cortex-M23-NS" or self.target.core == "Cortex-M33-NS": define_string = self.make_ld_define("__DOMAIN_NS", 1) self.flags["ld"].append(define_string) - + asm_cpu = { "Cortex-M0+": "Cortex-M0", "Cortex-M4F": "Cortex-M4.fp", From da69f0165b368a21c89fb8e80d7c9c848236c410 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Tue, 24 Apr 2018 10:07:16 -0500 Subject: [PATCH 3/3] Correct test finding behavior Scan resources ignores the build dir so we can't set it to something dumb like the directory we want to scan --- tools/test_api.py | 5 ++--- tools/toolchains/arm.py | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/test_api.py b/tools/test_api.py index a485fb99bb0..aab28a4db26 100644 --- a/tools/test_api.py +++ b/tools/test_api.py @@ -2077,9 +2077,8 @@ def find_tests(base_dir, target_name, toolchain_name, app_config=None): commons = [] # Prepare the toolchain - toolchain = prepare_toolchain( - [base_dir], base_dir, target_name, toolchain_name, silent=True, - app_config=app_config) + toolchain = prepare_toolchain([base_dir], None, target_name, toolchain_name, + silent=True, app_config=app_config) # Scan the directory for paths to probe for 'TESTS' folders base_resources = scan_resources([base_dir], toolchain) diff --git a/tools/toolchains/arm.py b/tools/toolchains/arm.py index 72b277d3409..cb0cd7b5fee 100644 --- a/tools/toolchains/arm.py +++ b/tools/toolchains/arm.py @@ -360,7 +360,8 @@ def __init__(self, target, *args, **kwargs): self.flags['common'].append("-mcmse") # Create Secure library - if target.core == "Cortex-M23" or self.target.core == "Cortex-M33": + if ((target.core == "Cortex-M23" or self.target.core == "Cortex-M33") and + kwargs.get('build_dir', False)): build_dir = kwargs['build_dir'] secure_file = join(build_dir, "cmse_lib.o") self.flags["ld"] += ["--import_cmse_lib_out=%s" % secure_file]