blob: 44f0b0aef8767eb3de98766806476a05e7e78016 [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>
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
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
94tests for the Internal Trusted Storage, Secure Storage, Crypto and Attestation
95services 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
Jamie Fox6b6a19b2019-09-30 16:54:17 +010099 -DPSA_API_TEST_CRYPTO=ON
Karl Zhang1895a2c2020-03-08 18:27:32 +0800100 -DPSA_API_TEST_INITIAL_ATTESTATION=ON
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200101
102respectively for the corresponding service. For example, to enable the PSA API
103tests for the Crypto service only:
104
105.. code-block:: bash
106
107 cd <TF-M base folder>
108 cd trusted-firmware-m
109 mkdir cmake_psa_test
110 cd cmake_psa_test
Antonio de Angelis0169b9f2019-06-28 11:37:24 +0100111 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 +0200112 cmake --build ./ -- install
113
Jaykumar Pitambarbhai Patel6891b8b2020-01-23 14:32:20 +0530114Build for PSA FF (IPC) compliance tests
115=======================================
116
117The build system assumes that the PSA FF compliance test suite is checked out
118at the same level of the TF-M root folder and the default name for the build
119folder has been used when compiling the PSA FF compliance tests.
120
121Parse the PSA FF compliance tests partition manifests using a tool script named
122as ``tfm_parse_manifest_list.py``. This tool updates the TFM partitions data
123structure with PSA test suite partitions detail and creates the manifest output
124files that are required for the PSA test suite build. Using these manifest
125output files, build the PSA FF compliance tests as per the instructions
126given in the PSA FF compliance tests README.
127
128.. code-block:: bash
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000129
Jaykumar Pitambarbhai Patel6891b8b2020-01-23 14:32:20 +0530130 cd <TF-M base folder>
131 cd trusted-firmware-m
Shawn Shanadfb80f2020-03-11 10:25:21 +0800132 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 +0530133
134The build system provides the support for linking with prebuilt PSA FF
135compliance NS and S test libraries when using the ``ConfigPsaApiTestIPC.cmake``
136or ``ConfigPsaApiTestIPCTfmLevel2.cmake`` config file. The PSA FF compliance
137tests need to be enabled at the build configuration step by defining::
138
139 -DPSA_API_TEST_IPC=ON.
140
141For example, to enable the PSA FF tests for ConfigPsaApiTestIPCTfmLevel2.cmake
142config :
143
144.. code-block:: bash
145
146 cd <TF-M base folder>
147 cd trusted-firmware-m
148 mkdir cmake_psa_test
149 cd cmake_psa_test
150 cmake -G"Unix Makefiles" -DPROJ_CONFIG=`readlink -f ../configs/ConfigPsaApiTestIPCTfmLevel2.cmake` -DPSA_API_TEST_IPC=ON -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
151 cmake --build ./ -- install
152
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200153Location of build artifacts
154===========================
155The build system defines an API which allow easy usage of build
156artifacts. The ``install`` build target copies all files which might be needed
157as a dependency by external tools or build systems to the
158``<build_dir>/install/outputs``
159directory, with the following directory hierarchy:
160
161::
162
163 <build_dir>/install/outputs/fvp/
164 <build_dir>/install/outputs/<target_platform>/
165
166There is one folder for FVP testing, with more elaborate naming and
167there is an other for testing on target hardware platform (AN521, etc.), where
168naming convention is aligned with 8.3 format. The dependency tree of
169``install`` build target ensures a proper update (i.e. build) of all output
170files before the actual installation step takes place. As such it is suggested
171to use this build target to build TF-M.
172
173Export dependency files for NS applications
174-------------------------------------------
175An NS application requires a number of files to interface with TF-M.
176The build system exports these files as part of the ``install`` target and
177places them in to a single directory::
178
179 <build_dir>/install/export/tfm
180
181Further details on how to integrate a new NS app with TF-M are available in the
182:doc:`integration guide <tfm_integration_guide>`.
183
184Building the documentation
185==========================
186Please ensure the dependencies for building the firmware and the
187documentation are installed as explained in the
188:doc:`software requirements <tfm_sw_requirement>`.
189
190Building PDF output is optional and can be disabled by removing LaTex from the
191PATH.
192
193.. Note::
194 For building the documentation all tools needed to build the firmware must
195 be available.
196
197Building the Reference Manual
198-----------------------------
199.. code-block:: bash
200
201 cd <TF-M base folder>
202 mkdir cmake_doc
203 cd cmake_doc
204 cmake ../ -G"Unix Makefiles" -DTARGET_PLATFORM=AN521 -DCOMPILER=GNUARM
205 cmake --build ./ -- install_doc
206
207The documentation files will be available under the directory::
208
209 cmake_doc/install/doc/reference_manual
210
211Building the User Guide
212-----------------------
213.. code-block:: bash
214
215 cd <TF-M base folder>
216 mkdir cmake_doc
217 cd cmake_doc
218 cmake ../ -G"Unix Makefiles" -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG
219 cmake --build ./ -- install_userguide
220
221The documentation files will be available under the directory::
222
223 cmake_doc/install/doc/user_guide
224
Galanakis, Minos757139a2019-11-11 15:00:11 +0000225*********************
Galanakis, Minos757139a2019-11-11 15:00:11 +0000226Configuring the build
227*********************
228The build configuration for TF-M is provided to the build system using command
229line arguments:
230
231.. list-table::
232 :widths: 20 80
233
234 * - -DPROJ_CONFIG=<file>
235 - Specifies the way the application is built.
236
237 | <file> is the absolute path to configurations file
238 named as ``Config<APP_NAME>.cmake``.
239 | i.e. On Linux:
240 ``-DPROJ_CONFIG=`readlink -f ../configs/ConfigRegression.cmake```
241
242 * - -DTARGET_PLATFORM=<target platform name>
243 - Specifies the target platform.
244 Supported platforms:
245
246 - Cortex-M33 SSE-200 subsystem for MPS2+ (AN521)
247 ``-DTARGET_PLATFORM=AN521``
248 - Cortex-M23 IoT Kit subsystem for MPS2+ (AN519)
249 ``-DTARGET_PLATFORM=AN519``
Marton Berke8aae06f2019-11-25 16:46:12 +0100250 - Arm SSE-123 Example Subsystem for MPS2+ (AN539)
251 ``-DTARGET_PLATFORM=AN539``
Galanakis, Minos757139a2019-11-11 15:00:11 +0000252 - Musca-A test chip board (Cortex-M33 SSE-200 subsystem)
253 ``-DTARGET_PLATFORM=MUSCA_A``
254 - Musca-B1 test chip board (Cortex-M33 SSE-200 subsystem)
255 ``-DTARGET_PLATFORM=MUSCA_B1``
Marton Berke8aae06f2019-11-25 16:46:12 +0100256 - Musca-S1 test chip board (Cortex-M33 SSE-200 subsystem)
257 ``-DTARGET_PLATFORM=MUSCA_S1``
Galanakis, Minos757139a2019-11-11 15:00:11 +0000258 - Cortex-M33 SSE-200 subsystem for MPS3 (AN524)
259 ``-DTARGET_PLATFORM=AN524``
Chris Brandb42fed52019-12-02 16:10:17 -0800260 - Cypress CYS0644ABZI-S2D44 board (PSoC64 platform)
261 ``-DTARGET_PLATFORM=psoc64``
Galanakis, Minosdc6694b2020-01-06 13:54:56 +0000262 See :doc:`Cypress PSoC 64 platform specifics </platform/ext/target/cypress/psoc64/cypress_psoc64_spec>`
Marton Berkee9803662019-11-11 14:11:05 +0100263 - DesignStart FPGA on Cloud: Cortex-M33 based platform (SSE-200_AWS platform)
264 ``-DTARGET_PLATFORM=SSE-200_AWS``
Galanakis, Minos757139a2019-11-11 15:00:11 +0000265
266 * - -DCOMPILER=<compiler name>
267 - Specifies the compiler toolchain
268 The possible values are:
269
270 - ``ARMCLANG``
271 - ``GNUARM``
272 * - -DCMAKE_BUILD_TYPE=<build type>
273 - Configures debugging support.
274 The possible values are:
275
276 - ``Debug``
277 - ``Release``
278 - ``Relwithdebinfo``
279 - ``Minsizerel``
Raef Coles1bb168e2019-10-17 09:04:55 +0100280 * - -DMBEDCRYPTO_DEBUG=<ON|OFF>
Raef Colesa657a9c2019-10-24 14:36:43 +0100281 - Enables debug symbols for Mbed Crypto library. If a cryptographic
282 accelerator is enabled then this will also enable debug symbols and
283 logging for any accelerator libraries.
Galanakis, Minos757139a2019-11-11 15:00:11 +0000284 * - -DBUILD_DWARF_VERSION=<dwarf version>
285 - Configures DWARF version.
286 The possible values are:
287
288 - 2
289 - 3
290 - 4
291
292.. Note::
293 Follow :doc:`secure boot <./tfm_secure_boot>` to build the binaries with or
294 without BL2 bootloader.
295
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000296**************
Kevin Pengd9d19202020-01-15 19:34:39 +0800297Configurations
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000298**************
Kevin Pengd9d19202020-01-15 19:34:39 +0800299Configurations files under `configs` are TF-M provided configurations for building.
300They are used by the `-DPROJ_CONFIG` argument for the build command line.
301The following table describes the differences between the configurations:
302
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000303+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
304| Configuration | Model [1]_ | TF-M LVL [2]_ | Regression [3]_ | Core Test [4]_ | IPC Test [5]_ | PSA API Test [6]_ | Comment |
305+========================+============+===============+=================+================+===============+===================+=========================+
306| Default | Library | 1 | No | No | No | No | TF-M, no tests |
307+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
308| Regression | Library | 1 | Yes | Yes | No | No | TF-M & Regression tests |
309+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
310| CoreIPC | IPC | 1 | No | No | No | No | TF-M, no tests |
311+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
312| CoreIPCTfmLevel2 | IPC | 2 | No | No | No | No | TF-M, no tests |
313+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
314| RegressionIPC | IPC | 1 | Yes | Yes | Yes | No | TF-M & Regression tests |
315+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
316| RegressionIPCTfmLevel2 | IPC | 2 | Yes | Yes | Yes | No | TF-M & Regression tests |
317+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
318| PsaApiTest | Library | 1 | No | No | No | Yes | TF-M & PSA API tests |
319+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
320| PsaApiTestIPC | IPC | 1 | No | No | No | Yes | TF-M & PSA API tests |
321+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
322| PsaApiTestIPCTfmLevel2 | IPC | 2 | No | No | No | Yes | TF-M & PSA API tests |
323+------------------------+------------+---------------+-----------------+----------------+---------------+-------------------+-------------------------+
Kevin Pengd9d19202020-01-15 19:34:39 +0800324
325.. [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.
326
327.. [2] The TF-M isolation level `TFM_LVL`. Currently Library model supports level 1. IPC model supports level 1 and 2.
328
329.. [3] Build regression tests or not: `REGRESSION`.
330
331.. [4] Build core tests or not: `CORE_TEST`.
332
333.. [5] Build IPC tests or not: `IPC_TEST`. It can be only enabled in IPC model
334
Minos Galanakisfc6804e2020-03-10 11:03:34 +0000335.. [6] Build for PSA API compliance tests or not: `PSA_API_TEST`.
Kevin Pengd9d19202020-01-15 19:34:39 +0800336
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200337--------------
338
Galanakis, Minosdc6694b2020-01-06 13:54:56 +0000339*Copyright (c) 2017-2020, Arm Limited. All rights reserved.*