Creating Documentation¶
BLT provides macros to build documentation using Sphinx and Doxygen.
Sphinx is the documentation system used by the Python programming language project (among many others).
Doxygen is a widely used system that generates documentation from annotated source code. Doxygen is heavily used for documenting C++ software.
Sphinx and Doxygen are not built into BLT, so the sphinx-build
and doxygen
executables
must be available via a user’s PATH
at configuration time, or explicitly specified using the
CMake variables SPHINX_EXECUTABLE
and DOXYGEN_EXECUTABLE
.
Here is an example of setting sphinx-build
and doxygen
paths in a host-config file:
set(SPHINX_EXECUTABLE "/usr/bin/sphinx-build" CACHE FILEPATH "")
set(DOXYGEN_EXECUTABLE "/usr/bin/doxygen" CACHE FILEPATH "")
The calc_pi
example provides examples of both Sphinx and Doxygen documentation.
Calc Pi Sphinx Example¶
Sphinx is a python package that depends on several other packages. It can be installed via spack, pip, anaconda, etc…
sphinx-build
processes a config.py
file which includes a tree of reStructuredText files.
The Sphinx sphinx-quickstart
utility helps you generate a new sphinx project, including
selecting common settings for the config.py
.
BLT provides a blt_add_sphinx_target macro which, which will look for a conf.py
file
in the current directory and add a command to build the Sphinx docs using this file to the docs
CMake target.
blt_add_sphinx_target
A macro to create a named sphinx target for user documentation.
Assumes there is a conf.py
sphinx configuration file in the current directory.
This macro is active when BLT is configured with a valid SPHINX_EXECUTABLE
path.
Here is an example of using blt_add_sphinx_target in a CMakeLists.txt file:
#------------------------------------------------------------------------------
# add a target to generate documentation with sphinx
#------------------------------------------------------------------------------
if(SPHINX_FOUND)
blt_add_sphinx_target( calc_pi_sphinx )
endif()
Here is the example reStructuredText file that contains documentation for the calc_pi example.
.. Calc Pi documentation master file, created by
sphinx-quickstart on Sun Sep 10 21:47:20 2017.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to Calc Pi's documentation!
===================================
This is a tutorial example for BLT (https://github.com/llnl/blt) that creates
C++ libraries that calculate :math:`\pi` serially and in parallel using MPI
and CUDA.
These libraries calculate :math:`\pi` by approximating the integral
:math:`f(x) = \int_0^14/(1+x^2)` using numerical integration.
In the MPI implementation, the intervals are distributed across MPI tasks and
a MPI_AllReduce calculates the final result. In the CUDA implementation, the
intervals are distributed across CUDA blocks and threads and a tree reduction
calculates the final result.
The method is adapted from:
https://www.mcs.anl.gov/research/projects/mpi/usingmpi/examples-usingmpi/simplempi/cpi_c.html
Calc Pi Doxygen Example¶
Doxygen is a compiled executable that can be installed via spack, built-by-hand, etc…
doxygen
processes a Doxyfile
which specifies options, including where to look for
annotated source files.
BLT provides a blt_add_doxygen_target macro which, which will look for a Doxyfile.in
file in the current directory, configure this file to create a Doxyfile
in the build directory,
and add a command to build the Doxygen docs using this file to the docs
CMake target.
blt_add_doxygen_target
A macro to create a named doxygen target for API documentation.
Assumes there is a Doxyfile.in
doxygen configuration file in the current directory.
This macro is active when BLT is configured with a valid DOXYGEN_EXECUTABLE
path.
Here is an example of using blt_add_doxygen_target in a CMakeLists.txt file:
#------------------------------------------------------------------------------
# add a target to generate documentation with Doxygen
#------------------------------------------------------------------------------
if(DOXYGEN_FOUND)
blt_add_doxygen_target( calc_pi_doxygen )
endif()
Here is the example Doxyfile.in
file that is configured by CMake and passed to doxygen
.
#---------------------------------------
# Doxygen Config for Calc Pi Example
#---------------------------------------
PROJECT_NAME = Calc Pi
PROJECT_BRIEF = "Calc Pi"
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/../../
GENERATE_XML = NO
GENERATE_LATEX = NO
RECURSIVE = NO
STRIP_CODE_COMMENTS = NO
Building the Calc Pi Example Documentation¶
Here is an example of building both the calc_pi Sphinx and Doxygen docs using the docs
CMake target:
cd build-calc-pi
make docs
...
[ 50%] Building HTML documentation with Sphinx
[ 50%] Built target calc_pi_sphinx
[ 50%] Built target sphinx_docs
[100%] Generating API documentation with Doxygen
Searching for include files...
Searching for example files...
Searching for images...
Searching for dot files...
...
lookup cache used 3/65536 hits=3 misses=3
finished...
[100%] Built target calc_pi_doxygen
[100%] Built target doxygen_docs
[100%] Built target docs
After this your local build directory will contain the following for viewing:
Sphinx:
build-calc-pi/docs/sphinx/html/index.html
Doxygen:
build-calc-pi/docs/doxygen/html/index.html