Build: Add support for specifying GNUARM_PREFIX

Add support to allow for vendor specific GNU triplets that may not be
arm-none-eabi, but something like arm-<VENDOR>-eabi.

In cmake/Compiler/GNUARM.cmake we provide a means to extract the
compiler prefix from CMAKE_C_COMPILER as it will not always be set.  For
example when mbed-crypto's CMake is invoked from tfm, we'll eventually
source GNUARM.cmake and not have GNUARM_PREFIX set.  This provides a
means to handle such cases (otherwise we end up with NOTFOUND cache
entries for CMAKE_LINKER & CMAKE_AR.

Change-Id: I5b3f1a0ff1156b9eda6c540220aa99162b6fd813
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
diff --git a/cmake/Common/CompilerGNUARMCommon.cmake b/cmake/Common/CompilerGNUARMCommon.cmake
index be1ac8f..32e805b 100644
--- a/cmake/Common/CompilerGNUARMCommon.cmake
+++ b/cmake/Common/CompilerGNUARMCommon.cmake
@@ -32,13 +32,13 @@
 
 #Tell cmake which compiler we use
 if (EXISTS "c:/")
-	set (CMAKE_C_COMPILER "${GNUARM_PATH}/bin/arm-none-eabi-gcc.exe")
-	set (CMAKE_CXX_COMPILER "${GNUARM_PATH}/bin/arm-none-eabi-g++.exe")
-	set (CMAKE_ASM_COMPILER "${GNUARM_PATH}/bin/arm-none-eabi-gcc.exe")
+	set (CMAKE_C_COMPILER "${GNUARM_PATH}/bin/${GNUARM_PREFIX}-gcc.exe")
+	set (CMAKE_CXX_COMPILER "${GNUARM_PATH}/bin/${GNUARM_PREFIX}-g++.exe")
+	set (CMAKE_ASM_COMPILER "${GNUARM_PATH}/bin/${GNUARM_PREFIX}-gcc.exe")
 else()
-	set (CMAKE_C_COMPILER "${GNUARM_PATH}/bin/arm-none-eabi-gcc")
-	set (CMAKE_CXX_COMPILER "${GNUARM_PATH}/bin/arm-none-eabi-g++")
-	set (CMAKE_ASM_COMPILER "${GNUARM_PATH}/bin/arm-none-eabi-gcc")
+	set (CMAKE_C_COMPILER "${GNUARM_PATH}/bin/${GNUARM_PREFIX}-gcc")
+	set (CMAKE_CXX_COMPILER "${GNUARM_PATH}/bin/${GNUARM_PREFIX}-g++")
+	set (CMAKE_ASM_COMPILER "${GNUARM_PATH}/bin/${GNUARM_PREFIX}-gcc")
 endif()
 
 if("CXX" IN_LIST languages)
diff --git a/cmake/Common/FindGNUARM.cmake b/cmake/Common/FindGNUARM.cmake
index 5454c68..d178716 100644
--- a/cmake/Common/FindGNUARM.cmake
+++ b/cmake/Common/FindGNUARM.cmake
@@ -15,6 +15,8 @@
 #                the compiler on the PATH is used.
 #  GNUARM_VER  - (optional)- version number. If set the module will validate
 #                the compiler version.
+#  GNUARM_PREFIX (optional)- execute prefix for toolchain, allow for vendor
+#                toolchains, default to arm-none-eabi
 #
 #outputs:
 #  GNUARM_PATH   - will be set to the root directory of the compiler. Only set
@@ -28,7 +30,10 @@
 #Include some dependencies
 Include(Common/Utils)
 
-set(_GCC_BINARY_NAME "arm-none-eabi-gcc")
+if(NOT DEFINED GNUARM_PREFIX)
+	set(GNUARM_PREFIX "arm-none-eabi")
+endif()
+set(_GCC_BINARY_NAME "${GNUARM_PREFIX}-gcc")
 
 #Get the version of armgcc.
 #
diff --git a/cmake/Compiler/GNUARM.cmake b/cmake/Compiler/GNUARM.cmake
index ed05d92..fc9db7a 100644
--- a/cmake/Compiler/GNUARM.cmake
+++ b/cmake/Compiler/GNUARM.cmake
@@ -15,9 +15,14 @@
 
 set(CMAKE_EXECUTABLE_SUFFIX ".axf")
 
-find_program(CMAKE_GNUARM_LINKER  arm-none-eabi-gcc     HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
-find_program(CMAKE_GNUARM_AR      arm-none-eabi-ar      HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
-find_program(CMAKE_GNUARM_OBJCOPY arm-none-eabi-objcopy HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
+if(NOT DEFINED GNUARM_PREFIX)
+	get_filename_component(__c_bin ${CMAKE_C_COMPILER} NAME)
+	string(REPLACE "-gcc" "" GNUARM_PREFIX ${__c_bin})
+endif()
+
+find_program(CMAKE_GNUARM_LINKER  ${GNUARM_PREFIX}-gcc     HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
+find_program(CMAKE_GNUARM_AR      ${GNUARM_PREFIX}-ar      HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
+find_program(CMAKE_GNUARM_OBJCOPY ${GNUARM_PREFIX}-objcopy HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
 
 set(CMAKE_LINKER "${CMAKE_GNUARM_LINKER}" CACHE FILEPATH "The GNUARM linker" FORCE)
 mark_as_advanced(CMAKE_GNUARM_LINKER)