Galanakis, Minos | 41f8597 | 2019-09-30 15:56:40 +0100 | [diff] [blame] | 1 | ################## |
| 2 | Build instructions |
| 3 | ################## |
Anton Komlev | 0dbe8f1 | 2022-06-17 16:48:12 +0100 | [diff] [blame] | 4 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 5 | .. warning:: |
| 6 | The build process was changed a lot in Q3 2023 and included into the release after v1.9. |
| 7 | For building instructions for early versions please refer to the documentation of respective |
| 8 | versions. |
| 9 | |
| 10 | As you know from the :doc:`introduction </introduction/readme>` TF-M implements |
| 11 | :term:`SPE` with a set of secure services. |
| 12 | TF-M application as :term:`NSPE` client uses those services through isolation boundary via |
| 13 | :term:`PSA-FF-M` API. |
| 14 | Both SPE and NSPE are separate binaries and built independently. |
Kevin Peng | 304e268 | 2023-11-06 14:10:50 +0800 | [diff] [blame^] | 15 | SPE and NSPE binaries are combined and signed making the final image for downloading onto targets |
| 16 | when building NSPE. |
| 17 | |
| 18 | .. Note:: |
| 19 | This document describes the process of building a single SPE alone. |
| 20 | Refer to :doc:`Building Tests </building/tests_build_instruction>` on how to build TF-M |
| 21 | regression tests and PSA Arch tests to verify TF-M. |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 22 | |
| 23 | TF-M uses `CMake <https://cmake.org/overview/>`__ **v3.15** or higher. |
| 24 | Before starting please make sure you have all required software installed and |
| 25 | configured as explained in the |
Anton Komlev | 3356ba3 | 2022-03-31 22:02:11 +0100 | [diff] [blame] | 26 | :doc:`TF-M getting started </getting_started/tfm_getting_started>`. |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 27 | |
| 28 | .. contents:: Contents |
| 29 | :depth: 2 |
| 30 | :local: |
| 31 | |
| 32 | The additional building materials you can find in the following links:TF-M source folder |
Anton Komlev | 91281f0 | 2022-04-22 09:24:20 +0100 | [diff] [blame] | 33 | |
| 34 | .. toctree:: |
| 35 | :maxdepth: 1 |
| 36 | |
Kevin Peng | 304e268 | 2023-11-06 14:10:50 +0800 | [diff] [blame^] | 37 | Build Tests <tests_build_instruction> |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 38 | Run TF-M tests and applications <run_tfm_examples_on_arm_platforms> |
Anton Komlev | 0dbe8f1 | 2022-06-17 16:48:12 +0100 | [diff] [blame] | 39 | Building the documentation <documentation_generation> |
| 40 | IAR toolchain <tfm_build_instruction_iar> |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 41 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 42 | .. _Building SPE: |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 43 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 44 | ******************* |
| 45 | Building TF-M (SPE) |
| 46 | ******************* |
| 47 | This build generates the SPE binary and artifacts, necessary for :ref:`Building NSPE`. |
Raef Coles | 1ecb813 | 2020-10-02 15:11:24 +0100 | [diff] [blame] | 48 | |
David Wang | d6fd6af | 2021-06-21 17:17:26 +0800 | [diff] [blame] | 49 | .. _Getting the source-code: |
| 50 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 51 | Getting the source code |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 52 | ======================= |
| 53 | .. code-block:: bash |
| 54 | |
Leonardo Sandoval | d7f72d5 | 2020-07-28 18:02:34 -0500 | [diff] [blame] | 55 | cd <base folder> |
Minos Galanakis | 0f39fa5 | 2020-06-08 16:53:53 +0100 | [diff] [blame] | 56 | git clone https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 57 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 58 | In this documentation, the cloned ``trusted-firmware-m`` repository will be referenced as |
| 59 | ``<TF-M source dir>``. |
| 60 | Additionally, TF-M depends on several external projects, handled by CMake automatically but |
| 61 | you can alter that behaviour using :ref:`Dependency management`. |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 62 | |
Minos Galanakis | ac6b06c | 2020-03-19 12:57:02 +0000 | [diff] [blame] | 63 | .. Note:: |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 64 | |
Minos Galanakis | 3b740a1 | 2020-10-15 11:10:26 +0100 | [diff] [blame] | 65 | - For building with Armclang compiler version 6.10.0+, please follow the note |
Anton Komlev | 3356ba3 | 2022-03-31 22:02:11 +0100 | [diff] [blame] | 66 | in :doc:`TF-M getting started </getting_started/tfm_getting_started>`. |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 67 | - For building with the IAR toolchain, please see the notes in |
Minos Galanakis | 3b740a1 | 2020-10-15 11:10:26 +0100 | [diff] [blame] | 68 | :doc:`IAR software requirements <tfm_build_instruction_iar>` |
TTornblom | b9e5ed0 | 2020-02-13 16:53:15 +0100 | [diff] [blame] | 69 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 70 | Configuring |
| 71 | =========== |
| 72 | TF-M has many config options for configuring and fine-tuning. Please check the |
| 73 | :ref:`tf-m_configuration` section for the details. The **base** (default) configuration |
| 74 | contains only essential components such as SPM and HW platform support hence the |
| 75 | only mandatory argument to TF-M build is a platform name, provided via |
| 76 | CMake command-line option ``-DTFM_PLATFORM=<platform name>``, it can be: |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 77 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 78 | - A relative path under ``<TF-M source dir>/platform/ext/target``, for example ``arm/mps2/an521``. |
| 79 | - An absolute path of target platform, mainly used for out-of-tree platform build. |
| 80 | - A basename of the target platform folder, for example ``an521``. |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 81 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 82 | Essential Directories |
| 83 | --------------------- |
| 84 | There are 3 essential directories used by CMake for building TF-M: |
| 85 | |
| 86 | - Source code directory ``<TF-M source dir>`` |
| 87 | - Build directory ``<Build Dir>`` - the location of all intermediate files required to produce |
| 88 | a build target. |
| 89 | - Install directory ``<Artifact Dir>`` - the location of the build output files. |
| 90 | |
| 91 | Note:: |
| 92 | It's recommended to use absolute paths for all directories. Relative paths may not fully work. |
| 93 | |
| 94 | .. _Toolchains: |
| 95 | |
| 96 | Toolchains |
| 97 | ---------- |
| 98 | TF-M supports 3 toolchains for cross-compiling and building the project binaries: |
| 99 | |
| 100 | - GNU - **default** |
| 101 | - ArmClang |
| 102 | - IAR |
| 103 | |
| 104 | Each toolchain has a configuration file for the compiler and linker. |
| 105 | Use ``TFM_TOOLCHAIN_FILE`` option to provide a path to a preferred toolchain file or the toolchain |
| 106 | file name. |
| 107 | The default **toolchain_GNUARM.cmake** is selected by `config_base.cmake` |
| 108 | file if the option is omitted. |
| 109 | |
| 110 | .. _Build type: |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 111 | |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 112 | Build type |
| 113 | ---------- |
Dávid Házi | e50f0a9 | 2022-07-06 14:46:01 +0200 | [diff] [blame] | 114 | By default, a MinSizeRel configuration is built. Alternate build types can be |
Chris Brand | 80266ba | 2022-01-05 09:14:52 -0800 | [diff] [blame] | 115 | specified with the ``CMAKE_BUILD_TYPE`` variable. The possible |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 116 | types are: |
| 117 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 118 | - Debug |
| 119 | - RelWithDebInfo |
| 120 | - Release |
| 121 | - MinSizeRel - **default** |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 122 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 123 | Debug symbols are added by default to all builds, but can be removed from |
| 124 | *Release* and *MinSizeRel* builds by setting ``TFM_DEBUG_SYMBOLS`` to `OFF`. |
Sebastian Bøe | b73f176 | 2021-10-28 14:23:13 +0200 | [diff] [blame] | 125 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 126 | *RelWithDebInfo*, *Release* and *MinSizeRel* all have different |
| 127 | optimizations turned on and hence will produce smaller, faster code than |
| 128 | *Debug*. *MinSizeRel* will produce the smallest code and hence is often |
| 129 | a good idea on RAM or flash-constrained systems. |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 130 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 131 | .. _Output files: |
| 132 | |
| 133 | Output files |
| 134 | ------------ |
| 135 | In a successful build, a set of files will be created in the ``<Artifact Dir>``. |
| 136 | By default, it is ``<Build Dir>\api_ns`` subfolder but you can redirect the |
| 137 | output to any location using ``CMAKE_INSTALL_PREFIX`` option. It can be an |
| 138 | absolute path or relative to your current directory. For the contents of the |
| 139 | artifact directory please refer to :ref:`Artifacts structure`. |
| 140 | |
| 141 | Other build parameters |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 142 | ---------------------- |
Anton Komlev | 2cd9153 | 2022-11-17 13:36:55 +0000 | [diff] [blame] | 143 | The full list of default options is in ``config/config_base.cmake`` and |
| 144 | explained in :ref:`tfm_cmake_configuration`. Several important options |
| 145 | are listed below. |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 146 | |
Xinyu Zhang | 5f9ffeb | 2023-03-31 11:09:45 +0800 | [diff] [blame] | 147 | +----------------------------+------------------------------------------+---------------+ |
| 148 | | Parameter | Description | Default value | |
| 149 | +============================+==========================================+===============+ |
| 150 | | BL2 | Build level 2 secure bootloader. | ON | |
| 151 | +----------------------------+------------------------------------------+---------------+ |
Xinyu Zhang | 5f9ffeb | 2023-03-31 11:09:45 +0800 | [diff] [blame] | 152 | | PROJECT_CONFIG_HEADER_FILE | User defined header file for TF-M config | | |
| 153 | +----------------------------+------------------------------------------+---------------+ |
| 154 | | TFM_ISOLATION_LEVEL | Set TFM isolation level. | 1 | |
| 155 | +----------------------------+------------------------------------------+---------------+ |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 156 | | TFM_PROFILE | See :ref:`tf-m_profiles`. | | |
Xinyu Zhang | 5f9ffeb | 2023-03-31 11:09:45 +0800 | [diff] [blame] | 157 | +----------------------------+------------------------------------------+---------------+ |
| 158 | |
| 159 | Project Config Header File |
| 160 | -------------------------- |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 161 | CMake variable ``PROJECT_CONFIG_HEADER_FILE`` can be set by a user the full path to a |
Xinyu Zhang | 5f9ffeb | 2023-03-31 11:09:45 +0800 | [diff] [blame] | 162 | configuration header file, which is used to fine-tune component options. The detailed reference |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 163 | for the project config header file is in :ref:`Header_configuration`. |
Xinyu Zhang | 5f9ffeb | 2023-03-31 11:09:45 +0800 | [diff] [blame] | 164 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 165 | Building binaries |
| 166 | ================= |
Xinyu Zhang | 5f9ffeb | 2023-03-31 11:09:45 +0800 | [diff] [blame] | 167 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 168 | The command below shows a general template for building TF-M as a typical CMake project: |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 169 | |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 170 | .. code-block:: bash |
| 171 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 172 | cmake -S <TF-M source dir> -B <Build Dir> -DTFM_PLATFORM=<platform> |
| 173 | cmake --build <Build Dir> -- install |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 174 | |
| 175 | .. Note:: |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 176 | It is recommended to clean up the build directory before re-build if the config |
| 177 | header file is updated. CMake is unable to automatically recognize the |
| 178 | dependency when the header file is defined as a macro. |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 179 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 180 | Building default configuration for an521 |
| 181 | ---------------------------------------- |
| 182 | |
| 183 | .. code-block:: bash |
| 184 | |
| 185 | cd <TF-M source dir> |
| 186 | cmake -S . -B build -DTFM_PLATFORM=arm/mps2/an521 |
| 187 | cmake --build build -- install |
| 188 | |
| 189 | The command above is intended to do: |
| 190 | - take TF-M sources in the current ``.`` folder |
| 191 | - build SPE in the ``build`` folder |
| 192 | - for **an521** platform |
| 193 | - using GNU toolchain *by default*. Use ``-DTFM_TOOLCHAIN_FILE=<toolchain file>`` |
| 194 | for alternatives as described in :ref:`Toolchains` |
| 195 | - install output files in ``build/api_ns`` folder *by default*. You can specify |
| 196 | a different directory using ``-DCMAKE_INSTALL_PREFIX=<Artifact dir>`` |
| 197 | as described in :ref:`Output files` |
| 198 | |
| 199 | .. Note:: |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 200 | It is recommended to build each different build configuration in a separate |
| 201 | build directory. |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 202 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 203 | CMake can generate code for many native build systems. TF-M is tested with |
| 204 | ``Unix Makefiles`` (default) and ``Ninja``. The ``-G`` option can specify |
| 205 | alternative generators. For example for building with Ninja in the Debug |
| 206 | :ref:`Build type` using ArmClang :ref:`Toolchains` you can use the following: |
Leonardo Sandoval | 49a558c | 2021-02-03 17:04:22 -0600 | [diff] [blame] | 207 | |
| 208 | .. code-block:: bash |
Subhasish Ghosh | bc84930 | 2021-04-08 20:21:20 +0100 | [diff] [blame] | 209 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 210 | cd <TF-M source dir> |
| 211 | cmake -S . -B build -DTFM_PLATFORM=arm/mps2/an521 -GNinja -DTFM_TOOLCHAIN_FILE=toolchain_ARMCLANG.cmake -DCMAKE_BUILD_TYPE=Debug |
| 212 | cmake --build build -- install |
Leonardo Sandoval | 49a558c | 2021-02-03 17:04:22 -0600 | [diff] [blame] | 213 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 214 | .. _Dependency management: |
Anton Komlev | b8e3af0 | 2020-08-28 10:23:57 +0100 | [diff] [blame] | 215 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 216 | Dependency management |
| 217 | ===================== |
| 218 | |
| 219 | The TF-M build system will fetch all dependencies by default with appropriate |
| 220 | versions and store them inside the build tree. In this case, the build tree |
| 221 | location is ``<build_dir>/lib/ext``. |
| 222 | |
| 223 | If you have local copies already and wish to avoid having the libraries |
| 224 | downloaded every time the build directory is deleted, then the following |
| 225 | variables can be set to the paths to the root directories of the local repos. |
| 226 | This will disable the automatic downloading for that dependencies and speed up |
| 227 | development iterations or allow usage of a dependency version different from the |
| 228 | current one. |
| 229 | Additionally, these path variables can be set in ``localrepos.cmake`` |
| 230 | file which will be included in a build if it exists. |
| 231 | This file is ignored in TF-M git settings. |
| 232 | |
| 233 | The following table lists the commonly used repos. For others, you can refer to ``lib/ext``. |
| 234 | |
| 235 | +----------------+---------------------+-----------------------------------------------------+ |
| 236 | | Dependency | Cmake variable | Git repo URL | |
| 237 | +================+=====================+=====================================================+ |
| 238 | | Mbed Crypto | MBEDCRYPTO_PATH | https://github.com/ARMmbed/mbedtls | |
| 239 | +----------------+---------------------+-----------------------------------------------------+ |
| 240 | | MCUboot | MCUBOOT_PATH | https://github.com/mcu-tools/mcuboot | |
| 241 | +----------------+---------------------+-----------------------------------------------------+ |
| 242 | | QCBOR | QCBOR_PATH | https://github.com/laurencelundblade/QCBOR.git | |
| 243 | +----------------+---------------------+-----------------------------------------------------+ |
| 244 | |
| 245 | The recommended versions of the dependencies are listed in ``config/config_base.cmake``. |
| 246 | |
| 247 | .. Note:: |
| 248 | |
| 249 | - Some repositories might need patches to allow building it as a part of TF-M. |
| 250 | While these patches are being upstreamed they are stored in a |
| 251 | dependency folder under ``lib/ext/``. |
| 252 | In order to use local repositories those patches shall be applied to original source. |
| 253 | An alternative is to copy out the auto-downloaded repos under the ``<build_dir>/lib/ext``. |
| 254 | They have been applied with patches and can be used directly. |
| 255 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 256 | Example: building TF-M with local Mbed Crypto repo |
| 257 | -------------------------------------------------- |
| 258 | |
| 259 | Preparing a local repository consists of 2 steps: cloning and patching. |
| 260 | This is only required to be done once. For dependencies without ``.patch`` |
| 261 | files in their ``lib/ext`` directory the only required step is |
| 262 | cloning the repo and checking out the correct branch. |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 263 | |
| 264 | .. code-block:: bash |
| 265 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 266 | cd <Mbed Crypto base folder> |
| 267 | git clone https://github.com/ARMmbed/mbedtls |
| 268 | cd mbedtls |
| 269 | git checkout <MBEDCRYPTO_VERSION from <TF-M source dir>/config_base.cmake> |
| 270 | git apply <TF-M source dir>/lib/ext/mbedcrypo/*.patch |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 271 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 272 | .. Note:: |
| 273 | |
| 274 | ``<Mbed Crypto base folder>`` does not need to have any fixed position related |
| 275 | to the TF-M repo so alternative method to get prepared dependency repos is to |
| 276 | let TF-M download it once and then copy them out of the ``build/lib/ext`` folder. |
| 277 | |
| 278 | Now build TF-M binaries |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 279 | |
| 280 | .. code-block:: bash |
| 281 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 282 | cd <TF-M source dir> |
| 283 | cmake -S . -B build -DTFM_PLATFORM=arm/mps2/an521 -DMBEDCRYPTO_PATH=<Mbed Crypto base folder>/mbedtls |
| 284 | cmake --build build -- install |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 285 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 286 | .. _Building NSPE: |
| 287 | |
| 288 | *************************** |
| 289 | Building Application (NSPE) |
| 290 | *************************** |
| 291 | |
| 292 | As a result of :ref:`Building SPE` you will get a set of :ref:`Output files` in |
| 293 | ``<Artifact Dir>`` required for building TF-M application. Essentially, SPE |
| 294 | exports a binary and a set of C source files for PSA interface and platform. |
| 295 | Please note that NSPE and SPE are independent projects and can be built using |
| 296 | different toolchains and toolchain options. |
| 297 | |
| 298 | .. _Artifacts structure: |
| 299 | |
| 300 | SPE artifacts structure |
Kevin Peng | 23a583c | 2021-09-08 22:33:33 +0800 | [diff] [blame] | 301 | ======================= |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 302 | |
| 303 | SPE components prepared and installed for NSPE usage in ``<Artifact Dir>`` |
| 304 | will have the following structure: |
| 305 | |
| 306 | .. code-block:: none |
| 307 | |
| 308 | <Artifact Dir> |
| 309 | ├── bin |
| 310 | ├── cmake |
| 311 | ├── config |
| 312 | ├── image_signing |
| 313 | ├── interface |
| 314 | ├── platform |
| 315 | └── CMakeLists.txt |
| 316 | |
| 317 | With certain configurations, additional folders may also be installed. |
| 318 | These folders have the following content: |
| 319 | |
| 320 | - **bin** - binary images of SPE, Bootloader(optional) and combined. |
| 321 | - **cmake** - CMake scripts like SPE configuration and :ref:`NSPE toolchains`. |
| 322 | - **config** - Configuration files |
| 323 | - **image_signing** - binary image signing tool and keys. |
| 324 | - **interface** - PSA interface exposed by SPE. |
| 325 | - **platform** - source code for a selected hardware platform. |
| 326 | - **CMakeLists.txt** - CMake script for the artifacts integration in NSPE. |
| 327 | |
Kevin Peng | 304e268 | 2023-11-06 14:10:50 +0800 | [diff] [blame^] | 328 | The content of ``<Artifact Dir>`` is a prepared directory for integration with CMake projects. |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 329 | |
| 330 | .. _NSPE toolchains: |
| 331 | |
| 332 | NSPE toolchains |
| 333 | =============== |
| 334 | |
| 335 | SPE prepares and exports CMake toolchain files for building NSPE in all |
| 336 | supported :ref:`Toolchains` in ``<Artifact Dir>/cmake`` folder. |
| 337 | Toolchain used to build NSPE can be different from what is used to build SPE. |
| 338 | |
Anton Komlev | 4b1c05c | 2023-10-06 20:22:58 +0100 | [diff] [blame] | 339 | Basic SPE integration |
| 340 | ===================== |
Kevin Peng | 304e268 | 2023-11-06 14:10:50 +0800 | [diff] [blame^] | 341 | Refer to the |
| 342 | `example <https://git.trustedfirmware.org/TF-M/tf-m-extras.git/tree/examples/tf-m-example-ns-app>`__ |
| 343 | of TF-M applications in **tf-m-extras** repository. |
Raef Coles | 1ecb813 | 2020-10-02 15:11:24 +0100 | [diff] [blame] | 344 | |
Gyorgy Szing | db9783c | 2019-04-17 21:08:48 +0200 | [diff] [blame] | 345 | -------------- |
| 346 | |
Xinyu Zhang | 5f9ffeb | 2023-03-31 11:09:45 +0800 | [diff] [blame] | 347 | *Copyright (c) 2017-2023, Arm Limited. All rights reserved.* |
Chris Brand | 80266ba | 2022-01-05 09:14:52 -0800 | [diff] [blame] | 348 | *Copyright (c) 2022, Cypress Semiconductor Corporation. All rights reserved.* |