| 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. |
| |
| The ``NEW`` behavior requires that policies :policy:`CMP0157` and |
| :policy:`CMP0195` are also set to ``NEW``. :policy:`CMP0157` selects the |
| split Swift build model that provides the dedicated ``.swiftmodule`` edge, |
| and must be set prior to the first :command:`project` or |
| :command:`enable_language` command that enables the Swift language. |
| :policy:`CMP0195` places the module in the Swift module directory structure |
| that the dedicated edge writes. If either policy is not ``NEW`` while |
| ``CMP0215`` is ``NEW``, CMake issues a fatal error when the Swift language |
| is enabled. |
| |
| .. |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 |