1*43f35ef5SPaul BeesleyBuild Options 2*43f35ef5SPaul Beesley============= 3*43f35ef5SPaul Beesley 4*43f35ef5SPaul BeesleyThe TF-A build system supports the following build options. Unless mentioned 5*43f35ef5SPaul Beesleyotherwise, these options are expected to be specified at the build command 6*43f35ef5SPaul Beesleyline and are not to be modified in any component makefiles. Note that the 7*43f35ef5SPaul Beesleybuild system doesn't track dependency for build options. Therefore, if any of 8*43f35ef5SPaul Beesleythe build options are changed from a previous build, a clean build must be 9*43f35ef5SPaul Beesleyperformed. 10*43f35ef5SPaul Beesley 11*43f35ef5SPaul Beesley.. _build_options_common: 12*43f35ef5SPaul Beesley 13*43f35ef5SPaul BeesleyCommon build options 14*43f35ef5SPaul Beesley-------------------- 15*43f35ef5SPaul Beesley 16*43f35ef5SPaul Beesley- ``AARCH32_INSTRUCTION_SET``: Choose the AArch32 instruction set that the 17*43f35ef5SPaul Beesley compiler should use. Valid values are T32 and A32. It defaults to T32 due to 18*43f35ef5SPaul Beesley code having a smaller resulting size. 19*43f35ef5SPaul Beesley 20*43f35ef5SPaul Beesley- ``AARCH32_SP`` : Choose the AArch32 Secure Payload component to be built as 21*43f35ef5SPaul Beesley as the BL32 image when ``ARCH=aarch32``. The value should be the path to the 22*43f35ef5SPaul Beesley directory containing the SP source, relative to the ``bl32/``; the directory 23*43f35ef5SPaul Beesley is expected to contain a makefile called ``<aarch32_sp-value>.mk``. 24*43f35ef5SPaul Beesley 25*43f35ef5SPaul Beesley- ``ARCH`` : Choose the target build architecture for TF-A. It can take either 26*43f35ef5SPaul Beesley ``aarch64`` or ``aarch32`` as values. By default, it is defined to 27*43f35ef5SPaul Beesley ``aarch64``. 28*43f35ef5SPaul Beesley 29*43f35ef5SPaul Beesley- ``ARM_ARCH_MAJOR``: The major version of Arm Architecture to target when 30*43f35ef5SPaul Beesley compiling TF-A. Its value must be numeric, and defaults to 8 . See also, 31*43f35ef5SPaul Beesley *Armv8 Architecture Extensions* and *Armv7 Architecture Extensions* in 32*43f35ef5SPaul Beesley :ref:`Firmware Design`. 33*43f35ef5SPaul Beesley 34*43f35ef5SPaul Beesley- ``ARM_ARCH_MINOR``: The minor version of Arm Architecture to target when 35*43f35ef5SPaul Beesley compiling TF-A. Its value must be a numeric, and defaults to 0. See also, 36*43f35ef5SPaul Beesley *Armv8 Architecture Extensions* in :ref:`Firmware Design`. 37*43f35ef5SPaul Beesley 38*43f35ef5SPaul Beesley- ``BL2``: This is an optional build option which specifies the path to BL2 39*43f35ef5SPaul Beesley image for the ``fip`` target. In this case, the BL2 in the TF-A will not be 40*43f35ef5SPaul Beesley built. 41*43f35ef5SPaul Beesley 42*43f35ef5SPaul Beesley- ``BL2U``: This is an optional build option which specifies the path to 43*43f35ef5SPaul Beesley BL2U image. In this case, the BL2U in TF-A will not be built. 44*43f35ef5SPaul Beesley 45*43f35ef5SPaul Beesley- ``BL2_AT_EL3``: This is an optional build option that enables the use of 46*43f35ef5SPaul Beesley BL2 at EL3 execution level. 47*43f35ef5SPaul Beesley 48*43f35ef5SPaul Beesley- ``BL2_IN_XIP_MEM``: In some use-cases BL2 will be stored in eXecute In Place 49*43f35ef5SPaul Beesley (XIP) memory, like BL1. In these use-cases, it is necessary to initialize 50*43f35ef5SPaul Beesley the RW sections in RAM, while leaving the RO sections in place. This option 51*43f35ef5SPaul Beesley enable this use-case. For now, this option is only supported when BL2_AT_EL3 52*43f35ef5SPaul Beesley is set to '1'. 53*43f35ef5SPaul Beesley 54*43f35ef5SPaul Beesley- ``BL31``: This is an optional build option which specifies the path to 55*43f35ef5SPaul Beesley BL31 image for the ``fip`` target. In this case, the BL31 in TF-A will not 56*43f35ef5SPaul Beesley be built. 57*43f35ef5SPaul Beesley 58*43f35ef5SPaul Beesley- ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the 59*43f35ef5SPaul Beesley file that contains the BL31 private key in PEM format. If ``SAVE_KEYS=1``, 60*43f35ef5SPaul Beesley this file name will be used to save the key. 61*43f35ef5SPaul Beesley 62*43f35ef5SPaul Beesley- ``BL32``: This is an optional build option which specifies the path to 63*43f35ef5SPaul Beesley BL32 image for the ``fip`` target. In this case, the BL32 in TF-A will not 64*43f35ef5SPaul Beesley be built. 65*43f35ef5SPaul Beesley 66*43f35ef5SPaul Beesley- ``BL32_EXTRA1``: This is an optional build option which specifies the path to 67*43f35ef5SPaul Beesley Trusted OS Extra1 image for the ``fip`` target. 68*43f35ef5SPaul Beesley 69*43f35ef5SPaul Beesley- ``BL32_EXTRA2``: This is an optional build option which specifies the path to 70*43f35ef5SPaul Beesley Trusted OS Extra2 image for the ``fip`` target. 71*43f35ef5SPaul Beesley 72*43f35ef5SPaul Beesley- ``BL32_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the 73*43f35ef5SPaul Beesley file that contains the BL32 private key in PEM format. If ``SAVE_KEYS=1``, 74*43f35ef5SPaul Beesley this file name will be used to save the key. 75*43f35ef5SPaul Beesley 76*43f35ef5SPaul Beesley- ``BL33``: Path to BL33 image in the host file system. This is mandatory for 77*43f35ef5SPaul Beesley ``fip`` target in case TF-A BL2 is used. 78*43f35ef5SPaul Beesley 79*43f35ef5SPaul Beesley- ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the 80*43f35ef5SPaul Beesley file that contains the BL33 private key in PEM format. If ``SAVE_KEYS=1``, 81*43f35ef5SPaul Beesley this file name will be used to save the key. 82*43f35ef5SPaul Beesley 83*43f35ef5SPaul Beesley- ``BRANCH_PROTECTION``: Numeric value to enable ARMv8.3 Pointer Authentication 84*43f35ef5SPaul Beesley and ARMv8.5 Branch Target Identification support for TF-A BL images themselves. 85*43f35ef5SPaul Beesley If enabled, it is needed to use a compiler that supports the option 86*43f35ef5SPaul Beesley ``-mbranch-protection``. Selects the branch protection features to use: 87*43f35ef5SPaul Beesley- 0: Default value turns off all types of branch protection 88*43f35ef5SPaul Beesley- 1: Enables all types of branch protection features 89*43f35ef5SPaul Beesley- 2: Return address signing to its standard level 90*43f35ef5SPaul Beesley- 3: Extend the signing to include leaf functions 91*43f35ef5SPaul Beesley 92*43f35ef5SPaul Beesley The table below summarizes ``BRANCH_PROTECTION`` values, GCC compilation options 93*43f35ef5SPaul Beesley and resulting PAuth/BTI features. 94*43f35ef5SPaul Beesley 95*43f35ef5SPaul Beesley +-------+--------------+-------+-----+ 96*43f35ef5SPaul Beesley | Value | GCC option | PAuth | BTI | 97*43f35ef5SPaul Beesley +=======+==============+=======+=====+ 98*43f35ef5SPaul Beesley | 0 | none | N | N | 99*43f35ef5SPaul Beesley +-------+--------------+-------+-----+ 100*43f35ef5SPaul Beesley | 1 | standard | Y | Y | 101*43f35ef5SPaul Beesley +-------+--------------+-------+-----+ 102*43f35ef5SPaul Beesley | 2 | pac-ret | Y | N | 103*43f35ef5SPaul Beesley +-------+--------------+-------+-----+ 104*43f35ef5SPaul Beesley | 3 | pac-ret+leaf | Y | N | 105*43f35ef5SPaul Beesley +-------+--------------+-------+-----+ 106*43f35ef5SPaul Beesley 107*43f35ef5SPaul Beesley This option defaults to 0 and this is an experimental feature. 108*43f35ef5SPaul Beesley Note that Pointer Authentication is enabled for Non-secure world 109*43f35ef5SPaul Beesley irrespective of the value of this option if the CPU supports it. 110*43f35ef5SPaul Beesley 111*43f35ef5SPaul Beesley- ``BUILD_MESSAGE_TIMESTAMP``: String used to identify the time and date of the 112*43f35ef5SPaul Beesley compilation of each build. It must be set to a C string (including quotes 113*43f35ef5SPaul Beesley where applicable). Defaults to a string that contains the time and date of 114*43f35ef5SPaul Beesley the compilation. 115*43f35ef5SPaul Beesley 116*43f35ef5SPaul Beesley- ``BUILD_STRING``: Input string for VERSION_STRING, which allows the TF-A 117*43f35ef5SPaul Beesley build to be uniquely identified. Defaults to the current git commit id. 118*43f35ef5SPaul Beesley 119*43f35ef5SPaul Beesley- ``CFLAGS``: Extra user options appended on the compiler's command line in 120*43f35ef5SPaul Beesley addition to the options set by the build system. 121*43f35ef5SPaul Beesley 122*43f35ef5SPaul Beesley- ``COLD_BOOT_SINGLE_CPU``: This option indicates whether the platform may 123*43f35ef5SPaul Beesley release several CPUs out of reset. It can take either 0 (several CPUs may be 124*43f35ef5SPaul Beesley brought up) or 1 (only one CPU will ever be brought up during cold reset). 125*43f35ef5SPaul Beesley Default is 0. If the platform always brings up a single CPU, there is no 126*43f35ef5SPaul Beesley need to distinguish between primary and secondary CPUs and the boot path can 127*43f35ef5SPaul Beesley be optimised. The ``plat_is_my_cpu_primary()`` and 128*43f35ef5SPaul Beesley ``plat_secondary_cold_boot_setup()`` platform porting interfaces do not need 129*43f35ef5SPaul Beesley to be implemented in this case. 130*43f35ef5SPaul Beesley 131*43f35ef5SPaul Beesley- ``CRASH_REPORTING``: A non-zero value enables a console dump of processor 132*43f35ef5SPaul Beesley register state when an unexpected exception occurs during execution of 133*43f35ef5SPaul Beesley BL31. This option defaults to the value of ``DEBUG`` - i.e. by default 134*43f35ef5SPaul Beesley this is only enabled for a debug build of the firmware. 135*43f35ef5SPaul Beesley 136*43f35ef5SPaul Beesley- ``CREATE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the 137*43f35ef5SPaul Beesley certificate generation tool to create new keys in case no valid keys are 138*43f35ef5SPaul Beesley present or specified. Allowed options are '0' or '1'. Default is '1'. 139*43f35ef5SPaul Beesley 140*43f35ef5SPaul Beesley- ``CTX_INCLUDE_AARCH32_REGS`` : Boolean option that, when set to 1, will cause 141*43f35ef5SPaul Beesley the AArch32 system registers to be included when saving and restoring the 142*43f35ef5SPaul Beesley CPU context. The option must be set to 0 for AArch64-only platforms (that 143*43f35ef5SPaul Beesley is on hardware that does not implement AArch32, or at least not at EL1 and 144*43f35ef5SPaul Beesley higher ELs). Default value is 1. 145*43f35ef5SPaul Beesley 146*43f35ef5SPaul Beesley- ``CTX_INCLUDE_FPREGS``: Boolean option that, when set to 1, will cause the FP 147*43f35ef5SPaul Beesley registers to be included when saving and restoring the CPU context. Default 148*43f35ef5SPaul Beesley is 0. 149*43f35ef5SPaul Beesley 150*43f35ef5SPaul Beesley- ``CTX_INCLUDE_PAUTH_REGS``: Boolean option that, when set to 1, enables 151*43f35ef5SPaul Beesley Pointer Authentication for Secure world. This will cause the ARMv8.3-PAuth 152*43f35ef5SPaul Beesley registers to be included when saving and restoring the CPU context as 153*43f35ef5SPaul Beesley part of world switch. Default value is 0 and this is an experimental feature. 154*43f35ef5SPaul Beesley Note that Pointer Authentication is enabled for Non-secure world irrespective 155*43f35ef5SPaul Beesley of the value of this flag if the CPU supports it. 156*43f35ef5SPaul Beesley 157*43f35ef5SPaul Beesley- ``DEBUG``: Chooses between a debug and release build. It can take either 0 158*43f35ef5SPaul Beesley (release) or 1 (debug) as values. 0 is the default. 159*43f35ef5SPaul Beesley 160*43f35ef5SPaul Beesley- ``DISABLE_BIN_GENERATION``: Boolean option to disable the generation 161*43f35ef5SPaul Beesley of the binary image. If set to 1, then only the ELF image is built. 162*43f35ef5SPaul Beesley 0 is the default. 163*43f35ef5SPaul Beesley 164*43f35ef5SPaul Beesley- ``DYN_DISABLE_AUTH``: Provides the capability to dynamically disable Trusted 165*43f35ef5SPaul Beesley Board Boot authentication at runtime. This option is meant to be enabled only 166*43f35ef5SPaul Beesley for development platforms. ``TRUSTED_BOARD_BOOT`` flag must be set if this 167*43f35ef5SPaul Beesley flag has to be enabled. 0 is the default. 168*43f35ef5SPaul Beesley 169*43f35ef5SPaul Beesley- ``E``: Boolean option to make warnings into errors. Default is 1. 170*43f35ef5SPaul Beesley 171*43f35ef5SPaul Beesley- ``EL3_PAYLOAD_BASE``: This option enables booting an EL3 payload instead of 172*43f35ef5SPaul Beesley the normal boot flow. It must specify the entry point address of the EL3 173*43f35ef5SPaul Beesley payload. Please refer to the "Booting an EL3 payload" section for more 174*43f35ef5SPaul Beesley details. 175*43f35ef5SPaul Beesley 176*43f35ef5SPaul Beesley- ``ENABLE_AMU``: Boolean option to enable Activity Monitor Unit extensions. 177*43f35ef5SPaul Beesley This is an optional architectural feature available on v8.4 onwards. Some 178*43f35ef5SPaul Beesley v8.2 implementations also implement an AMU and this option can be used to 179*43f35ef5SPaul Beesley enable this feature on those systems as well. Default is 0. 180*43f35ef5SPaul Beesley 181*43f35ef5SPaul Beesley- ``ENABLE_ASSERTIONS``: This option controls whether or not calls to ``assert()`` 182*43f35ef5SPaul Beesley are compiled out. For debug builds, this option defaults to 1, and calls to 183*43f35ef5SPaul Beesley ``assert()`` are left in place. For release builds, this option defaults to 0 184*43f35ef5SPaul Beesley and calls to ``assert()`` function are compiled out. This option can be set 185*43f35ef5SPaul Beesley independently of ``DEBUG``. It can also be used to hide any auxiliary code 186*43f35ef5SPaul Beesley that is only required for the assertion and does not fit in the assertion 187*43f35ef5SPaul Beesley itself. 188*43f35ef5SPaul Beesley 189*43f35ef5SPaul Beesley- ``ENABLE_BACKTRACE``: This option controls whether to enables backtrace 190*43f35ef5SPaul Beesley dumps or not. It is supported in both AArch64 and AArch32. However, in 191*43f35ef5SPaul Beesley AArch32 the format of the frame records are not defined in the AAPCS and they 192*43f35ef5SPaul Beesley are defined by the implementation. This implementation of backtrace only 193*43f35ef5SPaul Beesley supports the format used by GCC when T32 interworking is disabled. For this 194*43f35ef5SPaul Beesley reason enabling this option in AArch32 will force the compiler to only 195*43f35ef5SPaul Beesley generate A32 code. This option is enabled by default only in AArch64 debug 196*43f35ef5SPaul Beesley builds, but this behaviour can be overridden in each platform's Makefile or 197*43f35ef5SPaul Beesley in the build command line. 198*43f35ef5SPaul Beesley 199*43f35ef5SPaul Beesley- ``ENABLE_MPAM_FOR_LOWER_ELS``: Boolean option to enable lower ELs to use MPAM 200*43f35ef5SPaul Beesley feature. MPAM is an optional Armv8.4 extension that enables various memory 201*43f35ef5SPaul Beesley system components and resources to define partitions; software running at 202*43f35ef5SPaul Beesley various ELs can assign themselves to desired partition to control their 203*43f35ef5SPaul Beesley performance aspects. 204*43f35ef5SPaul Beesley 205*43f35ef5SPaul Beesley When this option is set to ``1``, EL3 allows lower ELs to access their own 206*43f35ef5SPaul Beesley MPAM registers without trapping into EL3. This option doesn't make use of 207*43f35ef5SPaul Beesley partitioning in EL3, however. Platform initialisation code should configure 208*43f35ef5SPaul Beesley and use partitions in EL3 as required. This option defaults to ``0``. 209*43f35ef5SPaul Beesley 210*43f35ef5SPaul Beesley- ``ENABLE_PIE``: Boolean option to enable Position Independent Executable(PIE) 211*43f35ef5SPaul Beesley support within generic code in TF-A. This option is currently only supported 212*43f35ef5SPaul Beesley in BL31. Default is 0. 213*43f35ef5SPaul Beesley 214*43f35ef5SPaul Beesley- ``ENABLE_PMF``: Boolean option to enable support for optional Performance 215*43f35ef5SPaul Beesley Measurement Framework(PMF). Default is 0. 216*43f35ef5SPaul Beesley 217*43f35ef5SPaul Beesley- ``ENABLE_PSCI_STAT``: Boolean option to enable support for optional PSCI 218*43f35ef5SPaul Beesley functions ``PSCI_STAT_RESIDENCY`` and ``PSCI_STAT_COUNT``. Default is 0. 219*43f35ef5SPaul Beesley In the absence of an alternate stat collection backend, ``ENABLE_PMF`` must 220*43f35ef5SPaul Beesley be enabled. If ``ENABLE_PMF`` is set, the residency statistics are tracked in 221*43f35ef5SPaul Beesley software. 222*43f35ef5SPaul Beesley 223*43f35ef5SPaul Beesley- ``ENABLE_RUNTIME_INSTRUMENTATION``: Boolean option to enable runtime 224*43f35ef5SPaul Beesley instrumentation which injects timestamp collection points into TF-A to 225*43f35ef5SPaul Beesley allow runtime performance to be measured. Currently, only PSCI is 226*43f35ef5SPaul Beesley instrumented. Enabling this option enables the ``ENABLE_PMF`` build option 227*43f35ef5SPaul Beesley as well. Default is 0. 228*43f35ef5SPaul Beesley 229*43f35ef5SPaul Beesley- ``ENABLE_SPE_FOR_LOWER_ELS`` : Boolean option to enable Statistical Profiling 230*43f35ef5SPaul Beesley extensions. This is an optional architectural feature for AArch64. 231*43f35ef5SPaul Beesley The default is 1 but is automatically disabled when the target architecture 232*43f35ef5SPaul Beesley is AArch32. 233*43f35ef5SPaul Beesley 234*43f35ef5SPaul Beesley- ``ENABLE_SPM`` : Boolean option to enable the Secure Partition Manager (SPM). 235*43f35ef5SPaul Beesley Refer to :ref:`Secure Partition Manager` for more details about 236*43f35ef5SPaul Beesley this feature. Default is 0. 237*43f35ef5SPaul Beesley 238*43f35ef5SPaul Beesley- ``ENABLE_SVE_FOR_NS``: Boolean option to enable Scalable Vector Extension 239*43f35ef5SPaul Beesley (SVE) for the Non-secure world only. SVE is an optional architectural feature 240*43f35ef5SPaul Beesley for AArch64. Note that when SVE is enabled for the Non-secure world, access 241*43f35ef5SPaul Beesley to SIMD and floating-point functionality from the Secure world is disabled. 242*43f35ef5SPaul Beesley This is to avoid corruption of the Non-secure world data in the Z-registers 243*43f35ef5SPaul Beesley which are aliased by the SIMD and FP registers. The build option is not 244*43f35ef5SPaul Beesley compatible with the ``CTX_INCLUDE_FPREGS`` build option, and will raise an 245*43f35ef5SPaul Beesley assert on platforms where SVE is implemented and ``ENABLE_SVE_FOR_NS`` set to 246*43f35ef5SPaul Beesley 1. The default is 1 but is automatically disabled when the target 247*43f35ef5SPaul Beesley architecture is AArch32. 248*43f35ef5SPaul Beesley 249*43f35ef5SPaul Beesley- ``ENABLE_STACK_PROTECTOR``: String option to enable the stack protection 250*43f35ef5SPaul Beesley checks in GCC. Allowed values are "all", "strong", "default" and "none". The 251*43f35ef5SPaul Beesley default value is set to "none". "strong" is the recommended stack protection 252*43f35ef5SPaul Beesley level if this feature is desired. "none" disables the stack protection. For 253*43f35ef5SPaul Beesley all values other than "none", the ``plat_get_stack_protector_canary()`` 254*43f35ef5SPaul Beesley platform hook needs to be implemented. The value is passed as the last 255*43f35ef5SPaul Beesley component of the option ``-fstack-protector-$ENABLE_STACK_PROTECTOR``. 256*43f35ef5SPaul Beesley 257*43f35ef5SPaul Beesley- ``ERROR_DEPRECATED``: This option decides whether to treat the usage of 258*43f35ef5SPaul Beesley deprecated platform APIs, helper functions or drivers within Trusted 259*43f35ef5SPaul Beesley Firmware as error. It can take the value 1 (flag the use of deprecated 260*43f35ef5SPaul Beesley APIs as error) or 0. The default is 0. 261*43f35ef5SPaul Beesley 262*43f35ef5SPaul Beesley- ``EL3_EXCEPTION_HANDLING``: When set to ``1``, enable handling of exceptions 263*43f35ef5SPaul Beesley targeted at EL3. When set ``0`` (default), no exceptions are expected or 264*43f35ef5SPaul Beesley handled at EL3, and a panic will result. This is supported only for AArch64 265*43f35ef5SPaul Beesley builds. 266*43f35ef5SPaul Beesley 267*43f35ef5SPaul Beesley- ``FAULT_INJECTION_SUPPORT``: ARMv8.4 extensions introduced support for fault 268*43f35ef5SPaul Beesley injection from lower ELs, and this build option enables lower ELs to use 269*43f35ef5SPaul Beesley Error Records accessed via System Registers to inject faults. This is 270*43f35ef5SPaul Beesley applicable only to AArch64 builds. 271*43f35ef5SPaul Beesley 272*43f35ef5SPaul Beesley This feature is intended for testing purposes only, and is advisable to keep 273*43f35ef5SPaul Beesley disabled for production images. 274*43f35ef5SPaul Beesley 275*43f35ef5SPaul Beesley- ``FIP_NAME``: This is an optional build option which specifies the FIP 276*43f35ef5SPaul Beesley filename for the ``fip`` target. Default is ``fip.bin``. 277*43f35ef5SPaul Beesley 278*43f35ef5SPaul Beesley- ``FWU_FIP_NAME``: This is an optional build option which specifies the FWU 279*43f35ef5SPaul Beesley FIP filename for the ``fwu_fip`` target. Default is ``fwu_fip.bin``. 280*43f35ef5SPaul Beesley 281*43f35ef5SPaul Beesley- ``GENERATE_COT``: Boolean flag used to build and execute the ``cert_create`` 282*43f35ef5SPaul Beesley tool to create certificates as per the Chain of Trust described in 283*43f35ef5SPaul Beesley :ref:`Trusted Board Boot`. The build system then calls ``fiptool`` to 284*43f35ef5SPaul Beesley include the certificates in the FIP and FWU_FIP. Default value is '0'. 285*43f35ef5SPaul Beesley 286*43f35ef5SPaul Beesley Specify both ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=1`` to include support 287*43f35ef5SPaul Beesley for the Trusted Board Boot feature in the BL1 and BL2 images, to generate 288*43f35ef5SPaul Beesley the corresponding certificates, and to include those certificates in the 289*43f35ef5SPaul Beesley FIP and FWU_FIP. 290*43f35ef5SPaul Beesley 291*43f35ef5SPaul Beesley Note that if ``TRUSTED_BOARD_BOOT=0`` and ``GENERATE_COT=1``, the BL1 and BL2 292*43f35ef5SPaul Beesley images will not include support for Trusted Board Boot. The FIP will still 293*43f35ef5SPaul Beesley include the corresponding certificates. This FIP can be used to verify the 294*43f35ef5SPaul Beesley Chain of Trust on the host machine through other mechanisms. 295*43f35ef5SPaul Beesley 296*43f35ef5SPaul Beesley Note that if ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=0``, the BL1 and BL2 297*43f35ef5SPaul Beesley images will include support for Trusted Board Boot, but the FIP and FWU_FIP 298*43f35ef5SPaul Beesley will not include the corresponding certificates, causing a boot failure. 299*43f35ef5SPaul Beesley 300*43f35ef5SPaul Beesley- ``GICV2_G0_FOR_EL3``: Unlike GICv3, the GICv2 architecture doesn't have 301*43f35ef5SPaul Beesley inherent support for specific EL3 type interrupts. Setting this build option 302*43f35ef5SPaul Beesley to ``1`` assumes GICv2 *Group 0* interrupts are expected to target EL3, both 303*43f35ef5SPaul Beesley by `platform abstraction layer`__ and `Interrupt Management Framework`__. 304*43f35ef5SPaul Beesley This allows GICv2 platforms to enable features requiring EL3 interrupt type. 305*43f35ef5SPaul Beesley This also means that all GICv2 Group 0 interrupts are delivered to EL3, and 306*43f35ef5SPaul Beesley the Secure Payload interrupts needs to be synchronously handed over to Secure 307*43f35ef5SPaul Beesley EL1 for handling. The default value of this option is ``0``, which means the 308*43f35ef5SPaul Beesley Group 0 interrupts are assumed to be handled by Secure EL1. 309*43f35ef5SPaul Beesley 310*43f35ef5SPaul Beesley .. __: `platform-interrupt-controller-API.rst` 311*43f35ef5SPaul Beesley .. __: `interrupt-framework-design.rst` 312*43f35ef5SPaul Beesley 313*43f35ef5SPaul Beesley- ``HANDLE_EA_EL3_FIRST``: When set to ``1``, External Aborts and SError 314*43f35ef5SPaul Beesley Interrupts will be always trapped in EL3 i.e. in BL31 at runtime. When set to 315*43f35ef5SPaul Beesley ``0`` (default), these exceptions will be trapped in the current exception 316*43f35ef5SPaul Beesley level (or in EL1 if the current exception level is EL0). 317*43f35ef5SPaul Beesley 318*43f35ef5SPaul Beesley- ``HW_ASSISTED_COHERENCY``: On most Arm systems to-date, platform-specific 319*43f35ef5SPaul Beesley software operations are required for CPUs to enter and exit coherency. 320*43f35ef5SPaul Beesley However, newer systems exist where CPUs' entry to and exit from coherency 321*43f35ef5SPaul Beesley is managed in hardware. Such systems require software to only initiate these 322*43f35ef5SPaul Beesley operations, and the rest is managed in hardware, minimizing active software 323*43f35ef5SPaul Beesley management. In such systems, this boolean option enables TF-A to carry out 324*43f35ef5SPaul Beesley build and run-time optimizations during boot and power management operations. 325*43f35ef5SPaul Beesley This option defaults to 0 and if it is enabled, then it implies 326*43f35ef5SPaul Beesley ``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled. 327*43f35ef5SPaul Beesley 328*43f35ef5SPaul Beesley If this flag is disabled while the platform which TF-A is compiled for 329*43f35ef5SPaul Beesley includes cores that manage coherency in hardware, then a compilation error is 330*43f35ef5SPaul Beesley generated. This is based on the fact that a system cannot have, at the same 331*43f35ef5SPaul Beesley time, cores that manage coherency in hardware and cores that don't. In other 332*43f35ef5SPaul Beesley words, a platform cannot have, at the same time, cores that require 333*43f35ef5SPaul Beesley ``HW_ASSISTED_COHERENCY=1`` and cores that require 334*43f35ef5SPaul Beesley ``HW_ASSISTED_COHERENCY=0``. 335*43f35ef5SPaul Beesley 336*43f35ef5SPaul Beesley Note that, when ``HW_ASSISTED_COHERENCY`` is enabled, version 2 of 337*43f35ef5SPaul Beesley translation library (xlat tables v2) must be used; version 1 of translation 338*43f35ef5SPaul Beesley library is not supported. 339*43f35ef5SPaul Beesley 340*43f35ef5SPaul Beesley- ``JUNO_AARCH32_EL3_RUNTIME``: This build flag enables you to execute EL3 341*43f35ef5SPaul Beesley runtime software in AArch32 mode, which is required to run AArch32 on Juno. 342*43f35ef5SPaul Beesley By default this flag is set to '0'. Enabling this flag builds BL1 and BL2 in 343*43f35ef5SPaul Beesley AArch64 and facilitates the loading of ``SP_MIN`` and BL33 as AArch32 executable 344*43f35ef5SPaul Beesley images. 345*43f35ef5SPaul Beesley 346*43f35ef5SPaul Beesley- ``KEY_ALG``: This build flag enables the user to select the algorithm to be 347*43f35ef5SPaul Beesley used for generating the PKCS keys and subsequent signing of the certificate. 348*43f35ef5SPaul Beesley It accepts 3 values: ``rsa``, ``rsa_1_5`` and ``ecdsa``. The option 349*43f35ef5SPaul Beesley ``rsa_1_5`` is the legacy PKCS#1 RSA 1.5 algorithm which is not TBBR 350*43f35ef5SPaul Beesley compliant and is retained only for compatibility. The default value of this 351*43f35ef5SPaul Beesley flag is ``rsa`` which is the TBBR compliant PKCS#1 RSA 2.1 scheme. 352*43f35ef5SPaul Beesley 353*43f35ef5SPaul Beesley- ``HASH_ALG``: This build flag enables the user to select the secure hash 354*43f35ef5SPaul Beesley algorithm. It accepts 3 values: ``sha256``, ``sha384`` and ``sha512``. 355*43f35ef5SPaul Beesley The default value of this flag is ``sha256``. 356*43f35ef5SPaul Beesley 357*43f35ef5SPaul Beesley- ``LDFLAGS``: Extra user options appended to the linkers' command line in 358*43f35ef5SPaul Beesley addition to the one set by the build system. 359*43f35ef5SPaul Beesley 360*43f35ef5SPaul Beesley- ``LOG_LEVEL``: Chooses the log level, which controls the amount of console log 361*43f35ef5SPaul Beesley output compiled into the build. This should be one of the following: 362*43f35ef5SPaul Beesley 363*43f35ef5SPaul Beesley :: 364*43f35ef5SPaul Beesley 365*43f35ef5SPaul Beesley 0 (LOG_LEVEL_NONE) 366*43f35ef5SPaul Beesley 10 (LOG_LEVEL_ERROR) 367*43f35ef5SPaul Beesley 20 (LOG_LEVEL_NOTICE) 368*43f35ef5SPaul Beesley 30 (LOG_LEVEL_WARNING) 369*43f35ef5SPaul Beesley 40 (LOG_LEVEL_INFO) 370*43f35ef5SPaul Beesley 50 (LOG_LEVEL_VERBOSE) 371*43f35ef5SPaul Beesley 372*43f35ef5SPaul Beesley All log output up to and including the selected log level is compiled into 373*43f35ef5SPaul Beesley the build. The default value is 40 in debug builds and 20 in release builds. 374*43f35ef5SPaul Beesley 375*43f35ef5SPaul Beesley- ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It 376*43f35ef5SPaul Beesley specifies the file that contains the Non-Trusted World private key in PEM 377*43f35ef5SPaul Beesley format. If ``SAVE_KEYS=1``, this file name will be used to save the key. 378*43f35ef5SPaul Beesley 379*43f35ef5SPaul Beesley- ``NS_BL2U``: Path to NS_BL2U image in the host file system. This image is 380*43f35ef5SPaul Beesley optional. It is only needed if the platform makefile specifies that it 381*43f35ef5SPaul Beesley is required in order to build the ``fwu_fip`` target. 382*43f35ef5SPaul Beesley 383*43f35ef5SPaul Beesley- ``NS_TIMER_SWITCH``: Enable save and restore for non-secure timer register 384*43f35ef5SPaul Beesley contents upon world switch. It can take either 0 (don't save and restore) or 385*43f35ef5SPaul Beesley 1 (do save and restore). 0 is the default. An SPD may set this to 1 if it 386*43f35ef5SPaul Beesley wants the timer registers to be saved and restored. 387*43f35ef5SPaul Beesley 388*43f35ef5SPaul Beesley- ``OVERRIDE_LIBC``: This option allows platforms to override the default libc 389*43f35ef5SPaul Beesley for the BL image. It can be either 0 (include) or 1 (remove). The default 390*43f35ef5SPaul Beesley value is 0. 391*43f35ef5SPaul Beesley 392*43f35ef5SPaul Beesley- ``PL011_GENERIC_UART``: Boolean option to indicate the PL011 driver that 393*43f35ef5SPaul Beesley the underlying hardware is not a full PL011 UART but a minimally compliant 394*43f35ef5SPaul Beesley generic UART, which is a subset of the PL011. The driver will not access 395*43f35ef5SPaul Beesley any register that is not part of the SBSA generic UART specification. 396*43f35ef5SPaul Beesley Default value is 0 (a full PL011 compliant UART is present). 397*43f35ef5SPaul Beesley 398*43f35ef5SPaul Beesley- ``PLAT``: Choose a platform to build TF-A for. The chosen platform name 399*43f35ef5SPaul Beesley must be subdirectory of any depth under ``plat/``, and must contain a 400*43f35ef5SPaul Beesley platform makefile named ``platform.mk``. For example, to build TF-A for the 401*43f35ef5SPaul Beesley Arm Juno board, select PLAT=juno. 402*43f35ef5SPaul Beesley 403*43f35ef5SPaul Beesley- ``PRELOADED_BL33_BASE``: This option enables booting a preloaded BL33 image 404*43f35ef5SPaul Beesley instead of the normal boot flow. When defined, it must specify the entry 405*43f35ef5SPaul Beesley point address for the preloaded BL33 image. This option is incompatible with 406*43f35ef5SPaul Beesley ``EL3_PAYLOAD_BASE``. If both are defined, ``EL3_PAYLOAD_BASE`` has priority 407*43f35ef5SPaul Beesley over ``PRELOADED_BL33_BASE``. 408*43f35ef5SPaul Beesley 409*43f35ef5SPaul Beesley- ``PROGRAMMABLE_RESET_ADDRESS``: This option indicates whether the reset 410*43f35ef5SPaul Beesley vector address can be programmed or is fixed on the platform. It can take 411*43f35ef5SPaul Beesley either 0 (fixed) or 1 (programmable). Default is 0. If the platform has a 412*43f35ef5SPaul Beesley programmable reset address, it is expected that a CPU will start executing 413*43f35ef5SPaul Beesley code directly at the right address, both on a cold and warm reset. In this 414*43f35ef5SPaul Beesley case, there is no need to identify the entrypoint on boot and the boot path 415*43f35ef5SPaul Beesley can be optimised. The ``plat_get_my_entrypoint()`` platform porting interface 416*43f35ef5SPaul Beesley does not need to be implemented in this case. 417*43f35ef5SPaul Beesley 418*43f35ef5SPaul Beesley- ``PSCI_EXTENDED_STATE_ID``: As per PSCI1.0 Specification, there are 2 formats 419*43f35ef5SPaul Beesley possible for the PSCI power-state parameter: original and extended State-ID 420*43f35ef5SPaul Beesley formats. This flag if set to 1, configures the generic PSCI layer to use the 421*43f35ef5SPaul Beesley extended format. The default value of this flag is 0, which means by default 422*43f35ef5SPaul Beesley the original power-state format is used by the PSCI implementation. This flag 423*43f35ef5SPaul Beesley should be specified by the platform makefile and it governs the return value 424*43f35ef5SPaul Beesley of PSCI_FEATURES API for CPU_SUSPEND smc function id. When this option is 425*43f35ef5SPaul Beesley enabled on Arm platforms, the option ``ARM_RECOM_STATE_ID_ENC`` needs to be 426*43f35ef5SPaul Beesley set to 1 as well. 427*43f35ef5SPaul Beesley 428*43f35ef5SPaul Beesley- ``RAS_EXTENSION``: When set to ``1``, enable Armv8.2 RAS features. RAS features 429*43f35ef5SPaul Beesley are an optional extension for pre-Armv8.2 CPUs, but are mandatory for Armv8.2 430*43f35ef5SPaul Beesley or later CPUs. 431*43f35ef5SPaul Beesley 432*43f35ef5SPaul Beesley When ``RAS_EXTENSION`` is set to ``1``, ``HANDLE_EA_EL3_FIRST`` must also be 433*43f35ef5SPaul Beesley set to ``1``. 434*43f35ef5SPaul Beesley 435*43f35ef5SPaul Beesley This option is disabled by default. 436*43f35ef5SPaul Beesley 437*43f35ef5SPaul Beesley- ``RESET_TO_BL31``: Enable BL31 entrypoint as the CPU reset vector instead 438*43f35ef5SPaul Beesley of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1 439*43f35ef5SPaul Beesley entrypoint) or 1 (CPU reset to BL31 entrypoint). 440*43f35ef5SPaul Beesley The default value is 0. 441*43f35ef5SPaul Beesley 442*43f35ef5SPaul Beesley- ``RESET_TO_SP_MIN``: SP_MIN is the minimal AArch32 Secure Payload provided 443*43f35ef5SPaul Beesley in TF-A. This flag configures SP_MIN entrypoint as the CPU reset vector 444*43f35ef5SPaul Beesley instead of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1 445*43f35ef5SPaul Beesley entrypoint) or 1 (CPU reset to SP_MIN entrypoint). The default value is 0. 446*43f35ef5SPaul Beesley 447*43f35ef5SPaul Beesley- ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the 448*43f35ef5SPaul Beesley file that contains the ROT private key in PEM format. If ``SAVE_KEYS=1``, this 449*43f35ef5SPaul Beesley file name will be used to save the key. 450*43f35ef5SPaul Beesley 451*43f35ef5SPaul Beesley- ``SAVE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the 452*43f35ef5SPaul Beesley certificate generation tool to save the keys used to establish the Chain of 453*43f35ef5SPaul Beesley Trust. Allowed options are '0' or '1'. Default is '0' (do not save). 454*43f35ef5SPaul Beesley 455*43f35ef5SPaul Beesley- ``SCP_BL2``: Path to SCP_BL2 image in the host file system. This image is optional. 456*43f35ef5SPaul Beesley If a SCP_BL2 image is present then this option must be passed for the ``fip`` 457*43f35ef5SPaul Beesley target. 458*43f35ef5SPaul Beesley 459*43f35ef5SPaul Beesley- ``SCP_BL2_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the 460*43f35ef5SPaul Beesley file that contains the SCP_BL2 private key in PEM format. If ``SAVE_KEYS=1``, 461*43f35ef5SPaul Beesley this file name will be used to save the key. 462*43f35ef5SPaul Beesley 463*43f35ef5SPaul Beesley- ``SCP_BL2U``: Path to SCP_BL2U image in the host file system. This image is 464*43f35ef5SPaul Beesley optional. It is only needed if the platform makefile specifies that it 465*43f35ef5SPaul Beesley is required in order to build the ``fwu_fip`` target. 466*43f35ef5SPaul Beesley 467*43f35ef5SPaul Beesley- ``SDEI_SUPPORT``: Setting this to ``1`` enables support for Software 468*43f35ef5SPaul Beesley Delegated Exception Interface to BL31 image. This defaults to ``0``. 469*43f35ef5SPaul Beesley 470*43f35ef5SPaul Beesley When set to ``1``, the build option ``EL3_EXCEPTION_HANDLING`` must also be 471*43f35ef5SPaul Beesley set to ``1``. 472*43f35ef5SPaul Beesley 473*43f35ef5SPaul Beesley- ``SEPARATE_CODE_AND_RODATA``: Whether code and read-only data should be 474*43f35ef5SPaul Beesley isolated on separate memory pages. This is a trade-off between security and 475*43f35ef5SPaul Beesley memory usage. See "Isolating code and read-only data on separate memory 476*43f35ef5SPaul Beesley pages" section in :ref:`Firmware Design`. This flag is disabled by default and 477*43f35ef5SPaul Beesley affects all BL images. 478*43f35ef5SPaul Beesley 479*43f35ef5SPaul Beesley- ``SPD``: Choose a Secure Payload Dispatcher component to be built into TF-A. 480*43f35ef5SPaul Beesley This build option is only valid if ``ARCH=aarch64``. The value should be 481*43f35ef5SPaul Beesley the path to the directory containing the SPD source, relative to 482*43f35ef5SPaul Beesley ``services/spd/``; the directory is expected to contain a makefile called 483*43f35ef5SPaul Beesley ``<spd-value>.mk``. 484*43f35ef5SPaul Beesley 485*43f35ef5SPaul Beesley- ``SPIN_ON_BL1_EXIT``: This option introduces an infinite loop in BL1. It can 486*43f35ef5SPaul Beesley take either 0 (no loop) or 1 (add a loop). 0 is the default. This loop stops 487*43f35ef5SPaul Beesley execution in BL1 just before handing over to BL31. At this point, all 488*43f35ef5SPaul Beesley firmware images have been loaded in memory, and the MMU and caches are 489*43f35ef5SPaul Beesley turned off. Refer to the "Debugging options" section for more details. 490*43f35ef5SPaul Beesley 491*43f35ef5SPaul Beesley- ``SP_MIN_WITH_SECURE_FIQ``: Boolean flag to indicate the SP_MIN handles 492*43f35ef5SPaul Beesley secure interrupts (caught through the FIQ line). Platforms can enable 493*43f35ef5SPaul Beesley this directive if they need to handle such interruption. When enabled, 494*43f35ef5SPaul Beesley the FIQ are handled in monitor mode and non secure world is not allowed 495*43f35ef5SPaul Beesley to mask these events. Platforms that enable FIQ handling in SP_MIN shall 496*43f35ef5SPaul Beesley implement the api ``sp_min_plat_fiq_handler()``. The default value is 0. 497*43f35ef5SPaul Beesley 498*43f35ef5SPaul Beesley- ``TRUSTED_BOARD_BOOT``: Boolean flag to include support for the Trusted Board 499*43f35ef5SPaul Beesley Boot feature. When set to '1', BL1 and BL2 images include support to load 500*43f35ef5SPaul Beesley and verify the certificates and images in a FIP, and BL1 includes support 501*43f35ef5SPaul Beesley for the Firmware Update. The default value is '0'. Generation and inclusion 502*43f35ef5SPaul Beesley of certificates in the FIP and FWU_FIP depends upon the value of the 503*43f35ef5SPaul Beesley ``GENERATE_COT`` option. 504*43f35ef5SPaul Beesley 505*43f35ef5SPaul Beesley .. warning:: 506*43f35ef5SPaul Beesley This option depends on ``CREATE_KEYS`` to be enabled. If the keys 507*43f35ef5SPaul Beesley already exist in disk, they will be overwritten without further notice. 508*43f35ef5SPaul Beesley 509*43f35ef5SPaul Beesley- ``TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It 510*43f35ef5SPaul Beesley specifies the file that contains the Trusted World private key in PEM 511*43f35ef5SPaul Beesley format. If ``SAVE_KEYS=1``, this file name will be used to save the key. 512*43f35ef5SPaul Beesley 513*43f35ef5SPaul Beesley- ``TSP_INIT_ASYNC``: Choose BL32 initialization method as asynchronous or 514*43f35ef5SPaul Beesley synchronous, (see "Initializing a BL32 Image" section in 515*43f35ef5SPaul Beesley :ref:`Firmware Design`). It can take the value 0 (BL32 is initialized using 516*43f35ef5SPaul Beesley synchronous method) or 1 (BL32 is initialized using asynchronous method). 517*43f35ef5SPaul Beesley Default is 0. 518*43f35ef5SPaul Beesley 519*43f35ef5SPaul Beesley- ``TSP_NS_INTR_ASYNC_PREEMPT``: A non zero value enables the interrupt 520*43f35ef5SPaul Beesley routing model which routes non-secure interrupts asynchronously from TSP 521*43f35ef5SPaul Beesley to EL3 causing immediate preemption of TSP. The EL3 is responsible 522*43f35ef5SPaul Beesley for saving and restoring the TSP context in this routing model. The 523*43f35ef5SPaul Beesley default routing model (when the value is 0) is to route non-secure 524*43f35ef5SPaul Beesley interrupts to TSP allowing it to save its context and hand over 525*43f35ef5SPaul Beesley synchronously to EL3 via an SMC. 526*43f35ef5SPaul Beesley 527*43f35ef5SPaul Beesley .. note:: 528*43f35ef5SPaul Beesley When ``EL3_EXCEPTION_HANDLING`` is ``1``, ``TSP_NS_INTR_ASYNC_PREEMPT`` 529*43f35ef5SPaul Beesley must also be set to ``1``. 530*43f35ef5SPaul Beesley 531*43f35ef5SPaul Beesley- ``USE_ARM_LINK``: This flag determines whether to enable support for ARM 532*43f35ef5SPaul Beesley linker. When the ``LINKER`` build variable points to the armlink linker, 533*43f35ef5SPaul Beesley this flag is enabled automatically. To enable support for armlink, platforms 534*43f35ef5SPaul Beesley will have to provide a scatter file for the BL image. Currently, Tegra 535*43f35ef5SPaul Beesley platforms use the armlink support to compile BL3-1 images. 536*43f35ef5SPaul Beesley 537*43f35ef5SPaul Beesley- ``USE_COHERENT_MEM``: This flag determines whether to include the coherent 538*43f35ef5SPaul Beesley memory region in the BL memory map or not (see "Use of Coherent memory in 539*43f35ef5SPaul Beesley TF-A" section in :ref:`Firmware Design`). It can take the value 1 540*43f35ef5SPaul Beesley (Coherent memory region is included) or 0 (Coherent memory region is 541*43f35ef5SPaul Beesley excluded). Default is 1. 542*43f35ef5SPaul Beesley 543*43f35ef5SPaul Beesley- ``USE_ROMLIB``: This flag determines whether library at ROM will be used. 544*43f35ef5SPaul Beesley This feature creates a library of functions to be placed in ROM and thus 545*43f35ef5SPaul Beesley reduces SRAM usage. Refer to :ref:`Library at ROM` for further details. Default 546*43f35ef5SPaul Beesley is 0. 547*43f35ef5SPaul Beesley 548*43f35ef5SPaul Beesley- ``V``: Verbose build. If assigned anything other than 0, the build commands 549*43f35ef5SPaul Beesley are printed. Default is 0. 550*43f35ef5SPaul Beesley 551*43f35ef5SPaul Beesley- ``VERSION_STRING``: String used in the log output for each TF-A image. 552*43f35ef5SPaul Beesley Defaults to a string formed by concatenating the version number, build type 553*43f35ef5SPaul Beesley and build string. 554*43f35ef5SPaul Beesley 555*43f35ef5SPaul Beesley- ``W``: Warning level. Some compiler warning options of interest have been 556*43f35ef5SPaul Beesley regrouped and put in the root Makefile. This flag can take the values 0 to 3, 557*43f35ef5SPaul Beesley each level enabling more warning options. Default is 0. 558*43f35ef5SPaul Beesley 559*43f35ef5SPaul Beesley- ``WARMBOOT_ENABLE_DCACHE_EARLY`` : Boolean option to enable D-cache early on 560*43f35ef5SPaul Beesley the CPU after warm boot. This is applicable for platforms which do not 561*43f35ef5SPaul Beesley require interconnect programming to enable cache coherency (eg: single 562*43f35ef5SPaul Beesley cluster platforms). If this option is enabled, then warm boot path 563*43f35ef5SPaul Beesley enables D-caches immediately after enabling MMU. This option defaults to 0. 564*43f35ef5SPaul Beesley 565*43f35ef5SPaul BeesleyDebugging options 566*43f35ef5SPaul Beesley----------------- 567*43f35ef5SPaul Beesley 568*43f35ef5SPaul BeesleyTo compile a debug version and make the build more verbose use 569*43f35ef5SPaul Beesley 570*43f35ef5SPaul Beesley.. code:: shell 571*43f35ef5SPaul Beesley 572*43f35ef5SPaul Beesley make PLAT=<platform> DEBUG=1 V=1 all 573*43f35ef5SPaul Beesley 574*43f35ef5SPaul BeesleyAArch64 GCC uses DWARF version 4 debugging symbols by default. Some tools (for 575*43f35ef5SPaul Beesleyexample DS-5) might not support this and may need an older version of DWARF 576*43f35ef5SPaul Beesleysymbols to be emitted by GCC. This can be achieved by using the 577*43f35ef5SPaul Beesley``-gdwarf-<version>`` flag, with the version being set to 2 or 3. Setting the 578*43f35ef5SPaul Beesleyversion to 2 is recommended for DS-5 versions older than 5.16. 579*43f35ef5SPaul Beesley 580*43f35ef5SPaul BeesleyWhen debugging logic problems it might also be useful to disable all compiler 581*43f35ef5SPaul Beesleyoptimizations by using ``-O0``. 582*43f35ef5SPaul Beesley 583*43f35ef5SPaul Beesley.. warning:: 584*43f35ef5SPaul Beesley Using ``-O0`` could cause output images to be larger and base addresses 585*43f35ef5SPaul Beesley might need to be recalculated (see the **Memory layout on Arm development 586*43f35ef5SPaul Beesley platforms** section in the :ref:`Firmware Design`). 587*43f35ef5SPaul Beesley 588*43f35ef5SPaul BeesleyExtra debug options can be passed to the build system by setting ``CFLAGS`` or 589*43f35ef5SPaul Beesley``LDFLAGS``: 590*43f35ef5SPaul Beesley 591*43f35ef5SPaul Beesley.. code:: shell 592*43f35ef5SPaul Beesley 593*43f35ef5SPaul Beesley CFLAGS='-O0 -gdwarf-2' \ 594*43f35ef5SPaul Beesley make PLAT=<platform> DEBUG=1 V=1 all 595*43f35ef5SPaul Beesley 596*43f35ef5SPaul BeesleyNote that using ``-Wl,`` style compilation driver options in ``CFLAGS`` will be 597*43f35ef5SPaul Beesleyignored as the linker is called directly. 598*43f35ef5SPaul Beesley 599*43f35ef5SPaul BeesleyIt is also possible to introduce an infinite loop to help in debugging the 600*43f35ef5SPaul Beesleypost-BL2 phase of TF-A. This can be done by rebuilding BL1 with the 601*43f35ef5SPaul Beesley``SPIN_ON_BL1_EXIT=1`` build flag. Refer to the :ref:`build_options_common` 602*43f35ef5SPaul Beesleysection. In this case, the developer may take control of the target using a 603*43f35ef5SPaul Beesleydebugger when indicated by the console output. When using DS-5, the following 604*43f35ef5SPaul Beesleycommands can be used: 605*43f35ef5SPaul Beesley 606*43f35ef5SPaul Beesley:: 607*43f35ef5SPaul Beesley 608*43f35ef5SPaul Beesley # Stop target execution 609*43f35ef5SPaul Beesley interrupt 610*43f35ef5SPaul Beesley 611*43f35ef5SPaul Beesley # 612*43f35ef5SPaul Beesley # Prepare your debugging environment, e.g. set breakpoints 613*43f35ef5SPaul Beesley # 614*43f35ef5SPaul Beesley 615*43f35ef5SPaul Beesley # Jump over the debug loop 616*43f35ef5SPaul Beesley set var $AARCH64::$Core::$PC = $AARCH64::$Core::$PC + 4 617*43f35ef5SPaul Beesley 618*43f35ef5SPaul Beesley # Resume execution 619*43f35ef5SPaul Beesley continue 620*43f35ef5SPaul Beesley 621*43f35ef5SPaul Beesley-------------- 622*43f35ef5SPaul Beesley 623*43f35ef5SPaul Beesley*Copyright (c) 2019, Arm Limited. All rights reserved.* 624