Build: Cmake build system
-- Cmake based build system
-- Only armclang supported currently
Change-Id: I162357439bb1c871cba3a1c614822ef0b7a73e89
Signed-off-by: Abhishek Pandit <abhishek.pandit@arm.com>
diff --git a/cmake/Common/FindArmClang.cmake b/cmake/Common/FindArmClang.cmake
new file mode 100644
index 0000000..7e02f51
--- /dev/null
+++ b/cmake/Common/FindArmClang.cmake
@@ -0,0 +1,113 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2017, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+#Find the location of the ARMClang C/C++ compiler.
+#
+# Find armclang on the specified location or on the PATH and optionally validate its version.
+#
+#Inputs:
+# ARMCLANG_PATH - (optional)- install path of armclang compiler to use. If not set the
+# compiler on the PATH is used.
+# ARMCLANG_VER - (optional)- version number. If set the module will validate the compiler version.
+#
+#outputs:
+# ARMCLANG_PATH - will be set to the root directory of the compiler. Only set if undefined.
+# ARMCLANG_VER - will be set to the version number found. Only set if undefined.
+# ARMCLANG_MODULE - set to the name of the cmake module to be included for this ARMClang version.
+#
+
+#Include some dependencies
+Include(Common/Utils)
+
+#Get the version of armasm.
+#
+# Execute armasm and extract its version number for its output.
+#
+#Exmaples:
+# Get the version reported by armasm at location c:/foo/bin/armasm to variable VER
+# get_armasm_version(ARMASM "c:/foo/bin/armasm" RES VER)
+#
+#INPUTS:
+# ARMASM - (mandatory) - armasm executable
+# RES - (mandatory) - variable name to put result to
+#
+#OUTPUTS
+# The variable named after "RES" will be set to the version number matches
+#
+function(get_armasm_version)
+ #Parse our arguments
+ set( _OPTIONS_ARGS ) #No option (on/off) arguments (e.g. IGNORE_CASE)
+ set( _ONE_VALUE_ARGS ARMASM RES) #Single option arguments (e.g. PATH "./foo/bar")
+ set( _MULTI_VALUE_ARGS ) #One list argument (e.g. LANGUAGES C ASM CXX)
+ cmake_parse_arguments(_MY_PARAMS "${_OPTIONS_ARGS}" "${_ONE_VALUE_ARGS}" "${_MULTI_VALUE_ARGS}" ${ARGN} )
+
+ #Check mandatory parameters
+ if(NOT _MY_PARAMS_RES)
+ message (FATAL_ERROR "get_armasm_version(): Missing result parameter!")
+ endif()
+ set (_RES ${_MY_PARAMS_RES})
+
+ if(NOT _MY_PARAMS_ARMASM)
+ message (FATAL_ERROR "get_armasm_version(): Missing ARMASM parameter!")
+ endif()
+ set (_ARMASM ${_MY_PARAMS_ARMASM})
+
+ #Call specified executable
+ execute_process(COMMAND "${_ARMASM}"
+ OUTPUT_VARIABLE _OUTPUT
+ ERROR_VARIABLE _OUTPUT
+ )
+ #Cut off version number. Just the numbers ignore anything after.
+ STRING(REGEX REPLACE ".*ARM Compiler (([0-9]+\.)+[0-9]+).*" "\\1" _VER "${_OUTPUT}")
+
+ if (NOT _VER)
+ message (FATAL_ERROR "get_armasm_version(): Failed to extract version number from armasm output.")
+ endif()
+
+ set(${_RES} ${_VER} PARENT_SCOPE)
+endfunction()
+
+#If the install location needs to be found.
+if(NOT DEFINED ARMCLANG_PATH)
+ #Set ARMCLANG_PATH to default value.
+ set (ARMCLANG_PATH "ARMCLANG_PATH-NOTFOUND")
+
+ #First check if armclang is on the PATH
+ #find_program puts() its output to the cmake cache. We don't want that, so we use a local variable, which
+ #is unset later.
+ find_program (
+ _ARMCLANG_PATH
+ armclang
+ PATHS env PATH
+ DOC "ARMCLANG compiler location."
+ )
+
+ #Yes, check the version number if it is specified.
+ if(_ARMCLANG_PATH STREQUAL "_ARMCLANG_PATH-NOTFOUND")
+ message (FATAL_ERROR "armclang install location is unset. Either put armclang on the PATH or set ARMCLANG_PATH.")
+ endif()
+
+ #Cut off executable name directory name to get install location.
+ STRING(REGEX REPLACE "(.*)/bin/armclang.*" "\\1" ARMCLANG_PATH "${_ARMCLANG_PATH}")
+
+ #Remove unwanted junk from CMake cache.
+ unset(_ARMCLANG_PATH CACHE)
+endif()
+
+get_armasm_version(ARMASM "${ARMCLANG_PATH}/bin/armasm" RES _VER)
+
+#Check the version if needed
+if(NOT DEFINED ARMCLANG_VER)
+ set(ARMCLANG_VER ${_VER})
+endif()
+
+if(NOT "${ARMCLANG_VER}" VERSION_EQUAL "${_VER}")
+ message (FATAL_ERROR "FindArmClang.cmake: armclang compiler version ${_VER} does not match ${ARMCLANG_VER}.")
+endif()
+
+STRING(REGEX REPLACE "([0-9]+)\.([0-9]+)(\.[0-9]+)*.*" "CompilerArmClang\\1\\2" ARMCLANG_MODULE "${ARMCLANG_VER}")
+