xref: /rk3399_ARM-atf/docs/getting_started/initial-build.rst (revision ebd6efae67c6a086bc97d807a638bde324d936dc)
1Performing an Initial Build
2===========================
3
4-  Before building TF-A, the environment variable ``CROSS_COMPILE`` must point
5   to the Linaro cross compiler.
6
7   For AArch64:
8
9   .. code:: shell
10
11       export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
12
13   For AArch32:
14
15   .. code:: shell
16
17       export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-eabi-
18
19   It is possible to build TF-A using Clang or Arm Compiler 6. To do so
20   ``CC`` needs to point to the clang or armclang binary, which will
21   also select the clang or armclang assembler. Be aware that the
22   GNU linker is used by default.  In case of being needed the linker
23   can be overridden using the ``LD`` variable. Clang linker version 6 is
24   known to work with TF-A.
25
26   In both cases ``CROSS_COMPILE`` should be set as described above.
27
28   Arm Compiler 6 will be selected when the base name of the path assigned
29   to ``CC`` matches the string 'armclang'.
30
31   For AArch64 using Arm Compiler 6:
32
33   .. code:: shell
34
35       export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
36       make CC=<path-to-armclang>/bin/armclang PLAT=<platform> all
37
38   Clang will be selected when the base name of the path assigned to ``CC``
39   contains the string 'clang'. This is to allow both clang and clang-X.Y
40   to work.
41
42   For AArch64 using clang:
43
44   .. code:: shell
45
46       export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
47       make CC=<path-to-clang>/bin/clang PLAT=<platform> all
48
49-  Change to the root directory of the TF-A source tree and build.
50
51   For AArch64:
52
53   .. code:: shell
54
55       make PLAT=<platform> all
56
57   For AArch32:
58
59   .. code:: shell
60
61       make PLAT=<platform> ARCH=aarch32 AARCH32_SP=sp_min all
62
63   Notes:
64
65   -  If ``PLAT`` is not specified, ``fvp`` is assumed by default. See the
66      :ref:`Build Options` document for more information on available build
67      options.
68
69   -  (AArch32 only) Currently only ``PLAT=fvp`` is supported.
70
71   -  (AArch32 only) ``AARCH32_SP`` is the AArch32 EL3 Runtime Software and it
72      corresponds to the BL32 image. A minimal ``AARCH32_SP``, sp_min, is
73      provided by TF-A to demonstrate how PSCI Library can be integrated with
74      an AArch32 EL3 Runtime Software. Some AArch32 EL3 Runtime Software may
75      include other runtime services, for example Trusted OS services. A guide
76      to integrate PSCI library with AArch32 EL3 Runtime Software can be found
77      at :ref:`PSCI Library Integration guide for Armv8-A AArch32 systems`.
78
79   -  (AArch64 only) The TSP (Test Secure Payload), corresponding to the BL32
80      image, is not compiled in by default. Refer to the
81      :ref:`Test Secure Payload (TSP) and Dispatcher (TSPD)` document for
82      details on building the TSP.
83
84   -  By default this produces a release version of the build. To produce a
85      debug version instead, refer to the "Debugging options" section below.
86
87   -  The build process creates products in a ``build`` directory tree, building
88      the objects and binaries for each boot loader stage in separate
89      sub-directories. The following boot loader binary files are created
90      from the corresponding ELF files:
91
92      -  ``build/<platform>/<build-type>/bl1.bin``
93      -  ``build/<platform>/<build-type>/bl2.bin``
94      -  ``build/<platform>/<build-type>/bl31.bin`` (AArch64 only)
95      -  ``build/<platform>/<build-type>/bl32.bin`` (mandatory for AArch32)
96
97      where ``<platform>`` is the name of the chosen platform and ``<build-type>``
98      is either ``debug`` or ``release``. The actual number of images might differ
99      depending on the platform.
100
101-  Build products for a specific build variant can be removed using:
102
103   .. code:: shell
104
105       make DEBUG=<D> PLAT=<platform> clean
106
107   ... where ``<D>`` is ``0`` or ``1``, as specified when building.
108
109   The build tree can be removed completely using:
110
111   .. code:: shell
112
113       make realclean
114
115--------------
116
117*Copyright (c) 2019, Arm Limited. All rights reserved.*
118