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.23.20220528-g241b0ca warns when the policy is not set and uses OLD behavior. Use the cmake_policy() command to set it to OLD or NEW explicitly.


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