blob: 50fff5756142b040f788a88ecfa15d1cbfad37aa [file] [log] [blame]
Paul Beesley862c7642019-10-07 10:04:48 +00001Building Documentation
2======================
3
4To create a rendered copy of this documentation locally you can use the
5`Sphinx`_ tool to build and package the plain-text documents into HTML-formatted
6pages.
7
8If you are building the documentation for the first time then you will need to
9check that you have the required software packages, as described in the
10*Prerequisites* section that follows.
11
12.. note::
13 An online copy of the documentation is available at
14 https://www.trustedfirmware.org/docs/tf-a, if you want to view a rendered
15 copy without doing a local build.
16
17Prerequisites
18-------------
19
Boyan Karatotev85264722022-10-27 13:55:12 +010020For building a local copy of the |TF-A| documentation you will need:
Paul Beesley862c7642019-10-07 10:04:48 +000021
Harrison Mutai793f72c2023-02-16 10:20:48 +000022- Python 3 (3.8 or later)
Paul Beesley862c7642019-10-07 10:04:48 +000023- PlantUML (1.2017.15 or later)
Harrison Mutai95f4abe2023-04-24 09:58:17 +010024- `Poetry`_ (Python dependency manager)
Boyan Karatotev85264722022-10-27 13:55:12 +010025- Optionally, the `Dia`_ application can be installed if you need to edit
26 existing ``.dia`` diagram files, or create new ones.
Paul Beesley862c7642019-10-07 10:04:48 +000027
Harrison Mutai793f72c2023-02-16 10:20:48 +000028
Harrison Mutai95f4abe2023-04-24 09:58:17 +010029Below is an example set of instructions to get a working environment (tested on
30Ubuntu):
Paul Beesley862c7642019-10-07 10:04:48 +000031
32.. code:: shell
33
Paul Beesley43f35ef2019-05-29 13:59:40 +010034 sudo apt install python3 python3-pip plantuml [dia]
Harrison Mutai793f72c2023-02-16 10:20:48 +000035 curl -sSL https://install.python-poetry.org | python3 -
Paul Beesley862c7642019-10-07 10:04:48 +000036
Paul Beesley862c7642019-10-07 10:04:48 +000037Building rendered documentation
38-------------------------------
39
Harrison Mutai95f4abe2023-04-24 09:58:17 +010040To install Python dependencies using Poetry:
41
42.. code:: shell
43
44 poetry install
45
46Poetry will create a new virtual environment and install all dependencies listed
47in ``pyproject.toml``. You can get information about this environment, such as
48its location and the Python version, with the command:
49
50.. code:: shell
51
52 poetry env info
53
54If you have already sourced a virtual environment, Poetry will respect this and
55install dependencies there.
56
57Once all dependencies are installed, the documentation can be compiled into
58HTML-formatted pages from the project root directory by running:
Paul Beesley862c7642019-10-07 10:04:48 +000059
60.. code:: shell
61
Harrison Mutai793f72c2023-02-16 10:20:48 +000062 poetry run make doc
Paul Beesley862c7642019-10-07 10:04:48 +000063
Harrison Mutai95f4abe2023-04-24 09:58:17 +010064Output from the build process will be placed in: ``docs/build/html``.
Paul Beesley862c7642019-10-07 10:04:48 +000065
Harrison Mutai95f4abe2023-04-24 09:58:17 +010066Other Output Formats
67~~~~~~~~~~~~~~~~~~~~
Madhukar Pappireddy6de32372020-01-28 12:41:20 -060068
69We also support building documentation in other formats. From the ``docs``
70directory of the project, run the following command to see the supported
Harrison Mutai95f4abe2023-04-24 09:58:17 +010071formats.
Madhukar Pappireddy6de32372020-01-28 12:41:20 -060072
73.. code:: shell
74
Harrison Mutai95f4abe2023-04-24 09:58:17 +010075 poetry run make -C docs help
Harrison Mutai793f72c2023-02-16 10:20:48 +000076
Elizabeth Ho5ac3fdc2023-08-09 16:03:21 +010077To build the documentation in PDF format, additionally ensure that the following
78packages are installed:
79
80- FreeSerif font
81- latexmk
82- librsvg2-bin
83- xelatex
84- xindy
85
86Below is an example set of instructions to install the required packages
87(tested on Ubuntu):
88
89.. code:: shell
90
91 sudo apt install fonts-freefont-otf latexmk librsvg2-bin texlive-xetex xindy
92
93Once all the dependencies are installed, run the command ``poetry run make -C
94docs latexpdf`` to build the documentation. Output from the build process
95(``trustedfirmware-a.pdf``) can be found in ``docs/build/latex``.
96
Harrison Mutai95f4abe2023-04-24 09:58:17 +010097Building rendered documentation from Poetry's virtual environment
98~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Harrison Mutai793f72c2023-02-16 10:20:48 +000099
Harrison Mutai95f4abe2023-04-24 09:58:17 +0100100The command ``poetry run`` used in the steps above executes the input command
101from inside the project's virtual environment. The easiest way to activate this
102virtual environment is with the ``poetry shell`` command.
103
104Running ``poetry shell`` from the directory containing this project, activates
105the same virtual environment. This creates a sub-shell through which you can
106build the documentation directly with ``make``.
107
108.. code:: shell
109
110 poetry shell
111 make doc
112
113Type ``exit`` to deactivate the virtual environment and exit this new shell. For
114other use cases, please see the official `Poetry`_ documentation.
Paul Beesley862c7642019-10-07 10:04:48 +0000115
Leonardo Sandoval7be2b982020-06-10 18:26:28 -0500116Building rendered documentation from a container
117------------------------------------------------
118
119There may be cases where you can not either install or upgrade required
120dependencies to generate the documents, so in this case, one way to
121create the documentation is through a docker container. The first step is
122to check if `docker`_ is installed in your host, otherwise check main docker
123page for installation instructions. Once installed, run the following script
124from project root directory
125
126.. code:: shell
127
Harrison Mutai95f4abe2023-04-24 09:58:17 +0100128 docker run --rm -v $PWD:/tf-a sphinxdoc/sphinx \
129 bash -c 'cd /tf-a &&
130 apt-get update && apt-get install -y curl plantuml &&
131 curl -sSL https://install.python-poetry.org | python3 - &&
132 ~/.local/bin/poetry install && ~/.local/bin/poetry run make doc'
Leonardo Sandoval7be2b982020-06-10 18:26:28 -0500133
134The above command fetches the ``sphinxdoc/sphinx`` container from `docker
135hub`_, launches the container, installs documentation requirements and finally
136creates the documentation. Once done, exit the container and output from the
Harrison Mutai95f4abe2023-04-24 09:58:17 +0100137build process will be placed in: ``docs/build/html``.
Leonardo Sandoval7be2b982020-06-10 18:26:28 -0500138
Paul Beesley862c7642019-10-07 10:04:48 +0000139--------------
140
Harrison Mutai793f72c2023-02-16 10:20:48 +0000141*Copyright (c) 2019-2023, Arm Limited. All rights reserved.*
Paul Beesley862c7642019-10-07 10:04:48 +0000142
143.. _Sphinx: http://www.sphinx-doc.org/en/master/
Harrison Mutai95f4abe2023-04-24 09:58:17 +0100144.. _Poetry: https://python-poetry.org/docs/
Paul Beesley862c7642019-10-07 10:04:48 +0000145.. _pip homepage: https://pip.pypa.io/en/stable/
Paul Beesley43f35ef2019-05-29 13:59:40 +0100146.. _Dia: https://wiki.gnome.org/Apps/Dia
Leonardo Sandoval7be2b982020-06-10 18:26:28 -0500147.. _docker: https://www.docker.com/
148.. _docker hub: https://hub.docker.com/repository/docker/sphinxdoc/sphinx