From cd229bacc3a5010281e49a27273d497d308bf541 Mon Sep 17 00:00:00 2001 From: Sarah Marsh Date: Wed, 10 Aug 2016 15:14:10 -0500 Subject: [PATCH] Allow users to set armcc and iccarm in path. Raise exceptin instead of exit. Corrected error for arm-none-eabi-gcc/g++ set in path. --- tools/toolchains/__init__.py | 6 +++--- tools/toolchains/arm.py | 9 +++++++-- tools/toolchains/gcc.py | 6 +++++- tools/toolchains/iar.py | 7 +++++++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/tools/toolchains/__init__.py b/tools/toolchains/__init__.py index 4f83e5c588..512c3476e4 100644 --- a/tools/toolchains/__init__.py +++ b/tools/toolchains/__init__.py @@ -198,9 +198,9 @@ def check_toolchain_path(function): """ def perform_check(self, *args, **kwargs): if not exists(self.toolchain_path): - print('[ERROR] Toolchain path for %s does not exist.\n' - 'Current value: %s' % (self.name, self.toolchain_path)) - sys.exit(-1) + error_string = 'Could not find executable for %s.\n Currently ' \ + 'set search path: %s'% (self.name, self.toolchain_path) + raise Exception(error_string) return function(self, *args, **kwargs) return perform_check diff --git a/tools/toolchains/arm.py b/tools/toolchains/arm.py index 1e900e8bc1..a7ecc848a4 100644 --- a/tools/toolchains/arm.py +++ b/tools/toolchains/arm.py @@ -15,12 +15,12 @@ See the License for the specific language governing permissions and limitations under the License. """ import re -from os.path import join, dirname, splitext, basename, exists +from os.path import join, dirname, splitext, basename +from distutils.spawn import find_executable from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS from tools.hooks import hook_tool from tools.utils import mkdir -import copy class ARM(mbedToolchain): LINKER_EXT = '.sct' @@ -56,6 +56,11 @@ class ARM(mbedToolchain): else: cpu = target.core + if not TOOLCHAIN_PATHS['ARM']: + exe = find_executable('armcc') + if exe: + TOOLCHAIN_PATHS['ARM'] = dirname(dirname(exe)) + ARM_BIN = join(TOOLCHAIN_PATHS['ARM'], "bin") ARM_INC = join(TOOLCHAIN_PATHS['ARM'], "include") diff --git a/tools/toolchains/gcc.py b/tools/toolchains/gcc.py index e9d86052fc..add6b7e0b9 100644 --- a/tools/toolchains/gcc.py +++ b/tools/toolchains/gcc.py @@ -16,6 +16,7 @@ limitations under the License. """ import re from os.path import join, basename, splitext, dirname, exists +from distutils.spawn import find_executable from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS from tools.hooks import hook_tool @@ -110,7 +111,10 @@ class GCC(mbedToolchain): self.ar = join(tool_path, "arm-none-eabi-ar") self.elf2bin = join(tool_path, "arm-none-eabi-objcopy") - self.toolchain_path = tool_path + if tool_path: + self.toolchain_path = main_cc + else: + self.toolchain_path = find_executable("arm-none-eabi-gcc") or '' def parse_dependencies(self, dep_path): dependencies = [] diff --git a/tools/toolchains/iar.py b/tools/toolchains/iar.py index 47394d5a25..ca41f845b2 100644 --- a/tools/toolchains/iar.py +++ b/tools/toolchains/iar.py @@ -17,6 +17,7 @@ limitations under the License. import re from os import remove from os.path import join, exists, dirname, splitext, exists +from distutils.spawn import find_executable from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS from tools.hooks import hook_tool @@ -50,6 +51,12 @@ class IAR(mbedToolchain): cpuchoice = "Cortex-M7" else: cpuchoice = target.core + + if not TOOLCHAIN_PATHS['IAR']: + exe = find_executable('iccarm') + if exe: + TOOLCHAIN_PATHS['IAR'] = dirname(dirname(exe)) + # flags_cmd are used only by our scripts, the project files have them already defined, # using this flags results in the errors (duplication) # asm accepts --cpu Core or --fpu FPU, not like c/c++ --cpu=Core