# Toolchainfile for Armclang

**URL:** <https://discourse.cmake.org/t/toolchainfile-for-armclang/9976>\
**Category:** Code\
**Created:** [January 31, 2024, 1:37pm UTC](https://discourse.cmake.org/t/toolchainfile-for-armclang/9976 "2024-01-31T13:37:44Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![pedahl](https://discourse.cmake.org/user_avatar/discourse.cmake.org/pedahl/32/3307_2.png) [@pedahl](https://discourse.cmake.org/u/pedahl)\
**Post date:** [January 31, 2024, 1:37pm UTC](https://discourse.cmake.org/t/toolchainfile-for-armclang/9976/1 "2024-01-31T13:37:44Z")

</div>

Hi,  
i have created a Toolchainfile for Armclang:

```auto
set(CMAKE_SYSTEM_PROCESSOR cortex-m4)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION "6")

set(TOOLCHAIN_PATH C:/Keil_v5/ARM/ARMCLANG)
find_program(ARM_CC NAMES armclang PATHS C:/Keil_v5/ARM/ARMCLANG/bin REQUIRED NO_DEFAULT_PATH)
find_program(ARM_CXX NAMES armclang PATHS ${TOOLCHAIN_PATH}/bin REQUIRED NO_DEFAULT_PATH)
find_program(ARM_ASM NAMES armasm PATHS ${TOOLCHAIN_PATH}/bin REQUIRED NO_DEFAULT_PATH)
find_program(ARM_AR NAMES armar PATHS ${TOOLCHAIN_PATH}/bin REQUIRED NO_DEFAULT_PATH)
find_program(ARM_LINK NAMES armlink PATHS ${TOOLCHAIN_PATH}/bin REQUIRED NO_DEFAULT_PATH)
find_program(ARM_FROMELF NAMES fromelf PATHS ${TOOLCHAIN_PATH}/bin REQUIRED NO_DEFAULT_PATH)

set(CLANG_TARGET_TRIPLE arm-arm-none-eabi)

set(CMAKE_C_COMPILER_TARGET ${CLANG_TARGET_TRIPLE})
set(CMAKE_C_COMPILER ${ARM_CC} CACHE STRING "")
set(CMAKE_C_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")

set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TARGET_TRIPLE})
set(CMAKE_CXX_COMPILER ${ARM_CXX} CACHE STRING "")
set(CMAKE_CXX_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")

set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TARGET_TRIPLE})
set(CMAKE_ASM_COMPILER ${ARM_ASM} CACHE STRING "")
set(CMAKE_ASM_FLAGS "--cpu=${CMAKE_SYSTEM_PROCESSOR}")

set(CMAKE_LINKER ${ARM_LINK} CACHE STRING "")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PATH})
set(CMAKE_SYSROOT ${TOOLCHAIN_PATH})

```

Is it correct that I have to set the CMAKE\_C\_FLAGS?  
Are there any good examples of toolchain files for armclang or instructions on how to create them?  
There is a clang.cmake in the cmake installation directory, do I need to include it or is it automatically injected?

---

<div class="post-metadata">

**Author:** ![ben.boeckel](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/b/ea5d25/32.png) [@ben.boeckel](https://discourse.cmake.org/u/ben.boeckel)\
**Post date:** [February 4, 2024, 7:42pm UTC](https://discourse.cmake.org/t/toolchainfile-for-armclang/9976/2 "2024-02-04T19:42:00Z")

</div>

I think you want to set `CMAKE_<LANG>_FLAGS_INIT` in a toolchain file.

Cc: @brad.king
