The GLASS documentation is built with Sphinx (pydata-sphinx-theme),
with the API reference generated by Doxygen and bridged into Sphinx via
Breathe. Everything lives under docs/.
docs/
├── Doxyfile # Doxygen config (XML output for Breathe)
├── Makefile # `make all` = clean + doxygen + html
├── requirements.txt # Sphinx + breathe pins
└── source/
├── conf.py # Sphinx config (breathe_projects -> ../doxygen/xml)
├── index.rst # landing page + the top-level navbar toctrees
├── _static/ # committed images (e.g. the sweep-ladder figures)
├── api_reference/ # Breathe `.. doxygenfile::` pages (auto-generated API)
├── user_guide/ # hand-written narrative (getting_started/concepts/tutorials)
└── {contribution_guidelines,sphinx_edit_guide}.rst # Developer Guide section
The top navbar is built from the :caption: toctrees in index.rst —
Getting Started · Concepts · Tutorials · API Reference · Developer Guide.
Each narrative section owns an index.rst (e.g.
user_guide/getting_started/index.rst) whose .. toctree:: lists its child
pages; that toctree is what populates the left sidebar when you are inside the
section. To add a page, add it to its section's index.rst toctree —
do not list leaf pages directly in the root index.rst (that flattens the
hierarchy and leaves the sidebar empty on deep pages). Keep one index page per
navbar section so the sidebar always shows sibling pages.
python -m venv docs/.venv
docs/.venv/bin/pip install -r docs/requirements.txt
# Doxygen is a system package:
sudo apt-get install -y doxygen
cd docs
make all # runs doxygen, then sphinx-build
# open build/html/index.htmlmake all regenerates the Doxygen XML (docs/doxygen/xml/) and then the
HTML site (docs/build/html/). Both directories are gitignored.
- Doxygen parses the headers (see
INPUTinDoxyfile) and emits XML for every symbol that carries a/** */doc-comment (EXTRACT_ALL = NO). - The
api_reference/*.rstpages pull those in per-file with.. doxygenfile:: src/base/L1/axpy.cuh(paths are stripped of the leading../viaSTRIP_FROM_PATH). - To document a new header, add a
/** */block in the source and a.. doxygenfile::line on the matching page. Undocumented internals simply don't appear — no broken references.
The user_guide/ pages are plain reStructuredText. Use === / --- / ~~~
for the heading levels, .. code-block:: cpp / bash for snippets, and
:doc: roles for cross-references. The site is published to GitHub Pages on
every push to main via .github/workflows/gh-pages.yml.