|
1 | 1 | # Toolchain File for the IAR C/C++ Compiler |
2 | 2 |
|
3 | | -# Action: Set the `<arch>` to the compiler's target architecture |
4 | | -# Examples: 430, 8051, arm, avr, riscv, rx, rl78, rh850, stm8 or v850 |
5 | | -set(CMAKE_SYSTEM_PROCESSOR <arch>) |
| 3 | +# Action: Set the `TOOLKIT` variable |
| 4 | +# Examples: arm, riscv, rh850, rl78, rx, stm8, 430, 8051, avr or v850 |
| 5 | +# Alternative: override the default TOOLKIT_DIR (/path/to/installation/<arch>) |
| 6 | +set(TOOLKIT arm) |
6 | 7 |
|
7 | | -# Action: Set the `IAR_INSTALL_DIR` to the tool installation path |
8 | | -set(IAR_INSTALL_DIR "/path/to/install_dir") |
| 8 | +# Get the toolchain target from the TOOLKIT |
| 9 | +get_filename_component(CMAKE_SYSTEM_PROCESSOR ${TOOLKIT} NAME) |
9 | 10 |
|
10 | | -# "Generic" is used when cross compiling |
11 | | -set(CMAKE_SYSTEM_NAME Generic) |
| 11 | +# IAR C Compiler |
| 12 | +find_program(CMAKE_C_COMPILER |
| 13 | + NAMES icc${CMAKE_SYSTEM_PROCESSOR} |
| 14 | + PATHS ${TOOLKIT} |
| 15 | + "$ENV{ProgramFiles}/IAR Systems/*" |
| 16 | + "$ENV{ProgramFiles\(x86\)}/IAR Systems/*" |
| 17 | + /opt/iarsystems/bx${CMAKE_SYSTEM_PROCESSOR} |
| 18 | + PATH_SUFFIXES bin ${CMAKE_SYSTEM_PROCESSOR}/bin |
| 19 | + REQUIRED ) |
| 20 | + |
| 21 | +# IAR C++ Compiler |
| 22 | +find_program(CMAKE_CXX_COMPILER |
| 23 | + NAMES icc${CMAKE_SYSTEM_PROCESSOR} |
| 24 | + PATHS ${TOOLKIT} |
| 25 | + "$ENV{PROGRAMFILES}/IAR Systems/*" |
| 26 | + "$ENV{ProgramFiles\(x86\)}/IAR Systems/*" |
| 27 | + /opt/iarsystems/bx${CMAKE_SYSTEM_PROCESSOR} |
| 28 | + PATH_SUFFIXES bin ${CMAKE_SYSTEM_PROCESSOR}/bin |
| 29 | + REQUIRED ) |
| 30 | + |
| 31 | +# IAR Assembler |
| 32 | +find_program(CMAKE_ASM_COMPILER |
| 33 | + NAMES iasm${CMAKE_SYSTEM_PROCESSOR} a${CMAKE_SYSTEM_PROCESSOR} |
| 34 | + PATHS ${TOOLKIT} |
| 35 | + "$ENV{PROGRAMFILES}/IAR Systems/*" |
| 36 | + "$ENV{ProgramFiles\(x86\)}/IAR Systems/*" |
| 37 | + /opt/iarsystems/bx${CMAKE_SYSTEM_PROCESSOR} |
| 38 | + PATH_SUFFIXES bin ${CMAKE_SYSTEM_PROCESSOR}/bin |
| 39 | + REQUIRED ) |
12 | 40 |
|
13 | 41 | # Avoids running the linker during try_compile() |
14 | 42 | set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) |
15 | 43 |
|
16 | | -# Set a generic `TOOLKIT_DIR` location for the supported architectures |
17 | | -set(TOOLKIT_DIR "${IAR_INSTALL_DIR}/${CMAKE_SYSTEM_PROCESSOR}") |
18 | | - |
19 | | -# Add the selected IAR toolchain to the PATH (only while CMake is running) |
20 | | -if (UNIX) |
21 | | - set(ENV{PATH} "${TOOLKIT_DIR}/bin:$ENV{PATH}") |
22 | | -else() |
23 | | - set(ENV{PATH} "${TOOLKIT_DIR}/bin;$ENV{PATH}") |
24 | | -endif() |
25 | | - |
26 | | -# CMake requires individual variables for the C, C++ and Assembler |
27 | | -# IAR C/C++ Compiler executable name |
28 | | -set(CMAKE_C_COMPILER "icc${CMAKE_SYSTEM_PROCESSOR}") |
29 | | -set(CMAKE_CXX_COMPILER "icc${CMAKE_SYSTEM_PROCESSOR}") |
30 | | - |
31 | | -# Automatically set the IAR Assembler executable name |
32 | | -# (depends on the toolchain's linker technology) |
33 | | -list(APPEND _IAR_TOOLCHAINS_ILINK arm riscv rh850 rl78 rx stm8) |
34 | | -if (${CMAKE_SYSTEM_PROCESSOR} IN_LIST _IAR_TOOLCHAINS_ILINK) |
35 | | - # The Assembler executable for toolchains using the ILINK linker |
36 | | - set(CMAKE_ASM_COMPILER "iasm${CMAKE_SYSTEM_PROCESSOR}") |
37 | | -else() |
38 | | - # The Assembler executable for toolchains using the XLINK linker |
39 | | - set(CMAKE_ASM_COMPILER "a${CMAKE_SYSTEM_PROCESSOR}") |
40 | | -endif() |
41 | | -unset(_IAR_TOOLCHAINS_ILINK) |
| 44 | +# Set the TOOLKIT_DIR variable for the CMakeLists |
| 45 | +get_filename_component(BIN_DIR ${CMAKE_C_COMPILER} DIRECTORY) |
| 46 | +get_filename_component(TOOLKIT_DIR ${BIN_DIR} PATH) |
| 47 | +unset(BIN_DIR) |
| 48 | + |
0 commit comments