CMP0215
-------

.. versionadded:: 4.4

:ref:`Ninja Generators` emit Swift modules separately from compilation.

In CMake 4.3 and below, Swift targets built by :ref:`Ninja Generators`
emit ``.swiftmodule`` from the Swift compile edge together with object files.
Because Ninja treats a build edge as atomic, downstream Swift targets
must wait for compilation outputs to finish before they can use the module
interface.

CMake 4.4 and above prefer to emit ``.swiftmodule`` from a dedicated
``-emit-module`` build edge so that downstream Swift targets can begin
compiling as soon as the module interface is available.  This policy
provides compatibility with projects that have not been updated.

The ``OLD`` behavior for this policy is to not emit modules separately.
The ``NEW`` behavior for this policy is to emit ``.swiftmodule`` from a
dedicated build edge for importable Swift targets by default.

The :prop_tgt:`Swift_SEPARATE_MODULE_EMISSION` target property and
corresponding :variable:`CMAKE_Swift_SEPARATE_MODULE_EMISSION` variable
may be set to enable or disable the behavior on a per-target basis.

.. note::

   Separate module emission takes effect only when policy :policy:`CMP0157`
   is set to ``NEW`` prior to the first :command:`project` or
   :command:`enable_language` command that enables the Swift language.
   The dedicated ``.swiftmodule`` edge is available only in the split
   Swift build model.

.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 4.4
.. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn
.. include:: include/STANDARD_ADVICE.rst

.. include:: include/DEPRECATED.rst
