143f35ef5SPaul BeesleyPrerequisites 243f35ef5SPaul Beesley============= 343f35ef5SPaul Beesley 443f35ef5SPaul BeesleyThis document describes the software requirements for building |TF-A| for 543f35ef5SPaul BeesleyAArch32 and AArch64 target platforms. 643f35ef5SPaul Beesley 743f35ef5SPaul BeesleyIt may possible to build |TF-A| with combinations of software packages that are 843f35ef5SPaul Beesleydifferent from those listed below, however only the software described in this 943f35ef5SPaul Beesleydocument can be officially supported. 104a1bcd50SSandrine Bailleux 1143f35ef5SPaul BeesleyBuild Host 1243f35ef5SPaul Beesley---------- 1343f35ef5SPaul Beesley 1443f35ef5SPaul Beesley|TF-A| can be built using either a Linux or a Windows machine as the build host. 1543f35ef5SPaul Beesley 1643f35ef5SPaul BeesleyA relatively recent Linux distribution is recommended for building |TF-A|. We 1743f35ef5SPaul Beesleyhave performed tests using Ubuntu 16.04 LTS (64-bit) but other distributions 1843f35ef5SPaul Beesleyshould also work fine as a base, provided that the necessary tools and libraries 1943f35ef5SPaul Beesleycan be installed. 2043f35ef5SPaul Beesley 2143f35ef5SPaul Beesley.. _prerequisites_toolchain: 2243f35ef5SPaul Beesley 2343f35ef5SPaul BeesleyToolchain 2443f35ef5SPaul Beesley--------- 2543f35ef5SPaul Beesley 2643f35ef5SPaul Beesley|TF-A| can be built with any of the following *cross-compiler* toolchains that 2743f35ef5SPaul Beesleytarget the Armv7-A or Armv8-A architectures: 2843f35ef5SPaul Beesley 2949154435SJayanth Dodderi Chidanand- GCC >= 11.3.Rel1 (from the `Arm Developer website`_) 30a5d36574SHarrison Mutai- Clang >= 14.0.0 31a5d36574SHarrison Mutai- Arm Compiler >= 6.18 3243f35ef5SPaul Beesley 3343f35ef5SPaul BeesleyIn addition, a native compiler is required to build the supporting tools. 3443f35ef5SPaul Beesley 3543f35ef5SPaul Beesley.. note:: 3643f35ef5SPaul Beesley The software has also been built on Windows 7 Enterprise SP1, using CMD.EXE, 3743f35ef5SPaul Beesley Cygwin, and Msys (MinGW) shells, using version 5.3.1 of the GNU toolchain. 3843f35ef5SPaul Beesley 3943f35ef5SPaul Beesley.. note:: 4043f35ef5SPaul Beesley For instructions on how to select the cross compiler refer to 4143f35ef5SPaul Beesley :ref:`Performing an Initial Build`. 4243f35ef5SPaul Beesley 4343f35ef5SPaul Beesley.. _prerequisites_software_and_libraries: 4443f35ef5SPaul Beesley 4543f35ef5SPaul BeesleySoftware and Libraries 4643f35ef5SPaul Beesley---------------------- 4743f35ef5SPaul Beesley 4843f35ef5SPaul BeesleyThe following tools are required to obtain and build |TF-A|: 4943f35ef5SPaul Beesley 5043f35ef5SPaul Beesley- An appropriate toolchain (see :ref:`prerequisites_toolchain`) 5143f35ef5SPaul Beesley- GNU Make 5243f35ef5SPaul Beesley- Git 5343f35ef5SPaul Beesley 5443f35ef5SPaul BeesleyThe following libraries must be available to build one or more components or 5543f35ef5SPaul Beesleysupporting tools: 5643f35ef5SPaul Beesley 579bc52d33SJuan Pablo Conde- OpenSSL >= 3.0 5843f35ef5SPaul Beesley 5943f35ef5SPaul Beesley Required to build the cert_create tool. 6043f35ef5SPaul Beesley 618caf10acSJuan Pablo Conde .. note:: 628caf10acSJuan Pablo Conde 638caf10acSJuan Pablo Conde OpenSSL 3.0 has to be built from source code, as it's not available in 648caf10acSJuan Pablo Conde the default package repositories in recent Ubuntu versions. Please refer 658caf10acSJuan Pablo Conde to the OpenSSL project documentation for more information. 668caf10acSJuan Pablo Conde 675cae3373SSandrine BailleuxThe following libraries are required for Trusted Board Boot and Measured Boot 685cae3373SSandrine Bailleuxsupport: 6943f35ef5SPaul Beesley 70*81f4abb8SDaniel Boulby- mbed TLS == 2.28.1 (tag: ``mbedtls-2.28.1``) 7143f35ef5SPaul Beesley 7243f35ef5SPaul BeesleyThese tools are optional: 7343f35ef5SPaul Beesley 7443f35ef5SPaul Beesley- Device Tree Compiler (DTC) >= 1.4.6 7543f35ef5SPaul Beesley 7643f35ef5SPaul Beesley Needed if you want to rebuild the provided Flattened Device Tree (FDT) 7743f35ef5SPaul Beesley source files (``.dts`` files). DTC is available for Linux through the package 7843f35ef5SPaul Beesley repositories of most distributions. 7943f35ef5SPaul Beesley 804466cf82SDaniel Boulby- Arm `Development Studio (Arm-DS)`_ 8143f35ef5SPaul Beesley 8243f35ef5SPaul Beesley The standard software package used for debugging software on Arm development 8343f35ef5SPaul Beesley platforms and |FVP| models. 8443f35ef5SPaul Beesley 8535cc497dSChris Kay- Node.js >= 16 86ba39362fSChris Kay 87ba39362fSChris Kay Highly recommended, and necessary in order to install and use the packaged 88ba39362fSChris Kay Git hooks and helper tools. Without these tools you will need to rely on the 89ba39362fSChris Kay CI for feedback on commit message conformance. 90ba39362fSChris Kay 9143f35ef5SPaul BeesleyPackage Installation (Linux) 9243f35ef5SPaul Beesley^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9343f35ef5SPaul Beesley 9443f35ef5SPaul BeesleyIf you are using the recommended Ubuntu distribution then you can install the 9543f35ef5SPaul Beesleyrequired packages with the following command: 9643f35ef5SPaul Beesley 9743f35ef5SPaul Beesley.. code:: shell 9843f35ef5SPaul Beesley 998caf10acSJuan Pablo Conde sudo apt install build-essential git 10043f35ef5SPaul Beesley 10143f35ef5SPaul BeesleyThe optional packages can be installed using: 10243f35ef5SPaul Beesley 10343f35ef5SPaul Beesley.. code:: shell 10443f35ef5SPaul Beesley 10543f35ef5SPaul Beesley sudo apt install device-tree-compiler 10643f35ef5SPaul Beesley 107ba39362fSChris KayAdditionally, to install an up-to-date version of Node.js, you can use the `Node 10835cc497dSChris KayVersion Manager`_ to install a version of your choosing (we recommend 16, but 109ba39362fSChris Kaylater LTS versions might offer a more stable experience): 110ba39362fSChris Kay 111ba39362fSChris Kay.. code:: shell 112ba39362fSChris Kay 11335cc497dSChris Kay curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | "$SHELL" 11435cc497dSChris Kay exec "$SHELL" -ic "nvm install 16; exec $SHELL" 115ba39362fSChris Kay 116ba39362fSChris Kay.. _Node Version Manager: https://github.com/nvm-sh/nvm#install--update-script 117ba39362fSChris Kay 11843f35ef5SPaul BeesleySupporting Files 11943f35ef5SPaul Beesley---------------- 12043f35ef5SPaul Beesley 12143f35ef5SPaul BeesleyTF-A has been tested with pre-built binaries and file systems from `Linaro 12299a99eb4SZelalemRelease 20.01`_. Alternatively, you can build the binaries from source using 12343f35ef5SPaul Beesleyinstructions in :ref:`Performing an Initial Build`. 12443f35ef5SPaul Beesley 12543f35ef5SPaul Beesley.. _prerequisites_get_source: 12643f35ef5SPaul Beesley 12743f35ef5SPaul BeesleyGetting the TF-A Source 12843f35ef5SPaul Beesley----------------------- 12943f35ef5SPaul Beesley 13043f35ef5SPaul BeesleySource code for |TF-A| is maintained in a Git repository hosted on 13143f35ef5SPaul BeesleyTrustedFirmware.org. To clone this repository from the server, run the following 13243f35ef5SPaul Beesleyin your shell: 13343f35ef5SPaul Beesley 13443f35ef5SPaul Beesley.. code:: shell 13543f35ef5SPaul Beesley 136ba39362fSChris Kay git clone "https://review.trustedfirmware.org/TF-A/trusted-firmware-a" 13743f35ef5SPaul Beesley 138ba39362fSChris KayAdditional Steps for Contributors 139ba39362fSChris Kay^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 14043f35ef5SPaul Beesley 141ba39362fSChris KayIf you are planning on contributing back to TF-A, there are some things you'll 142ba39362fSChris Kaywant to know. 14343f35ef5SPaul Beesley 144ba39362fSChris KayTF-A is hosted by a `Gerrit Code Review`_ server. Gerrit requires that all 145ba39362fSChris Kaycommits include a ``Change-Id`` footer, and this footer is typically 146ba39362fSChris Kayautomatically generated by a Git hook installed by you, the developer. 147ba39362fSChris Kay 148ba39362fSChris KayIf you have Node.js installed already, you can automatically install this hook, 149ba39362fSChris Kayalong with any additional hooks and Javascript-based tooling that we use, by 150ba39362fSChris Kayrunning from within your newly-cloned repository: 15143f35ef5SPaul Beesley 15243f35ef5SPaul Beesley.. code:: shell 15343f35ef5SPaul Beesley 154a4371d1cSChris Kay npm install --no-save 155ba39362fSChris Kay 156ba39362fSChris KayIf you have opted **not** to install Node.js, you can install the Gerrit hook 157ba39362fSChris Kaymanually by running: 158ba39362fSChris Kay 159ba39362fSChris Kay.. code:: shell 160ba39362fSChris Kay 161ba39362fSChris Kay curl -Lo $(git rev-parse --git-dir)/hooks/commit-msg https://review.trustedfirmware.org/tools/hooks/commit-msg 162ba39362fSChris Kay chmod +x $(git rev-parse --git-dir)/hooks/commit-msg 163ba39362fSChris Kay 164ba39362fSChris KayYou can read more about Git hooks in the *githooks* page of the Git 165ba39362fSChris Kaydocumentation, available `here <https://git-scm.com/docs/githooks>`_. 16643f35ef5SPaul Beesley 16743f35ef5SPaul Beesley-------------- 16843f35ef5SPaul Beesley 169a5d36574SHarrison Mutai*Copyright (c) 2021-2022, Arm Limited. All rights reserved.* 17043f35ef5SPaul Beesley 17171a5543bSSandrine Bailleux.. _Arm Developer website: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads 172ba39362fSChris Kay.. _Gerrit Code Review: https://www.gerritcodereview.com/ 17343f35ef5SPaul Beesley.. _Linaro Release Notes: https://community.arm.com/dev-platforms/w/docs/226/old-release-notes 17443f35ef5SPaul Beesley.. _Linaro instructions: https://community.arm.com/dev-platforms/w/docs/304/arm-reference-platforms-deliverables 1754466cf82SDaniel Boulby.. _Development Studio (Arm-DS): https://developer.arm.com/Tools%20and%20Software/Arm%20Development%20Studio 17699a99eb4SZelalem.. _Linaro Release 20.01: http://releases.linaro.org/members/arm/platforms/20.01 177