Browse Source

IAR: Added support for IAR C/C++ Compiler for Microchip AVR 8.10+

- Added C17 support
- Added C++17 support
- Changed: IAR UBROF Linker (XLINK) suffixed with target architecture (xlinkavr)
Felipe Torrezan 2 years ago
parent
commit
7cd982faf4
3 changed files with 12 additions and 7 deletions
  1. 10 5
      Modules/CMakeFindBinUtils.cmake
  2. 1 1
      Modules/Compiler/IAR-C.cmake
  3. 1 1
      Modules/Compiler/IAR-CXX.cmake

+ 10 - 5
Modules/CMakeFindBinUtils.cmake

@@ -121,9 +121,9 @@ elseif("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^xIAR$")
   set(_CMAKE_IAR_ITOOLS "ARM" "RX" "RH850" "RL78" "RISCV" "RISC-V" "STM8")
   set(_CMAKE_IAR_XTOOLS "AVR" "MSP430" "V850" "8051")
 
-  if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" IN_LIST _CMAKE_IAR_ITOOLS)
-    string(TOLOWER "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" _CMAKE_IAR_LOWER_ARCHITECTURE_ID)
+  string(TOLOWER "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" _CMAKE_IAR_LOWER_ARCHITECTURE_ID)
 
+  if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" IN_LIST _CMAKE_IAR_ITOOLS)
     __append_IAR_tool(AR "iarchive")
     __append_IAR_tool(LINKER "ilink${_CMAKE_IAR_LOWER_ARCHITECTURE_ID}")
 
@@ -132,16 +132,21 @@ elseif("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^xIAR$")
     __append_IAR_tool(IAR_OBJMANIP "iobjmanip")
     __append_IAR_tool(IAR_SYMEXPORT "isymexport")
 
-    unset(_CMAKE_IAR_LOWER_ARCHITECTURE_ID)
-
   elseif("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" IN_LIST _CMAKE_IAR_XTOOLS)
     __append_IAR_tool(AR "xar")
-    __append_IAR_tool(LINKER "xlink")
+    if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR" AND
+      (CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION VERSION_GREATER 7))
+      # IAR UBROF Linker V8.10+ for Microchip AVR is `xlinkavr`
+      __append_IAR_tool(LINKER "xlink${_CMAKE_IAR_LOWER_ARCHITECTURE_ID}")
+    else()
+      __append_IAR_tool(LINKER "xlink")
+    endif()
 
   else()
     message(FATAL_ERROR "Failed to find linker and librarian for ${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID} on ${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}.")
   endif()
 
+  unset(_CMAKE_IAR_LOWER_ARCHITECTURE_ID)
   unset(_CMAKE_IAR_ITOOLS)
   unset(_CMAKE_IAR_XTOOLS)
 

+ 1 - 1
Modules/Compiler/IAR-C.cmake

@@ -59,7 +59,7 @@ elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RISCV")
 
 elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
   __compiler_iar_xlink(C)
-  __compiler_check_default_language_standard(C 7.10 99)
+  __compiler_check_default_language_standard(C 7.10 99 8.10 17)
   set(CMAKE_C_OUTPUT_EXTENSION ".r90")
 
 elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")

+ 1 - 1
Modules/Compiler/IAR-CXX.cmake

@@ -68,7 +68,7 @@ elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RISCV")
 
 elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
   __compiler_iar_xlink(CXX)
-  __compiler_check_default_language_standard(CXX 7.10 98)
+  __compiler_check_default_language_standard(CXX 7.10 98 8.10 17)
   set(CMAKE_CXX_OUTPUT_EXTENSION ".r90")
 
 elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")