blob: 62521ff578a612e7059a5164f9ff2852a3dd8fe9 [file] [log] [blame]
Galanakis, Minos41f85972019-09-30 15:56:40 +01001##################
2Build instructions
3##################
Anton Komlev0dbe8f12022-06-17 16:48:12 +01004
Gyorgy Szingdb9783c2019-04-17 21:08:48 +02005Please make sure you have all required software installed as explained in the
Anton Komlev3356ba32022-03-31 22:02:11 +01006:doc:`TF-M getting started </getting_started/tfm_getting_started>`.
Anton Komlev91281f02022-04-22 09:24:20 +01007The additional building materials you can find in the following links:
8
9.. toctree::
10 :maxdepth: 1
11
Anton Komlev91281f02022-04-22 09:24:20 +010012 Run TF-M examples <run_tfm_examples_on_arm_platforms>
Anton Komlev0dbe8f12022-06-17 16:48:12 +010013 Building the documentation <documentation_generation>
14 IAR toolchain <tfm_build_instruction_iar>
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020015
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020016****************
17TF-M build steps
18****************
19TF-M uses `cmake <https://cmake.org/overview/>`__ to provide an out-of-source
20build environment. The instructions are below.
21
Raef Coles69817322020-10-19 14:14:14 +010022Cmake version ``3.15.0`` or higher is required.
Raef Coles1ecb8132020-10-02 15:11:24 +010023
David Wangd6fd6af2021-06-21 17:17:26 +080024.. _Getting the source-code:
25
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020026Getting the source-code
27=======================
28.. code-block:: bash
29
Leonardo Sandovald7f72d52020-07-28 18:02:34 -050030 cd <base folder>
Minos Galanakis0f39fa52020-06-08 16:53:53 +010031 git clone https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git
Anton Komlevb8e3af02020-08-28 10:23:57 +010032
Leonardo Sandoval98350142021-02-03 16:32:14 -060033To simplify documentation commands, the new created repository under
34``trusted-firmware-m`` would be referenced as ``<TF-M base folder>`` and
35its parent, the ``<base folder>``. Dependency management is now handled by
36cmake. If you wish to alter this behaviour, see
Anton Komlev0dbe8f12022-06-17 16:48:12 +010037:ref:`building/tfm_build_instruction:Manual dependency management`
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020038
Minos Galanakisac6b06c2020-03-19 12:57:02 +000039.. Note::
Anton Komlevb8e3af02020-08-28 10:23:57 +010040
Minos Galanakis3b740a12020-10-15 11:10:26 +010041 - For building with Armclang compiler version 6.10.0+, please follow the note
Anton Komlev3356ba32022-03-31 22:02:11 +010042 in :doc:`TF-M getting started </getting_started/tfm_getting_started>`.
Anton Komlevb8e3af02020-08-28 10:23:57 +010043 - For building with the IAR toolchain, please see the notes in
Minos Galanakis3b740a12020-10-15 11:10:26 +010044 :doc:`IAR software requirements <tfm_build_instruction_iar>`
TTornblomb9e5ed02020-02-13 16:53:15 +010045
Anton Komlevb8e3af02020-08-28 10:23:57 +010046.. _tfm_cmake_configuration:
47
48Cmake configuration
49===================
50
51All configuration options are provided by cmake variables, and their default
52values, with docstrings, can be found in ``config/config_default.cmake``.
53
Tamas Ban69219202020-10-27 08:13:18 +000054Configuration is provided in multiple stages. Each stage will not override any
55config that has already been set at any of the prior stages.
Anton Komlevb8e3af02020-08-28 10:23:57 +010056
Tamas Ban69219202020-10-27 08:13:18 +000057 1. Command-line variable settings are applied.
58 2. If the ``TFM_EXTRA_CONFIG_PATH`` variable has been set, that file is
Soby Mathew7b7e1242020-10-07 13:31:56 +010059 loaded.
Tamas Ban69219202020-10-27 08:13:18 +000060 3. If TEST_PSA_TEST is set, then PSA API test related config is applied from
61 ``config/tests/config_test_psa_api.cmake``.
62 4. If it exists, CMAKE_BUILD_TYPE specific config is applied from
63 ``config/build_type/<build_type>.cmake``.
64 5. Target specific config from ``platform/ext/target/<target_platform>/config.cmake``
65 is applied.
66 6. If CRYPTO_HW_ACCELERATOR is set, then a config specific to the
67 accelerator type is applied if it exists.
68 7. If it exists, TFM Profile specific config is applied from
69 ``config/profile/<tfm_profile>.cmake``.
70 8. ``config/config_default.cmake`` is loaded.
shejia01bfd37122021-06-03 13:31:51 +080071 9. If ``TEST_S`` or ``TEST_NS`` or other single test suite config like
72 ``TEST_NS_ATTESTATION`` (see `Regression test configuration`_)is set, then
73 config from ``${TFM_TEST_REPO_PATH}/test/config/set_config.cmake`` and
74 ``${TFM_TEST_REPO_PATH}/test/config/default_ns_test_config.cmake`` or
75 ``${TFM_TEST_REPO_PATH}/test/config/default_s_test_config.cmake`` or
76 ``${TFM_TEST_REPO_PATH}/test/config/default_test_config.cmake`` is
77 applied.
Anton Komlevb8e3af02020-08-28 10:23:57 +010078
79.. Warning::
80 This means that command-line settings are not applied when they conflict
81 with required platform settings. If it is required to override platform
82 settings (this is not usually a good idea) then TFM_EXTRA_CONFIG_PATH should be
83 used.
84
85Required cmake parameters for building TF-M
86-------------------------------------------
87
Jianliang Shen2628db72022-03-17 10:13:06 +080088``TFM_PLATFORM`` is required to select the target platform, it can be:
89 - A relative path under ``<TF-M_root>/platform/ext/target``,
90 for example ``arm/mps2/an521``.
91 - An absolute path of target platform, mainly used for out-of-tree platform
92 build.
93 - A target platform name that is supported under
94 <TF-M_root>/platform/ext/target, for example ``an521``.
Anton Komlevb8e3af02020-08-28 10:23:57 +010095
Anton Komlevb8e3af02020-08-28 10:23:57 +010096Build type
97----------
98
Dávid Házie50f0a92022-07-06 14:46:01 +020099By default, a MinSizeRel configuration is built. Alternate build types can be
Chris Brand80266ba2022-01-05 09:14:52 -0800100specified with the ``CMAKE_BUILD_TYPE`` variable. The possible
Anton Komlevb8e3af02020-08-28 10:23:57 +0100101types are:
102
103 - ``Debug``
Sebastian Bøeb73f1762021-10-28 14:23:13 +0200104 - ``RelWithDebInfo``
Anton Komlevb8e3af02020-08-28 10:23:57 +0100105 - ``Release``
Sebastian Bøeb73f1762021-10-28 14:23:13 +0200106 - ``MinSizeRel``
Anton Komlevb8e3af02020-08-28 10:23:57 +0100107
Dávid Házie50f0a92022-07-06 14:46:01 +0200108``MinSizeRel`` is default.
Anton Komlevb8e3af02020-08-28 10:23:57 +0100109
Sebastian Bøeb73f1762021-10-28 14:23:13 +0200110Debug symbols are added by default to all builds, but can be removed
111from ``Release`` and ``MinSizeRel`` builds by setting
112``TFM_DEBUG_SYMBOLS`` to ``OFF``.
113
114``RelWithDebInfo``, ``Release`` and ``MinSizeRel`` all have different
115optimizations turned on and hence will produce smaller, faster code
116than ``Debug``. ``MinSizeRel`` will produce the smallest code, and
117hence is often a good idea on RAM or flash constrained systems.
Anton Komlevb8e3af02020-08-28 10:23:57 +0100118
119Other cmake parameters
120----------------------
121
122The full list of default options is in ``config/config_default.cmake``. Several
123important options are listed below.
124
125
126+---------------------+----------------------------------------+---------------+
127| Parameter | Description | Default value |
128+=====================+========================================+===============+
129| BL2 | Build level 2 secure bootloader. | ON |
130+---------------------+----------------------------------------+---------------+
131| NS | Build NS app. Required for test code. | ON |
132+---------------------+----------------------------------------+---------------+
Kevin Peng23a583c2021-09-08 22:33:33 +0800133| TFM_LIB_MODEL | Use secure library model instead of | OFF |
134| | PSA api (IPC model). | |
Anton Komlevb8e3af02020-08-28 10:23:57 +0100135+---------------------+----------------------------------------+---------------+
136| TFM_ISOLATION_LEVEL | Set TFM isolation level. | 1 |
137+---------------------+----------------------------------------+---------------+
138| TFM_PROFILE | Set TFM profile. | |
139+---------------------+----------------------------------------+---------------+
140| TEST_S | Build secure regression tests. | OFF |
141+---------------------+----------------------------------------+---------------+
142| TEST_NS | Build non-secure regression tests. | OFF |
143+---------------------+----------------------------------------+---------------+
144| TEST_PSA_API | Build PSA API TESTS for the given | |
145| | suite. Takes a PSA api ``SUITE`` as an | |
146| | argument (``CRYPTO`` etc). | |
147+---------------------+----------------------------------------+---------------+
148
149Regression test configuration
150-----------------------------
151
shejia01bfd37122021-06-03 13:31:51 +0800152Regression test configuration is controlled entirely by ``TEST_NS`` or
153``TEST_S`` or single test suite configuration. The group test
154configurations and single test suite configurations are listed below, all of
155them are disabled by default.
156
157+---------------------+--------------------------------------------------------------------+
158| Parameter | Description |
159+=====================+====================================================================+
160| TEST_NS_ATTESTATION | Build non-secure regression Attestation tests. |
161+---------------------+--------------------------------------------------------------------+
162| TEST_NS_T_COSE | Build non-secure regression t_cose tests. |
163+---------------------+--------------------------------------------------------------------+
164| TEST_NS_QCBOR | Build non-secure regression QCBOR tests. |
165+---------------------+--------------------------------------------------------------------+
166| TEST_NS_AUDIT | Build non-secure regression Audit log tests. |
167+---------------------+--------------------------------------------------------------------+
168| TEST_NS_CORE | Build non-secure regression Core tests. |
169+---------------------+--------------------------------------------------------------------+
170| TEST_NS_CRYPTO | Build non-secure regression Crypto tests. |
171+---------------------+--------------------------------------------------------------------+
172| TEST_NS_ITS | Build non-secure regression ITS tests. |
173+---------------------+--------------------------------------------------------------------+
174| TEST_NS_PS | Build non-secure regression PS tests. |
175+---------------------+--------------------------------------------------------------------+
176| TEST_NS_PLATFORM | Build non-secure regression Platform tests. |
177+---------------------+--------------------------------------------------------------------+
178| TEST_NS_FWU | Build non-secure regression FWU tests. |
179+---------------------+--------------------------------------------------------------------+
180| TEST_NS_IPC | Build non-secure regression IPC tests. |
181+---------------------+--------------------------------------------------------------------+
182| TEST_NS_SLIH_IRQ | Build non-secure regression Second-Level Interrupt Handling tests. |
183+---------------------+--------------------------------------------------------------------+
184| TEST_NS_FLIH_IRQ | Build non-secure regression First-Level Interrupt Handling tests. |
185+---------------------+--------------------------------------------------------------------+
186| TEST_NS_MULTI_CORE | Build non-secure regression multi-core tests. |
187+---------------------+--------------------------------------------------------------------+
188| TEST_S_ATTESTATION | Build secure regression Attestation tests. |
189+---------------------+--------------------------------------------------------------------+
190| TEST_S_AUDIT | Build secure regression Audit log tests. |
191+---------------------+--------------------------------------------------------------------+
192| TEST_S_CRYPTO | Build secure regression Crypto tests. |
193+---------------------+--------------------------------------------------------------------+
194| TEST_S_ITS | Build secure regression ITS tests. |
195+---------------------+--------------------------------------------------------------------+
196| TEST_S_PS | Build secure regression PS tests. |
197+---------------------+--------------------------------------------------------------------+
198| TEST_S_PLATFORM | Build secure regression Platform tests. |
199+---------------------+--------------------------------------------------------------------+
200| TEST_S_FWU | Build secure regression FWU tests. |
201+---------------------+--------------------------------------------------------------------+
202| TEST_S_IPC | Build secure regression IPC tests. |
203+---------------------+--------------------------------------------------------------------+
204
Chris Brand80266ba2022-01-05 09:14:52 -0800205Individual test suites can be enabled when their dependencies like partitions or
shejia01bfd37122021-06-03 13:31:51 +0800206other specific configurations are set. On the one hand, some test suites depend
Chris Brand80266ba2022-01-05 09:14:52 -0800207on other test suites. On the other hand, some test suites conflict with
shejia01bfd37122021-06-03 13:31:51 +0800208other test suites. Test configurations and dependencies will be
209checked in ``${TFM_TEST_REPO_PATH}/test/config/check_config.cmake``.
Anton Komlevb8e3af02020-08-28 10:23:57 +0100210
Chris Brand80266ba2022-01-05 09:14:52 -0800211If regression testing is enabled by ``TEST_NS`` or ``TEST_S``, individual
212test suites will be enabled or disabled as appropriate for the TF-M
213configuration (i.e. all enabled secure partitions will be tested).
Anton Komlevb8e3af02020-08-28 10:23:57 +0100214
215Some cryptographic tests can be enabled and disabled. This is done to prevent
216false failures from being reported when a smaller Mbed Crypto config is being
217used which does not support all features.
218
Summer Qin32e41f52022-06-08 15:37:13 +0800219+---------------------------------------+---------------------------------------+---------------+
220| Parameter | Description | Default value |
221+=======================================+=======================================+===============+
222| TFM_CRYPTO_TEST_ALG_CBC | Test CBC cryptography mode | ON |
223+---------------------------------------+---------------------------------------+---------------+
224| TFM_CRYPTO_TEST_ALG_CCM | Test CCM cryptography mode | ON |
225+---------------------------------------+---------------------------------------+---------------+
226| TFM_CRYPTO_TEST_ALG_CFB | Test CFB cryptography mode | ON |
227+---------------------------------------+---------------------------------------+---------------+
228| TFM_CRYPTO_TEST_ALG_ECB | Test ECB cryptography mode | ON |
229+---------------------------------------+---------------------------------------+---------------+
230| TFM_CRYPTO_TEST_ALG_CTR | Test CTR cryptography mode | ON |
231+---------------------------------------+---------------------------------------+---------------+
232| TFM_CRYPTO_TEST_ALG_OFB | Test OFB cryptography mode | ON |
233+---------------------------------------+---------------------------------------+---------------+
234| TFM_CRYPTO_TEST_ALG_GCM | Test GCM cryptography mode | ON |
235+---------------------------------------+---------------------------------------+---------------+
236| TFM_CRYPTO_TEST_ALG_SHA_384 | Test SHA-384 cryptography algorithm | ON |
237+---------------------------------------+---------------------------------------+---------------+
238| TFM_CRYPTO_TEST_ALG_SHA_512 | Test SHA-512 cryptography algorithm | ON |
239+---------------------------------------+---------------------------------------+---------------+
240| TFM_CRYPTO_TEST_HKDF | Test HKDF key derivation algorithm | ON |
241+---------------------------------------+---------------------------------------+---------------+
242| TFM_CRYPTO_TEST_ECDH | Test ECDH key agreement algorithm | ON |
243+---------------------------------------+---------------------------------------+---------------+
244| TFM_CRYPTO_TEST_CHACHA20 | Test ChaCha20 stream cipher | ON |
245+---------------------------------------+---------------------------------------+---------------+
246| TFM_CRYPTO_TEST_ALG_CHACHA20_POLY1305 | Test ChaCha20-Poly1305 AEAD algorithm | ON |
247+---------------------------------------+---------------------------------------+---------------+
Anton Komlevb8e3af02020-08-28 10:23:57 +0100248
Anton Komlev211aacf2020-11-02 12:48:11 +0000249TF-M Profiles
250-------------
251
252TF-M Profiles are implemented as a single cmake configuration file, under the
253``config/profile`` directory. A good understanding can be gained quickly by
254looking at the Profile configuration files, but the ultimate reference for
Summer Qinabf66982021-04-06 17:22:15 +0800255Profiles are the design documents in the ``docs/technical_references/profiles/``
Anton Komlev211aacf2020-11-02 12:48:11 +0000256directory.
Anton Komlevb8e3af02020-08-28 10:23:57 +0100257
258PSA test configuration
259----------------------
260
261PSA tests are configured by using the ``TEST_PSA_API`` cmake variable. The
262variable should be set to the name of the test suite that is desired. It is
263_not_ supported to set both ``TEST_PSA_API`` and ``TEST_S`` or ``TEST_NS``.
264
Jamie Fox19c91c22019-02-10 18:04:58 +0000265The Functional API tests are:
Anton Komlevb8e3af02020-08-28 10:23:57 +0100266 - ``CRYPTO``
267 - ``INITIAL_ATTESTATION``
268 - ``STORAGE`` (INTERNAL_TRUSTED_STORAGE and PROTECTED_STORAGE)
269 - ``INTERNAL_TRUSTED_STORAGE``
270 - ``PROTECTED_STORAGE``
271
Jamie Fox19c91c22019-02-10 18:04:58 +0000272The Firmware Framework test suites are:
Anton Komlevb8e3af02020-08-28 10:23:57 +0100273 - ``IPC``
274
275Note that these map directly to the ``SUITE`` cmake variable used in the
276psa-arch-tests documentation.
277
David Wangd6fd6af2021-06-21 17:17:26 +0800278.. _Migration from legacy buildsystem:
279
Anton Komlevb8e3af02020-08-28 10:23:57 +0100280Migration from legacy buildsystem
281---------------------------------
282
283The previous (legacy) cmake buildsystem made use of separate configuration
284files, where now build options are controlled by variables. For ease of
285transition, a table below is provided that maps the legacy files to the current
286variables, in the format of cmake command line parameters.
287
Summer Qin001ce9d2020-11-04 14:41:54 +0800288+------------------------------------------+---------------------------------------+
289| File | Cmake command line |
290+==========================================+=======================================+
Kevin Peng23a583c2021-09-08 22:33:33 +0800291| ConfigDefault.cmake | -DTFM_LIB_MODEL=ON |
Summer Qin001ce9d2020-11-04 14:41:54 +0800292+------------------------------------------+---------------------------------------+
Kevin Peng23a583c2021-09-08 22:33:33 +0800293| ConfigCoreIPC.cmake | <no options> |
Summer Qin001ce9d2020-11-04 14:41:54 +0800294+------------------------------------------+---------------------------------------+
Kevin Peng23a583c2021-09-08 22:33:33 +0800295| ConfigCoreIPCTfmLevel2.cmake | -DTFM_ISOLATION_LEVEL=2 |
Summer Qin001ce9d2020-11-04 14:41:54 +0800296+------------------------------------------+---------------------------------------+
297| ConfigDefaultProfileS.cmake | -DTFM_PROFILE=profile_small |
298+------------------------------------------+---------------------------------------+
299| ConfigDefaultProfileM.cmake | -DTFM_PROFILE=profile_medium |
300+------------------------------------------+---------------------------------------+
301| ConfigRegression.cmake | -DTEST_NS=ON -DTEST_S=ON |
302+------------------------------------------+---------------------------------------+
303| ConfigRegressionIPC.cmake | -DTEST_NS=ON -DTEST_S=ON |
Summer Qin001ce9d2020-11-04 14:41:54 +0800304+------------------------------------------+---------------------------------------+
305| ConfigRegressionIPCTfmLevel2.cmake | -DTEST_NS=ON -DTEST_S=ON |
Summer Qin001ce9d2020-11-04 14:41:54 +0800306| | -DTFM_ISOLATION_LEVEL=2 |
307+------------------------------------------+---------------------------------------+
308| ConfigRegressionProfileS.cmake | -DTFM_PROFILE=profile_small |
309| | -DTEST_NS=ON -DTEST_S=ON |
310+------------------------------------------+---------------------------------------+
311| ConfigRegressionProfileM.cmake | -DTFM_PROFILE=profile_medium |
312| | -DTEST_NS=ON -DTEST_S=ON |
313+------------------------------------------+---------------------------------------+
314| ConfigPsaApiTest.cmake | -DTEST_PSA_API=<test_suite> |
315+------------------------------------------+---------------------------------------+
316| ConfigPsaApiTestIPC.cmake | -DTEST_PSA_API=<test_suite> |
Summer Qin001ce9d2020-11-04 14:41:54 +0800317+------------------------------------------+---------------------------------------+
318| ConfigPsaApiTestIPCTfmLevel2.cmake | -DTEST_PSA_API=<test_suite> |
Summer Qin001ce9d2020-11-04 14:41:54 +0800319| | -DTFM_ISOLATION_LEVEL=2 |
320+------------------------------------------+---------------------------------------+
321| ConfigDefaultProfileM.cmake | -DTFM_PROFILE=profile_medium |
322| + profile_m_config_ext_ps_disabled.cmake | -DTFM_PARTITION_PROTECTED_STORAGE=OFF |
323+------------------------------------------+---------------------------------------+
Anton Komlevb8e3af02020-08-28 10:23:57 +0100324
325There has also been some changes to the PSA manifest file generation. The files
Chris Brand80266ba2022-01-05 09:14:52 -0800326are now generated into a separate tree in the ``<tfm build dir>/generated``
Anton Komlevb8e3af02020-08-28 10:23:57 +0100327directory. Therefore they have been removed from the source tree. Any changes
328should be made only to the template files.
329
Chris Brand80266ba2022-01-05 09:14:52 -0800330The API for the ``tools/tfm_parse_manifest_list.py`` script has also changed
Anton Komlevb8e3af02020-08-28 10:23:57 +0100331slightly. It is no longer required to be run manually as it is run as part of
332cmake.
333
334*******************
335TF-M build examples
336*******************
337
338Example: building TF-M for AN521 platform using GCC:
339====================================================
340.. code-block:: bash
341
Leonardo Sandoval98350142021-02-03 16:32:14 -0600342 cd <TF-M base folder>
Chris Brand80266ba2022-01-05 09:14:52 -0800343 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521
Anton Komlevb8e3af02020-08-28 10:23:57 +0100344 cmake --build cmake_build -- install
345
346Alternately using traditional cmake syntax
347
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200348.. code-block:: bash
349
Leonardo Sandoval98350142021-02-03 16:32:14 -0600350 cd <TF-M base folder>
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200351 mkdir cmake_build
352 cd cmake_build
Chris Brand80266ba2022-01-05 09:14:52 -0800353 cmake .. -DTFM_PLATFORM=arm/mps2/an521
Anton Komlevb8e3af02020-08-28 10:23:57 +0100354 make install
355
356.. Note::
Anton Komlevb8e3af02020-08-28 10:23:57 +0100357
358 It is recommended to build each different build configuration in a separate
359 build directory.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200360
Chris Brand80266ba2022-01-05 09:14:52 -0800361The default build uses Unix Makefiles. The ``-G`` option can be used to change
362this. The default build uses the GNU ARM toolchain and creates a Release build.
363These options can be overridden using the ``TFM_TOOLCHAIN_FILE`` and
364``CMAKE_BUILD_TYPE`` parameters, as shown below
Leonardo Sandoval49a558c2021-02-03 17:04:22 -0600365
366.. code-block:: bash
Subhasish Ghoshbc849302021-04-08 20:21:20 +0100367
Leonardo Sandoval49a558c2021-02-03 17:04:22 -0600368 cd <TF-M base folder>
Chris Brand80266ba2022-01-05 09:14:52 -0800369 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 -GNinja -DTFM_TOOLCHAIN_FILE=toolchain_ARMCLANG.cmake -DCMAKE_BUILD_TYPE=Debug
Leonardo Sandoval49a558c2021-02-03 17:04:22 -0600370 cmake --build cmake_build -- install
371
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200372Regression Tests for the AN521 target platform
373==============================================
Anton Komlevb8e3af02020-08-28 10:23:57 +0100374
375Regression tests can be build by using the TEST_S and TEST_NS settings. Either
376can be used in isolation or both can be used to enable both suites. All tests
377for all enabled partitions are run, along with IPC and Multicore tests if those
378features are enabled.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200379
380.. code-block:: bash
381
Leonardo Sandoval98350142021-02-03 16:32:14 -0600382 cd <TF-M base folder>
Summer Qin2de23d02021-05-14 13:44:14 +0800383 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 -DTEST_S=ON -DTEST_NS=ON
Anton Komlevb8e3af02020-08-28 10:23:57 +0100384 cmake --build cmake_build -- install
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200385
Anton Komlevb8e3af02020-08-28 10:23:57 +0100386Alternately using traditional cmake syntax
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200387
388.. code-block:: bash
389
Leonardo Sandoval98350142021-02-03 16:32:14 -0600390 cd <TF-M base folder>
Anton Komlevb8e3af02020-08-28 10:23:57 +0100391 mkdir cmake_build
392 cd cmake_build
Summer Qin2de23d02021-05-14 13:44:14 +0800393 cmake .. -DTFM_PLATFORM=arm/mps2/an521 -DTEST_S=ON -DTEST_NS=ON
Anton Komlevb8e3af02020-08-28 10:23:57 +0100394 make install
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200395
Kevin Peng23a583c2021-09-08 22:33:33 +0800396Build for PSA API tests
397=======================
Anton Komlevb8e3af02020-08-28 10:23:57 +0100398The build system provides support for building and integrating the PSA API tests
399from https://github.com/ARM-software/psa-arch-tests. PSA API tests are
400controlled using the TEST_PSA_API variable. Enabling both regression tests and
401PSA API tests simultaneously is **not** supported.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200402
Anton Komlevb8e3af02020-08-28 10:23:57 +0100403The value of the TEST_PSA_API variable is the suite to be run.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200404
Subhasish Ghoshbc849302021-04-08 20:21:20 +0100405.. code-block:: bash
Anton Komlevb8e3af02020-08-28 10:23:57 +0100406
407 -DTEST_PSA_API=INTERNAL_TRUSTED_STORAGE
408 -DTEST_PSA_API=PROTECTED_STORAGE
409 -DTEST_PSA_API=STORAGE
410 -DTEST_PSA_API=CRYPTO
411 -DTEST_PSA_API=INITIAL_ATTESTATION
412
413Respectively for the corresponding service. For example, to enable the PSA API
414tests for the Crypto service:
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200415
416.. code-block:: bash
417
Leonardo Sandoval98350142021-02-03 16:32:14 -0600418 cd <TF-M base folder>
Summer Qin2de23d02021-05-14 13:44:14 +0800419 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 -DTEST_PSA_API=CRYPTO
Anton Komlevb8e3af02020-08-28 10:23:57 +0100420 cmake --build cmake_build -- install
421
422Alternately using traditional cmake syntax
423
424.. code-block:: bash
425
Leonardo Sandoval98350142021-02-03 16:32:14 -0600426 cd <TF-M base folder>
Anton Komlevb8e3af02020-08-28 10:23:57 +0100427 mkdir cmake_build
428 cd cmake_build
Summer Qin2de23d02021-05-14 13:44:14 +0800429 cmake .. -DTFM_PLATFORM=arm/mps2/an521 -DTEST_PSA_API=CRYPTO
Anton Komlevb8e3af02020-08-28 10:23:57 +0100430 make install
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200431
432Location of build artifacts
433===========================
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200434
Anton Komlevb8e3af02020-08-28 10:23:57 +0100435All build artifacts are provided in the ``<build_dir>/bin`` directory. It is
436**not** required to run ``make install`` to generate artifacts in this location.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200437
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200438
Anton Komlevb8e3af02020-08-28 10:23:57 +0100439For the purposes of maintaining compatibility with the legacy cmake build
440system, they are also provided in
441``<build_dir>/install/outputs/<target_platform>/``. In order to generate the
442artifacts in this location ``make install`` must be run.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200443
Anton Komlevb8e3af02020-08-28 10:23:57 +0100444****************************
445Manual dependency management
446****************************
Galanakis, Minos757139a2019-11-11 15:00:11 +0000447
Raef Coles1ecb8132020-10-02 15:11:24 +0100448The TF-M build system will by default fetch all dependencies with appropriate
449versions and store them inside the build tree. In this case, the build tree
450location is ``<build_dir>/lib/ext``, and the extra libraries can be cleaned by
451deleting that directory.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000452
Raef Coles1ecb8132020-10-02 15:11:24 +0100453If you have local copies already, and wish to avoid having the libraries
454downloaded every time the build directory is deleted, then the following
Raef Colesc630b882020-12-10 15:46:18 +0000455variables can be set to the path to the root directory of the local repo. This
456will disable the automatic downloading for that dependency.
Raef Coles1ecb8132020-10-02 15:11:24 +0100457
Raef Colesc630b882020-12-10 15:46:18 +0000458+----------------+---------------------+-----------------------------------------------------+
459| Dependency | Cmake variable | Git repo URL |
460+================+=====================+=====================================================+
461| Mbed Crypto | MBEDCRYPTO_PATH | https://github.com/ARMmbed/mbedtls |
462+----------------+---------------------+-----------------------------------------------------+
463| tf-m-tests | TFM_TEST_REPO_PATH | https://git.trustedfirmware.org/TF-M/tf-m-tests.git |
464+----------------+---------------------+-----------------------------------------------------+
465| MCUboot | MCUBOOT_PATH | https://github.com/mcu-tools/mcuboot |
466+----------------+---------------------+-----------------------------------------------------+
467| psa-arch-tests | PSA_ARCH_TESTS_PATH | https://github.com/ARM-software/psa-arch-tests |
468+----------------+---------------------+-----------------------------------------------------+
Galanakis, Minos757139a2019-11-11 15:00:11 +0000469
Anton Komlevb8e3af02020-08-28 10:23:57 +0100470For required versions of the dependencies, refer to ``config/config_default.cmake``.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000471
472.. Note::
Anton Komlevb8e3af02020-08-28 10:23:57 +0100473 - Some patches are required to the mbedtls repo to allow building it as part of
474 TF-M. While these patches are being upstreamed they are stored in
Raef Coles1ecb8132020-10-02 15:11:24 +0100475 ``lib/ext/mbedcrypo``. In order to use a local copy of Mbed Crypto it is
476 required to apply all patch files in this directory.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000477
Anton Komlevb8e3af02020-08-28 10:23:57 +0100478.. Note::
479 - CMSIS 5 is provided by the TF-M tests repo. If you wish to use a different
480 source for CMSIS 5, it can be configured using CMSIS_5_PATH.
David Hu2cbf5df2020-06-15 10:41:44 +0800481
Kevin Pengcba37d32020-12-07 17:07:39 +0800482TF-M Tests
483==========
484
485Dependency auto downloading is used by default.
486The TF-M build system downloads the tf-m-tests repo with a fixed version
David Huf89bcb62021-09-06 15:02:34 +0800487specified by ``TFM_TEST_REPO_VERSION`` in
488:file:`lib/ext/tf-m-tests/repo_config_default.cmake`.
Kevin Pengcba37d32020-12-07 17:07:39 +0800489The version can be a release tag or a commit hash.
490
491Developers who want a different version of tf-m-tests can override
492``TFM_TEST_REPO_PATH`` to a local copy with the desired version.
493
David Huf89bcb62021-09-06 15:02:34 +0800494As the test repo is part of the TF-M project and coupled with TF-M repo,
495the version should be updated when there are dependency changes between the TF-M
Kevin Pengcba37d32020-12-07 17:07:39 +0800496repo and the test repo and when there is a complete change merged in test repo.
497
498A complete change is one or more patches that are for the same purpose, for
499example a new test suite or enhancements on the test cases.
500Patches in one change can be merge individually provided they do not break
501anything or cause any regressions.
502But the version in the TF-M gets updated only when all the patches are merged.
503
Raef Coles1ecb8132020-10-02 15:11:24 +0100504Example: building TF-M for AN521 platform with local Mbed Crypto
505================================================================
506
507Prepare Mbed Crypto repository
508------------------------------
509
510This is only required to be done once. For dependencies that do not have any
511``.patch`` files in their ``lib/ext`` directory the only required step is
512cloning the repo and checking out the correct branch.
513
514.. code-block:: bash
515
516 cd <Mbed Crypto base folder>
517 git clone https://github.com/ARMmbed/mbedtls
518 cd mbedtls
519 git checkout <MBEDCRYPTO_VERSION from config_default.cmake>
520 git apply <TF-M base folder>/trusted-firmware-m/lib/ext/mbedcrypo/*.patch
521
522.. Note::
523 - <Mbed Crypto base folder> does not need to have any fixed posisition related
524 to the TF-M repo.
525
526Build TF-M
527----------
528
529With new cmake syntax
530
531.. code-block:: bash
532
Leonardo Sandoval98350142021-02-03 16:32:14 -0600533 cd <TF-M base folder>
Summer Qin2de23d02021-05-14 13:44:14 +0800534 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 -DMBEDCRYPTO_PATH=<Mbed Crypto base folder>/mbedtls
Raef Coles1ecb8132020-10-02 15:11:24 +0100535 cmake --build cmake_build -- install
536
537Alternately using traditional cmake syntax
538
539.. code-block:: bash
540
Leonardo Sandoval98350142021-02-03 16:32:14 -0600541 cd <TF-M base folder>
Raef Coles1ecb8132020-10-02 15:11:24 +0100542 mkdir cmake_build
543 cd cmake_build
Summer Qin2de23d02021-05-14 13:44:14 +0800544 cmake .. -DTFM_PLATFORM=arm/mps2/an521 -DMBEDCRYPTO_PATH=<Mbed Crypto base folder>/mbedtls
Raef Coles1ecb8132020-10-02 15:11:24 +0100545 make install
546
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200547--------------
548
Jianliang Shen2628db72022-03-17 10:13:06 +0800549*Copyright (c) 2017-2022, Arm Limited. All rights reserved.*
Chris Brand80266ba2022-01-05 09:14:52 -0800550*Copyright (c) 2022, Cypress Semiconductor Corporation. All rights reserved.*