From cd96b21370fa3d38143fbb83132b835ae9746862 Mon Sep 17 00:00:00 2001 From: Brian Daniels Date: Mon, 11 Mar 2019 18:50:04 -0500 Subject: [PATCH] Correct check for the ARM toolchain binary in the PATH. The compiler used for the ARM toolchain changes depending on the target. This changes the front end scripts to do the proper toolchain look up before checking the system PATH for the compiler executable. The tools were always checking for the ARMC5 compiler, now it should check for the right version. --- tools/build.py | 13 ++++++++++--- tools/make.py | 11 +++++++---- tools/test.py | 12 +++++++----- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/tools/build.py b/tools/build.py index c7962c5d2bc..1f5db2d5792 100644 --- a/tools/build.py +++ b/tools/build.py @@ -38,6 +38,7 @@ from tools.build_api import build_library, build_mbed_libs, build_lib from tools.build_api import mcu_toolchain_matrix from tools.build_api import print_build_results +from tools.build_api import get_toolchain_name from tools.settings import CPPCHECK_CMD, CPPCHECK_MSG_FORMAT from tools.settings import CPPCHECK_CMD, CPPCHECK_MSG_FORMAT, CLI_COLOR_MAP from tools.notifier.term import TerminalNotifier @@ -169,12 +170,18 @@ successes = [] skipped = [] + toolchain_names = set() for toolchain in toolchains: - if not TOOLCHAIN_CLASSES[toolchain].check_executable(): - search_path = TOOLCHAIN_PATHS[toolchain] or "No path set" + for target_name in targets: + target = Target.get_target(target_name) + toolchain_names.add(get_toolchain_name(target, toolchain)) + + for toolchain_name in toolchain_names: + if not TOOLCHAIN_CLASSES[toolchain_name].check_executable(): + search_path = TOOLCHAIN_PATHS[toolchain_name] or "No path set" args_error(parser, "Could not find executable for %s.\n" "Currently set search path: %s" - % (toolchain, search_path)) + % (toolchain_name, search_path)) for toolchain in toolchains: for target in targets: diff --git a/tools/make.py b/tools/make.py index 17802b5bb18..5d906797a98 100644 --- a/tools/make.py +++ b/tools/make.py @@ -47,6 +47,7 @@ from tools.build_api import mcu_toolchain_list from tools.build_api import mcu_target_list from tools.build_api import merge_build_data +from tools.build_api import get_toolchain_name from utils import argparse_filestring_type from utils import argparse_many from utils import argparse_dir_not_parent @@ -308,7 +309,8 @@ def wrapped_build_project(src_dir, build_dir, mcu, *args, **kwargs): args_error(parser, "argument -t/--tool is required") toolchain = options.tool[0] - if Target.get_target(mcu).is_PSA_secure_target and \ + target = Target.get_target(mcu) + if target.is_PSA_secure_target and \ not is_relative_to_root(options.source_dir): options.source_dir = ROOT @@ -321,11 +323,12 @@ def wrapped_build_project(src_dir, build_dir, mcu, *args, **kwargs): notify = TerminalNotifier(options.verbose, options.silent, options.color) - if not TOOLCHAIN_CLASSES[toolchain].check_executable(): - search_path = TOOLCHAIN_PATHS[toolchain] or "No path set" + toolchain_name = get_toolchain_name(target, toolchain) + if not TOOLCHAIN_CLASSES[toolchain_name].check_executable(): + search_path = TOOLCHAIN_PATHS[toolchain_name] or "No path set" args_error(parser, "Could not find executable for %s.\n" "Currently set search path: %s" - %(toolchain, search_path)) + %(toolchain_name, search_path)) if options.source_dir is not None: wrapped_build_project( diff --git a/tools/test.py b/tools/test.py index 3e0996a2b1a..6372146a415 100644 --- a/tools/test.py +++ b/tools/test.py @@ -35,6 +35,7 @@ from tools.build_api import build_project, build_library from tools.build_api import print_build_memory_usage from tools.build_api import merge_build_data +from tools.build_api import get_toolchain_name from tools.targets import TARGET_MAP from tools.notifier.term import TerminalNotifier from tools.utils import mkdir, ToolException, NotSupportedException, args_error, write_json_to_file @@ -149,18 +150,20 @@ if options.mcu is None: args_error(parser, "argument -m/--mcu is required") mcu = extract_mcus(parser, options)[0] - mcu_secured = Target.get_target(mcu).is_PSA_secure_target + target = Target.get_target(mcu) + mcu_secured = target.is_PSA_secure_target # Toolchain if options.tool is None: args_error(parser, "argument -t/--tool is required") toolchain = options.tool[0] - if not TOOLCHAIN_CLASSES[toolchain].check_executable(): - search_path = TOOLCHAIN_PATHS[toolchain] or "No path set" + toolchain_name = get_toolchain_name(target, toolchain) + if not TOOLCHAIN_CLASSES[toolchain_name].check_executable(): + search_path = TOOLCHAIN_PATHS[toolchain_name] or "No path set" args_error(parser, "Could not find executable for %s.\n" "Currently set search path: %s" - % (toolchain, search_path)) + % (toolchain_name, search_path)) # Assign config file. Precedence: test_config>app_config # TODO: merge configs if both given @@ -312,4 +315,3 @@ traceback.print_exc(file=sys.stdout) print("[ERROR] %s" % str(e)) sys.exit(1) -