| .. _building_docs: |
| |
| ========================== |
| Building the Documentation |
| ========================== |
| |
| This page explains how to build the LLVM-libc HTML documentation locally so |
| you can preview changes before submitting a patch. |
| |
| Prerequisites |
| ============= |
| |
| The LLVM documentation build uses `Sphinx <https://www.sphinx-doc.org/>`__. |
| The key packages required are: |
| |
| * ``sphinx`` — the documentation generator |
| * ``furo`` — the theme used by LLVM-libc |
| * ``myst-parser`` — Markdown support alongside RST |
| * ``sphinx-reredirects`` — handles page redirect entries in ``conf.py`` |
| |
| **On Debian/Ubuntu**, all required packages are available via apt: |
| |
| .. code-block:: bash |
| |
| sudo apt-get install python3-sphinx python3-myst-parser \ |
| python3-sphinx-reredirects furo |
| |
| **On other systems**, install everything from the shared requirements file: |
| |
| .. code-block:: bash |
| |
| pip install -r llvm/docs/requirements.txt |
| |
| CMake Configuration |
| =================== |
| |
| Enable the Sphinx documentation build by adding these flags to your CMake |
| invocation: |
| |
| .. code-block:: bash |
| |
| cmake ../runtimes \ |
| -DLLVM_ENABLE_RUNTIMES="libc" \ |
| -DLLVM_ENABLE_SPHINX=ON \ |
| -DLIBC_INCLUDE_DOCS=ON \ |
| ... |
| |
| The ``LLVM_ENABLE_SPHINX=ON`` flag enables Sphinx globally for all LLVM |
| subprojects. ``LIBC_INCLUDE_DOCS=ON`` is specific to libc and tells CMake to |
| register the libc doc targets. |
| |
| Building |
| ======== |
| |
| Once configured, build the HTML docs with: |
| |
| .. code-block:: bash |
| |
| ninja docs-libc-html |
| |
| The output is written to ``<build-dir>/tools/libc/docs/html/``. Open |
| ``index.html`` in a browser to view the site. |
| |
| Header Status Pages (Auto-generated) |
| ===================================== |
| |
| The per-header implementation status pages under ``docs/headers/`` are |
| **not** hand-written RST. They are generated at build time by |
| ``libc/utils/docgen/docgen.py``, which: |
| |
| 1. Reads YAML function definitions from ``libc/src/<header>/*.yaml``. |
| 2. Scans ``libc/src/<header>/`` for ``.cpp`` implementation files. |
| 3. Checks ``libc/include/llvm-libc-macros/`` for macro ``#define`` entries. |
| 4. Emits an RST ``list-table`` showing each symbol's implementation status, |
| C standard section, and POSIX link. |
| |
| If you add a new function and regenerate, these pages update automatically. |
| Do **not** hand-edit the generated RST files in ``docs/headers/`` — your |
| changes will be overwritten the next time the docs are built. |
| |
| Troubleshooting |
| =============== |
| |
| ``Extension error: Could not import extension myst_parser`` |
| On Debian/Ubuntu: ``sudo apt-get install python3-myst-parser``. |
| Otherwise: ``pip install -r llvm/docs/requirements.txt``. |
| |
| ``WARNING: document isn't included in any toctree`` |
| A new RST/Markdown file needs a ``toctree`` entry. Add it to the |
| appropriate ``index.rst`` or its parent toctree. |
| |
| ``Extension error: No module named 'sphinx_reredirects'`` |
| Same fix: ``pip install -r llvm/docs/requirements.txt``. |