| (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`. |