.. _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 `__. 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 ``/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/
/*.yaml``. 2. Scans ``libc/src/
/`` 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``.