1CMP0123
2-------
3
4.. versionadded:: 3.21
5
6``ARMClang`` cpu/arch compile and link flags must be set explicitly.
7
8CMake 3.20 and lower automatically maps the :variable:`CMAKE_SYSTEM_PROCESSOR`
9variable and an undocumented ``CMAKE_SYSTEM_ARCH`` to compile and link options
10for ``ARMClang``.  For example, the ``-mcpu=cortex-m33`` flag is added when
11:variable:`CMAKE_SYSTEM_PROCESSOR` equals ``cortex-m33``.  CMake requires
12projects to set either variable or it raises a fatal error.  However, the
13project may need to additionally specify CPU features using e.g.
14``-mcpu=cortex-m33+nodsp``, conflicting with the ``-mcpu=cortex-m33`` added
15by CMake.  This results in either link errors or unusable binaries.
16
17CMake 3.21 and above prefer instead to not add any cpu/arch compile and link
18flags automatically.  Instead, projects must specify them explicitly.
19This policy provides compatibility for projects that have not been updated.
20
21The ``OLD`` behavior of this policy requires projects that use ``ARMClang``
22to set either :variable:`CMAKE_SYSTEM_PROCESSOR` or ``CMAKE_SYSTEM_ARCH``
23and it automatically adds a compile option ``-mcpu=`` or ``-march=`` and
24a link option ``--cpu=`` based on those variables.  The ``NEW`` behavior
25does not add compile or link options, and projects are responsible for
26setting correct options.
27
28This policy was introduced in CMake version 3.21.  CMake version |release|
29warns when the policy is not set and uses ``OLD`` behavior.  Use the
30:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
31
32.. include:: DEPRECATED.txt
33