blob: 9637633ab667fd4119daf9f56d9f2fb08c7987f1 [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
5:doc:`software requirements <tfm_sw_requirement>`.
6
Galanakis, Minos757139a2019-11-11 15:00:11 +00007The external dependecies are briefly listed in the
Minos Galanakisac6b06c2020-03-19 12:57:02 +00008:ref:`docs/user_guides/tfm_sw_requirement:External dependencies` section.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +02009
Galanakis, Minos757139a2019-11-11 15:00:11 +000010The configuration-table
11:ref:`docs/user_guides/tfm_build_instruction:Configuring the build` section
12explains all the supported build parameters:
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020013
14****************
15TF-M build steps
16****************
17TF-M uses `cmake <https://cmake.org/overview/>`__ to provide an out-of-source
18build environment. The instructions are below.
19
20.. Note::
21
22 It is recommended to build each different build configurations in separate
23 directories.
24
25Getting the source-code
26=======================
27.. code-block:: bash
28
29 cd <TF-M base folder>
Minos Galanakis0f39fa52020-06-08 16:53:53 +010030 git clone https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git
Antonio de Angelis04debbd2019-10-14 12:12:52 +010031 git clone https://github.com/ARMmbed/mbed-crypto.git -b mbedcrypto-3.0.1
Antonio de Angelis70ae80f2019-02-26 14:57:40 +000032 git clone https://github.com/ARM-software/CMSIS_5.git -b 5.5.0
33
Minos Galanakisd09df4d2020-03-23 10:25:20 +000034 # If CMSIS was cloned before the git-lfs dependency was installed,
35 # use the following command to download the binaries.
36 cd CMSIS_5 && git lfs pull
37
Antonio de Angelis70ae80f2019-02-26 14:57:40 +000038.. Note::
39 `CMSIS_5` now uses `git-lfs` for storing large size binaries so the cloning
40 process has changed from previous releases. Please refer to the `CMSIS_5`
41 documentation for more details.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020042
Minos Galanakisac6b06c2020-03-19 12:57:02 +000043.. Note::
44 For building with Armclang compiler version 6.10.0, please follow the note
45 in :ref:`docs/user_guides/tfm_sw_requirement:External dependencies` section.
46
TTornblomb9e5ed02020-02-13 16:53:15 +010047.. Note::
48 For building with the IAR toolchain, please see the notes in
49 :doc:`software requirements <tfm_build_instruction_iar>`
50
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020051Build steps for the AN521 target platform:
52==========================================
53.. code-block:: bash
54
55 cd <TF-M base folder>
56 cd trusted-firmware-m
57 mkdir cmake_build
58 cd cmake_build
59 cmake ../ -G"Unix Makefiles" -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG
60 cmake --build ./ -- install
61
62Regression Tests for the AN521 target platform
63==============================================
64*TF-M build regression tests on Linux*
65
66.. code-block:: bash
67
68 cd <TF-M base folder>
69 cd trusted-firmware-m
70 mkdir cmake_test
71 cd cmake_test
Ken Liue40f9a22019-06-03 16:42:47 +080072 cmake -G"Unix Makefiles" -DPROJ_CONFIG=`readlink -f ../configs/ConfigRegression.cmake` -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020073 cmake --build ./ -- install
74
75*TF-M build regression tests on Windows*
76
77.. code-block:: bash
78
79 cd <TF-M base folder>
80 cd trusted-firmware-m
81 mkdir cmake_test
82 cd cmake_test
Ken Liue40f9a22019-06-03 16:42:47 +080083 cmake -G"Unix Makefiles" -DPROJ_CONFIG=`cygpath -am ../configs/ConfigRegression.cmake` -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020084 cmake --build ./ -- install
85
Jaykumar Pitambarbhai Patel6891b8b2020-01-23 14:32:20 +053086Build for PSA Developer API compliance tests
87============================================
88The build system provides the support for linking with prebuilt PSA Developer
89API compliance NS test libraries when using the ``ConfigPsaApiTest.cmake``,
Jamie Fox6b6a19b2019-09-30 16:54:17 +010090``ConfigPsaApiTestIPC.cmake`` or ``ConfigPsaApiTestIPCTfmLevel2.cmake`` config
91file. The build system assumes that the PSA API compliance test suite is checked
92out at the same level of the TF-M root folder and the default name for the build
93folder has been used when compiling the PSA API compliance tests. Each set of
Kevin Pengc6d74502020-03-04 16:55:37 +080094tests for the Internal Trusted Storage, Protected Storage, Crypto and Attestation
Jamie Fox6b6a19b2019-09-30 16:54:17 +010095services needs to be enabled at the build configuration step by defining::
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020096
Jamie Fox6b6a19b2019-09-30 16:54:17 +010097 -DPSA_API_TEST_INTERNAL_TRUSTED_STORAGE=ON
Karl Zhang1895a2c2020-03-08 18:27:32 +080098 -DPSA_API_TEST_PROTECTED_STORAGE=ON
Vinay Kumar Kotegowder75641062020-04-24 16:44:12 +053099 -DPSA_API_TEST_STORAGE=ON
Jamie Fox6b6a19b2019-09-30 16:54:17 +0100100 -DPSA_API_TEST_CRYPTO=ON
Karl Zhang1895a2c2020-03-08 18:27:32 +0800101 -DPSA_API_TEST_INITIAL_ATTESTATION=ON
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200102
103respectively for the corresponding service. For example, to enable the PSA API
104tests for the Crypto service only:
105
106.. code-block:: bash
107
108 cd <TF-M base folder>
109 cd trusted-firmware-m
110 mkdir cmake_psa_test
111 cd cmake_psa_test
Antonio de Angelis0169b9f2019-06-28 11:37:24 +0100112 cmake -G"Unix Makefiles" -DPROJ_CONFIG=`readlink -f ../configs/ConfigPsaApiTest.cmake` -DPSA_API_TEST_CRYPTO=ON -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200113 cmake --build ./ -- install
114
Jaykumar Pitambarbhai Patel6891b8b2020-01-23 14:32:20 +0530115Build for PSA FF (IPC) compliance tests
116=======================================
117
118The build system assumes that the PSA FF compliance test suite is checked out
119at the same level of the TF-M root folder and the default name for the build
120folder has been used when compiling the PSA FF compliance tests.
121
122Parse the PSA FF compliance tests partition manifests using a tool script named
123as ``tfm_parse_manifest_list.py``. This tool updates the TFM partitions data
124structure with PSA test suite partitions detail and creates the manifest output
125files that are required for the PSA test suite build. Using these manifest
126output files, build the PSA FF compliance tests as per the instructions
127given in the PSA FF compliance tests README.
128
129.. code-block:: bash
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000130
Jaykumar Pitambarbhai Patel6891b8b2020-01-23 14:32:20 +0530131 cd <TF-M base folder>
132 cd trusted-firmware-m
Shawn Shanadfb80f2020-03-11 10:25:21 +0800133 python tools/tfm_parse_manifest_list.py -m tools/tfm_psa_ff_test_manifest_list.yaml append
Jaykumar Pitambarbhai Patel6891b8b2020-01-23 14:32:20 +0530134
135The build system provides the support for linking with prebuilt PSA FF
136compliance NS and S test libraries when using the ``ConfigPsaApiTestIPC.cmake``
137or ``ConfigPsaApiTestIPCTfmLevel2.cmake`` config file. The PSA FF compliance
138tests need to be enabled at the build configuration step by defining::
139
140 -DPSA_API_TEST_IPC=ON.
141
142For example, to enable the PSA FF tests for ConfigPsaApiTestIPCTfmLevel2.cmake
143config :
144
145.. code-block:: bash
146
147 cd <TF-M base folder>
148 cd trusted-firmware-m
149 mkdir cmake_psa_test
150 cd cmake_psa_test
151 cmake -G"Unix Makefiles" -DPROJ_CONFIG=`readlink -f ../configs/ConfigPsaApiTestIPCTfmLevel2.cmake` -DPSA_API_TEST_IPC=ON -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
152 cmake --build ./ -- install
153
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200154Location of build artifacts
155===========================
156The build system defines an API which allow easy usage of build
157artifacts. The ``install`` build target copies all files which might be needed
158as a dependency by external tools or build systems to the
159``<build_dir>/install/outputs``
160directory, with the following directory hierarchy:
161
162::
163
164 <build_dir>/install/outputs/fvp/
165 <build_dir>/install/outputs/<target_platform>/
166
167There is one folder for FVP testing, with more elaborate naming and
168there is an other for testing on target hardware platform (AN521, etc.), where
169naming convention is aligned with 8.3 format. The dependency tree of
170``install`` build target ensures a proper update (i.e. build) of all output
171files before the actual installation step takes place. As such it is suggested
172to use this build target to build TF-M.
173
174Export dependency files for NS applications
175-------------------------------------------
176An NS application requires a number of files to interface with TF-M.
177The build system exports these files as part of the ``install`` target and
178places them in to a single directory::
179
180 <build_dir>/install/export/tfm
181
182Further details on how to integrate a new NS app with TF-M are available in the
183:doc:`integration guide <tfm_integration_guide>`.
184
185Building the documentation
186==========================
187Please ensure the dependencies for building the firmware and the
188documentation are installed as explained in the
189:doc:`software requirements <tfm_sw_requirement>`.
190
191Building PDF output is optional and can be disabled by removing LaTex from the
192PATH.
193
194.. Note::
195 For building the documentation all tools needed to build the firmware must
196 be available.
197
198Building the Reference Manual
199-----------------------------
200.. code-block:: bash
201
202 cd <TF-M base folder>
203 mkdir cmake_doc
204 cd cmake_doc
205 cmake ../ -G"Unix Makefiles" -DTARGET_PLATFORM=AN521 -DCOMPILER=GNUARM
206 cmake --build ./ -- install_doc
207
208The documentation files will be available under the directory::
209
210 cmake_doc/install/doc/reference_manual
211
212Building the User Guide
213-----------------------
214.. code-block:: bash
215
216 cd <TF-M base folder>
217 mkdir cmake_doc
218 cd cmake_doc
219 cmake ../ -G"Unix Makefiles" -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG
220 cmake --build ./ -- install_userguide
221
222The documentation files will be available under the directory::
223
224 cmake_doc/install/doc/user_guide
225
Galanakis, Minos757139a2019-11-11 15:00:11 +0000226*********************
Galanakis, Minos757139a2019-11-11 15:00:11 +0000227Configuring the build
228*********************
229The build configuration for TF-M is provided to the build system using command
230line arguments:
231
232.. list-table::
233 :widths: 20 80
234
235 * - -DPROJ_CONFIG=<file>
236 - Specifies the way the application is built.
237
238 | <file> is the absolute path to configurations file
239 named as ``Config<APP_NAME>.cmake``.
240 | i.e. On Linux:
241 ``-DPROJ_CONFIG=`readlink -f ../configs/ConfigRegression.cmake```
242
243 * - -DTARGET_PLATFORM=<target platform name>
244 - Specifies the target platform.
245 Supported platforms:
246
247 - Cortex-M33 SSE-200 subsystem for MPS2+ (AN521)
248 ``-DTARGET_PLATFORM=AN521``
249 - Cortex-M23 IoT Kit subsystem for MPS2+ (AN519)
250 ``-DTARGET_PLATFORM=AN519``
Marton Berke8aae06f2019-11-25 16:46:12 +0100251 - Arm SSE-123 Example Subsystem for MPS2+ (AN539)
252 ``-DTARGET_PLATFORM=AN539``
Mark Horvath9a5a9b92019-11-29 15:57:55 +0100253 - Cortex-M55 SSE-300 subsystem for MPS2+ FVP
254 ``-DTARGET_PLATFORM=FVP_SSE300_MPS2``
Galanakis, Minos757139a2019-11-11 15:00:11 +0000255 - Musca-A test chip board (Cortex-M33 SSE-200 subsystem)
256 ``-DTARGET_PLATFORM=MUSCA_A``
257 - Musca-B1 test chip board (Cortex-M33 SSE-200 subsystem)
258 ``-DTARGET_PLATFORM=MUSCA_B1``
Marton Berke8aae06f2019-11-25 16:46:12 +0100259 - Musca-S1 test chip board (Cortex-M33 SSE-200 subsystem)
260 ``-DTARGET_PLATFORM=MUSCA_S1``
Galanakis, Minos757139a2019-11-11 15:00:11 +0000261 - Cortex-M33 SSE-200 subsystem for MPS3 (AN524)
262 ``-DTARGET_PLATFORM=AN524``
Chris Brandb42fed52019-12-02 16:10:17 -0800263 - Cypress CYS0644ABZI-S2D44 board (PSoC64 platform)
264 ``-DTARGET_PLATFORM=psoc64``
Galanakis, Minosdc6694b2020-01-06 13:54:56 +0000265 See :doc:`Cypress PSoC 64 platform specifics </platform/ext/target/cypress/psoc64/cypress_psoc64_spec>`
Marton Berkee9803662019-11-11 14:11:05 +0100266 - DesignStart FPGA on Cloud: Cortex-M33 based platform (SSE-200_AWS platform)
267 ``-DTARGET_PLATFORM=SSE-200_AWS``
Ludovic Barre8a77bdd2020-03-26 19:53:07 +0100268 - DISCO_L562QE board (Cortex-M33 STM32L562)
269 ``-DTARGET_PLATFORM=STM_DISCO_L562QE``
270 See :doc:`STM32L5xx platform specifics </platform/ext/target/stm/stm32l5xx/readme>`
271 - NUCLEO_L552ZE_Q (Cortex-M33 STM32L552)
272 ``-DTARGET_PLATFORM=SSTM_NUCLEO_L552ZE_Q``
273 See :doc:`STM32L5xx platform specifics </platform/ext/target/stm/stm32l5xx/readme>`
Galanakis, Minos757139a2019-11-11 15:00:11 +0000274
275 * - -DCOMPILER=<compiler name>
276 - Specifies the compiler toolchain
277 The possible values are:
278
279 - ``ARMCLANG``
280 - ``GNUARM``
281 * - -DCMAKE_BUILD_TYPE=<build type>
282 - Configures debugging support.
283 The possible values are:
284
285 - ``Debug``
286 - ``Release``
287 - ``Relwithdebinfo``
288 - ``Minsizerel``
Raef Coles1bb168e2019-10-17 09:04:55 +0100289 * - -DMBEDCRYPTO_DEBUG=<ON|OFF>
Raef Colesa657a9c2019-10-24 14:36:43 +0100290 - Enables debug symbols for Mbed Crypto library. If a cryptographic
291 accelerator is enabled then this will also enable debug symbols and
292 logging for any accelerator libraries.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000293 * - -DBUILD_DWARF_VERSION=<dwarf version>
294 - Configures DWARF version.
295 The possible values are:
296
297 - 2
298 - 3
299 - 4
300
301.. Note::
302 Follow :doc:`secure boot <./tfm_secure_boot>` to build the binaries with or
303 without BL2 bootloader.
304
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000305**************
Kevin Pengd9d19202020-01-15 19:34:39 +0800306Configurations
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000307**************
Kevin Pengd9d19202020-01-15 19:34:39 +0800308Configurations files under `configs` are TF-M provided configurations for building.
309They are used by the `-DPROJ_CONFIG` argument for the build command line.
310The following table describes the differences between the configurations:
311
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000312+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
313| Configuration | Model [1]_ | TF-M LVL [2]_ | Regression [3]_ | Core Test [4]_ | IPC Test [5]_ | PSA API Test [6]_ | Comment |
314+========================+============+===============+=================+================+===============+===================+=========================+
315| Default | Library | 1 | No | No | No | No | TF-M, no tests |
316+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
317| Regression | Library | 1 | Yes | Yes | No | No | TF-M & Regression tests |
318+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
319| CoreIPC | IPC | 1 | No | No | No | No | TF-M, no tests |
320+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
321| CoreIPCTfmLevel2 | IPC | 2 | No | No | No | No | TF-M, no tests |
322+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
323| RegressionIPC | IPC | 1 | Yes | Yes | Yes | No | TF-M & Regression tests |
324+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
325| RegressionIPCTfmLevel2 | IPC | 2 | Yes | Yes | Yes | No | TF-M & Regression tests |
326+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
327| PsaApiTest | Library | 1 | No | No | No | Yes | TF-M & PSA API tests |
328+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
329| PsaApiTestIPC | IPC | 1 | No | No | No | Yes | TF-M & PSA API tests |
330+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
331| PsaApiTestIPCTfmLevel2 | IPC | 2 | No | No | No | Yes | TF-M & PSA API tests |
332+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
David Huc51e7c52020-06-01 10:45:52 +0800333| DefaultProfileS | Library | 1 | No | No | No | No | TF-M Profile Small, |
David Hu2cbf5df2020-06-15 10:41:44 +0800334| | | | | | | | no tests [7]_ |
David Huc51e7c52020-06-01 10:45:52 +0800335+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
336| RegressionProfileS | Library | 1 | Yes | Yes | No | No | TF-M Profile Small & |
David Hu2cbf5df2020-06-15 10:41:44 +0800337| | | | | | | | Regression tests [7]_ |
David Huc51e7c52020-06-01 10:45:52 +0800338+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
Kevin Pengd9d19202020-01-15 19:34:39 +0800339
340.. [1] Which TF-M Model is set: `CORE_IPC`. If `CORE_IPC` is set to true then the model is IPC model, otherwise it's library model.
341
342.. [2] The TF-M isolation level `TFM_LVL`. Currently Library model supports level 1. IPC model supports level 1 and 2.
343
344.. [3] Build regression tests or not: `REGRESSION`.
345
346.. [4] Build core tests or not: `CORE_TEST`.
347
348.. [5] Build IPC tests or not: `IPC_TEST`. It can be only enabled in IPC model
349
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000350.. [6] Build for PSA API compliance tests or not: `PSA_API_TEST`.
Kevin Pengd9d19202020-01-15 19:34:39 +0800351
David Hu2cbf5df2020-06-15 10:41:44 +0800352.. [7] Profile Small config doesn't cover all the platforms. Please check
353 Profile Small config files to find out the supported platforms.
354
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200355--------------
356
Galanakis, Minosdc6694b2020-01-06 13:54:56 +0000357*Copyright (c) 2017-2020, Arm Limited. All rights reserved.*