blob: fbd3c7555bc0a2a83490b846e10d119801885c9c [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
8:ref:`docs/user_guides/tfm_build_instruction: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>
30 git clone https://git.trustedfirmware.org/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
34.. Note::
35 `CMSIS_5` now uses `git-lfs` for storing large size binaries so the cloning
36 process has changed from previous releases. Please refer to the `CMSIS_5`
37 documentation for more details.
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020038
39Build steps for the AN521 target platform:
40==========================================
41.. code-block:: bash
42
43 cd <TF-M base folder>
44 cd trusted-firmware-m
45 mkdir cmake_build
46 cd cmake_build
47 cmake ../ -G"Unix Makefiles" -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG
48 cmake --build ./ -- install
49
50Regression Tests for the AN521 target platform
51==============================================
52*TF-M build regression tests on Linux*
53
54.. code-block:: bash
55
56 cd <TF-M base folder>
57 cd trusted-firmware-m
58 mkdir cmake_test
59 cd cmake_test
Ken Liue40f9a22019-06-03 16:42:47 +080060 cmake -G"Unix Makefiles" -DPROJ_CONFIG=`readlink -f ../configs/ConfigRegression.cmake` -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020061 cmake --build ./ -- install
62
63*TF-M build regression tests on Windows*
64
65.. code-block:: bash
66
67 cd <TF-M base folder>
68 cd trusted-firmware-m
69 mkdir cmake_test
70 cd cmake_test
Ken Liue40f9a22019-06-03 16:42:47 +080071 cmake -G"Unix Makefiles" -DPROJ_CONFIG=`cygpath -am ../configs/ConfigRegression.cmake` -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020072 cmake --build ./ -- install
73
Jaykumar Pitambarbhai Patel6891b8b2020-01-23 14:32:20 +053074Build for PSA Developer API compliance tests
75============================================
76The build system provides the support for linking with prebuilt PSA Developer
77API compliance NS test libraries when using the ``ConfigPsaApiTest.cmake``,
Jamie Fox6b6a19b2019-09-30 16:54:17 +010078``ConfigPsaApiTestIPC.cmake`` or ``ConfigPsaApiTestIPCTfmLevel2.cmake`` config
79file. The build system assumes that the PSA API compliance test suite is checked
80out at the same level of the TF-M root folder and the default name for the build
81folder has been used when compiling the PSA API compliance tests. Each set of
82tests for the Internal Trusted Storage, Secure Storage, Crypto and Attestation
83services needs to be enabled at the build configuration step by defining::
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020084
Jamie Fox6b6a19b2019-09-30 16:54:17 +010085 -DPSA_API_TEST_INTERNAL_TRUSTED_STORAGE=ON
86 -DPSA_API_TEST_SECURE_STORAGE=ON
87 -DPSA_API_TEST_CRYPTO=ON
88 -DPSA_API_TEST_ATTESTATION=ON
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020089
90respectively for the corresponding service. For example, to enable the PSA API
91tests for the Crypto service only:
92
93.. code-block:: bash
94
95 cd <TF-M base folder>
96 cd trusted-firmware-m
97 mkdir cmake_psa_test
98 cd cmake_psa_test
Antonio de Angelis0169b9f2019-06-28 11:37:24 +010099 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 +0200100 cmake --build ./ -- install
101
Jaykumar Pitambarbhai Patel6891b8b2020-01-23 14:32:20 +0530102Build for PSA FF (IPC) compliance tests
103=======================================
104
105The build system assumes that the PSA FF compliance test suite is checked out
106at the same level of the TF-M root folder and the default name for the build
107folder has been used when compiling the PSA FF compliance tests.
108
109Parse the PSA FF compliance tests partition manifests using a tool script named
110as ``tfm_parse_manifest_list.py``. This tool updates the TFM partitions data
111structure with PSA test suite partitions detail and creates the manifest output
112files that are required for the PSA test suite build. Using these manifest
113output files, build the PSA FF compliance tests as per the instructions
114given in the PSA FF compliance tests README.
115
116.. code-block:: bash
117 cd <TF-M base folder>
118 cd trusted-firmware-m
119 python tools/tfm_parse_manifest_list.py -m tools/psa_ff_test_manifest_list.yaml append
120
121The build system provides the support for linking with prebuilt PSA FF
122compliance NS and S test libraries when using the ``ConfigPsaApiTestIPC.cmake``
123or ``ConfigPsaApiTestIPCTfmLevel2.cmake`` config file. The PSA FF compliance
124tests need to be enabled at the build configuration step by defining::
125
126 -DPSA_API_TEST_IPC=ON.
127
128For example, to enable the PSA FF tests for ConfigPsaApiTestIPCTfmLevel2.cmake
129config :
130
131.. code-block:: bash
132
133 cd <TF-M base folder>
134 cd trusted-firmware-m
135 mkdir cmake_psa_test
136 cd cmake_psa_test
137 cmake -G"Unix Makefiles" -DPROJ_CONFIG=`readlink -f ../configs/ConfigPsaApiTestIPCTfmLevel2.cmake` -DPSA_API_TEST_IPC=ON -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
138 cmake --build ./ -- install
139
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200140Location of build artifacts
141===========================
142The build system defines an API which allow easy usage of build
143artifacts. The ``install`` build target copies all files which might be needed
144as a dependency by external tools or build systems to the
145``<build_dir>/install/outputs``
146directory, with the following directory hierarchy:
147
148::
149
150 <build_dir>/install/outputs/fvp/
151 <build_dir>/install/outputs/<target_platform>/
152
153There is one folder for FVP testing, with more elaborate naming and
154there is an other for testing on target hardware platform (AN521, etc.), where
155naming convention is aligned with 8.3 format. The dependency tree of
156``install`` build target ensures a proper update (i.e. build) of all output
157files before the actual installation step takes place. As such it is suggested
158to use this build target to build TF-M.
159
160Export dependency files for NS applications
161-------------------------------------------
162An NS application requires a number of files to interface with TF-M.
163The build system exports these files as part of the ``install`` target and
164places them in to a single directory::
165
166 <build_dir>/install/export/tfm
167
168Further details on how to integrate a new NS app with TF-M are available in the
169:doc:`integration guide <tfm_integration_guide>`.
170
171Building the documentation
172==========================
173Please ensure the dependencies for building the firmware and the
174documentation are installed as explained in the
175:doc:`software requirements <tfm_sw_requirement>`.
176
177Building PDF output is optional and can be disabled by removing LaTex from the
178PATH.
179
180.. Note::
181 For building the documentation all tools needed to build the firmware must
182 be available.
183
184Building the Reference Manual
185-----------------------------
186.. code-block:: bash
187
188 cd <TF-M base folder>
189 mkdir cmake_doc
190 cd cmake_doc
191 cmake ../ -G"Unix Makefiles" -DTARGET_PLATFORM=AN521 -DCOMPILER=GNUARM
192 cmake --build ./ -- install_doc
193
194The documentation files will be available under the directory::
195
196 cmake_doc/install/doc/reference_manual
197
198Building the User Guide
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=ARMCLANG
206 cmake --build ./ -- install_userguide
207
208The documentation files will be available under the directory::
209
210 cmake_doc/install/doc/user_guide
211
Galanakis, Minos757139a2019-11-11 15:00:11 +0000212*********************
213External dependencies
214*********************
215- `CMSIS_5` is used to import RTX for the example non-secure app
216- `Mbed Crypto` is used as crypto library on the secure side
217
218*********************
219Configuring the build
220*********************
221The build configuration for TF-M is provided to the build system using command
222line arguments:
223
224.. list-table::
225 :widths: 20 80
226
227 * - -DPROJ_CONFIG=<file>
228 - Specifies the way the application is built.
229
230 | <file> is the absolute path to configurations file
231 named as ``Config<APP_NAME>.cmake``.
232 | i.e. On Linux:
233 ``-DPROJ_CONFIG=`readlink -f ../configs/ConfigRegression.cmake```
234
235 * - -DTARGET_PLATFORM=<target platform name>
236 - Specifies the target platform.
237 Supported platforms:
238
239 - Cortex-M33 SSE-200 subsystem for MPS2+ (AN521)
240 ``-DTARGET_PLATFORM=AN521``
241 - Cortex-M23 IoT Kit subsystem for MPS2+ (AN519)
242 ``-DTARGET_PLATFORM=AN519``
Marton Berke8aae06f2019-11-25 16:46:12 +0100243 - Arm SSE-123 Example Subsystem for MPS2+ (AN539)
244 ``-DTARGET_PLATFORM=AN539``
Galanakis, Minos757139a2019-11-11 15:00:11 +0000245 - Musca-A test chip board (Cortex-M33 SSE-200 subsystem)
246 ``-DTARGET_PLATFORM=MUSCA_A``
247 - Musca-B1 test chip board (Cortex-M33 SSE-200 subsystem)
248 ``-DTARGET_PLATFORM=MUSCA_B1``
Marton Berke8aae06f2019-11-25 16:46:12 +0100249 - Musca-S1 test chip board (Cortex-M33 SSE-200 subsystem)
250 ``-DTARGET_PLATFORM=MUSCA_S1``
Galanakis, Minos757139a2019-11-11 15:00:11 +0000251 - Cortex-M33 SSE-200 subsystem for MPS3 (AN524)
252 ``-DTARGET_PLATFORM=AN524``
Chris Brandb42fed52019-12-02 16:10:17 -0800253 - Cypress CYS0644ABZI-S2D44 board (PSoC64 platform)
254 ``-DTARGET_PLATFORM=psoc64``
Galanakis, Minosdc6694b2020-01-06 13:54:56 +0000255 See :doc:`Cypress PSoC 64 platform specifics </platform/ext/target/cypress/psoc64/cypress_psoc64_spec>`
Marton Berkee9803662019-11-11 14:11:05 +0100256 - DesignStart FPGA on Cloud: Cortex-M33 based platform (SSE-200_AWS platform)
257 ``-DTARGET_PLATFORM=SSE-200_AWS``
Galanakis, Minos757139a2019-11-11 15:00:11 +0000258
259 * - -DCOMPILER=<compiler name>
260 - Specifies the compiler toolchain
261 The possible values are:
262
263 - ``ARMCLANG``
264 - ``GNUARM``
265 * - -DCMAKE_BUILD_TYPE=<build type>
266 - Configures debugging support.
267 The possible values are:
268
269 - ``Debug``
270 - ``Release``
271 - ``Relwithdebinfo``
272 - ``Minsizerel``
Raef Coles1bb168e2019-10-17 09:04:55 +0100273 * - -DMBEDCRYPTO_DEBUG=<ON|OFF>
Raef Colesa657a9c2019-10-24 14:36:43 +0100274 - Enables debug symbols for Mbed Crypto library. If a cryptographic
275 accelerator is enabled then this will also enable debug symbols and
276 logging for any accelerator libraries.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000277 * - -DBUILD_DWARF_VERSION=<dwarf version>
278 - Configures DWARF version.
279 The possible values are:
280
281 - 2
282 - 3
283 - 4
284
285.. Note::
286 Follow :doc:`secure boot <./tfm_secure_boot>` to build the binaries with or
287 without BL2 bootloader.
288
Kevin Pengd9d19202020-01-15 19:34:39 +0800289Configurations
290==============
291Configurations files under `configs` are TF-M provided configurations for building.
292They are used by the `-DPROJ_CONFIG` argument for the build command line.
293The following table describes the differences between the configurations:
294
295+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
296| Configuration | Model [1]_ | TF-M LVL [2]_ | Regression [3]_ | Core Test [4]_ | IPC Test [5]_ | PSA API Test [6]_ |
297+========================+============+===============+=================+================+===============+===================+
298| Default | Library | 1 | No | No | No | No |
299+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
300| Regression | Library | 1 | Yes | Yes | No | No |
301+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
302| CoreIPC | IPC | 1 | No | No | No | No |
303+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
304| CoreIPCTfmLevel2 | IPC | 2 | No | No | No | No |
305+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
306| RegressionIPC | IPC | 1 | Yes | Yes | Yes | No |
307+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
308| RegressionIPCTfmLevel2 | IPC | 2 | Yes | Yes | Yes | No |
309+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
310| PsaApiTest | Library | 1 | No | No | No | Yes |
311+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
312| PsaApiTestIPC | IPC | 1 | No | No | No | Yes |
313+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
314| PsaApiTestIPCTfmLevel2 | IPC | 2 | No | No | No | Yes |
315+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+
316
317.. [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.
318
319.. [2] The TF-M isolation level `TFM_LVL`. Currently Library model supports level 1. IPC model supports level 1 and 2.
320
321.. [3] Build regression tests or not: `REGRESSION`.
322
323.. [4] Build core tests or not: `CORE_TEST`.
324
325.. [5] Build IPC tests or not: `IPC_TEST`. It can be only enabled in IPC model
326
327.. [6] `Build for PSA API compliance tests`_ or not: `PSA_API_TEST`.
328
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200329--------------
330
Galanakis, Minosdc6694b2020-01-06 13:54:56 +0000331*Copyright (c) 2017-2020, Arm Limited. All rights reserved.*