blob: 37232942b01f7b2596d69290994cce76c0a1c205 [file] [log] [blame]
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +01001Prerequisites
2=============
3
4This document describes the software requirements for building |TF-A| for
5AArch32 and AArch64 target platforms.
6
7It may possible to build |TF-A| with combinations of software packages that are
8different from those listed below, however only the software described in this
9document can be officially supported.
Sandrine Bailleuxb386f0a2022-07-11 10:53:42 +020010
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010011Build Host
12----------
13
14|TF-A| can be built using either a Linux or a Windows machine as the build host.
15
16A relatively recent Linux distribution is recommended for building |TF-A|. We
Boyan Karatotev60c168c2022-11-15 17:39:22 +000017have performed tests using Ubuntu 20.04 LTS (64-bit) but other distributions
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010018should also work fine as a base, provided that the necessary tools and libraries
19can be installed.
20
21.. _prerequisites_toolchain:
22
23Toolchain
24---------
25
26|TF-A| can be built with any of the following *cross-compiler* toolchains that
27target the Armv7-A or Armv8-A architectures:
28
Jayanth Dodderi Chidanand8b957ed2022-09-12 14:50:12 +010029- GCC >= 11.3.Rel1 (from the `Arm Developer website`_)
Boyan Karatotevdaf0ef62022-10-27 14:47:18 +010030
31 You will need the targets ``arm-none-eabi`` and ``aarch64-none-elf`` for
32 AArch32 and AArch64 builds respectively.
33
Harrison Mutai38a293a2022-02-23 11:37:12 +000034- Clang >= 14.0.0
35- Arm Compiler >= 6.18
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010036
37In addition, a native compiler is required to build the supporting tools.
38
39.. note::
40 The software has also been built on Windows 7 Enterprise SP1, using CMD.EXE,
41 Cygwin, and Msys (MinGW) shells, using version 5.3.1 of the GNU toolchain.
42
43.. note::
44 For instructions on how to select the cross compiler refer to
45 :ref:`Performing an Initial Build`.
46
47.. _prerequisites_software_and_libraries:
48
49Software and Libraries
50----------------------
51
52The following tools are required to obtain and build |TF-A|:
53
54- An appropriate toolchain (see :ref:`prerequisites_toolchain`)
55- GNU Make
56- Git
57
58The following libraries must be available to build one or more components or
59supporting tools:
60
Juan Pablo Conde3539c742022-10-25 19:41:02 -040061- OpenSSL >= 1.1.1 (v3.0.0 to v3.0.6 highly discouraged due to security issues)
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010062
Juan Pablo Conde3539c742022-10-25 19:41:02 -040063 Required to build the cert_create, encrypt_fw, and fiptool tools.
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010064
Juan Pablo Conde52865522022-06-28 16:56:32 -040065 .. note::
66
Juan Pablo Conde3539c742022-10-25 19:41:02 -040067 If using OpenSSL 3, older Linux versions may require it to be built from
68 source code, as it may not be available in the default package repositories.
69 Please refer to the OpenSSL project documentation for more information.
Juan Pablo Conde52865522022-06-28 16:56:32 -040070
Sandrine Bailleux878a9982022-04-22 15:47:31 +020071The following libraries are required for Trusted Board Boot and Measured Boot
72support:
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010073
Daniel Boulby831e4bc2022-09-23 09:37:20 +010074- mbed TLS == 2.28.1 (tag: ``mbedtls-2.28.1``)
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010075
76These tools are optional:
77
78- Device Tree Compiler (DTC) >= 1.4.6
79
80 Needed if you want to rebuild the provided Flattened Device Tree (FDT)
81 source files (``.dts`` files). DTC is available for Linux through the package
82 repositories of most distributions.
83
Daniel Boulbydf83a832022-05-03 16:46:16 +010084- Arm `Development Studio (Arm-DS)`_
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010085
86 The standard software package used for debugging software on Arm development
87 platforms and |FVP| models.
88
Chris Kay32b292d2021-11-02 10:19:37 +000089- Node.js >= 16
Chris Kay46e17f92020-12-09 12:56:27 +000090
91 Highly recommended, and necessary in order to install and use the packaged
92 Git hooks and helper tools. Without these tools you will need to rely on the
93 CI for feedback on commit message conformance.
94
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +010095Package Installation (Linux)
96^^^^^^^^^^^^^^^^^^^^^^^^^^^^
97
98If you are using the recommended Ubuntu distribution then you can install the
99required packages with the following command:
100
101.. code:: shell
102
Juan Pablo Conde52865522022-06-28 16:56:32 -0400103 sudo apt install build-essential git
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100104
105The optional packages can be installed using:
106
107.. code:: shell
108
109 sudo apt install device-tree-compiler
110
Chris Kayd855ae22022-10-10 14:34:23 +0100111Additionally, to install a version of Node.js compatible with TF-A's repository
112scripts, you can use the `Node Version Manager`_. To install both NVM and an
113appropriate version of Node.js, run the following **from the root directory of
114the repository**:
Chris Kay46e17f92020-12-09 12:56:27 +0000115
116.. code:: shell
117
Chris Kayd855ae22022-10-10 14:34:23 +0100118 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
119 exec "$SHELL" -ic "nvm install; exec $SHELL"
Chris Kay46e17f92020-12-09 12:56:27 +0000120
121.. _Node Version Manager: https://github.com/nvm-sh/nvm#install--update-script
122
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100123Supporting Files
124----------------
125
126TF-A has been tested with pre-built binaries and file systems from `Linaro
Zelalemc005fdf2021-06-01 17:05:16 -0500127Release 20.01`_. Alternatively, you can build the binaries from source using
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100128instructions in :ref:`Performing an Initial Build`.
129
130.. _prerequisites_get_source:
131
132Getting the TF-A Source
133-----------------------
134
135Source code for |TF-A| is maintained in a Git repository hosted on
136TrustedFirmware.org. To clone this repository from the server, run the following
137in your shell:
138
139.. code:: shell
140
Chris Kay46e17f92020-12-09 12:56:27 +0000141 git clone "https://review.trustedfirmware.org/TF-A/trusted-firmware-a"
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100142
Chris Kay46e17f92020-12-09 12:56:27 +0000143Additional Steps for Contributors
144^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100145
Chris Kay46e17f92020-12-09 12:56:27 +0000146If you are planning on contributing back to TF-A, there are some things you'll
147want to know.
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100148
Chris Kay46e17f92020-12-09 12:56:27 +0000149TF-A is hosted by a `Gerrit Code Review`_ server. Gerrit requires that all
150commits include a ``Change-Id`` footer, and this footer is typically
151automatically generated by a Git hook installed by you, the developer.
152
153If you have Node.js installed already, you can automatically install this hook,
154along with any additional hooks and Javascript-based tooling that we use, by
155running from within your newly-cloned repository:
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100156
157.. code:: shell
158
Chris Kay2ff006b2021-05-17 11:18:56 +0100159 npm install --no-save
Chris Kay46e17f92020-12-09 12:56:27 +0000160
161If you have opted **not** to install Node.js, you can install the Gerrit hook
162manually by running:
163
164.. code:: shell
165
166 curl -Lo $(git rev-parse --git-dir)/hooks/commit-msg https://review.trustedfirmware.org/tools/hooks/commit-msg
167 chmod +x $(git rev-parse --git-dir)/hooks/commit-msg
168
169You can read more about Git hooks in the *githooks* page of the Git
170documentation, available `here <https://git-scm.com/docs/githooks>`_.
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100171
172--------------
173
Harrison Mutai38a293a2022-02-23 11:37:12 +0000174*Copyright (c) 2021-2022, Arm Limited. All rights reserved.*
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100175
Sandrine Bailleuxe356a182022-04-15 11:17:40 +0200176.. _Arm Developer website: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads
Chris Kay46e17f92020-12-09 12:56:27 +0000177.. _Gerrit Code Review: https://www.gerritcodereview.com/
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +0100178.. _Linaro Release Notes: https://community.arm.com/dev-platforms/w/docs/226/old-release-notes
179.. _Linaro instructions: https://community.arm.com/dev-platforms/w/docs/304/arm-reference-platforms-deliverables
Daniel Boulbydf83a832022-05-03 16:46:16 +0100180.. _Development Studio (Arm-DS): https://developer.arm.com/Tools%20and%20Software/Arm%20Development%20Studio
Zelalemc005fdf2021-06-01 17:05:16 -0500181.. _Linaro Release 20.01: http://releases.linaro.org/members/arm/platforms/20.01