Core: Add support for Cortex-M0plus and Cortex-M4

This patch adds support Cortex-M0plus and Cortex-M4 cpus.
Add Cortex-M0plus and Cortex-M4 entries in ARMCLANG cmake file.

Change-Id: I9c14d66d7cb7a0df185f8922f000179a184c2166
Signed-off-by: Ashutosh Singh <ashutosh.singh@arm.com>
diff --git a/cmake/Common/CompilerArmClang610.cmake b/cmake/Common/CompilerArmClang610.cmake
index 2570a01..af9b7a5 100644
--- a/cmake/Common/CompilerArmClang610.cmake
+++ b/cmake/Common/CompilerArmClang610.cmake
@@ -36,6 +36,13 @@
 	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
 	string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=7-M")
 	string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=7-M")
+elseif(${ARM_CPU_ARCHITECTURE} STREQUAL "ARMv6-M")
+	string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+	string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+	string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=6-M")
+	string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=6-M")
 else()
 	message(FATAL_ERROR "Unknown or unsupported ARM cpu architecture setting.")
 endif()
@@ -65,6 +72,22 @@
 		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-mcpu=" VAL "-mcpu=cortex-m23")
 		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu" VAL "--cpu=Cortex-M23")
 		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu" VAL "--cpu=Cortex-M23")
+	elseif(${ARM_CPU_TYPE} STREQUAL "Cortex-M4")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
+		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M4")
+		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M4")
+		set(ARM_CPU_ARCHITECTURE "ARMv7-M")
+	elseif(${ARM_CPU_TYPE} STREQUAL "Cortex-M0p")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M0plus")
+		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M0plus")
+		set(ARM_CPU_ARCHITECTURE "ARMv6-M")
 	else()
 		message(FATAL_ERROR "Unknown ARM cpu setting.")
 	endif()
diff --git a/cmake/Common/CompilerArmClang611.cmake b/cmake/Common/CompilerArmClang611.cmake
index 9e0f066..0e8cefb 100644
--- a/cmake/Common/CompilerArmClang611.cmake
+++ b/cmake/Common/CompilerArmClang611.cmake
@@ -36,6 +36,13 @@
 	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
 	string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=7-M")
 	string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=7-M")
+elseif (${ARM_CPU_ARCHITECTURE} STREQUAL "ARMv6-M")
+	string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+	string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+	string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=6-M")
+	string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=6-M")
 else()
 	message(FATAL_ERROR "Unknown or unsupported ARM cpu architecture setting.")
 endif()
@@ -65,6 +72,22 @@
 		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-mcpu=" VAL "-mcpu=cortex-m23")
 		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu" VAL "--cpu=Cortex-M23")
 		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu" VAL "--cpu=Cortex-M23")
+	elseif(${ARM_CPU_TYPE} STREQUAL "Cortex-M4")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
+		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M4")
+		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M4")
+		set(ARM_CPU_ARCHITECTURE "ARMv7-M")
+	elseif(${ARM_CPU_TYPE} STREQUAL "Cortex-M0p")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M0plus")
+		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M0plus")
+		set(ARM_CPU_ARCHITECTURE "ARMv6-M")
 	else()
 		message(FATAL_ERROR "Unknown ARM cpu setting.")
 	endif()
diff --git a/cmake/Common/CompilerArmClang612.cmake b/cmake/Common/CompilerArmClang612.cmake
index 404f035..d5bd3d3 100644
--- a/cmake/Common/CompilerArmClang612.cmake
+++ b/cmake/Common/CompilerArmClang612.cmake
@@ -36,6 +36,13 @@
 	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
 	string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=7-M")
 	string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=7-M")
+elseif (${ARM_CPU_ARCHITECTURE} STREQUAL "ARMv6-M")
+	string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+	string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+	string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+	string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=6-M")
+	string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=6-M")
 else()
 	message(FATAL_ERROR "Unknown or unsupported ARM cpu architecture setting.")
 endif()
@@ -65,6 +72,22 @@
 		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-mcpu=" VAL "-mcpu=cortex-m23")
 		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu" VAL "--cpu=Cortex-M23")
 		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu" VAL "--cpu=Cortex-M23")
+	elseif(${ARM_CPU_TYPE} STREQUAL "Cortex-M4")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv7-m")
+		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M4")
+		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M4")
+		set(ARM_CPU_ARCHITECTURE "ARMv7-M")
+	elseif(${ARM_CPU_TYPE} STREQUAL "Cortex-M0p")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_C_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "--target=" VAL "--target=arm-arm-none-eabi")
+		string_append_unique_item(STRING CMAKE_CXX_FLAGS_CPU KEY "-march=" VAL "-march=armv6-m")
+		string_append_unique_item(STRING CMAKE_ASM_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M0plus")
+		string_append_unique_item(STRING CMAKE_LINK_FLAGS_CPU KEY "--cpu=" VAL "--cpu=Cortex-M0plus")
+		set(ARM_CPU_ARCHITECTURE "ARMv6-M")
 	else()
 		message(FATAL_ERROR "Unknown ARM cpu setting.")
 	endif()
diff --git a/cmake/Common/CpuM0p.cmake b/cmake/Common/CpuM0p.cmake
index b101ec1..b6d1cea 100644
--- a/cmake/Common/CpuM0p.cmake
+++ b/cmake/Common/CpuM0p.cmake
@@ -1,11 +1,15 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2019, Arm Limited. All rights reserved.
+# Copyright (c) 2017-2019, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-#This file gathers Cortex-M0plus specific settings which control the build system.
-set(ARM_CPU_ARCHITECTURE "ARMv6-M")
+#This file gathers Cortex-M0p specific settings which control the build system.
+
+#If Armv6-M architecture type is specified here, the compiler cmake files will
+#set generic Armv6-M CPU type flags as building options directly, instead of the
+#dedicated ones for Cortex-M0plus. It may break building on Cortex-M0plus. Thus
+#skip the setting of architecture type and leave it to compiler cmake files.
 
 set(ARM_CPU_TYPE "Cortex-M0p")
diff --git a/cmake/Common/CpuM4.cmake b/cmake/Common/CpuM4.cmake
index a88c46a..92b3c0a 100644
--- a/cmake/Common/CpuM4.cmake
+++ b/cmake/Common/CpuM4.cmake
@@ -1,11 +1,15 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2019, Arm Limited. All rights reserved.
+# Copyright (c) 2017-2019, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
 #This file gathers Cortex-M4 specific settings which control the build system.
-set(ARM_CPU_ARCHITECTURE "ARMv7-M")
+
+#If Armv7-M architecture type is specified here, the compiler cmake files will
+#set generic Armv7-M CPU type flags as building options directly, instead of the
+#dedicated ones for Cortex-M4. It may break building on Cortex-M4. Thus skip the
+#setting of architecture type and leave it to compiler cmake files.
 
 set(ARM_CPU_TYPE "Cortex-M4")