1Prerequisites 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. 10Build Host 11---------- 12 13|TF-A| can be built using either a Linux or a Windows machine as the build host. 14 15A relatively recent Linux distribution is recommended for building |TF-A|. We 16have performed tests using Ubuntu 16.04 LTS (64-bit) but other distributions 17should also work fine as a base, provided that the necessary tools and libraries 18can be installed. 19 20.. _prerequisites_toolchain: 21 22Toolchain 23--------- 24 25|TF-A| can be built with any of the following *cross-compiler* toolchains that 26target the Armv7-A or Armv8-A architectures: 27 28- GCC >= 11.2-2022.02 (from the `Arm Developer website`_) 29- Clang >= 14.0.0 30- Arm Compiler >= 6.18 31 32In addition, a native compiler is required to build the supporting tools. 33 34.. note:: 35 The software has also been built on Windows 7 Enterprise SP1, using CMD.EXE, 36 Cygwin, and Msys (MinGW) shells, using version 5.3.1 of the GNU toolchain. 37 38.. note:: 39 For instructions on how to select the cross compiler refer to 40 :ref:`Performing an Initial Build`. 41 42.. _prerequisites_software_and_libraries: 43 44Software and Libraries 45---------------------- 46 47The following tools are required to obtain and build |TF-A|: 48 49- An appropriate toolchain (see :ref:`prerequisites_toolchain`) 50- GNU Make 51- Git 52 53The following libraries must be available to build one or more components or 54supporting tools: 55 56- OpenSSL >= 3.0 57 58 Required to build the cert_create tool. 59 60 .. note:: 61 62 OpenSSL 3.0 has to be built from source code, as it's not available in 63 the default package repositories in recent Ubuntu versions. Please refer 64 to the OpenSSL project documentation for more information. 65 66The following libraries are required for Trusted Board Boot and Measured Boot 67support: 68 69- mbed TLS == 2.28.0 (tag: ``mbedtls-2.28.0``) 70 71These tools are optional: 72 73- Device Tree Compiler (DTC) >= 1.4.6 74 75 Needed if you want to rebuild the provided Flattened Device Tree (FDT) 76 source files (``.dts`` files). DTC is available for Linux through the package 77 repositories of most distributions. 78 79- Arm `Development Studio (Arm-DS)`_ 80 81 The standard software package used for debugging software on Arm development 82 platforms and |FVP| models. 83 84- Node.js >= 16 85 86 Highly recommended, and necessary in order to install and use the packaged 87 Git hooks and helper tools. Without these tools you will need to rely on the 88 CI for feedback on commit message conformance. 89 90Package Installation (Linux) 91^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 92 93If you are using the recommended Ubuntu distribution then you can install the 94required packages with the following command: 95 96.. code:: shell 97 98 sudo apt install build-essential git 99 100The optional packages can be installed using: 101 102.. code:: shell 103 104 sudo apt install device-tree-compiler 105 106Additionally, to install an up-to-date version of Node.js, you can use the `Node 107Version Manager`_ to install a version of your choosing (we recommend 16, but 108later LTS versions might offer a more stable experience): 109 110.. code:: shell 111 112 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | "$SHELL" 113 exec "$SHELL" -ic "nvm install 16; exec $SHELL" 114 115.. _Node Version Manager: https://github.com/nvm-sh/nvm#install--update-script 116 117Supporting Files 118---------------- 119 120TF-A has been tested with pre-built binaries and file systems from `Linaro 121Release 20.01`_. Alternatively, you can build the binaries from source using 122instructions in :ref:`Performing an Initial Build`. 123 124.. _prerequisites_get_source: 125 126Getting the TF-A Source 127----------------------- 128 129Source code for |TF-A| is maintained in a Git repository hosted on 130TrustedFirmware.org. To clone this repository from the server, run the following 131in your shell: 132 133.. code:: shell 134 135 git clone "https://review.trustedfirmware.org/TF-A/trusted-firmware-a" 136 137Additional Steps for Contributors 138^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 139 140If you are planning on contributing back to TF-A, there are some things you'll 141want to know. 142 143TF-A is hosted by a `Gerrit Code Review`_ server. Gerrit requires that all 144commits include a ``Change-Id`` footer, and this footer is typically 145automatically generated by a Git hook installed by you, the developer. 146 147If you have Node.js installed already, you can automatically install this hook, 148along with any additional hooks and Javascript-based tooling that we use, by 149running from within your newly-cloned repository: 150 151.. code:: shell 152 153 npm install --no-save 154 155If you have opted **not** to install Node.js, you can install the Gerrit hook 156manually by running: 157 158.. code:: shell 159 160 curl -Lo $(git rev-parse --git-dir)/hooks/commit-msg https://review.trustedfirmware.org/tools/hooks/commit-msg 161 chmod +x $(git rev-parse --git-dir)/hooks/commit-msg 162 163You can read more about Git hooks in the *githooks* page of the Git 164documentation, available `here <https://git-scm.com/docs/githooks>`_. 165 166-------------- 167 168*Copyright (c) 2021-2022, Arm Limited. All rights reserved.* 169 170.. _Arm Developer website: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads 171.. _Gerrit Code Review: https://www.gerritcodereview.com/ 172.. _Linaro Release Notes: https://community.arm.com/dev-platforms/w/docs/226/old-release-notes 173.. _Linaro instructions: https://community.arm.com/dev-platforms/w/docs/304/arm-reference-platforms-deliverables 174.. _Development Studio (Arm-DS): https://developer.arm.com/Tools%20and%20Software/Arm%20Development%20Studio 175.. _Linaro Release 20.01: http://releases.linaro.org/members/arm/platforms/20.01 176