|
|
|
CMP0069
|
|
|
|
-------
|
|
|
|
|
|
|
|
:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` is enforced when enabled.
|
|
|
|
|
|
|
|
CMake 3.9 and newer prefer to add IPO flags whenever the
|
|
|
|
:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property is enabled and
|
|
|
|
produce an error if flags are not known to CMake for the current compiler.
|
|
|
|
Since a given compiler may not support IPO flags in all environments in which
|
|
|
|
it is used, it is now the project's responsibility to use the
|
|
|
|
:module:`CheckIPOSupported` module to check for support before enabling the
|
|
|
|
:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property. This approach
|
|
|
|
allows a project to conditionally activate IPO when supported. It also
|
|
|
|
allows an end user to set the :variable:`CMAKE_INTERPROCEDURAL_OPTIMIZATION`
|
|
|
|
variable in an environment known to support IPO even if the project does
|
|
|
|
not enable the property.
|
|
|
|
|
|
|
|
Since CMake 3.8 and lower only honored :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION`
|
|
|
|
for the Intel compiler on Linux, some projects may unconditionally enable the
|
|
|
|
target property. Policy ``CMP0069`` provides compatibility with such projects.
|
|
|
|
|
|
|
|
This policy takes effect whenever the IPO property is enabled. The ``OLD``
|
|
|
|
behavior for this policy is to add IPO flags only for Intel compiler on Linux.
|
|
|
|
The ``NEW`` behavior for this policy is to add IPO flags for the current
|
|
|
|
compiler or produce an error if CMake does not know the flags.
|
|
|
|
|
|
|
|
This policy was introduced in CMake version 3.9. CMake version
|
|
|
|
|release| warns when the policy is not set and uses ``OLD`` behavior.
|
|
|
|
Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
|
|
|
|
explicitly.
|
|
|
|
|
|
|
|
.. include:: DEPRECATED.txt
|
|
|
|
|
|
|
|
Examples
|
|
|
|
^^^^^^^^
|
|
|
|
|
|
|
|
Behave like CMake 3.8 and do not apply any IPO flags except for Intel compiler
|
|
|
|
on Linux:
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
cmake_minimum_required(VERSION 3.8)
|
|
|
|
project(foo)
|
|
|
|
|
|
|
|
# ...
|
|
|
|
|
|
|
|
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
|
|
|
|
|
|
Use the :module:`CheckIPOSupported` module to detect whether IPO is
|
|
|
|
supported by the current compiler, environment, and CMake version.
|
|
|
|
Produce a fatal error if support is not available:
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
|
|
|
|
project(foo)
|
|
|
|
|
|
|
|
include(CheckIPOSupported)
|
|
|
|
check_ipo_supported()
|
|
|
|
|
|
|
|
# ...
|
|
|
|
|
|
|
|
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
|
|
|
|
|
|
Apply IPO flags only if compiler supports it:
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
|
|
|
|
project(foo)
|
|
|
|
|
|
|
|
include(CheckIPOSupported)
|
|
|
|
|
|
|
|
# ...
|
|
|
|
|
|
|
|
check_ipo_supported(RESULT result)
|
|
|
|
if(result)
|
|
|
|
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
Apply IPO flags without any checks. This may lead to build errors if IPO
|
|
|
|
is not supported by the compiler in the current environment. Produce an
|
|
|
|
error if CMake does not know IPO flags for the current compiler:
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
|
|
|
|
project(foo)
|
|
|
|
|
|
|
|
# ...
|
|
|
|
|
|
|
|
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
|