Unverified Commit 5779731d authored by Axel Kohlmeyer's avatar Axel Kohlmeyer
Browse files

provide cmbuild wrapper script for cmake. document it and add some improvements to CMake build docs

parent 2c282b69
Loading
Loading
Loading
Loading
+20 −14
Original line number Diff line number Diff line
@@ -22,27 +22,31 @@ Makefile(s). Example:
   cd lammps                        # change to the LAMMPS distribution directory
   mkdir build; cd build            # create a new directory (folder) for build
   cmake [options ...] ../cmake     # configuration with (command-line) cmake
   make                             # compilation
   make                             # compilation (or use "cmbuild" from "tools/cmake")

The cmake command will detect available features, enable selected
The ``cmake`` command will detect available features, enable selected
packages and options, and will generate the build environment.  By default
this build environment will be created for "Unix Makefiles" on most
platforms and particularly on Linux.  However, alternate build tools
(e.g. Ninja) and project files for Integrated Development Environments
(IDEs) like Eclipse, CodeBlocks, or Kate can be generated, too. This is
selected via the "-G" command line flag. For the rest of the documentation
selected via the ``-G`` command line flag. For the rest of the documentation
we will assume that the build environment is generated for makefiles
and thus the make command will be used to compile and link LAMMPS as
indicated above, producing (by default) an executable called "lmp" and
a library called "liblammps.a" in the "build" folder.  When generating
and thus the ``make`` command will be used to compile and link LAMMPS as
indicated above, producing (by default) an executable called ``lmp`` and
a library called ``liblammps.a`` in the ``build`` folder.  When generating
a build environment for the "Ninja" build tool, the build command would
be "ninja" instead of "make".
be ``ninja`` instead of ``make``.  Or you may copy the ``cmbuild`` script
from the :ref:`tools/cmake folder <cmake>` somewhere in your path and use that,
as it will indirectly call CMake with the configured tool.  This is
particularly, if you configured the build folder with a build tool
in a non-standard location or name using ``-D CMAKE_MAKE_PROGRAM=<name>``.

If your machine has multiple CPU cores (most do these days), using a
command like "make -jN" (with N being the number of available local
command like ``make -j N`` (with N being the number of available local
CPU cores) can be much faster.  If you plan to do development on
LAMMPS or need to re-compile LAMMPS repeatedly, installation of the
ccache (= Compiler Cache) software may speed up repeated compilation
``ccache`` (= Compiler Cache) software may speed up repeated compilation
even more.

After compilation, you may optionally install the LAMMPS executable into
@@ -60,9 +64,11 @@ to ${HOME}/.local

----------

.. _cmake_build:

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
(``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.
@@ -75,7 +81,7 @@ the :doc:`Build <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
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
@@ -84,10 +90,10 @@ this directory or sub-directories within it that CMake creates.
.. note::

   To perform a CMake build, no packages can be installed or a build
   been previously attempted in the LAMMPS src directory by using "make"
   been previously attempted in the LAMMPS src directory by using ``make``
   commands to :doc:`perform a conventional LAMMPS build <Build_make>`.
   CMake detects if this is the case and generates an error, telling you
   to type "make no-all purge" in the src directory to un-install all
   to type ``make no-all purge`` in the src directory to un-install all
   packages.  The purge removes all the \*.h files auto-generated by
   make.

+71 −19
Original line number Diff line number Diff line
@@ -40,33 +40,61 @@ own sub-directories with their own Makefiles and/or README files.
Pre-processing tools
====================

+-----------------------------+------------------------+----------------------+----------------------------------+----------------------------------+-----------------------------+
| :ref:`amber2lmp <amber>`    | :ref:`ch2lmp <charmm>` | :ref:`chain <chain>` | :ref:`createatoms <createatoms>` | :ref:`drude <drude>`             | :ref:`eam database <eamdb>` |
+-----------------------------+------------------------+----------------------+----------------------------------+----------------------------------+-----------------------------+
| :ref:`eam generate <eamgn>` | :ref:`eff <eff>`       | :ref:`ipp <ipp>`     | :ref:`micelle2d <micelle>`       | :ref:`moltemplate <moltemplate>` | :ref:`msi2lmp <msi>`        |
+-----------------------------+------------------------+----------------------+----------------------------------+----------------------------------+-----------------------------+
| :ref:`polybond <polybond>`  |                        |                      |                                  |                                  |                             |
+-----------------------------+------------------------+----------------------+----------------------------------+----------------------------------+-----------------------------+
.. table_from_list::
   :columns: 6

   * :ref:`amber2lmp <amber>`
   * :ref:`ch2lmp <charmm>`
   * :ref:`chain <chain>`
   * :ref:`createatoms <createatoms>`
   * :ref:`drude <drude>`
   * :ref:`eam database <eamdb>`
   * :ref:`eam generate <eamgn>`
   * :ref:`eff <eff>`
   * :ref:`ipp <ipp>`
   * :ref:`micelle2d <micelle>`
   * :ref:`moltemplate <moltemplate>`
   * :ref:`msi2lmp <msi>`
   * :ref:`polybond <polybond>`


Post-processing tools
=====================

+--------------------------+----------------------------+------------------------+--------------------------+-------------------------------+-----------------------------+
| :ref:`amber2lmp <amber>` | :ref:`binary2txt <binary>` | :ref:`ch2lmp <charmm>` | :ref:`colvars <colvars>` | :ref:`eff <eff>`              | :ref:`fep <fep>`            |
+--------------------------+----------------------------+------------------------+--------------------------+-------------------------------+-----------------------------+
| :ref:`lmp2arc <arc>`     | :ref:`lmp2cfg <cfg>`       | :ref:`matlab <matlab>` | :ref:`phonon <phonon>`   | :ref:`pymol_asphere <pymol>`  | :ref:`python <pythontools>` |
+--------------------------+----------------------------+------------------------+--------------------------+-------------------------------+-----------------------------+
| :ref:`reax <reax_tool>`  | :ref:`replica <replica>`   | :ref:`smd <smd>`       | :ref:`spin <spin>`       | :ref:`xmgrace <xmgrace>`      |                             |
+--------------------------+----------------------------+------------------------+--------------------------+-------------------------------+-----------------------------+
.. table_from_list::
   :columns: 6

   * :ref:`amber2lmp <amber>`
   * :ref:`binary2txt <binary>`
   * :ref:`ch2lmp <charmm>`
   * :ref:`colvars <colvars>`
   * :ref:`eff <eff>`
   * :ref:`fep <fep>`
   * :ref:`lmp2arc <arc>`
   * :ref:`lmp2cfg <cfg>`
   * :ref:`matlab <matlab>`
   * :ref:`phonon <phonon>`
   * :ref:`pymol_asphere <pymol>`
   * :ref:`python <pythontools>`
   * :ref:`reax <reax_tool>`
   * :ref:`replica <replica>`
   * :ref:`smd <smd>`
   * :ref:`spin <spin>`
   * :ref:`xmgrace <xmgrace>`

Miscellaneous tools
===================

+--------------------------+----------------------+-------------------+--------------------+---------------------------------------+
| :ref:`doxygen <doxygen>` | :ref:`emacs <emacs>` | :ref:`i-pi <ipi>` | :ref:`kate <kate>` | :ref:`singularity <singularity_tool>` |
+--------------------------+----------------------+-------------------+--------------------+---------------------------------------+
| :ref:`vim <vim>`         |                      |                   |                    |                                       |
+--------------------------+----------------------+-------------------+--------------------+---------------------------------------+
.. table_from_list::
   :columns: 6

   * :ref:`CMake <cmake>`
   * :ref:`doxygen <doxygen>`
   * :ref:`emacs <emacs>`
   * :ref:`i-pi <ipi>`
   * :ref:`kate <kate>`
   * :ref:`singularity <singularity_tool>`
   * :ref:`vim <vim>`

----------

@@ -157,6 +185,30 @@ See the def.chain or def.chain.ab files in the tools directory for
examples of definition files.  This tool was used to create the system
for the :doc:`chain benchmark <Speed_bench>`.

----------

.. _cmake:

CMake tools
-----------

The ``cmbuild`` script is a wrapper around using ``cmake --build <dir>
--target`` and allows compiling LAMMPS in a :ref:`CMake build folder
<cmake_build>` with a make-like syntax regardless of the actual build
tool and the specific name of the program used (e.g. ``ninja-v1.10`` or
``gmake``) when using ``-D CMAKE_MAKE_PROGRAM=<name>``.

.. parsed-literal::

  Usage: cmbuild [-v] [-h] [-C <dir>] [-j <num>] [<target1> [<target2>] ...]

  Options:
    -h                print this message
    -j <NUM>          allow processing of NUM concurrent tasks
    -C DIRECTORY      execute build in folder DIRECTORY
    -v                produce verbose output


----------

.. _colvars:
+23 −22
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ amber2lmp python scripts for using AMBER to setup LAMMPS input
binary2txt             convert a LAMMPS dump file from binary to ASCII text
ch2lmp                 convert CHARMM files to LAMMPS input
chain                  create a data file of bead-spring chains
cmake                  tools and scripts for use with CMake
colvars                post-process output of the fix colvars command
createatoms            generate lattices of atoms within a geometry
drude                  create Drude core/electron atom pairs in a data file

tools/cmake/cmbuild

0 → 100755
+69 −0
Original line number Diff line number Diff line
#!/bin/bash
# make like wrapper around "cmake --build"
# (c) 2020 Axel Kohlmeyer <akohlmey@temple.edu>
# This file is in the public domain

WORKDIR="${PWD}"
PARAMS=""
MYARGS=""

usage()
{
   echo "Usage: cmbuild [-v] [-h] [-C <dir>] [-j <num>] [<target1> [<target2>] ...]" >&2
}

help()
{
   usage
   cat >&2 <<EOF

Options:
  -h                print this message
  -j <NUM>          allow processing of NUM concurrent tasks
  -C DIRECTORY      execute build in folder DIRECTORY
  -v                produce verbose output
EOF
}

while (( "$#" )); do
    case "$1" in
      -C)
        WORKDIR="$2"
        shift 2
        ;;
      -v)
        MYARGS="${MYARGS} -v"
        shift
        ;;
      -h)
        help
        exit 2
        ;;
      -j)
        MYARGS="${MYARGS} -j $2"
        shift 2
        ;;
      --)
        shift
        break
        ;;
      -*)
        echo "Error: Unsupported flag $1" >&2
        echo
        usage
        exit 1
        ;;
      *)
        PARAMS="${PARAMS} $1"
        shift
        ;;
    esac
done

if [ ! -f "${WORKDIR}/CMakeCache.txt" ] ; then
   echo "Must execute in a CMake build directory or use -C flag to select one" >&2
   exit 3
fi

eval set -- "${PARAMS} $@"
exec cmake --build "${WORKDIR}" ${MYARGS} --target "$@"