cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sphinx.rst (15704B)


      1.. _sphinxdoc:
      2
      3=====================================
      4Using Sphinx for kernel documentation
      5=====================================
      6
      7The Linux kernel uses `Sphinx`_ to generate pretty documentation from
      8`reStructuredText`_ files under ``Documentation``. To build the documentation in
      9HTML or PDF formats, use ``make htmldocs`` or ``make pdfdocs``. The generated
     10documentation is placed in ``Documentation/output``.
     11
     12.. _Sphinx: http://www.sphinx-doc.org/
     13.. _reStructuredText: http://docutils.sourceforge.net/rst.html
     14
     15The reStructuredText files may contain directives to include structured
     16documentation comments, or kernel-doc comments, from source files. Usually these
     17are used to describe the functions and types and design of the code. The
     18kernel-doc comments have some special structure and formatting, but beyond that
     19they are also treated as reStructuredText.
     20
     21Finally, there are thousands of plain text documentation files scattered around
     22``Documentation``. Some of these will likely be converted to reStructuredText
     23over time, but the bulk of them will remain in plain text.
     24
     25.. _sphinx_install:
     26
     27Sphinx Install
     28==============
     29
     30The ReST markups currently used by the Documentation/ files are meant to be
     31built with ``Sphinx`` version 1.7 or higher.
     32
     33There's a script that checks for the Sphinx requirements. Please see
     34:ref:`sphinx-pre-install` for further details.
     35
     36Most distributions are shipped with Sphinx, but its toolchain is fragile,
     37and it is not uncommon that upgrading it or some other Python packages
     38on your machine would cause the documentation build to break.
     39
     40A way to avoid that is to use a different version than the one shipped
     41with your distributions. In order to do so, it is recommended to install
     42Sphinx inside a virtual environment, using ``virtualenv-3``
     43or ``virtualenv``, depending on how your distribution packaged Python 3.
     44
     45.. note::
     46
     47   #) It is recommended to use the RTD theme for html output. Depending
     48      on the Sphinx version, it should be installed separately,
     49      with ``pip install sphinx_rtd_theme``.
     50
     51   #) Some ReST pages contain math expressions. Due to the way Sphinx works,
     52      those expressions are written using LaTeX notation. It needs texlive
     53      installed with amsfonts and amsmath in order to evaluate them.
     54
     55In summary, if you want to install Sphinx version 2.4.4, you should do::
     56
     57       $ virtualenv sphinx_2.4.4
     58       $ . sphinx_2.4.4/bin/activate
     59       (sphinx_2.4.4) $ pip install -r Documentation/sphinx/requirements.txt
     60
     61After running ``. sphinx_2.4.4/bin/activate``, the prompt will change,
     62in order to indicate that you're using the new environment. If you
     63open a new shell, you need to rerun this command to enter again at
     64the virtual environment before building the documentation.
     65
     66Image output
     67------------
     68
     69The kernel documentation build system contains an extension that
     70handles images on both GraphViz and SVG formats (see
     71:ref:`sphinx_kfigure`).
     72
     73For it to work, you need to install both GraphViz and ImageMagick
     74packages. If those packages are not installed, the build system will
     75still build the documentation, but won't include any images at the
     76output.
     77
     78PDF and LaTeX builds
     79--------------------
     80
     81Such builds are currently supported only with Sphinx versions 2.4 and higher.
     82
     83For PDF and LaTeX output, you'll also need ``XeLaTeX`` version 3.14159265.
     84
     85Depending on the distribution, you may also need to install a series of
     86``texlive`` packages that provide the minimal set of functionalities
     87required for ``XeLaTeX`` to work.
     88
     89.. _sphinx-pre-install:
     90
     91Checking for Sphinx dependencies
     92--------------------------------
     93
     94There's a script that automatically check for Sphinx dependencies. If it can
     95recognize your distribution, it will also give a hint about the install
     96command line options for your distro::
     97
     98	$ ./scripts/sphinx-pre-install
     99	Checking if the needed tools for Fedora release 26 (Twenty Six) are available
    100	Warning: better to also install "texlive-luatex85".
    101	You should run:
    102
    103		sudo dnf install -y texlive-luatex85
    104		/usr/bin/virtualenv sphinx_2.4.4
    105		. sphinx_2.4.4/bin/activate
    106		pip install -r Documentation/sphinx/requirements.txt
    107
    108	Can't build as 1 mandatory dependency is missing at ./scripts/sphinx-pre-install line 468.
    109
    110By default, it checks all the requirements for both html and PDF, including
    111the requirements for images, math expressions and LaTeX build, and assumes
    112that a virtual Python environment will be used. The ones needed for html
    113builds are assumed to be mandatory; the others to be optional.
    114
    115It supports two optional parameters:
    116
    117``--no-pdf``
    118	Disable checks for PDF;
    119
    120``--no-virtualenv``
    121	Use OS packaging for Sphinx instead of Python virtual environment.
    122
    123
    124Sphinx Build
    125============
    126
    127The usual way to generate the documentation is to run ``make htmldocs`` or
    128``make pdfdocs``. There are also other formats available: see the documentation
    129section of ``make help``. The generated documentation is placed in
    130format-specific subdirectories under ``Documentation/output``.
    131
    132To generate documentation, Sphinx (``sphinx-build``) must obviously be
    133installed. For prettier HTML output, the Read the Docs Sphinx theme
    134(``sphinx_rtd_theme``) is used if available. For PDF output you'll also need
    135``XeLaTeX`` and ``convert(1)`` from ImageMagick (https://www.imagemagick.org).
    136All of these are widely available and packaged in distributions.
    137
    138To pass extra options to Sphinx, you can use the ``SPHINXOPTS`` make
    139variable. For example, use ``make SPHINXOPTS=-v htmldocs`` to get more verbose
    140output.
    141
    142It is also possible to pass an extra DOCS_CSS overlay file, in order to customize
    143the html layout, by using the ``DOCS_CSS`` make variable.
    144
    145By default, the build will try to use the Read the Docs sphinx theme:
    146
    147    https://github.com/readthedocs/sphinx_rtd_theme
    148
    149If the theme is not available, it will fall-back to the classic one.
    150
    151The Sphinx theme can be overridden by using the ``DOCS_THEME`` make variable.
    152
    153To remove the generated documentation, run ``make cleandocs``.
    154
    155Writing Documentation
    156=====================
    157
    158Adding new documentation can be as simple as:
    159
    1601. Add a new ``.rst`` file somewhere under ``Documentation``.
    1612. Refer to it from the Sphinx main `TOC tree`_ in ``Documentation/index.rst``.
    162
    163.. _TOC tree: http://www.sphinx-doc.org/en/stable/markup/toctree.html
    164
    165This is usually good enough for simple documentation (like the one you're
    166reading right now), but for larger documents it may be advisable to create a
    167subdirectory (or use an existing one). For example, the graphics subsystem
    168documentation is under ``Documentation/gpu``, split to several ``.rst`` files,
    169and has a separate ``index.rst`` (with a ``toctree`` of its own) referenced from
    170the main index.
    171
    172See the documentation for `Sphinx`_ and `reStructuredText`_ on what you can do
    173with them. In particular, the Sphinx `reStructuredText Primer`_ is a good place
    174to get started with reStructuredText. There are also some `Sphinx specific
    175markup constructs`_.
    176
    177.. _reStructuredText Primer: http://www.sphinx-doc.org/en/stable/rest.html
    178.. _Sphinx specific markup constructs: http://www.sphinx-doc.org/en/stable/markup/index.html
    179
    180Specific guidelines for the kernel documentation
    181------------------------------------------------
    182
    183Here are some specific guidelines for the kernel documentation:
    184
    185* Please don't go overboard with reStructuredText markup. Keep it
    186  simple. For the most part the documentation should be plain text with
    187  just enough consistency in formatting that it can be converted to
    188  other formats.
    189
    190* Please keep the formatting changes minimal when converting existing
    191  documentation to reStructuredText.
    192
    193* Also update the content, not just the formatting, when converting
    194  documentation.
    195
    196* Please stick to this order of heading adornments:
    197
    198  1. ``=`` with overline for document title::
    199
    200       ==============
    201       Document title
    202       ==============
    203
    204  2. ``=`` for chapters::
    205
    206       Chapters
    207       ========
    208
    209  3. ``-`` for sections::
    210
    211       Section
    212       -------
    213
    214  4. ``~`` for subsections::
    215
    216       Subsection
    217       ~~~~~~~~~~
    218
    219  Although RST doesn't mandate a specific order ("Rather than imposing a fixed
    220  number and order of section title adornment styles, the order enforced will be
    221  the order as encountered."), having the higher levels the same overall makes
    222  it easier to follow the documents.
    223
    224* For inserting fixed width text blocks (for code examples, use case
    225  examples, etc.), use ``::`` for anything that doesn't really benefit
    226  from syntax highlighting, especially short snippets. Use
    227  ``.. code-block:: <language>`` for longer code blocks that benefit
    228  from highlighting. For a short snippet of code embedded in the text, use \`\`.
    229
    230
    231the C domain
    232------------
    233
    234The **Sphinx C Domain** (name c) is suited for documentation of C API. E.g. a
    235function prototype:
    236
    237.. code-block:: rst
    238
    239    .. c:function:: int ioctl( int fd, int request )
    240
    241The C domain of the kernel-doc has some additional features. E.g. you can
    242*rename* the reference name of a function with a common name like ``open`` or
    243``ioctl``:
    244
    245.. code-block:: rst
    246
    247     .. c:function:: int ioctl( int fd, int request )
    248        :name: VIDIOC_LOG_STATUS
    249
    250The func-name (e.g. ioctl) remains in the output but the ref-name changed from
    251``ioctl`` to ``VIDIOC_LOG_STATUS``. The index entry for this function is also
    252changed to ``VIDIOC_LOG_STATUS``.
    253
    254Please note that there is no need to use ``c:func:`` to generate cross
    255references to function documentation.  Due to some Sphinx extension magic,
    256the documentation build system will automatically turn a reference to
    257``function()`` into a cross reference if an index entry for the given
    258function name exists.  If you see ``c:func:`` use in a kernel document,
    259please feel free to remove it.
    260
    261
    262list tables
    263-----------
    264
    265The list-table formats can be useful for tables that are not easily laid
    266out in the usual Sphinx ASCII-art formats.  These formats are nearly
    267impossible for readers of the plain-text documents to understand, though,
    268and should be avoided in the absence of a strong justification for their
    269use.
    270
    271The ``flat-table`` is a double-stage list similar to the ``list-table`` with
    272some additional features:
    273
    274* column-span: with the role ``cspan`` a cell can be extended through
    275  additional columns
    276
    277* row-span: with the role ``rspan`` a cell can be extended through
    278  additional rows
    279
    280* auto span rightmost cell of a table row over the missing cells on the right
    281  side of that table-row.  With Option ``:fill-cells:`` this behavior can
    282  changed from *auto span* to *auto fill*, which automatically inserts (empty)
    283  cells instead of spanning the last cell.
    284
    285options:
    286
    287* ``:header-rows:``   [int] count of header rows
    288* ``:stub-columns:``  [int] count of stub columns
    289* ``:widths:``        [[int] [int] ... ] widths of columns
    290* ``:fill-cells:``    instead of auto-spanning missing cells, insert missing cells
    291
    292roles:
    293
    294* ``:cspan:`` [int] additional columns (*morecols*)
    295* ``:rspan:`` [int] additional rows (*morerows*)
    296
    297The example below shows how to use this markup.  The first level of the staged
    298list is the *table-row*. In the *table-row* there is only one markup allowed,
    299the list of the cells in this *table-row*. Exceptions are *comments* ( ``..`` )
    300and *targets* (e.g. a ref to ``:ref:`last row <last row>``` / :ref:`last row
    301<last row>`).
    302
    303.. code-block:: rst
    304
    305   .. flat-table:: table title
    306      :widths: 2 1 1 3
    307
    308      * - head col 1
    309        - head col 2
    310        - head col 3
    311        - head col 4
    312
    313      * - row 1
    314        - field 1.1
    315        - field 1.2 with autospan
    316
    317      * - row 2
    318        - field 2.1
    319        - :rspan:`1` :cspan:`1` field 2.2 - 3.3
    320
    321      * .. _`last row`:
    322
    323        - row 3
    324
    325Rendered as:
    326
    327   .. flat-table:: table title
    328      :widths: 2 1 1 3
    329
    330      * - head col 1
    331        - head col 2
    332        - head col 3
    333        - head col 4
    334
    335      * - row 1
    336        - field 1.1
    337        - field 1.2 with autospan
    338
    339      * - row 2
    340        - field 2.1
    341        - :rspan:`1` :cspan:`1` field 2.2 - 3.3
    342
    343      * .. _`last row`:
    344
    345        - row 3
    346
    347Cross-referencing
    348-----------------
    349
    350Cross-referencing from one documentation page to another can be done simply by
    351writing the path to the document file, no special syntax required. The path can
    352be either absolute or relative. For absolute paths, start it with
    353"Documentation/". For example, to cross-reference to this page, all the
    354following are valid options, depending on the current document's directory (note
    355that the ``.rst`` extension is required)::
    356
    357    See Documentation/doc-guide/sphinx.rst. This always works.
    358    Take a look at sphinx.rst, which is at this same directory.
    359    Read ../sphinx.rst, which is one directory above.
    360
    361If you want the link to have a different rendered text other than the document's
    362title, you need to use Sphinx's ``doc`` role. For example::
    363
    364    See :doc:`my custom link text for document sphinx <sphinx>`.
    365
    366For most use cases, the former is preferred, as it is cleaner and more suited
    367for people reading the source files. If you come across a ``:doc:`` usage that
    368isn't adding any value, please feel free to convert it to just the document
    369path.
    370
    371For information on cross-referencing to kernel-doc functions or types, see
    372Documentation/doc-guide/kernel-doc.rst.
    373
    374.. _sphinx_kfigure:
    375
    376Figures & Images
    377================
    378
    379If you want to add an image, you should use the ``kernel-figure`` and
    380``kernel-image`` directives. E.g. to insert a figure with a scalable
    381image format, use SVG (:ref:`svg_image_example`)::
    382
    383    .. kernel-figure::  svg_image.svg
    384       :alt:    simple SVG image
    385
    386       SVG image example
    387
    388.. _svg_image_example:
    389
    390.. kernel-figure::  svg_image.svg
    391   :alt:    simple SVG image
    392
    393   SVG image example
    394
    395The kernel figure (and image) directive supports **DOT** formatted files, see
    396
    397* DOT: http://graphviz.org/pdf/dotguide.pdf
    398* Graphviz: http://www.graphviz.org/content/dot-language
    399
    400A simple example (:ref:`hello_dot_file`)::
    401
    402  .. kernel-figure::  hello.dot
    403     :alt:    hello world
    404
    405     DOT's hello world example
    406
    407.. _hello_dot_file:
    408
    409.. kernel-figure::  hello.dot
    410   :alt:    hello world
    411
    412   DOT's hello world example
    413
    414Embedded *render* markups (or languages) like Graphviz's **DOT** are provided by the
    415``kernel-render`` directives.::
    416
    417  .. kernel-render:: DOT
    418     :alt: foobar digraph
    419     :caption: Embedded **DOT** (Graphviz) code
    420
    421     digraph foo {
    422      "bar" -> "baz";
    423     }
    424
    425How this will be rendered depends on the installed tools. If Graphviz is
    426installed, you will see a vector image. If not, the raw markup is inserted as
    427*literal-block* (:ref:`hello_dot_render`).
    428
    429.. _hello_dot_render:
    430
    431.. kernel-render:: DOT
    432   :alt: foobar digraph
    433   :caption: Embedded **DOT** (Graphviz) code
    434
    435   digraph foo {
    436      "bar" -> "baz";
    437   }
    438
    439The *render* directive has all the options known from the *figure* directive,
    440plus option ``caption``.  If ``caption`` has a value, a *figure* node is
    441inserted. If not, an *image* node is inserted. A ``caption`` is also needed, if
    442you want to refer to it (:ref:`hello_svg_render`).
    443
    444Embedded **SVG**::
    445
    446  .. kernel-render:: SVG
    447     :caption: Embedded **SVG** markup
    448     :alt: so-nw-arrow
    449
    450     <?xml version="1.0" encoding="UTF-8"?>
    451     <svg xmlns="http://www.w3.org/2000/svg" version="1.1" ...>
    452        ...
    453     </svg>
    454
    455.. _hello_svg_render:
    456
    457.. kernel-render:: SVG
    458   :caption: Embedded **SVG** markup
    459   :alt: so-nw-arrow
    460
    461   <?xml version="1.0" encoding="UTF-8"?>
    462   <svg xmlns="http://www.w3.org/2000/svg"
    463     version="1.1" baseProfile="full" width="70px" height="40px" viewBox="0 0 700 400">
    464   <line x1="180" y1="370" x2="500" y2="50" stroke="black" stroke-width="15px"/>
    465   <polygon points="585 0 525 25 585 50" transform="rotate(135 525 25)"/>
    466   </svg>