| .. _zephyr_doc: |
| |
| Documentation Generation |
| ######################## |
| |
| These instructions will walk you through generating the Zephyr Project's |
| documentation on your local system using the same documentation sources |
| as we use to create the online documentation found at |
| https://docs.zephyrproject.org |
| |
| Documentation overview |
| ********************** |
| |
| Zephyr Project content is written using the reStructuredText markup |
| language (.rst file extension) with Sphinx extensions, and processed |
| using Sphinx to create a formatted stand-alone website. Developers can |
| view this content either in its raw form as .rst markup files, or you |
| can generate the HTML content and view it with a web browser directly on |
| your workstation. This same .rst content is also fed into the Zephyr |
| Project's public website documentation area (with a different theme |
| applied). |
| |
| You can read details about `reStructuredText`_, and `Sphinx`_ from |
| their respective websites. |
| |
| The project's documentation contains the following items: |
| |
| * ReStructuredText source files used to generate documentation found at the |
| https://docs.zephyrproject.org website. Most of the reStructuredText sources |
| are found in the ``/doc`` directory, but others are stored within the |
| code source tree near their specific component (such as ``/samples`` and |
| ``/boards``) |
| |
| * Doxygen-generated material used to create all API-specific documents |
| also found at https://docs.zephyrproject.org |
| |
| * Script-generated material for kernel configuration options based on Kconfig |
| files found in the source code tree |
| |
| .. image:: images/doc-gen-flow.png |
| :align: center |
| |
| The reStructuredText files are processed by the Sphinx documentation system, |
| and make use of the breathe extension for including the doxygen-generated API |
| material. Additional tools are required to generate the |
| documentation locally, as described in the following sections. |
| |
| Installing the documentation processors |
| *************************************** |
| |
| Our documentation processing has been tested to run with: |
| |
| * Doxygen version 1.8.13 |
| * Sphinx version 1.7.5 |
| * Breathe version 4.9.1 |
| * docutils version 0.14 |
| * sphinx_rtd_theme version 0.4.0 |
| * sphinxcontrib-svg2pdfconverter version 0.1.0 |
| * Latexmk version 4.56 |
| |
| In order to install the documentation tools, first install Zephyr as |
| described in :ref:`getting_started`. Then install additional tools |
| that are only required to generate the documentation, |
| as described below: |
| |
| On Ubuntu Linux: |
| |
| .. code-block:: console |
| |
| sudo apt-get install --no-install-recommends doxygen librsvg2-bin \ |
| texlive-latex-base texlive-latex-extra latexmk texlive-fonts-recommended |
| |
| On Fedora Linux: |
| |
| .. code-block:: console |
| |
| sudo dnf install doxygen texlive-latex latexmk \ |
| texlive-collection-fontsrecommended librsvg2-tools |
| |
| On Clear Linux: |
| |
| .. code-block:: console |
| |
| sudo swupd bundle-add texlive |
| |
| On Arch Linux: |
| |
| .. code-block:: console |
| |
| sudo pacman -S doxygen librsvg texlive-core texlive-bin |
| |
| On macOS: |
| |
| .. code-block:: console |
| |
| brew install doxygen mactex librsvg |
| tlmgr install latexmk |
| tlmgr install collection-fontsrecommended |
| |
| On Windows in an Administrator ``cmd.exe`` prompt: |
| |
| .. code-block:: console |
| |
| choco install doxygen.install strawberryperl miktex rsvg-convert |
| |
| .. note:: |
| On Windows, the Sphinx executable ``sphinx-build.exe`` is placed in |
| the ``Scripts`` folder of your Python installation path. |
| Dependending on how you have installed Python, you may need to |
| add this folder to your ``PATH`` environment variable. Follow |
| the instructions in `Windows Python Path`_ to add those if needed. |
| |
| Documentation presentation theme |
| ******************************** |
| |
| Sphinx supports easy customization of the generated documentation |
| appearance through the use of themes. Replace the theme files and do |
| another ``make htmldocs`` and the output layout and style is changed. |
| The ``read-the-docs`` theme is installed as part of the |
| :ref:`install_py_requirements` step you took in the getting started |
| guide. |
| |
| Running the documentation processors |
| ************************************ |
| |
| The ``/doc`` directory in your cloned copy of the Zephyr project git |
| repo has all the .rst source files, extra tools, and Makefile for |
| generating a local copy of the Zephyr project's technical documentation. |
| Assuming the local Zephyr project copy is in a folder ``zephyr`` in your home |
| folder, here are the commands to generate the html content locally: |
| |
| .. code-block:: console |
| |
| # On Linux/macOS |
| cd ~/zephyr |
| source zephyr-env.sh |
| mkdir -p doc/_build && cd doc/_build |
| # On Windows |
| cd %userprofile%\zephyr |
| zephyr-env.cmd |
| mkdir doc\_build & cd doc/_build |
| |
| # Use cmake to configure a Ninja-based build system: |
| cmake -GNinja .. |
| |
| # To generate HTML output, run ninja on the generated build system: |
| ninja htmldocs |
| # If you modify or add .rst files, run ninja again: |
| ninja htmldocs |
| |
| # To generate PDF output, run ninja on the generated build system: |
| ninja pdfdocs |
| |
| .. warning:: |
| |
| The documentation build system creates copies in the build |
| directory of every .rst file used to generate the documentation, |
| along with dependencies referenced by those .rst files. |
| |
| This means that Sphinx warnings and errors refer to the **copies**, |
| and **not the version-controlled original files in Zephyr**. Be |
| careful to make sure you don't accidentally edit the copy of the |
| file in an error message, as these changes will not be saved. |
| |
| Depending on your development system, it will take up to 15 minutes to |
| collect and generate the HTML content. When done, you can view the HTML |
| output with your browser started at ``doc/_build/html/index.html`` and |
| if generated, the PDF file is available at ``doc/_build/pdf/zephyr.pdf``. |
| |
| If you want to build the documentation from scratch just delete the contents |
| of the build folder and run ``cmake`` and then ``ninja`` again. |
| |
| .. note:: |
| |
| If you add or remove a file from the documentation, you need to re-run CMake. |
| |
| On Unix platforms a convenience :zephyr_file:`Makefile` at the root folder |
| of the Zephyr repository can be used to build the documentation directly from |
| there: |
| |
| .. code-block:: console |
| |
| cd ~/zephyr |
| source zephyr-env.sh |
| |
| # To generate HTML output |
| make htmldocs |
| |
| # To generate PDF output |
| make pdfdocs |
| |
| Filtering expected warnings |
| *************************** |
| |
| Alas, there are some known issues with the doxygen/Sphinx/Breathe |
| processing that generates warnings for some constructs, in particular |
| around unnamed structures in nested unions or structs. |
| While these issues are being considered for fixing in |
| Sphinx/Breathe, we've added a post-processing filter on the output of |
| the documentation build process to check for "expected" messages from the |
| generation process output. |
| |
| The output from the Sphinx build is processed by the python script |
| ``scripts/filter-known-issues.py`` together with a set of filter |
| configuration files in the ``.known-issues/doc`` folder. (This |
| filtering is done as part of the ``doc/CMakeLists.txt`` CMake listfile.) |
| |
| If you're contributing components included in the Zephyr API |
| documentation and run across these warnings, you can include filtering |
| them out as "expected" warnings by adding a conf file to the |
| ``.known-issues/doc`` folder, following the example of other conf files |
| found there. |
| |
| Developer-mode Document Building |
| ******************************** |
| |
| Building the documentation for all the Kconfig options significantly |
| adds to the total doc build time. When making and testing major changes |
| to the documentation, we provide an option to temporarily stub-out |
| the auto-generated configuration documentation so the doc build process |
| runs much faster. |
| |
| To enable this mode, set the following option when invoking cmake:: |
| |
| -DKCONFIG_TURBO_MODE=1 |
| |
| or invoke make with the following target:: |
| |
| cd ~/zephyr |
| source zephyr-env.sh |
| |
| # To generate HTML output without detailed Kconfig |
| make htmldocs-fast |
| |
| |
| .. _reStructuredText: http://sphinx-doc.org/rest.html |
| .. _Sphinx: http://sphinx-doc.org/ |
| .. _Windows Python Path: https://docs.python.org/3/using/windows.html#finding-the-python-executable |