| (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: | |
| ```bash | |
| sudo apt-get install python3-sphinx python3-myst-parser \ | |
| python3-sphinx-reredirects furo | |
| ``` | |
| **On other systems**, install everything from the shared requirements file: | |
| ```bash | |
| pip install -r llvm/docs/requirements.txt | |
| ``` | |
| ## CMake Configuration | |
| Enable the Sphinx documentation build by adding these flags to your CMake | |
| invocation: | |
| ```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: | |
| ```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`. |