blob: 144381aeffadecb424ffde5d784758ca1cee332e [file] [log] [blame]
Galanakis, Minos41f85972019-09-30 15:56:40 +01001##################
2Build instructions
3##################
Gyorgy Szingdb9783c2019-04-17 21:08:48 +02004Please make sure you have all required software installed as explained in the
Summer Qin6d5c91c2021-05-24 15:32:44 +08005:doc:`TF-M getting started </docs/getting_started/tfm_getting_started>`.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +02006
Gyorgy Szingdb9783c2019-04-17 21:08:48 +02007****************
8TF-M build steps
9****************
10TF-M uses `cmake <https://cmake.org/overview/>`__ to provide an out-of-source
11build environment. The instructions are below.
12
Raef Coles69817322020-10-19 14:14:14 +010013Cmake version ``3.15.0`` or higher is required.
Raef Coles1ecb8132020-10-02 15:11:24 +010014
David Wangd6fd6af2021-06-21 17:17:26 +080015.. _Getting the source-code:
16
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020017Getting the source-code
18=======================
19.. code-block:: bash
20
Leonardo Sandovald7f72d52020-07-28 18:02:34 -050021 cd <base folder>
Minos Galanakis0f39fa52020-06-08 16:53:53 +010022 git clone https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git
Anton Komlevb8e3af02020-08-28 10:23:57 +010023
Leonardo Sandoval98350142021-02-03 16:32:14 -060024To simplify documentation commands, the new created repository under
25``trusted-firmware-m`` would be referenced as ``<TF-M base folder>`` and
26its parent, the ``<base folder>``. Dependency management is now handled by
27cmake. If you wish to alter this behaviour, see
Summer Qinab1dd992021-05-25 13:58:55 +080028:ref:`docs/technical_references/instructions/tfm_build_instruction:Manual
Anton Komlevb8e3af02020-08-28 10:23:57 +010029dependency management`
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020030
Minos Galanakisac6b06c2020-03-19 12:57:02 +000031.. Note::
Anton Komlevb8e3af02020-08-28 10:23:57 +010032
Minos Galanakis3b740a12020-10-15 11:10:26 +010033 - For building with Armclang compiler version 6.10.0+, please follow the note
Summer Qin6d5c91c2021-05-24 15:32:44 +080034 in :doc:`TF-M getting started </docs/getting_started/tfm_getting_started>`.
Anton Komlevb8e3af02020-08-28 10:23:57 +010035 - For building with the IAR toolchain, please see the notes in
Minos Galanakis3b740a12020-10-15 11:10:26 +010036 :doc:`IAR software requirements <tfm_build_instruction_iar>`
TTornblomb9e5ed02020-02-13 16:53:15 +010037
Anton Komlevb8e3af02020-08-28 10:23:57 +010038.. _tfm_cmake_configuration:
39
40Cmake configuration
41===================
42
43All configuration options are provided by cmake variables, and their default
44values, with docstrings, can be found in ``config/config_default.cmake``.
45
Tamas Ban69219202020-10-27 08:13:18 +000046Configuration is provided in multiple stages. Each stage will not override any
47config that has already been set at any of the prior stages.
Anton Komlevb8e3af02020-08-28 10:23:57 +010048
Tamas Ban69219202020-10-27 08:13:18 +000049 1. Command-line variable settings are applied.
50 2. If the ``TFM_EXTRA_CONFIG_PATH`` variable has been set, that file is
Soby Mathew7b7e1242020-10-07 13:31:56 +010051 loaded.
Tamas Ban69219202020-10-27 08:13:18 +000052 3. If TEST_PSA_TEST is set, then PSA API test related config is applied from
53 ``config/tests/config_test_psa_api.cmake``.
54 4. If it exists, CMAKE_BUILD_TYPE specific config is applied from
55 ``config/build_type/<build_type>.cmake``.
56 5. Target specific config from ``platform/ext/target/<target_platform>/config.cmake``
57 is applied.
58 6. If CRYPTO_HW_ACCELERATOR is set, then a config specific to the
59 accelerator type is applied if it exists.
60 7. If it exists, TFM Profile specific config is applied from
61 ``config/profile/<tfm_profile>.cmake``.
62 8. ``config/config_default.cmake`` is loaded.
shejia01bfd37122021-06-03 13:31:51 +080063 9. If ``TEST_S`` or ``TEST_NS`` or other single test suite config like
64 ``TEST_NS_ATTESTATION`` (see `Regression test configuration`_)is set, then
65 config from ``${TFM_TEST_REPO_PATH}/test/config/set_config.cmake`` and
66 ``${TFM_TEST_REPO_PATH}/test/config/default_ns_test_config.cmake`` or
67 ``${TFM_TEST_REPO_PATH}/test/config/default_s_test_config.cmake`` or
68 ``${TFM_TEST_REPO_PATH}/test/config/default_test_config.cmake`` is
69 applied.
Anton Komlevb8e3af02020-08-28 10:23:57 +010070
71.. Warning::
72 This means that command-line settings are not applied when they conflict
73 with required platform settings. If it is required to override platform
74 settings (this is not usually a good idea) then TFM_EXTRA_CONFIG_PATH should be
75 used.
76
77Required cmake parameters for building TF-M
78-------------------------------------------
79
80+----------------------+-------------------------------------------------------+
81| Parameter | Description |
82+======================+=======================================================+
83| TFM_PLATFORM | The target platform as a path from the base directory |
Øyvind Rønningstada9d5eac2021-01-22 14:21:25 +010084| | ``/platform/ext/target``, or as an absolute path. |
Anton Komlevb8e3af02020-08-28 10:23:57 +010085+----------------------+-------------------------------------------------------+
Anton Komlevb8e3af02020-08-28 10:23:57 +010086
Anton Komlevb8e3af02020-08-28 10:23:57 +010087Build type
88----------
89
Chris Brand80266ba2022-01-05 09:14:52 -080090By default, a release configuration is built. Alternate build types can be
91specified with the ``CMAKE_BUILD_TYPE`` variable. The possible
Anton Komlevb8e3af02020-08-28 10:23:57 +010092types are:
93
94 - ``Debug``
Sebastian Bøeb73f1762021-10-28 14:23:13 +020095 - ``RelWithDebInfo``
Anton Komlevb8e3af02020-08-28 10:23:57 +010096 - ``Release``
Sebastian Bøeb73f1762021-10-28 14:23:13 +020097 - ``MinSizeRel``
Anton Komlevb8e3af02020-08-28 10:23:57 +010098
99``Release`` is default.
100
Sebastian Bøeb73f1762021-10-28 14:23:13 +0200101Debug symbols are added by default to all builds, but can be removed
102from ``Release`` and ``MinSizeRel`` builds by setting
103``TFM_DEBUG_SYMBOLS`` to ``OFF``.
104
105``RelWithDebInfo``, ``Release`` and ``MinSizeRel`` all have different
106optimizations turned on and hence will produce smaller, faster code
107than ``Debug``. ``MinSizeRel`` will produce the smallest code, and
108hence is often a good idea on RAM or flash constrained systems.
Anton Komlevb8e3af02020-08-28 10:23:57 +0100109
110Other cmake parameters
111----------------------
112
113The full list of default options is in ``config/config_default.cmake``. Several
114important options are listed below.
115
116
117+---------------------+----------------------------------------+---------------+
118| Parameter | Description | Default value |
119+=====================+========================================+===============+
120| BL2 | Build level 2 secure bootloader. | ON |
121+---------------------+----------------------------------------+---------------+
122| NS | Build NS app. Required for test code. | ON |
123+---------------------+----------------------------------------+---------------+
Kevin Peng23a583c2021-09-08 22:33:33 +0800124| TFM_LIB_MODEL | Use secure library model instead of | OFF |
125| | PSA api (IPC model). | |
Anton Komlevb8e3af02020-08-28 10:23:57 +0100126+---------------------+----------------------------------------+---------------+
127| TFM_ISOLATION_LEVEL | Set TFM isolation level. | 1 |
128+---------------------+----------------------------------------+---------------+
129| TFM_PROFILE | Set TFM profile. | |
130+---------------------+----------------------------------------+---------------+
131| TEST_S | Build secure regression tests. | OFF |
132+---------------------+----------------------------------------+---------------+
133| TEST_NS | Build non-secure regression tests. | OFF |
134+---------------------+----------------------------------------+---------------+
135| TEST_PSA_API | Build PSA API TESTS for the given | |
136| | suite. Takes a PSA api ``SUITE`` as an | |
137| | argument (``CRYPTO`` etc). | |
138+---------------------+----------------------------------------+---------------+
139
140Regression test configuration
141-----------------------------
142
shejia01bfd37122021-06-03 13:31:51 +0800143Regression test configuration is controlled entirely by ``TEST_NS`` or
144``TEST_S`` or single test suite configuration. The group test
145configurations and single test suite configurations are listed below, all of
146them are disabled by default.
147
148+---------------------+--------------------------------------------------------------------+
149| Parameter | Description |
150+=====================+====================================================================+
151| TEST_NS_ATTESTATION | Build non-secure regression Attestation tests. |
152+---------------------+--------------------------------------------------------------------+
153| TEST_NS_T_COSE | Build non-secure regression t_cose tests. |
154+---------------------+--------------------------------------------------------------------+
155| TEST_NS_QCBOR | Build non-secure regression QCBOR tests. |
156+---------------------+--------------------------------------------------------------------+
157| TEST_NS_AUDIT | Build non-secure regression Audit log tests. |
158+---------------------+--------------------------------------------------------------------+
159| TEST_NS_CORE | Build non-secure regression Core tests. |
160+---------------------+--------------------------------------------------------------------+
161| TEST_NS_CRYPTO | Build non-secure regression Crypto tests. |
162+---------------------+--------------------------------------------------------------------+
163| TEST_NS_ITS | Build non-secure regression ITS tests. |
164+---------------------+--------------------------------------------------------------------+
165| TEST_NS_PS | Build non-secure regression PS tests. |
166+---------------------+--------------------------------------------------------------------+
167| TEST_NS_PLATFORM | Build non-secure regression Platform tests. |
168+---------------------+--------------------------------------------------------------------+
169| TEST_NS_FWU | Build non-secure regression FWU tests. |
170+---------------------+--------------------------------------------------------------------+
171| TEST_NS_IPC | Build non-secure regression IPC tests. |
172+---------------------+--------------------------------------------------------------------+
173| TEST_NS_SLIH_IRQ | Build non-secure regression Second-Level Interrupt Handling tests. |
174+---------------------+--------------------------------------------------------------------+
175| TEST_NS_FLIH_IRQ | Build non-secure regression First-Level Interrupt Handling tests. |
176+---------------------+--------------------------------------------------------------------+
177| TEST_NS_MULTI_CORE | Build non-secure regression multi-core tests. |
178+---------------------+--------------------------------------------------------------------+
179| TEST_S_ATTESTATION | Build secure regression Attestation tests. |
180+---------------------+--------------------------------------------------------------------+
181| TEST_S_AUDIT | Build secure regression Audit log tests. |
182+---------------------+--------------------------------------------------------------------+
183| TEST_S_CRYPTO | Build secure regression Crypto tests. |
184+---------------------+--------------------------------------------------------------------+
185| TEST_S_ITS | Build secure regression ITS tests. |
186+---------------------+--------------------------------------------------------------------+
187| TEST_S_PS | Build secure regression PS tests. |
188+---------------------+--------------------------------------------------------------------+
189| TEST_S_PLATFORM | Build secure regression Platform tests. |
190+---------------------+--------------------------------------------------------------------+
191| TEST_S_FWU | Build secure regression FWU tests. |
192+---------------------+--------------------------------------------------------------------+
193| TEST_S_IPC | Build secure regression IPC tests. |
194+---------------------+--------------------------------------------------------------------+
195
Chris Brand80266ba2022-01-05 09:14:52 -0800196Individual test suites can be enabled when their dependencies like partitions or
shejia01bfd37122021-06-03 13:31:51 +0800197other specific configurations are set. On the one hand, some test suites depend
Chris Brand80266ba2022-01-05 09:14:52 -0800198on other test suites. On the other hand, some test suites conflict with
shejia01bfd37122021-06-03 13:31:51 +0800199other test suites. Test configurations and dependencies will be
200checked in ``${TFM_TEST_REPO_PATH}/test/config/check_config.cmake``.
Anton Komlevb8e3af02020-08-28 10:23:57 +0100201
Chris Brand80266ba2022-01-05 09:14:52 -0800202If regression testing is enabled by ``TEST_NS`` or ``TEST_S``, individual
203test suites will be enabled or disabled as appropriate for the TF-M
204configuration (i.e. all enabled secure partitions will be tested).
Anton Komlevb8e3af02020-08-28 10:23:57 +0100205
206Some cryptographic tests can be enabled and disabled. This is done to prevent
207false failures from being reported when a smaller Mbed Crypto config is being
208used which does not support all features.
209
210+-----------------------------+-------------------------------------+---------------+
211| Parameter | Description | Default value |
212+=============================+=====================================+===============+
213| TFM_CRYPTO_TEST_ALG_CBC | Test CBC cryptography mode | ON |
214+-----------------------------+-------------------------------------+---------------+
215| TFM_CRYPTO_TEST_ALG_CCM | Test CCM cryptography mode | ON |
216+-----------------------------+-------------------------------------+---------------+
217| TFM_CRYPTO_TEST_ALG_CFB | Test CFB cryptography mode | ON |
218+-----------------------------+-------------------------------------+---------------+
Abbas Bracken Ziad46a21b62021-08-31 13:03:56 +0100219| TFM_CRYPTO_TEST_ALG_ECB | Test ECB cryptography mode | ON |
220+-----------------------------+-------------------------------------+---------------+
Anton Komlevb8e3af02020-08-28 10:23:57 +0100221| TFM_CRYPTO_TEST_ALG_CTR | Test CTR cryptography mode | ON |
222+-----------------------------+-------------------------------------+---------------+
Abbas Bracken Ziad3d262f42021-08-19 15:07:05 +0100223| TFM_CRYPTO_TEST_ALG_OFB | Test OFB cryptography mode | ON |
224+-----------------------------+-------------------------------------+---------------+
Anton Komlevb8e3af02020-08-28 10:23:57 +0100225| TFM_CRYPTO_TEST_ALG_GCM | Test GCM cryptography mode | ON |
226+-----------------------------+-------------------------------------+---------------+
227| TFM_CRYPTO_TEST_ALG_SHA_512 | Test SHA-512 cryptography algorithm | ON |
228+-----------------------------+-------------------------------------+---------------+
Antonio de Angelis6eb5ecb2021-07-29 11:33:48 +0200229| TFM_CRYPTO_TEST_HKDF | Test HKDF key derivation algorithm | ON |
230+-----------------------------+-------------------------------------+---------------+
231| TFM_CRYPTO_TEST_ECDH | Test ECDH key agreement algorithm | ON |
Anton Komlevb8e3af02020-08-28 10:23:57 +0100232+-----------------------------+-------------------------------------+---------------+
233
Anton Komlev211aacf2020-11-02 12:48:11 +0000234TF-M Profiles
235-------------
236
237TF-M Profiles are implemented as a single cmake configuration file, under the
238``config/profile`` directory. A good understanding can be gained quickly by
239looking at the Profile configuration files, but the ultimate reference for
Summer Qinabf66982021-04-06 17:22:15 +0800240Profiles are the design documents in the ``docs/technical_references/profiles/``
Anton Komlev211aacf2020-11-02 12:48:11 +0000241directory.
Anton Komlevb8e3af02020-08-28 10:23:57 +0100242
243PSA test configuration
244----------------------
245
246PSA tests are configured by using the ``TEST_PSA_API`` cmake variable. The
247variable should be set to the name of the test suite that is desired. It is
248_not_ supported to set both ``TEST_PSA_API`` and ``TEST_S`` or ``TEST_NS``.
249
Jamie Fox19c91c22019-02-10 18:04:58 +0000250The Functional API tests are:
Anton Komlevb8e3af02020-08-28 10:23:57 +0100251 - ``CRYPTO``
252 - ``INITIAL_ATTESTATION``
253 - ``STORAGE`` (INTERNAL_TRUSTED_STORAGE and PROTECTED_STORAGE)
254 - ``INTERNAL_TRUSTED_STORAGE``
255 - ``PROTECTED_STORAGE``
256
Jamie Fox19c91c22019-02-10 18:04:58 +0000257The Firmware Framework test suites are:
Anton Komlevb8e3af02020-08-28 10:23:57 +0100258 - ``IPC``
259
260Note that these map directly to the ``SUITE`` cmake variable used in the
261psa-arch-tests documentation.
262
David Wangd6fd6af2021-06-21 17:17:26 +0800263.. _Migration from legacy buildsystem:
264
Anton Komlevb8e3af02020-08-28 10:23:57 +0100265Migration from legacy buildsystem
266---------------------------------
267
268The previous (legacy) cmake buildsystem made use of separate configuration
269files, where now build options are controlled by variables. For ease of
270transition, a table below is provided that maps the legacy files to the current
271variables, in the format of cmake command line parameters.
272
Summer Qin001ce9d2020-11-04 14:41:54 +0800273+------------------------------------------+---------------------------------------+
274| File | Cmake command line |
275+==========================================+=======================================+
Kevin Peng23a583c2021-09-08 22:33:33 +0800276| ConfigDefault.cmake | -DTFM_LIB_MODEL=ON |
Summer Qin001ce9d2020-11-04 14:41:54 +0800277+------------------------------------------+---------------------------------------+
Kevin Peng23a583c2021-09-08 22:33:33 +0800278| ConfigCoreIPC.cmake | <no options> |
Summer Qin001ce9d2020-11-04 14:41:54 +0800279+------------------------------------------+---------------------------------------+
Kevin Peng23a583c2021-09-08 22:33:33 +0800280| ConfigCoreIPCTfmLevel2.cmake | -DTFM_ISOLATION_LEVEL=2 |
Summer Qin001ce9d2020-11-04 14:41:54 +0800281+------------------------------------------+---------------------------------------+
282| ConfigDefaultProfileS.cmake | -DTFM_PROFILE=profile_small |
283+------------------------------------------+---------------------------------------+
284| ConfigDefaultProfileM.cmake | -DTFM_PROFILE=profile_medium |
285+------------------------------------------+---------------------------------------+
286| ConfigRegression.cmake | -DTEST_NS=ON -DTEST_S=ON |
287+------------------------------------------+---------------------------------------+
288| ConfigRegressionIPC.cmake | -DTEST_NS=ON -DTEST_S=ON |
Summer Qin001ce9d2020-11-04 14:41:54 +0800289+------------------------------------------+---------------------------------------+
290| ConfigRegressionIPCTfmLevel2.cmake | -DTEST_NS=ON -DTEST_S=ON |
Summer Qin001ce9d2020-11-04 14:41:54 +0800291| | -DTFM_ISOLATION_LEVEL=2 |
292+------------------------------------------+---------------------------------------+
293| ConfigRegressionProfileS.cmake | -DTFM_PROFILE=profile_small |
294| | -DTEST_NS=ON -DTEST_S=ON |
295+------------------------------------------+---------------------------------------+
296| ConfigRegressionProfileM.cmake | -DTFM_PROFILE=profile_medium |
297| | -DTEST_NS=ON -DTEST_S=ON |
298+------------------------------------------+---------------------------------------+
299| ConfigPsaApiTest.cmake | -DTEST_PSA_API=<test_suite> |
300+------------------------------------------+---------------------------------------+
301| ConfigPsaApiTestIPC.cmake | -DTEST_PSA_API=<test_suite> |
Summer Qin001ce9d2020-11-04 14:41:54 +0800302+------------------------------------------+---------------------------------------+
303| ConfigPsaApiTestIPCTfmLevel2.cmake | -DTEST_PSA_API=<test_suite> |
Summer Qin001ce9d2020-11-04 14:41:54 +0800304| | -DTFM_ISOLATION_LEVEL=2 |
305+------------------------------------------+---------------------------------------+
306| ConfigDefaultProfileM.cmake | -DTFM_PROFILE=profile_medium |
307| + profile_m_config_ext_ps_disabled.cmake | -DTFM_PARTITION_PROTECTED_STORAGE=OFF |
308+------------------------------------------+---------------------------------------+
Anton Komlevb8e3af02020-08-28 10:23:57 +0100309
310There has also been some changes to the PSA manifest file generation. The files
Chris Brand80266ba2022-01-05 09:14:52 -0800311are now generated into a separate tree in the ``<tfm build dir>/generated``
Anton Komlevb8e3af02020-08-28 10:23:57 +0100312directory. Therefore they have been removed from the source tree. Any changes
313should be made only to the template files.
314
Chris Brand80266ba2022-01-05 09:14:52 -0800315The API for the ``tools/tfm_parse_manifest_list.py`` script has also changed
Anton Komlevb8e3af02020-08-28 10:23:57 +0100316slightly. It is no longer required to be run manually as it is run as part of
317cmake.
318
319*******************
320TF-M build examples
321*******************
322
323Example: building TF-M for AN521 platform using GCC:
324====================================================
325.. code-block:: bash
326
Leonardo Sandoval98350142021-02-03 16:32:14 -0600327 cd <TF-M base folder>
Chris Brand80266ba2022-01-05 09:14:52 -0800328 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521
Anton Komlevb8e3af02020-08-28 10:23:57 +0100329 cmake --build cmake_build -- install
330
331Alternately using traditional cmake syntax
332
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200333.. code-block:: bash
334
Leonardo Sandoval98350142021-02-03 16:32:14 -0600335 cd <TF-M base folder>
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200336 mkdir cmake_build
337 cd cmake_build
Chris Brand80266ba2022-01-05 09:14:52 -0800338 cmake .. -DTFM_PLATFORM=arm/mps2/an521
Anton Komlevb8e3af02020-08-28 10:23:57 +0100339 make install
340
341.. Note::
Anton Komlevb8e3af02020-08-28 10:23:57 +0100342
343 It is recommended to build each different build configuration in a separate
344 build directory.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200345
Chris Brand80266ba2022-01-05 09:14:52 -0800346The default build uses Unix Makefiles. The ``-G`` option can be used to change
347this. The default build uses the GNU ARM toolchain and creates a Release build.
348These options can be overridden using the ``TFM_TOOLCHAIN_FILE`` and
349``CMAKE_BUILD_TYPE`` parameters, as shown below
Leonardo Sandoval49a558c2021-02-03 17:04:22 -0600350
351.. code-block:: bash
Subhasish Ghoshbc849302021-04-08 20:21:20 +0100352
Leonardo Sandoval49a558c2021-02-03 17:04:22 -0600353 cd <TF-M base folder>
Chris Brand80266ba2022-01-05 09:14:52 -0800354 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 -0600355 cmake --build cmake_build -- install
356
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200357Regression Tests for the AN521 target platform
358==============================================
Anton Komlevb8e3af02020-08-28 10:23:57 +0100359
360Regression tests can be build by using the TEST_S and TEST_NS settings. Either
361can be used in isolation or both can be used to enable both suites. All tests
362for all enabled partitions are run, along with IPC and Multicore tests if those
363features are enabled.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200364
365.. code-block:: bash
366
Leonardo Sandoval98350142021-02-03 16:32:14 -0600367 cd <TF-M base folder>
Summer Qin2de23d02021-05-14 13:44:14 +0800368 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 -DTEST_S=ON -DTEST_NS=ON
Anton Komlevb8e3af02020-08-28 10:23:57 +0100369 cmake --build cmake_build -- install
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200370
Anton Komlevb8e3af02020-08-28 10:23:57 +0100371Alternately using traditional cmake syntax
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200372
373.. code-block:: bash
374
Leonardo Sandoval98350142021-02-03 16:32:14 -0600375 cd <TF-M base folder>
Anton Komlevb8e3af02020-08-28 10:23:57 +0100376 mkdir cmake_build
377 cd cmake_build
Summer Qin2de23d02021-05-14 13:44:14 +0800378 cmake .. -DTFM_PLATFORM=arm/mps2/an521 -DTEST_S=ON -DTEST_NS=ON
Anton Komlevb8e3af02020-08-28 10:23:57 +0100379 make install
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200380
Kevin Peng23a583c2021-09-08 22:33:33 +0800381Build for PSA API tests
382=======================
Anton Komlevb8e3af02020-08-28 10:23:57 +0100383The build system provides support for building and integrating the PSA API tests
384from https://github.com/ARM-software/psa-arch-tests. PSA API tests are
385controlled using the TEST_PSA_API variable. Enabling both regression tests and
386PSA API tests simultaneously is **not** supported.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200387
Anton Komlevb8e3af02020-08-28 10:23:57 +0100388The value of the TEST_PSA_API variable is the suite to be run.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200389
Subhasish Ghoshbc849302021-04-08 20:21:20 +0100390.. code-block:: bash
Anton Komlevb8e3af02020-08-28 10:23:57 +0100391
392 -DTEST_PSA_API=INTERNAL_TRUSTED_STORAGE
393 -DTEST_PSA_API=PROTECTED_STORAGE
394 -DTEST_PSA_API=STORAGE
395 -DTEST_PSA_API=CRYPTO
396 -DTEST_PSA_API=INITIAL_ATTESTATION
397
398Respectively for the corresponding service. For example, to enable the PSA API
399tests for the Crypto service:
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200400
401.. code-block:: bash
402
Leonardo Sandoval98350142021-02-03 16:32:14 -0600403 cd <TF-M base folder>
Summer Qin2de23d02021-05-14 13:44:14 +0800404 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 -DTEST_PSA_API=CRYPTO
Anton Komlevb8e3af02020-08-28 10:23:57 +0100405 cmake --build cmake_build -- install
406
407Alternately using traditional cmake syntax
408
409.. code-block:: bash
410
Leonardo Sandoval98350142021-02-03 16:32:14 -0600411 cd <TF-M base folder>
Anton Komlevb8e3af02020-08-28 10:23:57 +0100412 mkdir cmake_build
413 cd cmake_build
Summer Qin2de23d02021-05-14 13:44:14 +0800414 cmake .. -DTFM_PLATFORM=arm/mps2/an521 -DTEST_PSA_API=CRYPTO
Anton Komlevb8e3af02020-08-28 10:23:57 +0100415 make install
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200416
417Location of build artifacts
418===========================
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200419
Anton Komlevb8e3af02020-08-28 10:23:57 +0100420All build artifacts are provided in the ``<build_dir>/bin`` directory. It is
421**not** required to run ``make install`` to generate artifacts in this location.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200422
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200423
Anton Komlevb8e3af02020-08-28 10:23:57 +0100424For the purposes of maintaining compatibility with the legacy cmake build
425system, they are also provided in
426``<build_dir>/install/outputs/<target_platform>/``. In order to generate the
427artifacts in this location ``make install`` must be run.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200428
Anton Komlevb8e3af02020-08-28 10:23:57 +0100429****************************
430Manual dependency management
431****************************
Galanakis, Minos757139a2019-11-11 15:00:11 +0000432
Raef Coles1ecb8132020-10-02 15:11:24 +0100433The TF-M build system will by default fetch all dependencies with appropriate
434versions and store them inside the build tree. In this case, the build tree
435location is ``<build_dir>/lib/ext``, and the extra libraries can be cleaned by
436deleting that directory.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000437
Raef Coles1ecb8132020-10-02 15:11:24 +0100438If you have local copies already, and wish to avoid having the libraries
439downloaded every time the build directory is deleted, then the following
Raef Colesc630b882020-12-10 15:46:18 +0000440variables can be set to the path to the root directory of the local repo. This
441will disable the automatic downloading for that dependency.
Raef Coles1ecb8132020-10-02 15:11:24 +0100442
Raef Colesc630b882020-12-10 15:46:18 +0000443+----------------+---------------------+-----------------------------------------------------+
444| Dependency | Cmake variable | Git repo URL |
445+================+=====================+=====================================================+
446| Mbed Crypto | MBEDCRYPTO_PATH | https://github.com/ARMmbed/mbedtls |
447+----------------+---------------------+-----------------------------------------------------+
448| tf-m-tests | TFM_TEST_REPO_PATH | https://git.trustedfirmware.org/TF-M/tf-m-tests.git |
449+----------------+---------------------+-----------------------------------------------------+
450| MCUboot | MCUBOOT_PATH | https://github.com/mcu-tools/mcuboot |
451+----------------+---------------------+-----------------------------------------------------+
452| psa-arch-tests | PSA_ARCH_TESTS_PATH | https://github.com/ARM-software/psa-arch-tests |
453+----------------+---------------------+-----------------------------------------------------+
Galanakis, Minos757139a2019-11-11 15:00:11 +0000454
Anton Komlevb8e3af02020-08-28 10:23:57 +0100455For required versions of the dependencies, refer to ``config/config_default.cmake``.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000456
457.. Note::
Anton Komlevb8e3af02020-08-28 10:23:57 +0100458 - Some patches are required to the mbedtls repo to allow building it as part of
459 TF-M. While these patches are being upstreamed they are stored in
Raef Coles1ecb8132020-10-02 15:11:24 +0100460 ``lib/ext/mbedcrypo``. In order to use a local copy of Mbed Crypto it is
461 required to apply all patch files in this directory.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000462
Anton Komlevb8e3af02020-08-28 10:23:57 +0100463.. Note::
464 - CMSIS 5 is provided by the TF-M tests repo. If you wish to use a different
465 source for CMSIS 5, it can be configured using CMSIS_5_PATH.
David Hu2cbf5df2020-06-15 10:41:44 +0800466
Kevin Pengcba37d32020-12-07 17:07:39 +0800467TF-M Tests
468==========
469
470Dependency auto downloading is used by default.
471The TF-M build system downloads the tf-m-tests repo with a fixed version
David Huf89bcb62021-09-06 15:02:34 +0800472specified by ``TFM_TEST_REPO_VERSION`` in
473:file:`lib/ext/tf-m-tests/repo_config_default.cmake`.
Kevin Pengcba37d32020-12-07 17:07:39 +0800474The version can be a release tag or a commit hash.
475
476Developers who want a different version of tf-m-tests can override
477``TFM_TEST_REPO_PATH`` to a local copy with the desired version.
478
David Huf89bcb62021-09-06 15:02:34 +0800479As the test repo is part of the TF-M project and coupled with TF-M repo,
480the version should be updated when there are dependency changes between the TF-M
Kevin Pengcba37d32020-12-07 17:07:39 +0800481repo and the test repo and when there is a complete change merged in test repo.
482
483A complete change is one or more patches that are for the same purpose, for
484example a new test suite or enhancements on the test cases.
485Patches in one change can be merge individually provided they do not break
486anything or cause any regressions.
487But the version in the TF-M gets updated only when all the patches are merged.
488
Raef Coles1ecb8132020-10-02 15:11:24 +0100489Example: building TF-M for AN521 platform with local Mbed Crypto
490================================================================
491
492Prepare Mbed Crypto repository
493------------------------------
494
495This is only required to be done once. For dependencies that do not have any
496``.patch`` files in their ``lib/ext`` directory the only required step is
497cloning the repo and checking out the correct branch.
498
499.. code-block:: bash
500
501 cd <Mbed Crypto base folder>
502 git clone https://github.com/ARMmbed/mbedtls
503 cd mbedtls
504 git checkout <MBEDCRYPTO_VERSION from config_default.cmake>
505 git apply <TF-M base folder>/trusted-firmware-m/lib/ext/mbedcrypo/*.patch
506
507.. Note::
508 - <Mbed Crypto base folder> does not need to have any fixed posisition related
509 to the TF-M repo.
510
511Build TF-M
512----------
513
514With new cmake syntax
515
516.. code-block:: bash
517
Leonardo Sandoval98350142021-02-03 16:32:14 -0600518 cd <TF-M base folder>
Summer Qin2de23d02021-05-14 13:44:14 +0800519 cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 -DMBEDCRYPTO_PATH=<Mbed Crypto base folder>/mbedtls
Raef Coles1ecb8132020-10-02 15:11:24 +0100520 cmake --build cmake_build -- install
521
522Alternately using traditional cmake syntax
523
524.. code-block:: bash
525
Leonardo Sandoval98350142021-02-03 16:32:14 -0600526 cd <TF-M base folder>
Raef Coles1ecb8132020-10-02 15:11:24 +0100527 mkdir cmake_build
528 cd cmake_build
Summer Qin2de23d02021-05-14 13:44:14 +0800529 cmake .. -DTFM_PLATFORM=arm/mps2/an521 -DMBEDCRYPTO_PATH=<Mbed Crypto base folder>/mbedtls
Raef Coles1ecb8132020-10-02 15:11:24 +0100530 make install
531
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200532--------------
533
Summer Qinabf66982021-04-06 17:22:15 +0800534*Copyright (c) 2017-2021, Arm Limited. All rights reserved.*
Chris Brand80266ba2022-01-05 09:14:52 -0800535*Copyright (c) 2022, Cypress Semiconductor Corporation. All rights reserved.*