1Building
2========
3
4This page assumes the :ref:`Prerequisites` have been followed to install all project dependencies.
5
6Hafnium
7^^^^^^^
8
9Most common options
10~~~~~~~~~~~~~~~~~~~
11
12By default, Hafnium builds all target platforms along with tests with clang.
13From Hafnium top level directory, use:
14
15.. code:: shell
16
17   make
18
19The resulting Hafnium images are located in `out/reference/<platform>/hafnium.bin`.
20
21It is possible to build Hafnium for a single platform target omitting tests,
22resulting in faster builds when the test suite is not required.
23For example to build the SPMC targeting FVP:
24
25.. code:: shell
26
27   make PLATFORM=secure_aem_v8a_fvp_vhe
28
29The resulting FVP image is located in
30`out/reference/secure_aem_v8a_fvp_vhe_clang/hafnium.bin`.
31
32Multiple platform names can be provided for building e.g.:
33
34.. code:: shell
35
36   make PLATFORM="secure_aem_v8a_fvp_vhe,secure_tc"
37
38To get a list of available platforms, you may use:
39
40.. code:: shell
41
42    make list
43
44resulting in:
45
46.. code:: shell
47
48    Supported platforms:  ['secure_rd_fremont', 'secure_rd_fremont_cfg1', 'secure_aem_v8a_fvp_vhe', 'aem_v8a_fvp_vhe', 'qemu_aarch64_vhe', 'secure_qemu_aarch64', 'rpi4', 'secure_tc']
49
50Additional options
51~~~~~~~~~~~~~~~~~~
52
53The presence of assertions in the final build can be set using the `ENABLE_ASSERTIONS`
54make variable, by default this is set to `true`, meaning asserts are included in the build.
55
56.. code:: shell
57
58   make ENABLE_ASSERTIONS=<true|false>
59
60Each project in the `project` directory specifies a root configurations of the
61build. Adding a project is the preferred way to extend support to new platforms.
62The target project that is built is selected by the `PROJECT` make variable, the
63default project is 'reference'.
64
65.. code:: shell
66
67   make PROJECT=<project_name>
68
69If you wish to change the value of the make variables you may need to first use:
70
71.. code:: shell
72
73   make clobber
74
75So the `args.gn` file will be regenerated with the new values.
76
77Hafnium Documentation
78^^^^^^^^^^^^^^^^^^^^^
79
80If you have already sourced a virtual environment, Poetry will respect this and
81install dependencies there.
82
83.. code:: shell
84
85   poetry run make doc
86
87--------------
88
89*Copyright (c) 2023, Arm Limited. All rights reserved.*
90