mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-19 02:17:27 +08:00
IAR: Generalize and add support for IAR RX compiler
Moved common ASM setup to the common macros and changed version check.
This commit is contained in:
@@ -119,35 +119,40 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
|
||||
CMAKE_DETERMINE_COMPILER_ID_VENDOR(ASM${ASM_DIALECT} "${userflags}")
|
||||
if("x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xIAR")
|
||||
# primary necessary to detect architecture, so the right archiver and linker can be picked
|
||||
# eg. IAR Assembler V8.10.1.12857/W32 for ARM
|
||||
# eg. "IAR Assembler V8.10.1.12857/W32 for ARM" or "IAR Assembler V4.11.1.4666 for Renesas RX"
|
||||
# Cut out identification first, newline handling is a pain
|
||||
string(REGEX MATCH "IAR Assembler[^\r\n]*" _compileid "${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_OUTPUT}")
|
||||
if("${_compileid}" MATCHES "V([0-9]+\\.[0-9]+\\.[0-9]+)")
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION ${CMAKE_MATCH_1})
|
||||
endif()
|
||||
if("${_compileid}" MATCHES "for[ ]+([A-Za-z0-9]+)")
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID ${CMAKE_MATCH_1})
|
||||
string(REGEX MATCHALL "([A-Za-z0-9]+)" _all_compileid_matches "${_compileid}")
|
||||
if(_all_compileid_matches)
|
||||
list(GET _all_compileid_matches "-1" CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID)
|
||||
endif()
|
||||
endif()
|
||||
unset(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_OUTPUT)
|
||||
unset(_all_compileid_matches)
|
||||
unset(_compileid)
|
||||
endif()
|
||||
|
||||
|
||||
if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
|
||||
if(CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION)
|
||||
set(_version " ${CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION}")
|
||||
else()
|
||||
set(_version "")
|
||||
endif()
|
||||
message(STATUS "The ASM${ASM_DIALECT} compiler identification is ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}${_version}")
|
||||
if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID)
|
||||
set(_archid " ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}")
|
||||
else()
|
||||
set(_archid "")
|
||||
endif()
|
||||
message(STATUS "The ASM${ASM_DIALECT} compiler identification is ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}${_archid}${_version}")
|
||||
unset(_archid)
|
||||
unset(_version)
|
||||
else()
|
||||
message(STATUS "The ASM${ASM_DIALECT} compiler identification is unknown")
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
# If we have a gas/as cross compiler, they have usually some prefix, like
|
||||
# e.g. powerpc-linux-gas, arm-elf-gas or i586-mingw32msvc-gas , optionally
|
||||
# with a 3-component version number at the end
|
||||
|
@@ -110,8 +110,15 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
||||
else()
|
||||
set(_version "")
|
||||
endif()
|
||||
if(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID)
|
||||
set(_archid " ${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}")
|
||||
else()
|
||||
set(_archid "")
|
||||
endif()
|
||||
message(STATUS "The ${lang} compiler identification is "
|
||||
"${CMAKE_${lang}_COMPILER_ID}${_version}")
|
||||
"${CMAKE_${lang}_COMPILER_ID}${_archid}${_version}")
|
||||
unset(_archid)
|
||||
unset(_version)
|
||||
else()
|
||||
message(STATUS "The ${lang} compiler identification is unknown")
|
||||
endif()
|
||||
|
@@ -156,6 +156,9 @@
|
||||
# if defined(__ICCARM__)
|
||||
# define ARCHITECTURE_ID "ARM"
|
||||
|
||||
# elif defined(__ICCRX__)
|
||||
# define ARCHITECTURE_ID "RX"
|
||||
|
||||
# elif defined(__ICCAVR__)
|
||||
# define ARCHITECTURE_ID "AVR"
|
||||
|
||||
|
@@ -4,20 +4,19 @@ include(Compiler/IAR)
|
||||
|
||||
if("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
|
||||
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -S <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
|
||||
__compiler_iar_ARM(ASM)
|
||||
__compiler_iar_ilink(ASM)
|
||||
set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa)
|
||||
|
||||
string(APPEND CMAKE_ASM_FLAGS_INIT " ")
|
||||
string(APPEND CMAKE_ASM_FLAGS_DEBUG_INIT " -r")
|
||||
string(APPEND CMAKE_ASM_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
|
||||
string(APPEND CMAKE_ASM_FLAGS_RELEASE_INIT " -DNDEBUG")
|
||||
string(APPEND CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT " -r -DNDEBUG")
|
||||
elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
|
||||
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
|
||||
__compiler_iar_ilink(ASM)
|
||||
set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa)
|
||||
|
||||
elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
|
||||
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -S <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
|
||||
__compiler_iar_AVR(ASM)
|
||||
__compiler_iar_xlink(ASM)
|
||||
set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s90;asm;msa)
|
||||
|
||||
else()
|
||||
message(FATAL_ERROR "CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID not detected as \"AVR\" or \"ARM\". This should be automatic.")
|
||||
message(FATAL_ERROR "CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID not detected. This should be automatic.")
|
||||
endif()
|
||||
|
@@ -3,44 +3,39 @@
|
||||
include(Compiler/IAR)
|
||||
include(Compiler/CMakeCommonCompilerMacros)
|
||||
|
||||
# The toolchains for ARM and AVR are quite different:
|
||||
if("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
|
||||
# Common
|
||||
if(NOT CMAKE_C_COMPILER_VERSION)
|
||||
message(FATAL_ERROR "CMAKE_C_COMPILER_VERSION not detected. This should be automatic.")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_EXTENSION_COMPILE_OPTION -e)
|
||||
|
||||
set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_C90_EXTENSION_COMPILE_OPTION -e)
|
||||
|
||||
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.10)
|
||||
if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 7)
|
||||
set(CMAKE_C90_STANDARD_COMPILE_OPTION --c89)
|
||||
set(CMAKE_C90_EXTENSION_COMPILE_OPTION --c89 -e)
|
||||
set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_C99_EXTENSION_COMPILE_OPTION -e)
|
||||
elseif()
|
||||
set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_C90_EXTENSION_COMPILE_OPTION -e)
|
||||
endif()
|
||||
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.10)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 8)
|
||||
set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_C11_EXTENSION_COMPILE_OPTION -e)
|
||||
endif()
|
||||
|
||||
__compiler_iar_ARM(C)
|
||||
# Architecture specific
|
||||
if("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
|
||||
__compiler_iar_ilink(C)
|
||||
__compiler_check_default_language_standard(C 1.10 90 6.10 99 8.10 11)
|
||||
|
||||
elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
|
||||
__compiler_iar_ilink(C)
|
||||
__compiler_check_default_language_standard(C 1.10 90 2.10 99 4.10 11)
|
||||
|
||||
elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
|
||||
if(NOT CMAKE_C_COMPILER_VERSION)
|
||||
message(FATAL_ERROR "CMAKE_C_COMPILER_VERSION not detected. This should be automatic.")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_EXTENSION_COMPILE_OPTION -e)
|
||||
|
||||
set(CMAKE_C90_STANDARD_COMPILE_OPTION --c89)
|
||||
set(CMAKE_C90_EXTENSION_COMPILE_OPTION -e)
|
||||
set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_C99_EXTENSION_COMPILE_OPTION -e)
|
||||
|
||||
__compiler_iar_AVR(C)
|
||||
__compiler_iar_xlink(C)
|
||||
__compiler_check_default_language_standard(C 7.10 99)
|
||||
set(CMAKE_C_OUTPUT_EXTENSION ".r90")
|
||||
|
||||
@@ -48,9 +43,6 @@ elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
|
||||
set(CMAKE_C_LINK_FLAGS "-Fmotorola")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_LINKER> <OBJECTS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
|
||||
set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> -o <TARGET> <OBJECTS> ")
|
||||
|
||||
# add the target specific include directory:
|
||||
get_filename_component(_compilerDir "${CMAKE_C_COMPILER}" PATH)
|
||||
get_filename_component(_compilerDir "${_compilerDir}" PATH)
|
||||
@@ -58,5 +50,5 @@ elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
|
||||
include_directories("${_compilerDir}/inc/Atmel" )
|
||||
|
||||
else()
|
||||
message(FATAL_ERROR "CMAKE_C_COMPILER_ARCHITECTURE_ID not detected as \"AVR\" or \"ARM\". This should be automatic.")
|
||||
message(FATAL_ERROR "CMAKE_C_COMPILER_ARCHITECTURE_ID not detected. This should be automatic.")
|
||||
endif()
|
||||
|
@@ -3,17 +3,12 @@
|
||||
include(Compiler/IAR)
|
||||
include(Compiler/CMakeCommonCompilerMacros)
|
||||
|
||||
if("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
|
||||
# "(extended) embedded C++" Mode
|
||||
# old version: --ec++ or --eec++
|
||||
# since 8.10: --c++ --no_exceptions --no_rtti
|
||||
#
|
||||
# --c++ is full C++ and supported since 6.10
|
||||
# Common
|
||||
if(NOT CMAKE_IAR_CXX_FLAG)
|
||||
if(NOT CMAKE_CXX_COMPILER_VERSION)
|
||||
message(FATAL_ERROR "CMAKE_CXX_COMPILER_VERSION not detected. This should be automatic.")
|
||||
endif()
|
||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.10)
|
||||
if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 8)
|
||||
set(CMAKE_IAR_CXX_FLAG --c++)
|
||||
else()
|
||||
set(CMAKE_IAR_CXX_FLAG --eec++)
|
||||
@@ -22,41 +17,31 @@ if("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
|
||||
|
||||
set(CMAKE_CXX_EXTENSION_COMPILE_OPTION -e)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 7)
|
||||
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -e)
|
||||
|
||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.10)
|
||||
set(CMAKE_CXX03_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_CXX03_EXTENSION_COMPILE_OPTION -e)
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 8)
|
||||
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -e)
|
||||
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION -e)
|
||||
endif()
|
||||
|
||||
__compiler_iar_ARM(CXX)
|
||||
# Architecture specific
|
||||
if("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
|
||||
__compiler_iar_ilink(CXX)
|
||||
__compiler_check_default_language_standard(CXX 6.10 98 8.10 14)
|
||||
|
||||
elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
|
||||
__compiler_iar_ilink(CXX)
|
||||
__compiler_check_default_language_standard(CXX 2.10 98 4.10 14)
|
||||
|
||||
elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
|
||||
# "embedded C++" --EC++ is probably closest to CXX98 but with no support for:
|
||||
# Templates, multiple inheritance, virtual inheritance, exceptions, RTTI, C++ style casts,
|
||||
# Namespaces, the mutable attribute, no STL, any library features related to the above features.
|
||||
#
|
||||
# "(extended) embedded C++" --EEC++ Mode but DOES NOT support any normal C++ standard
|
||||
# probably closest to CXX98 but with no RTTI and no exceptions, and the library
|
||||
# provided is not in the standard namespace
|
||||
if(NOT CMAKE_IAR_CXX_FLAG)
|
||||
if(NOT CMAKE_CXX_COMPILER_VERSION)
|
||||
message(FATAL_ERROR "CMAKE_CXX_COMPILER_VERSION not detected. This should be automatic.")
|
||||
endif()
|
||||
set(CMAKE_IAR_CXX_FLAG --eec++)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_EXTENSION_COMPILE_OPTION -e)
|
||||
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -e)
|
||||
|
||||
__compiler_iar_AVR(CXX)
|
||||
__compiler_iar_xlink(CXX)
|
||||
__compiler_check_default_language_standard(CXX 7.10 98)
|
||||
|
||||
set(CMAKE_CXX_OUTPUT_EXTENSION ".r90")
|
||||
@@ -64,9 +49,6 @@ elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
|
||||
set(CMAKE_CXX_LINK_FLAGS "-Fmotorola")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_LINKER> <OBJECTS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
|
||||
set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> -o <TARGET> <OBJECTS> ")
|
||||
|
||||
# add the target specific include directory:
|
||||
get_filename_component(_compilerDir "${CMAKE_C_COMPILER}" PATH)
|
||||
get_filename_component(_compilerDir "${_compilerDir}" PATH)
|
||||
@@ -74,5 +56,5 @@ elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
|
||||
include_directories("${_compilerDir}/inc/Atmel" )
|
||||
|
||||
else()
|
||||
message(FATAL_ERROR "CMAKE_CXX_COMPILER_ARCHITECTURE_ID not detected as \"AVR\" or \"ARM\". This should be automatic." )
|
||||
message(FATAL_ERROR "CMAKE_CXX_COMPILER_ARCHITECTURE_ID not detected. This should be automatic." )
|
||||
endif()
|
||||
|
@@ -31,7 +31,7 @@ set(_compiler_id_version_compute "
|
||||
# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(((__VER__) / 1000) % 1000)
|
||||
# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@((__VER__) % 1000)
|
||||
# define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__IAR_SYSTEMS_ICC__)
|
||||
# elif defined(__VER__) && defined(__ICCAVR__)
|
||||
# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__))
|
||||
# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@((__VER__) / 100)
|
||||
# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@((__VER__) - (((__VER__) / 100)*100))
|
||||
# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__SUBVERSION__)
|
||||
|
@@ -10,39 +10,39 @@ get_filename_component(__iar_hint_2 "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPI
|
||||
|
||||
set(__iar_hints "${__iar_hint_1}" "${__iar_hint_2}")
|
||||
|
||||
if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
|
||||
if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM" OR
|
||||
"${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
|
||||
# could allow using normal binutils ar, since objects are normal ELF files?
|
||||
find_program(CMAKE_IAR_LINKARM ilinkarm.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR ARM linker")
|
||||
find_program(CMAKE_IAR_LINKER ilink${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR ILINK linker")
|
||||
find_program(CMAKE_IAR_ARCHIVE iarchive.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR archiver")
|
||||
|
||||
# find auxiliary tools
|
||||
find_program(CMAKE_IAR_ELFTOOL ielftool.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR ELF Tool")
|
||||
find_program(CMAKE_IAR_ELFDUMP ielfdumparm.exe HINTS ${__iar_hints}
|
||||
find_program(CMAKE_IAR_ELFDUMP ielfdump${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR ELF Dumper")
|
||||
find_program(CMAKE_IAR_OBJMANIP iobjmanip.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR ELF Object Tool")
|
||||
find_program(CMAKE_IAR_SYMEXPORT isymexport.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR Absolute Symbol Exporter")
|
||||
mark_as_advanced(CMAKE_IAR_LINKARM CMAKE_IAR_ARCHIVE CMAKE_IAR_ELFTOOL CMAKE_IAR_ELFDUMP CMAKE_IAR_OBJMANIP CMAKE_IAR_SYMEXPORT)
|
||||
mark_as_advanced(CMAKE_IAR_LINKER CMAKE_IAR_ARCHIVE CMAKE_IAR_ELFTOOL CMAKE_IAR_ELFDUMP CMAKE_IAR_OBJMANIP CMAKE_IAR_SYMEXPORT)
|
||||
|
||||
set(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_CUSTOM_CODE
|
||||
"set(CMAKE_IAR_LINKARM \"${CMAKE_IAR_LINKARM}\")
|
||||
"set(CMAKE_IAR_LINKER \"${CMAKE_IAR_LINKER}\")
|
||||
set(CMAKE_IAR_ARCHIVE \"${CMAKE_IAR_ARCHIVE}\")
|
||||
set(CMAKE_IAR_ELFTOOL \"${CMAKE_IAR_ELFTOOL}\")
|
||||
set(CMAKE_IAR_ELFDUMP \"${CMAKE_IAR_ELFDUMP}\")
|
||||
set(CMAKE_IAR_OBJMANIP \"${CMAKE_IAR_OBJMANIP}\")
|
||||
set(CMAKE_IAR_LINKARM \"${CMAKE_IAR_LINKARM}\")
|
||||
set(CMAKE_IAR_LINKER \"${CMAKE_IAR_LINKER}\")
|
||||
")
|
||||
|
||||
|
||||
elseif("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
|
||||
|
||||
# For AVR and AVR32, IAR uses the "xlink" linker and the "xar" archiver:
|
||||
find_program(CMAKE_IAR_LINKER xlink.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR AVR linker")
|
||||
DOC "The IAR XLINK linker")
|
||||
find_program(CMAKE_IAR_AR xar.exe HINTS ${__iar_hints}
|
||||
DOC "The IAR archiver")
|
||||
mark_as_advanced(CMAKE_IAR_LINKER CMAKE_IAR_AR)
|
||||
|
@@ -2,11 +2,16 @@
|
||||
# Documentation can be downloaded here: http://www.iar.com/website1/1.0.1.0/675/1/
|
||||
# The initial feature request is here: https://gitlab.kitware.com/cmake/cmake/issues/10176
|
||||
# It also contains additional links and information.
|
||||
# See USER GUIDES -> C/C++ Development Guide and ReleaseNotes for:
|
||||
# See USER GUIDES -> C/C++ Development Guide and ReleaseNotes for EWARM:
|
||||
# version 6.30.8: http://supp.iar.com/FilesPublic/UPDINFO/006607/arm/doc/infocenter/index.ENU.html
|
||||
# version 7.60.1: http://supp.iar.com/FilesPublic/UPDINFO/011006/arm/doc/infocenter/index.ENU.html
|
||||
# version 8.10.1: http://netstorage.iar.com/SuppDB/Public/UPDINFO/011854/arm/doc/infocenter/index.ENU.html
|
||||
|
||||
# The IAR internal compiler platform generations (Predefined symbol __IAR_SYSTEMS_ICC__):
|
||||
# 9 and higher means C11 and C++14 as language default (EWARM v8.x, EWRX v4.x and higher)
|
||||
# 8 means C99 and C++03 as language default (EWARM v6.x, v7.x. EWRX v2.x, 3.x)
|
||||
# 7 and lower means C89 and EC++ as language default. (EWARM v5.x and lower)
|
||||
|
||||
# C/C++ Standard versions
|
||||
#
|
||||
# IAR typically only supports one C and C++ Standard version,
|
||||
@@ -33,15 +38,11 @@
|
||||
# code and data size printouts (that can be inspected with common tools).
|
||||
|
||||
# This module is shared by multiple languages; use include blocker.
|
||||
if(_IARARM_CMAKE_LOADED)
|
||||
return()
|
||||
endif()
|
||||
set(_IARARM_CMAKE_LOADED 1)
|
||||
include_guard()
|
||||
|
||||
macro(__compiler_iar_ARM lang)
|
||||
macro(__compiler_iar_ilink lang)
|
||||
set(CMAKE_EXECUTABLE_SUFFIX ".elf")
|
||||
if (${lang} STREQUAL "C" OR ${lang} STREQUAL "CXX")
|
||||
|
||||
set(CMAKE_${lang}_COMPILE_OBJECT "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
|
||||
set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> --preprocess=cnl <PREPROCESSED_SOURCE>")
|
||||
set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -lAH <ASSEMBLY_SOURCE> -o <OBJECT>.dummy")
|
||||
@@ -56,17 +57,25 @@ macro(__compiler_iar_ARM lang)
|
||||
string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -Oh -r -DNDEBUG")
|
||||
endif()
|
||||
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE "\"${CMAKE_IAR_LINKARM}\" --silent <OBJECTS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
|
||||
if (${lang} STREQUAL "ASM")
|
||||
string(APPEND CMAKE_ASM_FLAGS_INIT " ")
|
||||
string(APPEND CMAKE_ASM_FLAGS_DEBUG_INIT " -r")
|
||||
string(APPEND CMAKE_ASM_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
|
||||
string(APPEND CMAKE_ASM_FLAGS_RELEASE_INIT " -DNDEBUG")
|
||||
string(APPEND CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT " -r -DNDEBUG")
|
||||
endif()
|
||||
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE "\"${CMAKE_IAR_LINKER}\" --silent <OBJECTS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
|
||||
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "\"${CMAKE_IAR_ARCHIVE}\" <TARGET> --create <LINK_FLAGS> <OBJECTS>")
|
||||
set(CMAKE_${lang}_ARCHIVE_CREATE "\"${CMAKE_IAR_ARCHIVE}\" <TARGET> --create <LINK_FLAGS> <OBJECTS>")
|
||||
set(CMAKE_${lang}_ARCHIVE_APPEND "\"${CMAKE_IAR_ARCHIVE}\" <TARGET> --replace <LINK_FLAGS> <OBJECTS>")
|
||||
set(CMAKE_${lang}_ARCHIVE_FINISH "")
|
||||
|
||||
set(CMAKE_LINKER "${CMAKE_IAR_LINKARM}" CACHE FILEPATH "The IAR linker" FORCE)
|
||||
set(CMAKE_LINKER "${CMAKE_IAR_LINKER}" CACHE FILEPATH "The IAR linker" FORCE)
|
||||
set(CMAKE_AR "${CMAKE_IAR_ARCHIVE}" CACHE FILEPATH "The IAR archiver" FORCE)
|
||||
endmacro()
|
||||
|
||||
macro(__compiler_iar_AVR lang)
|
||||
macro(__compiler_iar_xlink lang)
|
||||
set(CMAKE_EXECUTABLE_SUFFIX ".bin")
|
||||
if (${lang} STREQUAL "C" OR ${lang} STREQUAL "CXX")
|
||||
|
||||
@@ -84,6 +93,14 @@ macro(__compiler_iar_AVR lang)
|
||||
string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -Oh -r -DNDEBUG")
|
||||
endif()
|
||||
|
||||
if (${lang} STREQUAL "ASM")
|
||||
string(APPEND CMAKE_ASM_FLAGS_INIT " ")
|
||||
string(APPEND CMAKE_ASM_FLAGS_DEBUG_INIT " -r")
|
||||
string(APPEND CMAKE_ASM_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
|
||||
string(APPEND CMAKE_ASM_FLAGS_RELEASE_INIT " -DNDEBUG")
|
||||
string(APPEND CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT " -r -DNDEBUG")
|
||||
endif()
|
||||
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE "\"${CMAKE_IAR_LINKER}\" -S <OBJECTS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
|
||||
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "\"${CMAKE_IAR_AR}\" <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||
set(CMAKE_${lang}_ARCHIVE_CREATE "\"${CMAKE_IAR_AR}\" <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||
|
Reference in New Issue
Block a user