blob: 7eabfa35e4cfe9c2b63628d3c5d8b8680ad8badb [file] [log] [blame]
Paul Beesley43f35ef2019-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 Bailleux4a1bcd52022-07-11 10:53:42 +020010
Paul Beesley43f35ef2019-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
17have performed tests using Ubuntu 16.04 LTS (64-bit) but other distributions
18should 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 Chidanand49154432022-09-12 14:50:12 +010029- GCC >= 11.3.Rel1 (from the `Arm Developer website`_)
Boyan Karatotevb50838b2022-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 Mutaia5d36572022-02-23 11:37:12 +000034- Clang >= 14.0.0
35- Arm Compiler >= 6.18
Paul Beesley43f35ef2019-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 Condecf2dd172022-10-25 19:41:02 -040061- OpenSSL >= 1.1.1 (v3.0.0 to v3.0.6 highly discouraged due to security issues)
Paul Beesley43f35ef2019-05-29 13:59:40 +010062
Juan Pablo Condecf2dd172022-10-25 19:41:02 -040063 Required to build the cert_create, encrypt_fw, and fiptool tools.
Paul Beesley43f35ef2019-05-29 13:59:40 +010064
Juan Pablo Conde8caf10a2022-06-28 16:56:32 -040065 .. note::
66
Juan Pablo Condecf2dd172022-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 Conde8caf10a2022-06-28 16:56:32 -040070
Sandrine Bailleux5cae3372022-04-22 15:47:31 +020071The following libraries are required for Trusted Board Boot and Measured Boot
72support:
Paul Beesley43f35ef2019-05-29 13:59:40 +010073
Daniel Boulby81f4abb2022-09-23 09:37:20 +010074- mbed TLS == 2.28.1 (tag: ``mbedtls-2.28.1``)
Paul Beesley43f35ef2019-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 Boulby4466cf82022-05-03 16:46:16 +010084- Arm `Development Studio (Arm-DS)`_
Paul Beesley43f35ef2019-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 Kay35cc4972021-11-02 10:19:37 +000089- Node.js >= 16
Chris Kayba393622020-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 Beesley43f35ef2019-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 Conde8caf10a2022-06-28 16:56:32 -0400103 sudo apt install build-essential git
Paul Beesley43f35ef2019-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 Kay10c969c2022-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 Kayba393622020-12-09 12:56:27 +0000115
116.. code:: shell
117
Chris Kay10c969c2022-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 Kayba393622020-12-09 12:56:27 +0000120
121.. _Node Version Manager: https://github.com/nvm-sh/nvm#install--update-script
122
Paul Beesley43f35ef2019-05-29 13:59:40 +0100123Supporting Files
124----------------
125
126TF-A has been tested with pre-built binaries and file systems from `Linaro
Zelalem99a99eb2021-06-01 17:05:16 -0500127Release 20.01`_. Alternatively, you can build the binaries from source using
Paul Beesley43f35ef2019-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 Kayba393622020-12-09 12:56:27 +0000141 git clone "https://review.trustedfirmware.org/TF-A/trusted-firmware-a"
Paul Beesley43f35ef2019-05-29 13:59:40 +0100142
Chris Kayba393622020-12-09 12:56:27 +0000143Additional Steps for Contributors
144^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Paul Beesley43f35ef2019-05-29 13:59:40 +0100145
Chris Kayba393622020-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 Beesley43f35ef2019-05-29 13:59:40 +0100148
Chris Kayba393622020-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 Beesley43f35ef2019-05-29 13:59:40 +0100156
157.. code:: shell
158
Chris Kaya4371d12021-05-17 11:18:56 +0100159 npm install --no-save
Chris Kayba393622020-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 Beesley43f35ef2019-05-29 13:59:40 +0100171
172--------------
173
Harrison Mutaia5d36572022-02-23 11:37:12 +0000174*Copyright (c) 2021-2022, Arm Limited. All rights reserved.*
Paul Beesley43f35ef2019-05-29 13:59:40 +0100175
Sandrine Bailleux71a55432022-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 Kayba393622020-12-09 12:56:27 +0000177.. _Gerrit Code Review: https://www.gerritcodereview.com/
Paul Beesley43f35ef2019-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 Boulby4466cf82022-05-03 16:46:16 +0100180.. _Development Studio (Arm-DS): https://developer.arm.com/Tools%20and%20Software/Arm%20Development%20Studio
Zelalem99a99eb2021-06-01 17:05:16 -0500181.. _Linaro Release 20.01: http://releases.linaro.org/members/arm/platforms/20.01