contribute/documentation/generation.html · contribute/documentation/generation.rst 공식 원문 ↗

Zephyr 3.7.0 · Contribute · Documentation

Documentation Generation

Zephyr 공식 문서를 같은 source와 toolchain으로 local에서 생성하고 검증하는 절차입니다.

Official pathcontribute/documentation/generation.html
Source filecontribute/documentation/generation.rst
Source versionZephyr 3.7.0
TranslationFull · reviewed

본문 기준: Zephyr 3.7.0 LTS3 · 이후 유지보수 패치는 별도입니다.

Part 1

요약·해설

reStructuredText·Sphinx·Breathe·Doxygen build flow, Linux/macOS/Windows별 설치, CMake/Ninja와 Make, turbo mode, warning filter, local HTTP server와 외부 Doxygen tag 연결을 설명합니다.

Sources

RST · Doxygen · Kconfig

Build

CMake · Ninja · Make

Outputs

HTML · PDF · Tag

Part 2

접을 수 있는 영어 원문 전체

영어 원문 전체 펼치기
원문 SHA-256 DAD13361A3E2C1E88AE782871F409F7F6B46A6948F5E11C87C6878F3837519F0
.. _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:

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

.. graphviz::
   :caption: Schematic of the documentation build process

   digraph {
      rankdir=LR

      images [shape="rectangle" label=".png, .jpg\nimages"]
      rst [shape="rectangle" label="restructuredText\nfiles"]
      conf [shape="rectangle" label="conf.py\nconfiguration"]
      rtd [shape="rectangle" label="read-the-docs\ntheme"]
      header [shape="rectangle" label="c header\ncomments"]
      xml [shape="rectangle" label="XML"]
      html [shape="rectangle" label="HTML\nweb site"]
      sphinx[shape="ellipse" label="sphinx +\nbreathe,\ndocutils"]
      images -> sphinx
      rst -> sphinx
      conf -> sphinx
      header -> doxygen
      doxygen -> xml
      xml-> sphinx
      rtd -> sphinx
      sphinx -> html
   }


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.

.. _documentation-processors:

Installing the documentation processors
***************************************

Our documentation processing has been tested to run with:

* Doxygen version 1.8.13
* Graphviz 2.43
* Latexmk version 4.56
* All Python dependencies listed in the repository file
  ``doc/requirements.txt``

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:

.. doc_processors_installation_start

.. tabs::

   .. group-tab:: Linux

      Common to all Linux installations, install the Python dependencies
      required to build the documentation:

      .. code-block:: console

         pip install -U -r ~/zephyrproject/zephyr/doc/requirements.txt

      On Ubuntu Linux:

      .. code-block:: console

         sudo apt-get install --no-install-recommends doxygen graphviz librsvg2-bin \
         texlive-latex-base texlive-latex-extra latexmk texlive-fonts-recommended imagemagick

      On Fedora Linux:

      .. code-block:: console

         sudo dnf install doxygen graphviz texlive-latex latexmk \
         texlive-collection-fontsrecommended librsvg2-tools ImageMagick

      On Clear Linux:

      .. code-block:: console

         sudo swupd bundle-add texlive graphviz ImageMagick

      On Arch Linux:

      .. code-block:: console

         sudo pacman -S graphviz doxygen librsvg texlive-core texlive-bin \
         texlive-latexextra texlive-fontsextra imagemagick

   .. group-tab:: macOS

      Install the Python dependencies required to build the documentation:

      .. code-block:: console

         pip install -U -r ~/zephyrproject/zephyr/doc/requirements.txt

      Use ``brew`` and ``tlmgr`` to install the tools:

      .. code-block:: console

         brew install doxygen graphviz mactex librsvg imagemagick
         tlmgr install latexmk
         tlmgr install collection-fontsrecommended

   .. group-tab:: Windows

      Install the Python dependencies required to build the documentation:

      .. code-block:: console

         pip install -U -r %HOMEPATH$\zephyrproject\zephyr\doc\requirements.txt

      Open a ``cmd.exe`` window as **Administrator** and run the following command:

      .. code-block:: console

         choco install doxygen.install graphviz strawberryperl miktex rsvg-convert imagemagick

      .. note::
         On Windows, the Sphinx executable ``sphinx-build.exe`` is placed in
         the ``Scripts`` folder of your Python installation path.
         Depending on how you have installed Python, you might need to
         add this folder to your ``PATH`` environment variable. Follow
         the instructions in `Windows Python Path`_ to add those if needed.

.. doc_processors_installation_end

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 html`` 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/doc
   # On Windows
   cd %userprofile%\zephyr\doc

   # Use cmake to configure a Ninja-based build system:
   cmake -GNinja -B_build .

   # Enter the build directory
   cd _build

   # To generate HTML output, run ninja on the generated build system:
   ninja html
   # If you modify or add .rst files, run ninja again:
   ninja html

   # To generate PDF output, run ninja on the generated build system:
   ninja pdf

.. 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/latex/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:`doc/Makefile` can be used to
build the documentation directly from there:

.. code-block:: console

   cd ~/zephyr/doc

   # To generate HTML output
   make html

   # To generate PDF output
   make pdf

Filtering expected warnings
***************************

There are some known issues with Sphinx/Breathe that generate Sphinx warnings
even though the input is valid C code. While these issues are being considered
for fixing we have created a Sphinx extension that allows to filter them out
based on a set of regular expressions. The extension is named
``zephyr.warnings_filter`` and it is located at
``doc/_extensions/zephyr/warnings_filter.py``. The warnings to be filtered out
can be added to the ``doc/known-warnings.txt`` file.

The most common warning reported by Sphinx/Breathe is related to duplicate C
declarations. This warning may be caused by different Sphinx/Breathe issues:

- Multiple declarations of the same object are not supported
- Different objects (e.g. a struct and a function) can not share the same name
- Nested elements (e.g. in a struct or union) can not share the same name

Developer-mode Document Building
********************************

When making and testing major changes to the documentation, we provide an option
to temporarily stub-out the auto-generated Devicetree bindings documentation so
the doc build process runs faster.

To enable this mode, set the following option when invoking cmake::

   -DDT_TURBO_MODE=1

or invoke make with the following target::

   cd ~/zephyr

   # To generate HTML output without detailed Kconfig
   make html-fast

Viewing generated documentation locally
***************************************

The generated HTML documentation can be hosted locally with python for viewing
with a web browser:

.. code-block:: console

   $ python3 -m http.server -d _build/html

.. note::

   WSL2 users may need to explicitly bind the address to ``127.0.0.1`` in order
   to be accessible from the host machine:

   .. code-block:: console

      $ python3 -m http.server -d _build/html --bind 127.0.0.1

Linking external Doxygen projects against Zephyr
************************************************

External projects that build upon Zephyr functionality and wish to refer to
Zephyr documentation in Doxygen (through the use of @ref), can utilize the
tag file exported at `zephyr.tag </doxygen/html/zephyr.tag>`_

Once downloaded, the tag file can be used in a custom ``doxyfile.in`` as follows::

   TAGFILES = "/path/to/zephyr.tag=https://docs.zephyrproject.org/latest/doxygen/html/"

For additional information refer to `Doxygen External Documentation`_.


.. _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
.. _Doxygen External Documentation: https://www.doxygen.nl/manual/external.html

Part 3

한국어 전문 번역

Documentation Generation

이 안내는 online documentation을 만들 때와 같은 documentation source를 사용해 local system에서 Zephyr Project 문서를 생성하는 과정을 설명합니다. Online 결과는 docs.zephyrproject.org에서 볼 수 있습니다.

Documentation 개요

Zephyr Project content는 Sphinx extension을 포함한 reStructuredText markup language(.rst 확장자)로 작성하며 Sphinx가 독립형 website로 처리합니다. Developer는 raw .rst file을 직접 보거나 HTML을 생성해 workstation의 browser에서 볼 수 있습니다. 같은 .rst content가 다른 theme을 적용한 Zephyr Project public documentation website에도 들어갑니다.

reStructuredText와 Sphinx의 자세한 내용은 각 website에서 확인할 수 있습니다.

Project documentation에는 다음 항목이 있습니다.

  • docs.zephyrproject.org 문서를 생성하는 reStructuredText source file. 대부분 /doc directory에 있지만 /samples, /boards처럼 해당 component와 가까운 source tree 안에도 있습니다.
  • API 전용 문서를 만드는 Doxygen 생성 자료
  • Source tree의 Kconfig file을 기반으로 script가 생성하는 kernel configuration option 자료
Documentation build process
직접 입력

.png, .jpg image
reStructuredText file
conf.py configuration
read-the-docs theme

API 입력 경로

C header comment → Doxygen → XML

문서 처리

Sphinx + Breathe + Docutils
직접 입력과 Doxygen XML 결합

출력

HTML website

Sphinx documentation system은 reStructuredText file을 처리하며 Doxygen이 생성한 API 자료를 포함하기 위해 Breathe extension을 사용합니다. Local에서 문서를 생성하려면 다음 절에서 설명하는 추가 도구가 필요합니다.

Documentation processor 설치

Documentation processing은 다음 조합으로 시험되었습니다.

  • Doxygen version 1.8.13
  • Graphviz 2.43
  • Latexmk version 4.56
  • doc/requirements.txt에 나열된 모든 Python dependency

먼저 Getting Started 안내대로 Zephyr를 설치한 다음, 문서 생성에만 필요한 추가 도구를 아래와 같이 설치합니다.

Linux

모든 Linux 설치에서 공통으로 documentation build용 Python dependency를 설치합니다.

pip install -U -r ~/zephyrproject/zephyr/doc/requirements.txt

Ubuntu Linux:

sudo apt-get install --no-install-recommends doxygen graphviz librsvg2-bin \
texlive-latex-base texlive-latex-extra latexmk texlive-fonts-recommended imagemagick

Fedora Linux:

sudo dnf install doxygen graphviz texlive-latex latexmk \
texlive-collection-fontsrecommended librsvg2-tools ImageMagick

Clear Linux:

sudo swupd bundle-add texlive graphviz ImageMagick

Arch Linux:

sudo pacman -S graphviz doxygen librsvg texlive-core texlive-bin \
texlive-latexextra texlive-fontsextra imagemagick

macOS

Documentation build에 필요한 Python dependency를 설치합니다.

pip install -U -r ~/zephyrproject/zephyr/doc/requirements.txt

brew와 tlmgr로 도구를 설치합니다.

brew install doxygen graphviz mactex librsvg imagemagick
tlmgr install latexmk
tlmgr install collection-fontsrecommended

Windows

Documentation build에 필요한 Python dependency를 설치합니다.

pip install -U -r %HOMEPATH$\zephyrproject\zephyr\doc\requirements.txt

cmd.exe를 Administrator 권한으로 열고 다음 command를 실행합니다.

choco install doxygen.install graphviz strawberryperl miktex rsvg-convert imagemagick

Windows에서는 Sphinx executable sphinx-build.exe가 Python 설치 경로의 Scripts folder에 놓입니다. Python 설치 방법에 따라 이 folder를 PATH 환경 변수에 추가해야 할 수 있습니다. 필요하면 Windows Python Path 안내를 따릅니다.

Documentation 표시 theme

Sphinx는 theme으로 생성 문서의 appearance를 쉽게 바꿀 수 있습니다. Theme file을 교체하고 make html을 다시 실행하면 output layout과 style이 바뀝니다. read-the-docs theme은 Getting Started guide의 Python requirement 설치 단계에서 함께 설치됩니다.

Documentation processor 실행

Clone한 Zephyr project git repository의 /doc directory에는 local technical documentation을 생성하는 모든 .rst source file, 추가 도구, Makefile이 있습니다. Home folder의 zephyr에 project가 있다고 가정하면 다음 command로 HTML을 생성합니다.

# On Linux/macOS
cd ~/zephyr/doc
# On Windows
cd %userprofile%\zephyr\doc

# Use cmake to configure a Ninja-based build system:
cmake -GNinja -B_build .

# Enter the build directory
cd _build

# To generate HTML output, run ninja on the generated build system:
ninja html
# If you modify or add .rst files, run ninja again:
ninja html

# To generate PDF output, run ninja on the generated build system:
ninja pdf

주의: Documentation build system은 사용한 모든 .rst file과 그 dependency의 복사본을 build directory에 만듭니다. 따라서 Sphinx warning과 error가 가리키는 것은 version control의 Zephyr 원본이 아니라 복사본입니다. Error message에 나온 복사본을 실수로 수정하면 변경이 저장되지 않으므로 주의해야 합니다.

Development system에 따라 HTML content를 모아 생성하는 데 최대 15분이 걸릴 수 있습니다. 완료하면 doc/_build/html/index.html에서 HTML을 보고, PDF를 만들었다면 doc/_build/latex/zephyr.pdf에서 찾을 수 있습니다.

문서를 처음부터 build하려면 build folder 내용을 지운 뒤 cmake와 ninja를 다시 실행합니다.

Documentation에서 file을 추가하거나 제거하면 CMake를 다시 실행해야 합니다.

Unix platform에서는 doc/Makefile을 사용해 그 위치에서 문서를 바로 build할 수 있습니다.

cd ~/zephyr/doc

# To generate HTML output
make html

# To generate PDF output
make pdf

예상 warning filtering

Sphinx/Breathe에는 유효한 C code에서도 Sphinx warning을 만드는 알려진 문제가 있습니다. 문제가 수정되는 동안 regular expression 집합으로 warning을 걸러내는 zephyr.warnings_filter Sphinx extension을 사용합니다. 위치는 doc/_extensions/zephyr/warnings_filter.py이고 걸러낼 warning은 doc/known-warnings.txt에 추가합니다.

가장 흔한 Sphinx/Breathe warning은 중복 C declaration과 관련되며 다음 문제에서 생길 수 있습니다.

  • 같은 object의 여러 declaration을 지원하지 않습니다.
  • 서로 다른 object, 예를 들어 struct와 function이 같은 이름을 공유할 수 없습니다.
  • Struct나 union 안의 nested element가 같은 이름을 공유할 수 없습니다.

Developer mode 문서 build

Documentation의 큰 변경을 만들고 시험할 때 자동 생성되는 Devicetree binding 문서를 임시 stub으로 바꿔 doc build를 빠르게 할 수 있습니다.

cmake를 호출할 때 다음 option으로 mode를 켭니다.

-DDT_TURBO_MODE=1

또는 다음 target으로 make를 실행합니다.

cd ~/zephyr

# To generate HTML output without detailed Kconfig
make html-fast

생성 문서를 local에서 보기

생성된 HTML documentation은 Python으로 local hosting해 web browser에서 볼 수 있습니다.

$ python3 -m http.server -d _build/html

WSL2 사용자는 host machine에서 접근할 수 있도록 주소를 127.0.0.1에 명시적으로 bind해야 할 수 있습니다.

$ python3 -m http.server -d _build/html --bind 127.0.0.1

외부 Doxygen project를 Zephyr에 연결

Zephyr 기능 위에 build하면서 Doxygen의 @ref로 Zephyr documentation을 참조하려는 외부 project는 zephyr.tag export file을 사용할 수 있습니다.

Tag file을 내려받은 뒤 custom doxyfile.in에서 다음처럼 사용합니다.

TAGFILES = "/path/to/zephyr.tag=https://docs.zephyrproject.org/latest/doxygen/html/"

추가 정보는 Doxygen External Documentation을 참고하십시오.

Source

출처

영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.