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.