This is an old revision of the document!


Build from source: LAMMPS

Start by setting-up a properly-versioned directory hierarchy for LAMMPS builds. For example:

$ mkdir -p ~/sw/lammps
$ cd ~/sw/lammps
$ mkdir attic

The attic directory is used to hold downloaded source packages, etc. I can download the latest LAMMPS stable source by visiting the official downloads page and getting a “tarball” of the latest stable release. This usually downloads as lammps-stable.tar.gz which is slightly annoying because it doesn't cite the release date (so every release you download uses the same filename). When I upload the source to ~/sw/lammps/attic I rename it: at the time of writing, the stable release is 11 August 2017, so I rename the file lammps-20170811.tar.gz to make that clear:

$ cd ~/sw/lammps
$ ls -l attic
total 117944
-rw-r--r-- 1 frey cadmin 120774006 2018-02-14 13:42 lammps-20170811.tar.gz

Create a directory to hold the new version you are building. The name should include the release (version or date, etc.) and any special features worth mentioning. In this case, we'll be building the 11 August 2017 release without any special features:

$ cd ~/sw/lammps
$ mkdir 20170811
$ ls -l
total 0
drwxr-xr-x 2 frey cadmin  6 2018-02-14 13:45 20170811
drwxr-xr-x 2 frey cadmin 35 2018-02-14 13:42 attic

Next, unpack the source code inside the version directory just created:

$ cd 20170811
$ tar -zxf ../attic/lammps-20170811.tar.gz
$ ls -l
total 0
drwxr-xr-x 10 frey cadmin 132 2017-08-11 14:19 lammps-11Aug17

The directory structure we promote will have all the executables, libraries, etc. installed in the 20170811 directory; I typically rename the source code directory src rather than whatever name the program author(s) used:

$ mv lammps-11Aug17 src
$ cd src
$ ls -l
total 100
drwxr-xr-x  5 frey cadmin  4096 2017-08-11 14:18 bench
drwxr-xr-x  5 frey cadmin   104 2017-08-11 14:23 doc
drwxr-xr-x 60 frey cadmin  4096 2017-08-11 14:18 examples
drwxr-xr-x 23 frey cadmin  4096 2017-08-11 14:18 lib
-rw-r--r--  1 frey cadmin 17775 2017-07-24 10:58 LICENSE
drwxr-xr-x  2 frey cadmin  4096 2017-08-11 14:18 potentials
drwxr-xr-x  3 frey cadmin    84 2017-08-11 14:18 python
-rw-r--r--  1 frey cadmin  1690 2011-09-23 19:48 README
drwxr-xr-x 66 frey cadmin 32768 2017-08-11 14:23 src
drwxr-xr-x 28 frey cadmin  4096 2017-08-11 14:19 tools

LAMMPS makes use of the Unix make command to manage the transformation of its source code into executables and libraries. There is no automated configuration or generation of a Makefile a'la GNU autoconf or CMake. Instead, a Makefile template is copied and edited by hand for each build variant:

$ cd src
$ ls -l MAKE
total 24
drwxr-xr-x 2 frey cadmin 4096 2017-08-11 14:18 MACHINES
-rw-r--r-- 1 frey cadmin 2972 2016-05-12 09:54 Makefile.mpi
-rw-r--r-- 1 frey cadmin 2960 2016-05-12 09:54 Makefile.serial
drwxr-xr-x 2 frey cadmin    6 2017-08-11 14:18 MINE
drwxr-xr-x 2 frey cadmin 4096 2017-08-11 14:18 OPTIONS
-rw-r--r-- 1 frey cadmin 4797 2016-04-26 15:38 README

For a simple serial build using GNU compilers (g++) nothing needs to be done: the Makefile.serial can be used as-is. The suffix serial is a machine identifier in the LAMMPS build system. Assuming I have GNU compilers setup in my environment, the build is as simple as:

$ which g++
/usr/bin/g++
$ make serial
  :

Quite a bit of information is displayed as the build proceeds: compilation commands for each individual source file, navigation through the source directory, and warning/error messages the compiler(s) may generate. A successful build will end with a summary line:

  :
   text	   data	    bss	    dec	    hex	filename
5722883	   7744	    968	5731595	 57750b	../lmp_serial
make[1]: Leaving directory `/data/home/frey/sw/lammps/20170811/src/src/Obj_serial'

All of the intermediate object code files and the completed executable are found in the Obj_serial directory (if you're keeping track, that's ~/sw/lammps/20170811/src/src/Obj_serial). That directory name consists of the prefix Obj_ and the LAMMPS machine name that was built. The executable itself is named lmp_«machine» and is in the src directory itself (where you issued the make command).

Since each build saves intermediate files and products in a separate directory, it is possible to build multiple variants of LAMMPS from the same source directory. If you create your own Makefile.«machine» just be sure to use a different machine name for each variant.

The final task is to finish setting-up the 20170811 directory where we have the source code. At this point we've produced an executable, so it should be made available in a bin directory:

$ cd ~/sw/lammps/20170811
$ mkdir -p bin
$ cd bin
$ cp ../src/src/lmp_serial lammps
$ ls -l
total 23956
-rwxr-xr-x 1 frey cadmin 24529796 2018-02-14 14:24 lammps
$ ldd lammps
	linux-vdso.so.1 =>  (0x00007fffa38d6000)
	libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f8bf6eca000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f8bf6c74000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f8bf6a5d000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f8bf66ff000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f8bf71d5000)

In essence, you installed a copy of the finished executable in the bin directory; if you make changes to the build, they may affect the lmp_serial executable down in the src/src directory, but they won't affect your working executable until you do another such cp.

The ldd command shows what shared libraries an executable requires in order to run. If the right-hand side says that the library is not found, then you probably forgot to load a VALET package into your environment (e.g. setup LD_LIBRARY_PATH).

  • documentation/build/lammps.1518636468.txt.gz
  • Last modified: 2018/02/14 19:27
  • by frey