# CMP0123

New in version 3.21.

`ARMClang` cpu/arch compile and link flags must be set explicitly.

CMake 3.20 and lower automatically maps the `CMAKE_SYSTEM_PROCESSOR` variable and an undocumented `CMAKE_SYSTEM_ARCH` to compile and link options for `ARMClang`. For example, the `-mcpu=cortex-m33` flag is added when `CMAKE_SYSTEM_PROCESSOR` equals `cortex-m33`. CMake requires projects to set either variable or it raises a fatal error. However, the project may need to additionally specify CPU features using e.g. `-mcpu=cortex-m33+nodsp`, conflicting with the `-mcpu=cortex-m33` added by CMake. This results in either link errors or unusable binaries.

CMake 3.21 and above prefer instead to not add any cpu/arch compile and link flags automatically. Instead, projects must specify them explicitly. This policy provides compatibility for projects that have not been updated.

The `OLD` behavior of this policy requires projects that use `ARMClang` to set either `CMAKE_SYSTEM_PROCESSOR` or `CMAKE_SYSTEM_ARCH` and it automatically adds a compile option `-mcpu=` or `-march=` and a link option `--cpu=` based on those variables. The `NEW` behavior does not add compile or link options, and projects are responsible for setting correct options.

This policy was introduced in CMake version 3.21. CMake version 3.28.0-rc1 warns when the policy is not set and uses `OLD` behavior. Use the `cmake_policy()` command to set it to `OLD` or `NEW` explicitly.

Note

The `OLD` behavior of a policy is `deprecated by definition` and may be removed in a future version of CMake.