Fix: armasm debug information missing for debug builds

The build system failed to properly specify compilation switches for
armasm when executing debug builds (-DCMAKE_BUILD_TYPE=Debug).
As a resolution the "embedded_project_fixup()" processing was changed
to define proper compilation switches.

Change-Id: I412be8dc3037df860f064e32c4cad2c48c70a30e
Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
diff --git a/cmake/Common/BuildSys.cmake b/cmake/Common/BuildSys.cmake
index cf4d3ab..370f275 100644
--- a/cmake/Common/BuildSys.cmake
+++ b/cmake/Common/BuildSys.cmake
@@ -1,5 +1,5 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2017-2018, Arm Limited. All rights reserved.
+# Copyright (c) 2017-2019, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -69,18 +69,13 @@
 #Override CMake default behaviour
 macro(embedded_project_fixup)
 	get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
-	if("CXX" IN_LIST languages)
-		include(Common/CompilerDetermineCXX)
-		#since all CMake "built in" scripts already executed, we need fo fix up some things here.
-		embedded_fixup_build_type_vars(CXX)
-	endif()
-	if("C" IN_LIST languages)
-		include(Common/CompilerDetermineC)
-		embedded_fixup_build_type_vars(C)
-	endif()
 
 	#Merge CPU and configuration specific compiler and linker flags.
 	foreach(LNG ${languages})
+		include(Common/CompilerDetermine${LNG})
+		#since all CMake "built in" scripts already executed, we need fo fix up some things here.
+		embedded_fixup_build_type_vars(${LNG})
+
 		#Apply CPU specific and configuration specific compile flags.
 		if(NOT CMAKE_${LNG}_FLAGS MATCHES ".*${CMAKE_${LNG}_FLAGS_CPU}.*")
 			set(CMAKE_${LNG}_FLAGS "${CMAKE_${LNG}_FLAGS} ${CMAKE_${LNG}_FLAGS_CPU}")
@@ -118,10 +113,10 @@
 
 macro(embedded_fixup_build_type_vars LANG)
 	#since all CMake "built in" scripts already executed, we need fo fix up some things here.
-	set (CMAKE_${LANG}_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG_INIT}" CACHE STRING "Flags used by the compiler during debug builds." FORCE)
-	set (CMAKE_${LANG}_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL_INIT}" CACHE STRING "Flags used by the compiler during release builds for minimum size." FORCE)
-	set (CMAKE_${LANG}_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE_INIT}" CACHE STRING "Flags used by the compiler during release builds." FORCE)
-	set (CMAKE_${LANG}_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING "Flags used by the compiler during release builds with debug info." FORCE)
+	set (CMAKE_${LANG}_FLAGS_DEBUG "${CMAKE_${LANG}_FLAGS_DEBUG_INIT}" CACHE STRING "Flags used by the compiler during debug builds." FORCE)
+	set (CMAKE_${LANG}_FLAGS_MINSIZEREL "${CMAKE_${LANG}_FLAGS_MINSIZEREL_INIT}" CACHE STRING "Flags used by the compiler during release builds for minimum size." FORCE)
+	set (CMAKE_${LANG}_FLAGS_RELEASE "${CMAKE_${LANG}_FLAGS_RELEASE_INIT}" CACHE STRING "Flags used by the compiler during release builds." FORCE)
+	set (CMAKE_${LANG}_FLAGS_RELWITHDEBINFO "${CMAKE_${LANG}_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING "Flags used by the compiler during release builds with debug info." FORCE)
 endmacro()
 
 
diff --git a/cmake/Common/CompilerDetermineASM.cmake b/cmake/Common/CompilerDetermineASM.cmake
new file mode 100644
index 0000000..7bef05d
--- /dev/null
+++ b/cmake/Common/CompilerDetermineASM.cmake
@@ -0,0 +1,30 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2019, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+#Built in compiler identification does not work for embedded targets, so
+#override it here.
+
+if(NOT DEFINED CMAKE_ASM_COMPILER)
+	message(FATAL_ERROR "Please set CMAKE_ASM_COMPILER to hold the full path of\
+ your compiler executable")
+endif()
+
+get_filename_component(_ASM_COMPILER_NAME ${CMAKE_ASM_COMPILER} NAME)
+
+#Based on the name of the compiler executable select which tool we use.
+if (_ASM_COMPILER_NAME MATCHES "^.*armclang(\\.exe)?$")
+	set(ARM_TOOLCHAIN_FILE "Compiler/ARMClang-ASM")
+elseif(_ASM_COMPILER_NAME MATCHES "^.*armasm(\\.exe)?$")
+	set(ARM_TOOLCHAIN_FILE "Compiler/ARMCC-ASM")
+elseif (_ASM_COMPILER_NAME MATCHES "^.*gcc(\\.exe)?$")
+	set(ARM_TOOLCHAIN_FILE "Compiler/GNUARM-ASM")
+else()
+	message(FATAL_ERROR "ASM Compiler executable ${_ASM_COMPILER_NAME} is \
+unknown. Please add needed settings to ${CMAKE_CURRENT_LIST_FILE}")
+endif ()
+
+include(${ARM_TOOLCHAIN_FILE})
diff --git a/cmake/Compiler/ARMCC-ASM.cmake b/cmake/Compiler/ARMCC-ASM.cmake
new file mode 100644
index 0000000..450041f
--- /dev/null
+++ b/cmake/Compiler/ARMCC-ASM.cmake
@@ -0,0 +1,45 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2019, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+if(_ARMASM_CMAKE_LOADED)
+  return()
+endif()
+set(_ARMASM_CMAKE_LOADED TRUE)
+
+get_filename_component(_CMAKE_ASM_TOOLCHAIN_LOCATION "${CMAKE_ASM_COMPILER}" PATH)
+
+set(CMAKE_EXECUTABLE_SUFFIX ".axf")
+
+find_program(CMAKE_ARMCCLANG_LINKER armlink HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
+find_program(CMAKE_ARMCCLANG_AR     armar   HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
+find_program(CMAKE_ARMCCLANG_FROMELF fromelf HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
+
+set(CMAKE_LINKER "${CMAKE_ARMCCLANG_LINKER}" CACHE FILEPATH "The ARMCC linker" FORCE)
+mark_as_advanced(CMAKE_ARMCCLANG_LINKER)
+set(CMAKE_AR "${CMAKE_ARMCCLANG_AR}" CACHE FILEPATH "The ARMCC archiver" FORCE)
+mark_as_advanced(CMAKE_ARMCCLANG_AR)
+
+macro(__compiler_armcc_asm)
+  set(lang "ASM")
+  if(NOT CMAKE_${lang}_FLAGS_SET)
+    set(CMAKE_${lang}_FLAGS_SET TRUE)
+    string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
+    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
+    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -g")
+
+    set(CMAKE_${lang}_OUTPUT_EXTENSION ".o")
+    set(CMAKE_${lang}_OUTPUT_EXTENSION_REPLACE 1)
+    set(CMAKE_STATIC_LIBRARY_PREFIX_${lang} "")
+    set(CMAKE_STATIC_LIBRARY_SUFFIX_${lang} ".a")
+
+    set(CMAKE_${lang}_LINK_EXECUTABLE      "<CMAKE_LINKER> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS> -o <TARGET> --list <TARGET_BASE>.map")
+    set(CMAKE_${lang}_CREATE_STATIC_LIBRARY  "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>")
+
+    set(CMAKE_DEPFILE_FLAGS_${lang} "--depend=<DEPFILE>  --depend_format=unix_quoted")
+  endif()
+endmacro()
+__compiler_armcc_asm()
diff --git a/cmake/Compiler/GNUARM-ASM.cmake b/cmake/Compiler/GNUARM-ASM.cmake
index b0261d9..bd28beb 100644
--- a/cmake/Compiler/GNUARM-ASM.cmake
+++ b/cmake/Compiler/GNUARM-ASM.cmake
@@ -1,10 +1,9 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2017-2018, Arm Limited. All rights reserved.
+# Copyright (c) 2017-2019, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-include(Compiler/GNUARM)
 set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S;asm)
-__compiler_gnuarm(ASM)
+#No furhter configuration is needed to extend cmake's buit-in GCC support.