Performing an Initial Build =========================== - Before building TF-A, the environment variable ``CROSS_COMPILE`` must point to the Linaro cross compiler. For AArch64: .. code:: shell export CROSS_COMPILE=/bin/aarch64-none-elf- For AArch32: .. code:: shell export CROSS_COMPILE=/bin/arm-none-eabi- It is possible to build TF-A using Clang or Arm Compiler 6. To do so ``CC`` needs to point to the clang or armclang binary, which will also select the clang or armclang assembler. Arm Compiler 6 will be selected when the base name of the path assigned to ``CC`` matches the string 'armclang'. GNU binutils are required since the TF-A build system doesn't currently support Arm Scatter files. Meaning the GNU linker is used by default for Arm Compiler 6. Because of this dependency, ``CROSS_COMPILE`` should be set as described above. For AArch64 using Arm Compiler 6: .. code:: shell export CROSS_COMPILE=/bin/aarch64-none-elf- make CC=/bin/armclang PLAT= all On the other hand, Clang uses LLVM linker (LLD) and other LLVM binutils by default instead of GNU utilities (LLVM linker (LLD) 14.0.0 is known to work with TF-A). ``CROSS_COMPILE`` need not be set for Clang. Please note, that the default linker may be manually overridden using the ``LD`` variable. Clang will be selected when the base name of the path assigned to ``CC`` contains the string 'clang'. This is to allow both clang and clang-X.Y to work. For AArch64 using clang: .. code:: shell make CC=/bin/clang PLAT= all - Change to the root directory of the TF-A source tree and build. For AArch64: .. code:: shell make PLAT= all For AArch32: .. code:: shell make PLAT= ARCH=aarch32 AARCH32_SP=sp_min all Notes: - If ``PLAT`` is not specified, ``fvp`` is assumed by default. See the :ref:`Build Options` document for more information on available build options. - (AArch32 only) Currently only ``PLAT=fvp`` is supported. - (AArch32 only) ``AARCH32_SP`` is the AArch32 EL3 Runtime Software and it corresponds to the BL32 image. A minimal ``AARCH32_SP``, sp_min, is provided by TF-A to demonstrate how PSCI Library can be integrated with an AArch32 EL3 Runtime Software. Some AArch32 EL3 Runtime Software may include other runtime services, for example Trusted OS services. A guide to integrate PSCI library with AArch32 EL3 Runtime Software can be found at :ref:`PSCI Library Integration guide for Armv8-A AArch32 systems`. - (AArch64 only) The TSP (Test Secure Payload), corresponding to the BL32 image, is not compiled in by default. Refer to the :ref:`Test Secure Payload (TSP) and Dispatcher (TSPD)` document for details on building the TSP. - By default this produces a release version of the build. To produce a debug version instead, refer to the "Debugging options" section below. - The build process creates products in a ``build`` directory tree, building the objects and binaries for each boot loader stage in separate sub-directories. The following boot loader binary files are created from the corresponding ELF files: - ``build///bl1.bin`` - ``build///bl2.bin`` - ``build///bl31.bin`` (AArch64 only) - ``build///bl32.bin`` (mandatory for AArch32) where ```` is the name of the chosen platform and ```` is either ``debug`` or ``release``. The actual number of images might differ depending on the platform. - Build products for a specific build variant can be removed using: .. code:: shell make DEBUG= PLAT= clean ... where ```` is ``0`` or ``1``, as specified when building. The build tree can be removed completely using: .. code:: shell make realclean -------------- *Copyright (c) 2020-2022, Arm Limited. All rights reserved.*