From 8962da19ca678946471cc5bb8f274df8b1ee23ca Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 13 Apr 2020 19:34:46 -0400 Subject: [PATCH] complete cmake howto --- doc/src/Howto_cmake.rst | 303 ++++++++++++++++++------------- doc/src/JPG/cmake-codeblocks.png | Bin 0 -> 132288 bytes 2 files changed, 174 insertions(+), 129 deletions(-) create mode 100644 doc/src/JPG/cmake-codeblocks.png diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index 5c8a543bb8..127b550c5a 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -35,6 +35,9 @@ software available on all supported platforms and can be used interchangeably. The minimum supported CMake version is 3.10 (3.12 or later is recommended). +All details about features and settings for CMake are in the `CMake +online documentation `_. We focus +below on the most important aspects with respect to compiling LAMMPS. Prerequisites ------------- @@ -81,9 +84,12 @@ This can be achieved with ``make no-all purge``. You can pick **any** folder outside the source tree. We recommend to create a folder ``build`` in the top-level directory, or multiple -folders in case you want to compile LAMMPS in different configurations -(``build-parallel``, ``build-serial``) or with different compilers -(``build-gnu``, ``build-clang``, ``build-intel``) and so on. +folders in case you want to have separate builds of LAMMPS with +different options (``build-parallel``, ``build-serial``) or with +different compilers (``build-gnu``, ``build-clang``, ``build-intel``) +and so on. All the auxiliary files created by one build process +(executable, object files, log files, etc) are stored in this directory +or sub-directories within it that CMake creates. Running CMake @@ -249,8 +255,8 @@ not required, it can also be entered from the GUI. Again, you start with an empty configuration cache (left image) and need to start the configuration step. For the very first configuration in a -folder, you will have a popup dialog (center image) asking to select the -desired build tool and some configuration settings (stick with the +folder, you will have a pop-up dialog (center image) asking to select +the desired build tool and some configuration settings (stick with the default) and then you get the option screen with all new settings highlighted in red. You can modify them (or not) and click on the "configure" button again until satisfied and click on the "generate" @@ -261,146 +267,185 @@ button to write out the build files. You can exit the GUI from the Setting options --------------- +Options that enable, disable or modify settings are modified by setting +the value of CMake variables. This is done on the command line with the +*-D* flag in the format ``-D VARIABLE=value``, e.g. ``-D +CMAKE_BUILD_TYPE=Release`` or ``-D BUILD_MPI=on``. There is one quirk: +when used before the CMake directory, there may be a space between the +*-D* flag and the variable, after it must not be. Such CMake variables +can have boolean values (on/off, yes/no, or 1/0 are all valid) or are +strings representing a choice, or a path, or are free format. If the +string would contain whitespace, it must be put in quotes, for example +``-D CMAKE_TUNE_FLAGS="-ftree-vectorize -ffast-math"``. +CMake variables fall into two categories: 1) common CMake variables that +are used by default for any CMake configuration setup and 2) project +specific variables, i.e. settings that are specific for LAMMPS. +Also CMake variables can be flagged as *advanced*, which means they are +not shown in the text mode or graphical CMake program in the overview +of all settings by default, but only when explicitly requested (by hitting +the 't' key or clicking on the 'Advanced' check-box). + +Some common CMake variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Variable + - Description + * - ``CMAKE_INSTALL_PREFIX`` + - root directory of install location for ``make install`` (default: ``$HOME/.local``) + * - ``CMAKE_BUILD_TYPE`` + - controls compilation options: + one of ``RelWithDebInfo`` (default), ``Release``, ``Debug``, ``MinSizeRel`` + * - ``BUILD_SHARED_LIBS`` + - if set to ``on`` build the LAMMPS library as shared library (default: ``off``) + * - ``CMAKE_MAKE_PROGRAM`` + - name/path of the compilation command (default depends on *-G* option, usually ``make``) + * - ``CMAKE_VERBOSE_MAKEFILE`` + - if set to ``on`` echo commands while executing during build (default: ``off``) + * - ``CMAKE_C_COMPILER`` + - C compiler to be used for compilation (default: system specific, ``gcc`` on Linux) + * - ``CMAKE_CXX_COMPILER`` + - C++ compiler to be used for compilation (default: system specific, ``g++`` on Linux) + * - ``CMAKE_Fortran_COMPILER`` + - Fortran compiler to be used for compilation (default: system specific, ``gfortran`` on Linux) + * - ``CXX_COMPILER_LAUNCHER`` + - tool to launch the C++ compiler, e.g. ``ccache`` or ``distcc`` for faster compilation (default: empty) + +Some common LAMMPS specific variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Variable + - Description + * - ``BUILD_MPI`` + - build LAMMPS with MPI support (default: ``on`` if a working MPI available, else ``off``) + * - ``BUILD_OMP`` + - build LAMMPS with OpenMP support (default: ``on`` if compiler supports OpenMP fully, else ``off``) + * - ``BUILD_TOOLS`` + - compile some additional executables from the ``tools`` folder (default: ``off``) + * - ``BUILD_DOC`` + - include building the documentation (default: ``off``) + * - ``CMAKE_TUNE_FLAGS`` + - common compiler flags, for optimization or instrumentation (default: compiler specific) + * - ``LAMMPS_MACHINE`` + - when set to ``name`` the LAMMPS executable and library will be called ``lmp_name`` and ``liblammps_name.a`` + * - ``LAMMPS_EXCEPTIONS`` + - when set to ``on`` errors will throw a C++ exception instead of aborting (default: ``off``) + * - ``FFT`` + - select which FFT library to use: ``FFTW3``, ``MKL``, ``KISS`` (default, unless FFTW3 is found) + * - ``FFT_SINGLE`` + - select whether to use single precision FFTs (default: ``off``) + * - ``WITH_JPEG`` + - whether to support JPEG format in :doc:`dump image ` (default: ``on`` if found) + * - ``WITH_PNG`` + - whether to support PNG format in :doc:`dump image ` (default: ``on`` if found) + * - ``WITH_GZIP`` + - whether to support reading and writing compressed files (default: ``on`` if found) + * - ``WITH_FFMPEG`` + - whether to support generating movies with :doc:`dump movie ` (default: ``on`` if found) + +Enabling or disabling LAMMPS packages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The LAMMPS software is organized into a common core that is always +included and a large number of :doc:`add-on packages ` that +have to be enabled to be included into a LAMMPS executable. Packages +are enabled through setting variables of the kind ``PKG_`` to +``on`` and disabled by setting them to ``off`` (or using ``yes``, +``no``, ``1``, ``0`` correspondingly). ```` has to be replaced by +the name of the package, e.g. ``MOLECULE`` or ``USER-MISC``. Using presets ------------- -Since LAMMPS has a lot of optional features specifying them all -on the command line, or - when selecting a different compiler toolchain - -multiple options have to be changed +Since LAMMPS has a lot of optional features and packages, specifying +them all on the command line can be tedious. Or when selecting a +different compiler toolchain, multiple options have to be changed +consistently and that is rather error prone. Or when enabling certain +packages, they require consistent settings to be operated in a +particular mode. For this purpose, we are providing a selection of +"preset files" for CMake in the folder ``cmake/presets``. They +represent a way to pre-load or override the CMake configuration cache by +setting or changing CMake variables. Preset files are loaded using the +*-C* command line flag. You can combine loading multiple preset files or +change some variables later with additional *-D* flags. A few examples: +.. code-block:: bash + cmake -C ../cmake/preset/minimal.cmake -D PKG_MISC=on ../cmake + cmake -C ../cmake/preset/clang.cmake -C ../cmake/preset/most.cmake ../cmake + cmake -C ../cmake/preset/minimal.cmake -D BUILD_MPI=off ../cmake + +The first command will install the packages ``KSPACE``, ``MANYBODY``, +``MOLECULE``, ``RIGID`` and ``MISC``; the first four from the preset +file and the fifth from the explicit variable definition. The second +command will first switch the compiler toolchain to use the Clang +compilers and install a large number of packages that are not depending +on any special external libraries or tools and are not very unusual. +The third command will enable the first four packages like above and +then enforce compiling LAMMPS as a serial program (using the MPI STUBS +library). + +It is also possible to do this incrementally. + +.. code-block:: bash + + cmake -C ../cmake/preset/minimal.cmake ../cmake + cmake -D PKG_MISC=on . + +will achieve the same configuration like in the first example above. In +this scenario it is particularly convenient to do the second +configuration step using either the text mode or graphical user +interface (``ccmake`` or ``cmake-gui``). + + Choosing generators ------------------- +While CMake usually defaults to creating makefiles to compile software +with the ``make`` program, it supports multiple alternate build tools +(e.g. ``ninja-build`` which tends to be faster and more efficient in +parallelizing builds than ``make``) and can generate project files for +integrated development environments (IDEs) like VisualStudio, Eclipse or +CodeBlocks. This is specific to how the local CMake version was +configured and compiled. The list of available options can be seen at +the end of the output of ``cmake --help``. Example on Fedora 31 this is: -After the initial build, if you edit LAMMPS source files, or add your -own new files to the source directory, you can just re-type make from -your build directory and it will re-compile only the files that have -changed. If you want to change CMake options you can run cmake (or -ccmake or cmake-gui) again from the same build directory and alter -various options; see details below. Or you can remove the entire build -folder, recreate the directory and start over. +.. code-block:: -. Further details about features and settings for CMake -are in the `CMake online documentation `_ -For the rest of this manual we will assume that the build environment -is generated for "Unix Makefiles" and thus the ``cmake --build .`` will -call the ``make`` command or you can use it directly. + Generators + The following generators are available on this platform (* marks default): + * Unix Makefiles = Generates standard UNIX makefiles. + Green Hills MULTI = Generates Green Hills MULTI files + (experimental, work-in-progress). + Ninja = Generates build.ninja files. + Ninja Multi-Config = Generates build-.ninja files. + Watcom WMake = Generates Watcom WMake makefiles. + CodeBlocks - Ninja = Generates CodeBlocks project files. + CodeBlocks - Unix Makefiles = Generates CodeBlocks project files. + CodeLite - Ninja = Generates CodeLite project files. + CodeLite - Unix Makefiles = Generates CodeLite project files. + Sublime Text 2 - Ninja = Generates Sublime Text 2 project files. + Sublime Text 2 - Unix Makefiles + = Generates Sublime Text 2 project files. + Kate - Ninja = Generates Kate project files. + Kate - Unix Makefiles = Generates Kate project files. + Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files. + Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files. - -There are 3 variants of the CMake command itself: a command-line version -(``cmake`` or ``cmake3``), a text mode UI version (``ccmake`` or ``ccmake3``), -and a graphical GUI version (``cmake-gui``). You can use any of them -interchangeably to configure and create the LAMMPS build environment. -On Linux all the versions produce a Makefile as their output by default. -See more details on each below. - -You can specify a variety of options with any of the 3 versions, which -affect how the build is performed and what is included in the LAMMPS -executable. Links to pages explaining all the options are listed on -the :doc:`Build ` doc page. - -You must perform the CMake build system generation and compilation in -a new directory you create. It can be anywhere on your local machine. -In these Build pages we assume that you are building in a directory -called ``lammps/build``. You can perform separate builds independently -with different options, so long as you perform each of them in a -separate directory you create. All the auxiliary files created by one -build process (executable, object files, log files, etc) are stored in -this directory or sub-directories within it that CMake creates. - ----------- - -**Command-line version of CMake**\ : +Below is a screenshot of using the CodeBlocks IDE with the ninja build tool +after running CMake as follows: .. code-block:: bash - cmake [options ...] /path/to/lammps/cmake # build from any dir - cmake [options ...] ../cmake # build from lammps/build - cmake3 [options ...] ../cmake # build from lammps/build - -The cmake command takes one required argument, which is the LAMMPS -cmake directory which contains the CMakeLists.txt file. - -The argument can be prefixed or followed by various CMake -command-line options. Several useful ones are: - -.. code-block:: bash - - -D CMAKE_INSTALL_PREFIX=path # where to install LAMMPS executable/lib if desired - -D CMAKE_BUILD_TYPE=type # type = RelWithDebInfo (default), Release, MinSizeRel, or Debug - -G output # style of output CMake generates (e.g. "Unix Makefiles" or "Ninja") - -D CMAKE_MAKE_PROGRAM=builder # name of the builder executable (e.g. when using "gmake" instead of "make") - -DVARIABLE=value # setting for a LAMMPS feature to enable - -D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir - -C path/to/preset/file # load some CMake settings before configuring - -All the LAMMPS-specific -D variables that a LAMMPS build supports are -described on the pages linked to from the :doc:`Build ` doc page. -All of these variable names are upper-case and their values are -lower-case, e.g. -D LAMMPS_SIZES=smallbig. For boolean values, any of -these forms can be used: yes/no, on/off, 1/0. - -On Unix/Linux machines, CMake generates a Makefile by default to -perform the LAMMPS build. Alternate forms of build info can be -generated via the -G switch, e.g. Visual Studio on a Windows machine, -Xcode on MacOS, or KDevelop on Linux. Type ``cmake --help`` to see the -"Generator" styles of output your system supports. - -.. note:: - - When CMake runs, it prints configuration info to the screen. - You should review this to verify all the features you requested were - enabled, including packages. You can also see what compilers and - compile options will be used for the build. Any errors in CMake - variable syntax will also be flagged, e.g. mis-typed variable names or - variable values. - -CMake creates a CMakeCache.txt file when it runs. This stores all the -settings, so that when running CMake again you can use the current -folder '.' instead of the path to the LAMMPS cmake folder as the -required argument to the CMake command. Either way the existing -settings will be inherited unless the CMakeCache.txt file is removed. - -If you later want to change a setting you can rerun cmake in the build -directory with different setting. Please note that some automatically -detected variables will not change their value when you rerun cmake. -In these cases it is usually better to first remove all the -files/directories in the build directory, or start with a fresh build -directory. - ----------- - -**Curses version (terminal-style menu) of CMake**\ : - -.. code-block:: bash - - ccmake ../cmake - -You initiate the configuration and build environment generation steps -separately. For the first you have to type **c**\ , for the second you -have to type **g**\ . You may need to type **c** multiple times, and may be -required to edit some of the entries of CMake configuration variables -in between. Please see the `ccmake manual `_ for -more information. - ----------- - -**GUI version of CMake**\ : - -.. code-block:: bash - - cmake-gui ../cmake - -You initiate the configuration and build environment generation steps -separately. For the first you have to click on the **Configure** button, -for the second you have to click on the **Generate** button. You may -need to click on **Configure** multiple times, and may be required to -edit some of the entries of CMake configuration variables in between. -Please see the `cmake-gui manual `_ -for more information. + cmake -G 'CodeBlocks - Ninja' ../cmake/presets/most.cmake ../cmake/ +.. image:: JPG/cmake-codeblocks.png + :align: center diff --git a/doc/src/JPG/cmake-codeblocks.png b/doc/src/JPG/cmake-codeblocks.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d96fec8c5666fe3eb0721c426a435ea73c8167 GIT binary patch literal 132288 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