CMP0157ΒΆ
Added in version 3.29.
Swift compilation mode is selected by an abstraction.
The Swift compiler can compile modules in different modes. The desired build mode depends whether the developer is iterating and wants to incrementally make changes, or if they are building a release for distribution and want more optimizations applied to the resulting binary.
CMake versions 3.26 through 3.28 build Swift binaries with whole-module
optimizations enabled when configured in a non-debug build type.
For CMake versions earlier than 3.26, the developer needs to specify
the necessary flag manually for the Ninja Generators, and cannot
not specify whole-module optimizations to the Xcode
generator.
CMake versions 3.29 and above prefer to set the compilation mode using
the Swift_COMPILATION_MODE
target property, which can be
initialized by the CMAKE_Swift_COMPILATION_MODE
variable.
This policy provides compatibility for projects that have not been updated.
The policy setting takes effect as of the first project()
or
enable_language()
command that enables the Swift
language.
Note
Once the policy has taken effect at the top of a project, that choice must be used throughout the tree. In projects that have nested projects in subdirectories, be sure to convert everything together.
The OLD
behavior for this policy builds all Swift targets in
wholemodule
mode for non-debug configurations. Ninja Generators
prepend the -wmo
flag to the default set of Swift flags.
The Xcode
generator sets the SWIFT_COMPILATION_MODE
attribute to wholemodule
in the generated Xcode project file.
The NEW
behavior for this policy is to apply the compilation mode specified
in the Swift_COMPILATION_MODE
target property, initialized as each
target is created by the CMAKE_Swift_COMPILATION_MODE
variable.
This policy was introduced in CMake version 3.29.
It may be set by cmake_policy()
or cmake_minimum_required()
.
If it is not set, CMake does not warn, and uses OLD
behavior.
Note
The OLD
behavior of a policy is
deprecated by definition
and may be removed in a future version of CMake.