QEMU Documentation

QEMU’s documentation is written in reStructuredText format and built using the Sphinx documentation generator. We generate both the HTML manual and the manpages from the some documentation sources.

hxtool and .hx files

The documentation for QEMU command line options and Human Monitor Protocol (HMP) commands is written in files with the .hx suffix. These are processed in two ways:

  • scripts/hxtool creates C header files from them, which are included in QEMU to do things like handle the --help option output

  • a Sphinx extension in docs/sphinx/hxtool.py generates rST output to be included in the HTML or manpage documentation

The syntax of these .hx files is simple. It is broadly an alternation of C code put into the C output and rST format text put into the documentation. A few special directives are recognised; these are all-caps and must be at the beginning of the line.

HXCOMM is the comment marker. The line, including any arbitrary text after the marker, is discarded and appears neither in the C output nor the documentation output.

SRST starts a reStructuredText section. Following lines are put into the documentation verbatim, and discarded from the C output. The alternative form SRST() is used to define a label which can be referenced from elsewhere in the rST documentation. The label will take the form <DOCNAME-HXFILE-LABEL>, where DOCNAME is the name of the top level rST file, HXFILE is the filename of the .hx file without the .hx extension, and LABEL is the text provided within the SRST() directive. For example, <system/invocation-qemu-options-initrd>.

ERST ends the documentation section started with SRST, and switches back to a C code section.

DEFHEADING() defines a heading that should appear in both the --help output and in the documentation. This directive should be in the C code block. If there is a string inside the brackets, this is the heading to use. If this string is empty, it produces a blank line in the --help output and is ignored for the rST output.

ARCHHEADING() is a variant of DEFHEADING() which produces the heading only if the specified guest architecture was compiled into QEMU. This should be avoided in new documentation.

Within C code sections, you should check the comments at the top of the file to see what the expected usage is, because this varies between files. For instance in qemu-options.hx we use the DEF() macro to define each option and specify its --help text, but in hmp-commands.hx the C code sections are elements of an array of structs of type HMPCommand which define the name, behaviour and help text for each monitor command.

In the file qemu-options.hx, do not try to explicitly define a reStructuredText label within a documentation section. This file is included into two separate Sphinx documents, and some versions of Sphinx will complain about the duplicate label that results. Use the SRST() directive documented above, to emit an unambiguous label.