Update clang-tidy to clang version 8
[alexxy/gromacs.git] / docs / dev-manual / build-system.rst
1 .. highlight:: bash
2
3 Build system overview
4 =====================
5
6 The |Gromacs| build system uses CMake (version
7 |CMAKE_MINIMUM_REQUIRED_VERSION| or newer is required) to generate the
8 actual build system for the build tool choosen by the user.  See CMake
9 documentation for general introduction to CMake and how to use it.  This
10 documentation focuses on how the |Gromacs| build system is organized and
11 implemented, and what features it provides to developers (some of which may be
12 of interest to advanced users).
13
14 Most developers use ``make`` or ``ninja`` as the underlying build system, so
15 there can be parts of the build system that are specifically designed for
16 command-line consumption with these tools, and may not work ideally with other
17 environments, but basic building should be possible with all the environments
18 supported by CMake.
19
20 Also, the build system and version control is designed for out-of-source
21 builds.  In-source builds mostly work (there are a few custom targets that do
22 not), but no particular effort has been put to, e.g., having :file:`.gitignore`
23 files that exclude all the build outputs, or to have the ``clean`` target
24 remove all possible build outputs.
25
26 Build types
27 -----------
28
29 Build types is a CMake concept that provides overall control of how
30 the build tools are used on the given platform to produce executable
31 code. These can be set in CMake in various ways, including on a
32 command line such as ``cmake -DCMAKE_BUILD_TYPE=Debug``. |Gromacs|
33 supports the following standard CMake build types:
34
35 **Release**
36   Fully optimized code intended for use in production simulation. This is the
37   default.
38
39 **Debug**
40   Compiled code intended for use with debugging tools, with low optimization levels
41   and debug information for symbols.
42
43 **RelWithDebInfo**
44   As Release, but with debug information for symbol names, which can help debugging
45   issues that only emerge in optimized code.
46
47 **MinSizeRel**
48   As Release, but optimized to minimize the size of the resulting executable. This
49   is never a concern for |Gromacs| installations, so should not be used, but
50   probably works.
51
52 Additionally, |Gromacs| provides the following build types for development and
53 testing. Their implementations can be found in ``cmake/gmxBuildTypeXXX.cmake``.
54
55 **Reference**
56   This build type compiles a version of |Gromacs| aimed solely at correctness. All
57   parallelization and optimization possibilities are disabled. This build type is
58   compiled with gcc 5 to generate the regression test reference values, against
59   which all other |Gromacs| builds are tested.
60
61 **RelWithAssert**
62   As Release, but removes ``-DNDEBUG`` from compiler command lines, which makes
63   all assertion statements active (and can have other safety-related side effects
64   in |Gromacs| and code upon which it depends)
65
66 **Profile**
67   As Release, but adds ``-pg`` for use with profiling tools. This is not
68   likely to be effective for profiling the performance of :ref:`gmx mdrun`, but can
69   be useful for the tools.
70
71 **TSAN**
72   Builds |Gromacs| for use with ThreadSanitzer in gcc and clang
73   (http://clang.llvm.org/docs/ThreadSanitizer.html) to detect
74   data races. This disables the use of atomics in ThreadMPI,
75   preferring the mutex-based implementation.
76
77 **ASAN**
78   Builds |Gromacs| for use with AddressSanitzer in gcc and
79   clang (http://clang.llvm.org/docs/AddressSanitizer.html) to
80   detect many kinds of memory mis-use. By default, AddressSanitizer
81   includes LeakSanitizer.
82
83 **MSAN**
84   Builds |Gromacs| for use with AddressSanitzer in clang
85   (http://clang.llvm.org/docs/MemorySanitizer.html) to detect
86   reads of unitialized memory. This functionality requires that
87   dependencies of the |Gromacs| build have been built in a compatible
88   way (roughly, static libraries with ``-g -fsanitize=memory
89   -fno-omit-frame-pointer``), which generally requires at least the C++
90   standard library to have been built specially. The path where the
91   includes and libraries for dependencies should be found for this
92   build type is set in the CMake cache variable
93   ``GMX_MSAN_PATH``. Only internal XDR and internal fftpack are
94   supported at this time.
95
96 For all of the sanitizer builds, to get readable stack traces, you may
97 need to ensure that the ``ASAN_SYMBOLIZER_PATH`` environment variable
98 (or your ``PATH``) include that of the ``llvm-symbolizer`` binary.
99
100 With some generators, CMake generates the build system for more than a
101 single ``CMAKE_BUILD_TYPE`` from one pass over the ``CMakeLists.txt``
102 files, so any code that uses ``CMAKE_BUILD_TYPE`` in
103 ``CMakeLists.txt`` directly will break. |Gromacs| does use such CMake
104 code, so we do not fully support all these build types in such
105 generators (which includes Visual Studio).
106
107 CMake cache variables
108 ---------------------
109
110 This section provides a (currently incomplete) list of cache variables that
111 developers or advanced users can set to affect what CMake generates and/or what
112 will get built.
113
114 .. TODO: Figure out where to document basic variables intended for user
115    consumption, and how does it relate to documentation here.
116
117 .. TODO: Document the remaining variables below, and identify any variables
118    missing from the list.
119
120 Compiler flags
121 ^^^^^^^^^^^^^^
122
123 Standard CMake mechanism for specifying the compiler flags is to use
124 ``CMAKE_C_FLAGS``/``CMAKE_CXX_FLAGS`` for flags that affect all build types,
125 and :samp:`CMAKE_C_FLAGS_{buildtype}`/:samp:`CMAKE_CXX_FLAGS_{buildtype}` for
126 flags that only affect a specific build type.  CMake provides some default flags.
127
128 |Gromacs| determines its own set of default flags, grouped into two categories:
129
130 * Generic flags that are appended to the above default CMake flag variables
131   (possibly for multiple build types), generally specifying optimization flags
132   to use and controlling compiler warnings.
133 * Specific flags for certain features that the build system determines to be
134   necessary for successful compilation.  One example is flags that determine
135   what SIMD instruction set the compiler is allowed to use/needs to support.
136
137 All of the above flags are only added after testing that they work with the
138 provided compiler.
139
140 There is one cache variable to control the behavior of automatic compiler flags:
141
142 .. cmake:: GMX_SKIP_DEFAULT_CFLAGS
143
144    If set ``ON``, the build system will not add any compiler flags
145    automatically (neither generic nor specific as defined above), and will skip
146    most linker flags as well.
147    The default flags that would have been added are instead printed out when
148    :command:`cmake` is run, and the user can set the flags themselves using the
149    CMake variables.
150    If ``OFF`` (the default), the flags are added as described above.
151
152 The code the determine the default generic flags is in
153 :file:`cmake/gmxCFlags.cmake`.
154 Code that sets the specific flags (e.g., SIMD flags) is in the main
155 :file:`CMakeLists.txt`; search for :cmake:`GMX_SKIP_DEFAULT_CFLAGS`.
156 The variables used there can be traced back to the locations where the actual
157 flags to use are determined.
158
159 Variables affecting compilation/linking
160 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
161
162 .. cmake:: GMX_BROKEN_CALLOC
163
164 .. cmake:: GMX_BUILD_FOR_COVERAGE
165
166    Special variable set ``ON`` by Jenkins when doing a build for the coverage
167    job.  Allows the build system to set options to produce as useful coverage
168    metrics as possible.  Currently, it disables all asserts to avoid them
169    showing up as poor conditional coverage.
170    Defaults to ``OFF``, and there should not be any need to change this in a
171    manual build.
172
173    .. TODO: This could likely be replaced by a (yet another) build type.
174
175 .. cmake:: GMX_BUILD_MDRUN_ONLY
176
177    If set ``ON``, the build system is configured to only build and install a
178    single :file:`mdrun` executable.  To be fully functional, the installed
179    :file:`mdrun` requires a standard |Gromacs| installation (with
180    ``GMX_BUILD_MDRUN_ONLY=OFF``) in the same installation prefix, as the
181    mdrun-only build does not install any data files or scripts, only the
182    binary.  This is intended for cases where one wants to/needs to compile one
183    or more instances of :file:`mdrun` with different build options (e.g., MPI
184    or SIMD) than the full installation with the other utilities.
185    Defaults to ``OFF``, in which case a single :file:`gmx` executable is built
186    and installed, together with all the supporting files.  :command:`mdrun` can
187    be executed as :command:`gmx mdrun`.
188
189 .. cmake:: GMX_BUILD_OWN_FFTW
190
191 .. cmake:: GMX_BUILD_SHARED_EXE
192
193 .. cmake:: GMX_COMPILER_WARNINGS
194
195    If set ``ON``, various compiler warnings are enabled for compilers that
196    Jenkins uses for verification.
197    Defaults to ``OFF`` when building from a source tarball so that users
198    compiling with versions not tested on Jenkins are not exposed to our rather
199    aggressive warning flags that can trigger a lot of warnings with, e.g., new
200    versions of the compilers we use.
201    When building from a git repository, defaults to ``ON``.
202
203 .. cmake:: GMX_CYCLE_SUBCOUNTERS
204
205    If set to ``ON``, enables performance subcounters that offer more
206    fine-grained mdrun performance measurement and evaluation than the default
207    counters. See :doc:`/user-guide/mdrun-performance` for the description of
208    subcounters which are available.
209    Defaults to ``OFF``.
210
211 .. cmake:: GMX_ENABLE_CCACHE
212
213     If set to ``ON``, attempts to set up the `ccache <https://ccache.samba.org>`_
214     caching compiler wrapper to speed up repeated builds.
215     The ``ccache`` executable is searched for with ``find_package()`` if CMake
216     is being run with a compatible build type.
217     If the executable is found and a compatible compiler is configured,
218     CMake launch wrapper scripts are set.
219     If enabled, the ``ccache`` executable location discovered by CMake must be
220     accessible during build, as well.
221     Defaults to ``OFF`` to minimize build system complexity.
222
223 .. cmake:: GMX_INSTALL_DATASUBDIR
224
225    Sets the subdirectory under CMAKE_INSTALL_DATADIR where GROMACS-specific
226    read-only architecture-independent data files are installed. The default
227    is ``gromacs``, which means the files will go under ``share/gromacs``.
228    To alter the ``share`` part, change CMAKE_INSTALL_DATADIR.
229    See :doc:`relocatable-binaries` for how this influences the build.
230
231 .. cmake:: GMX_DOUBLE
232
233    Many part of |Gromacs| are implemented in terms of "real" precision,
234    which is actually either a single- or double-precision type,
235    according to the value of this flag. Some parts of the code
236    deliberately use single- or double-precision types, and these are
237    unaffected by this setting. See reference manual for further
238    information.
239
240 .. cmake:: GMX_RELAXED_DOUBLE_PRECISION
241
242    Permit a double-precision configuration to compute some quantities
243    to single-precision accuracy. Particularly on architectures where
244    only double-precision SIMD is available (e.g. Sparc machines such
245    as the K computer), it is faster to default to ``GMX_DOUBLE=ON``
246    and use SIMD than to use ``GMX_DOUBLE=OFF`` and use no
247    SIMD. However, if the user does not need full double precision,
248    then some optimizations can achieve the equivalent of
249    single-precision results (e.g. fewer Newton-Raphson iterations for
250    a reciprocal square root computation).
251
252 .. cmake:: GMX_EXTRAE
253
254 .. cmake:: GMX_EXTERNAL_BLAS
255
256 .. cmake:: GMX_EXTERNAL_LAPACK
257
258 .. cmake:: GMX_EXTERNAL_TNG
259
260 .. cmake:: GMX_FFT_LIBRARY
261
262 .. cmake:: GMX_GIT_VERSION_INFO
263
264    Whether to generate version information dynamically from git for each build
265    (e.g., HEAD commit hash).
266    Defaults to ``ON`` if the build is from a git repository and :command:`git`
267    is found, otherwise ``OFF``.
268    If ``OFF``, static version information from
269    :file:`cmake/gmxVersionInfo.cmake` is used.
270
271 .. cmake:: GMX_GPU
272
273 .. cmake:: GMX_CLANG_CUDA
274
275    Use clang for compiling CUDA GPU code, both host and device.
276
277 .. cmake:: GMX_CUDA_CLANG_FLAGS
278
279     Pass additional CUDA-only compiler flags to clang using this variable.
280
281 .. cmake:: CMAKE_INSTALL_LIBDIR
282
283    Sets the installation directory for libraries (default is determined by
284    standard CMake package ``GNUInstallDirs``).
285    See :doc:`relocatable-binaries` for how this influences the build.
286
287 .. cmake:: GMX_LOAD_PLUGINS
288
289 .. cmake:: GMX_MPI
290
291 .. cmake:: GMX_OPENMP
292
293 .. cmake:: GMX_PREFER_STATIC_LIBS
294
295 .. cmake:: GMX_SIMD
296
297 .. cmake:: GMX_SOFTWARE_INVSQRT
298
299 .. cmake:: GMX_THREAD_MPI
300
301 .. cmake:: GMX_USE_RDTSCP
302
303 .. cmake:: GMX_USE_TNG
304
305 .. cmake:: GMX_VMD_PLUGIN_PATH
306
307 .. cmake:: GMX_X11
308
309 .. cmake:: GMX_XML
310
311    Currently, this option has no effect on the compilation or linking, since
312    there is no code outside the tests that would use :file:`libxml2`.
313
314 Variables affecting the ``all`` target
315 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
316
317 .. cmake:: BUILD_TESTING
318
319    Standard variable created by CTest that enables/disables all tests.
320    Defaults to ``ON``.
321
322 .. cmake:: GMX_BUILD_HELP
323
324    Controls handling of man pages and shell completions.  Possible values:
325
326    ``OFF`` (default for builds from release source distribution)
327      Man pages and shell completions are not generated as part of the ``all``
328      target, and only installed if compiling from a source package.
329    ``AUTO`` (default for builds from development version)
330      Shell completions are generated by executing the :file:`gmx` binary as
331      part of the ``all`` target.  If it fails, a message is printed, but the
332      build succeeds.
333      Man pages need to be generated manually by invoking the ``man`` target.
334      Man pages and shell completions are installed if they have been
335      successfully generated.
336    ``ON``
337      Works the same as ``AUTO``, except that if invoking the :file:`gmx` binary
338      fails, the build fails as well.
339
340 .. cmake:: GMX_DEVELOPER_BUILD
341
342    If set ``ON``, the ``all`` target will include also the test binaries using
343    Google Test (if :cmake:`GMX_BUILD_UNITTESTS` is ``ON``).
344    Also, :cmake:`GMX_COMPILER_WARNINGS` is always enabled.
345    In the future, other developer convenience features (as well as features
346    inconvenient for a general user) can be added to the set controlled by this
347    variable.
348
349 .. cmake:: GMX_CLANG_TIDY
350
351   `clang-tidy <http://releases.llvm.org/8.0.0/tools/clang/tools/extra/docs/clang-tidy/index.html>`_
352   is used for static code analysis and (some) automated fixing of issues detected. clang-tidy is easy to install. It is contained in
353   the llvm binary `package <http://releases.llvm.org/download.html#8.0.0>`_. Only
354   version 8.0.* with libstdc++<7 or libc++ is supported. Others might miss tests or give false positives.
355   It is run automatically on Jenkins for each commit. Many checks have fixes which can automatically be
356   applied. To run it, the build has to be configured with
357   ``cmake -DGMX_CLANG_TIDY=ON -DGMX_OPENMP=no -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=on``.
358   Any ``CMAKE_BUILD_TYPE`` which enables asserts (e.g. ASAN) works. Such a configured build will
359   run both the compiler as well as clang-tidy when building. The name of the clang-tidy executable is set with
360   ``-DCLANG_TIDY=...``, and the full path to it can be set with ``-DCLANG_TIDY_EXE=...``.
361   To apply the automatic fixes to the issue identified clang-tidy should be run seperately (running clang-tidy
362   with ``-fix-errors`` as part of the build can corrupt header files). To fix a specific file run
363   ``clang-tidy -fix-errors -header-filter '.*' {file}``, to fix all files in parallel
364   ``run-clang-tidy.py -fix -header-filter '.*' '(?<!/selection/parser\.cpp|selection/scanner\.cpp)$'``,
365   and to fix all modified files ``run-clang-tidy.py -fix -header-filter '.*' $(git diff HEAD --name-only)``.
366   The run-clang-tidy.py script is in the
367   ``share/clang/`` subfolder of the llvm distribution. ``clang-tidy`` has to be able to find the
368   ``compile_commands.json`` file. Either run from the build folder or add a symlink to the source folder.
369   :cmake:`GMX_ENABLE_CCACHE` does not work with clang-tidy.
370
371 Variables affecting special targets
372 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
373
374 .. cmake:: GMXAPI
375
376     If set ``ON``, the additional ``gmxapi`` C++ library is configured and the
377     ``gmxapi`` headers will be installed. Provides the additional build tree
378     targets ``gmxapi-cppdocs`` and ``gmxapi-cppdocs-dev`` when Doxygen is
379     available. Also exports CMake configuration files for ``gmxapi`` that allow
380     ``find_package(gmxapi)`` to import the ``Gromacs::gmxapi`` CMake target in
381     client projects that search the GROMACS installation root.
382
383 .. cmake:: GMX_BUILD_MANUAL
384
385    If set ``ON``, CMake detection for LaTeX and other prerequisites for the
386    reference PDF manual is done, and the ``manual`` target for building the
387    manual is generated.
388    If ``OFF`` (the default), all detection is skipped and the manual cannot be
389    built.
390
391    .. TODO: Consider if this is really necessary, or if we could just use
392       GMX_DEVELOPER_BUILD.
393
394 .. cmake:: GMX_BUILD_TARBALL
395
396    If set ``ON``, ``-dev`` suffix is stripped off from version strings and some
397    other version info logic is adjusted such that the man pages and other
398    documentation generated from this build is suitable for releasing (on the
399    web page and/or in the source distribution package).
400    Defaults to ``OFF``.
401
402 .. cmake:: GMX_BUILD_UNITTESTS
403
404    If ``ON``, test binaries using Google Test are built (either as the separate
405    ``tests`` targer, or also as part of the ``all`` target, depending on
406    :cmake:`GMX_DEVELOPER_BUILD`).  All dependencies required for building the
407    tests (Google Test and Google Mock frameworks, and tinyxml2) are
408    included in :file:`src/external/`.
409    Defaults to ``ON`` if :cmake:`BUILD_TESTING` is ``ON``.
410
411 .. cmake:: GMX_COMPACT_DOXYGEN
412
413    If set ``ON``, Doxygen configuration is changed to avoid generating large
414    dependency graphs, which makes it significantly faster to run Doxygen and
415    reduces disk usage.  This is typically useful when developing the
416    documentation to reduce the build times.
417    Defaults to ``OFF``.
418
419 .. cmake:: REGRESSIONTEST_DOWNLOAD
420
421    If set ``ON``, CMake will download the regression tests and extract them to
422    a local directory.  :cmake:`REGRESSIONTEST_PATH` is set to the extracted
423    tests.  Note that this happens during the configure phase, not during the
424    build.
425    After the download is done, the variable is automatically reset to ``OFF``
426    again to avoid repeated downloads.  Can be set to ``ON`` to download again.
427    Defaults to ``OFF``.
428
429 .. cmake:: REGRESSIONTEST_PATH
430
431    Path to extracted regression test suite matching the source tree (the
432    directory containing :file:`gmxtest.pl`)
433    If set, CTest tests are generated to run the regression tests.
434    Defaults to empty.
435
436 .. cmake:: SOURCE_MD5SUM
437
438    Sets the MD5 sum of the release tarball when generating the HTML
439    documentation.  It gets inserted into the download section of the HTML
440    pages.
441
442 External libraries
443 ------------------
444
445 .. TODO: List external libraries used (either from src/external/, or from the
446    system), whether they are required or optional, what functionality they
447    provide for Gromacs, and how to control their use.
448
449 Special targets
450 ---------------
451
452 In addition to the default ``all`` target, the generated build system has
453 several custom targets that are intended to be explicitly built to perform
454 various tasks (some of these may also run automatically).  There are various
455 other targets as well used internally by these, but those are typically not
456 intended to be invoked directly.
457
458 check
459    Builds all the binaries needed by the tests and runs the tests.  If some
460    types of tests are not available, shows a note to the user.
461    This is the main target intended for normal users to run the tests.
462    See :doc:`testutils`.
463 check-source
464    Runs a custom Python checker script to check for various source-level
465    issues.  Uses Doxygen XML documentation as well as rudimentary parsing of
466    some parts of the source files.
467    This target is used as part of the Jenkins documentation job.
468    All CMake code is currently in :file:`docs/doxygen/`.
469    See :doc:`gmxtree`.
470 completion
471    Runs the compiled :file:`gmx` executable to generate shell command-line
472    completion definitions.  This target is only added if
473    :cmake:`GMX_BUILD_HELP` is not ``OFF``, and it is run automatically as part
474    of the default ``all`` target.  See :cmake:`GMX_BUILD_HELP`.
475    All CMake code is in :file:`src/programs/`.
476 dep-graphs*
477    Builds include dependency graphs for the source files using :command:`dot`
478    from graphviz.
479    All CMake code is in :file:`docs/doxygen/`.
480    See :doc:`gmxtree`.
481 doxygen-*
482    Targets that run Doxygen to generate the documentation.
483    The ``doxygen-all`` target runs as part of the ``webpage`` target, which in
484    turn runs as part of the Jenkins documentation job.
485    All CMake code is in :file:`docs/doxygen/`.
486    See :doc:`doxygen`.
487 gmxapi-cppdocs
488     Builds API documentation for gmxapi. Useful to authors of client software.
489     Documentation is generated in :file:`docs/api-user` in the build directory.
490 gmxapi-cppdocs-dev
491     Extract documentation for gmxapi and GROMACS developers to
492     :file:`docs/api-dev`.
493 install-guide
494    Runs Sphinx to generate a plain-text INSTALL file for the source package.
495    The files is generated at :file:`docs/install-guide/text/`, from where it
496    gets put at the root of the source package by CPack.
497    All CMake code is in :file:`docs/`.
498 man
499    Runs Sphinx to generate man pages for the programs.
500    Internally, also runs the compiled :file:`gmx` executable to generate the
501    input files for Sphinx.
502    All CMake code is in :file:`docs/`.
503    See :cmake:`GMX_BUILD_HELP` for information on when the man pages are
504    installed.
505 manual
506    Runs LaTeX to generate the reference PDF manual.
507    All CMake code is in :file:`docs/manual/`.
508    See :cmake:`GMX_BUILD_MANUAL`.
509 package_source
510    Standard target created by CPack that builds a source package.
511    This target is used to generate the released source packages.
512 test
513    Standard target created by CTest that runs all the registered tests.
514    Note that this does not build the test binaries, only runs them, so you need
515    to first ensure that they are up-to-date.
516    See :doc:`testutils`.
517 tests
518    Builds all the binaries needed by the tests (but not ``gmx``).
519    See :doc:`testutils`.
520 webpage
521    Collection target that runs the other documentation targets to generate the
522    full set of HTML (and linked) documentaion.
523    This target is used as part of the Jenkins documentation job.
524    All CMake code is in :file:`docs/`.
525 webpage-sphinx
526    Runs Sphinx to generate most content for the HTML documentation (the set of
527    web pages this developer guide is also part of).
528    Internally, also runs the compiled :file:`gmx` executable to generate some
529    input files for Sphinx.
530    All CMake code is in :file:`docs/`.
531
532 Passing information to source code
533 ----------------------------------
534
535 The build system uses a few different mechanisms to influence the compilation:
536
537 * On the highest level, some CMake options select what files will be compiled.
538 * Some options are passed on the compiler command line using ``-D`` or
539   equivalent, such that they are available in every compilation unit.  This
540   should be used with care to keep the compiler command lines manageable.
541   You can find the current set of such defines with ::
542
543     git grep add_definitions
544
545 * A few header files are generated using CMake ``configure_file()`` and
546   included in the desired source files.  These files must exist for the
547   compilation to pass.  Only a few files use an ``#ifdef HAVE_CONFIG_H`` to
548   protect against inclusion in case the define is not set; this is used in
549   files that may get compiled outside the main build system.
550
551   :file:`buildinfo.h`
552     Contains various strings about the build environment, used mainly for
553     outputting version information to log files and when requested.
554   :file:`config.h`
555     Contains defines for conditional compilation within source files.
556   :file:`gmxpre-config.h`
557     Included by :file:`gmxpre.h` as the first thing in every source file.
558     Should only contain defines that are required before any other header for
559     correct operation.  For example, defines that affect the behavior of system
560     headers fall in this category.  See Doxygen documentation for
561     :file:`gmxpre.h`.
562
563   All the above files get generated in :file:`src/`.
564
565   Additionally, the following file is generated by the build system:
566
567   :file:`baseversion-gen.cpp`
568     Provides definitions for declarations in :file:`baseversion_gen.h` for
569     version info output.  The contents are generated either from Git version
570     info, or from static version info if not building from a git repository.