summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorChristoph Junghans <christoph.junghans@gmail.com>2017-09-10 17:21:38 -0600
committerTodd Gamblin <tgamblin@llnl.gov>2017-09-10 13:21:38 -1000
commiteffba3c95eae08dd704e3239887003134723173b (patch)
treed49226df1166cd13bad8f3eaffe841a6654db655 /var
parentb60e7e14b9c3406599f6a5806fe868a7403f0e7a (diff)
downloadspack-effba3c95eae08dd704e3239887003134723173b.tar.gz
spack-effba3c95eae08dd704e3239887003134723173b.tar.bz2
spack-effba3c95eae08dd704e3239887003134723173b.tar.xz
spack-effba3c95eae08dd704e3239887003134723173b.zip
lammps: version bump, switch to cmake (#5313)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/lammps/lib.patch13
-rw-r--r--var/spack/repos/builtin/packages/lammps/package.py197
2 files changed, 52 insertions, 158 deletions
diff --git a/var/spack/repos/builtin/packages/lammps/lib.patch b/var/spack/repos/builtin/packages/lammps/lib.patch
new file mode 100644
index 0000000000..5a55aafaae
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lammps/lib.patch
@@ -0,0 +1,13 @@
+diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
+index 6d35db75a..5987869b8 100644
+--- a/cmake/CMakeLists.txt
++++ b/cmake/CMakeLists.txt
+@@ -530,7 +530,7 @@ target_link_libraries(lammps ${LAMMPS_LINK_LIBS})
+ set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION})
+ if(INSTALL_LIB)
+ install(TARGETS lammps LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+- install(FILES ${LAMMPS_SOURCE_DIR}/lammps.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++ install(FILES ${LAMMPS_SOURCE_DIR}/library.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps)
+ elseif(BUILD_SHARED_LIBS)
+ message(FATAL_ERROR "Shared library has to be installed, use -DINSTALL_LIB=ON to install lammps with a library")
+ endif()
diff --git a/var/spack/repos/builtin/packages/lammps/package.py b/var/spack/repos/builtin/packages/lammps/package.py
index bf9293ae7c..17147b69ab 100644
--- a/var/spack/repos/builtin/packages/lammps/package.py
+++ b/var/spack/repos/builtin/packages/lammps/package.py
@@ -23,24 +23,23 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
import datetime as dt
-class Lammps(MakefilePackage):
+class Lammps(CMakePackage):
"""LAMMPS stands for Large-scale Atomic/Molecular Massively
Parallel Simulator."""
homepage = "http://lammps.sandia.gov/"
- url = "https://github.com/lammps/lammps/archive/stable_17Nov2016.tar.gz"
+ url = "https://github.com/lammps/lammps/archive/stable_01Sep2017.tar.gz"
- version('2016.11.17', '8aecc58a39f9775203517c62a592d13b')
+ version('20170901', 'c498680052f80c6ddb880052ad369af0')
def url_for_version(self, version):
- vdate = dt.datetime.strptime(str(version), "%Y.%m.%d")
- return "https://github.com/lammps/lammps/archive/stable_{0}.tar.gz".format(
- vdate.strftime("%d%b%Y"))
+ vdate = dt.datetime.strptime(str(version), "%Y%m%d")
+ return "https://github.com/lammps/lammps/archive/patch_{0}.tar.gz".format(
+ vdate.strftime("%d%b%Y").lstrip('0'))
- supported_packages = ['voronoi', 'rigid', 'user-nc-dump',
+ supported_packages = ['voronoi', 'rigid', 'user-nc-dump', 'kspace',
'user-atc', 'meam', 'manybody']
for pkg in supported_packages:
@@ -48,159 +47,41 @@ class Lammps(MakefilePackage):
description='Activate the {0} package'.format(pkg))
variant('lib', default=True,
description='Build the liblammps in addition to the executable')
+ variant('mpi', default=True,
+ description='Build with mpi')
- depends_on('mpi')
- depends_on('fftw')
+ depends_on('mpi', when='+mpi')
+ depends_on('fftw', when='+ksapce')
depends_on('voropp', when='+voronoi')
depends_on('netcdf+mpi', when='+user-nc-dump')
depends_on('blas', when='+user-atc')
depends_on('lapack', when='+user-atc')
- def setup_environment(self, spack_env, run_env):
- self.target_name = self.compiler.name
-
- def edit(self, spec, prefix):
- config = []
-
- config.append('CC = c++')
- if self.compiler.name == 'intel':
- # This is taken from MAKE/OPTIONS/Makefile.intel_cpu_intelmpi
- config.append('OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits') # noqa: E501
- config.append('CCFLAGS = -g -qopenmp -DLAMMPS_MEMALIGN=64 -no-offload -fno-alias -ansi-alias -restrict $(OPTFLAGS)') # noqa: E501
- config.append('LINKFLAGS = -qopenmp $(OPTFLAGS)')
- else:
- # This is taken from MAKE/OPTIONS/Makefile.g++
- config.append('OPTFLAGS = -O3')
- config.append('CCFLAGS = -fopenmp')
- config.append('LINKFLAGS = -fopenmp $(OPTFLAGS)')
-
- config.append('SHFLAGS = {0}'.format(self.compiler.pic_flag))
- config.append('DEPFLAGS = -M')
- config.append('LINK = c++')
-
- config.append('LIB = ')
- config.append('SIZE = size')
-
- config.append('ARCHIVE = ar')
- config.append('ARFLAGS = -rc')
- config.append('SHLIBFLAGS = -shared')
-
- config.append('LMP_INC = -DLAMMPS_GZIP')
-
- mpi_path = self.spec['mpi'].prefix.lib
- mpi_inc = self.spec['mpi'].prefix.include
-
- config.append(
- 'MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -I{0}'.format(
- mpi_inc))
- config.append('MPI_PATH = -L{0}'.format(mpi_path))
- config.append('MPI_LIB = {0}'.format(
- ' '.join(self.spec['mpi'].mpicxx_shared_libs)))
-
- config.append('FFT_INC = -DFFT_FFTW3 -L{0}'.format(
- self.spec['fftw'].prefix.include))
- config.append('FFT_PATH = -L{0}'.format(self.spec['fftw'].prefix.lib))
- config.append('FFT_LIB = -lfftw3')
-
- config.append('JPG_INC = ')
- config.append('JPG_PATH = ')
- config.append('JPG_LIB = ')
-
- makefile_inc_template = \
- join_path(os.path.dirname(self.module.__file__),
- 'Makefile.inc')
- with open(makefile_inc_template, "r") as fhr:
- config.extend(fhr.read().split('\n'))
-
- with working_dir('src/MAKE/'):
- with open('Makefile.{0}'.format(self.target_name), 'w') as fh:
- fh.write('\n'.join(config))
-
- def build_meam(self):
- with working_dir('lib/meam'):
- filter_file(r'EXTRAMAKE = Makefile.lammps.ifort',
- 'EXTRAMAKE = Makefile.lammps.spack',
- 'Makefile.ifort')
- filter_file('F90 = *ifort',
- 'F90 = {0}'.format(self.compiler.fc),
- 'Makefile.ifort')
-
- with open('Makefile.lammps.spack', 'w') as fh:
- syslib = ''
- syspath = ''
- if self.compiler.name == 'gcc':
- syslib = '-lgfortran'
- elif self.compiler.name == 'intel':
- syslib = '-lifcore'
-
- makefile = ['meam_SYSINC =',
- 'meam_SYSLIB = {0}'.format(syslib),
- 'meam_SYSPATH = {0}'.format(syspath)]
-
- fh.write('\n'.join(makefile))
-
- make('lib', '-f', 'Makefile.ifort')
-
- def build_user_atc(self):
- with working_dir('lib/atc'):
- filter_file(r'CC =.*',
- 'CC = {0}'.format(self.compiler.cxx),
- 'Makefile.icc')
-
- mpi_include = self.spec['mpi'].prefix.include
-
- filter_file(r'CCFLAGS = *',
- 'CCFLAGS = -I{0} '.format(mpi_include),
- 'Makefile.icc')
-
- filter_file('LINK =.*',
- 'LINK = {0}'.format(self.compiler.cxx),
- 'Makefile.icc')
-
- make('lib', '-f', 'Makefile.icc')
- with open('Makefile.lammps', 'w') as fh:
- lapack_blas = (self.spec['lapack'].libs +
- self.spec['blas'].libs)
- makefile = [
- 'user-atc_SYSINC =',
- 'user-atc_SYSLIB = {0}'.format(lapack_blas.ld_flags),
- 'user-atc_SYSPATH = ']
- fh.write('\n'.join(makefile))
-
- def build_voronoi(self):
- # no need to set the voronoi_SYS variable in Makefile.lammps
- # since the spack wrapper takes care of the path
- with working_dir('src/VORONOI'):
- filter_file(r'#include "voro\+\+\.hh"',
- '#include <voro++/voro++.hh>',
- 'compute_voronoi_atom.h')
-
- def build(self, spec, prefix):
- for pkg in self.supported_packages:
- if '+{0}'.format(pkg) in spec:
- _build_pkg_name = 'build_{0}'.format(pkg.replace('-', '_'))
- if hasattr(self, _build_pkg_name):
- _build_pkg = getattr(self, _build_pkg_name)
- _build_pkg()
-
- with working_dir('src'):
- make('yes-{0}'.format(pkg))
-
- with working_dir('src'):
- make(self.target_name)
-
- if '+lib' in spec:
- make('mode=shlib', self.target_name)
-
- def install(self, spec, prefix):
- with working_dir('src'):
- mkdirp(prefix.bin)
- install('lmp_{0}'.format(self.target_name), prefix.bin)
-
- if '+lib' in spec:
- mkdirp(prefix.lib)
- install('liblammps_{0}.{1}'.format(self.target_name,
- dso_suffix), prefix.lib)
-
- mkdirp(prefix.include.lammps)
- install('library.h', prefix.include.lammps)
+ patch("lib.patch", when="@20170901")
+
+ root_cmakelists_dir = 'cmake'
+
+ def cmake_args(self):
+ spec = self.spec
+
+ return [
+ '-DBUILD_SHARED_LIBS={0}'.format(
+ 'ON' if '+lib' in spec else 'OFF'),
+ '-DENABLE_MPI={0}'.format(
+ 'ON' if '+mpi' in spec else 'OFF'),
+ '-DENABLE_RIGID={0}'.format(
+ 'ON' if '+rigid' in spec else 'OFF'),
+ '-DENABLE_MEAM={0}'.format(
+ 'ON' if '+meam' in spec else 'OFF'),
+ '-DENABLE_KSAPCE={0}'.format(
+ 'ON' if '+kspace' in spec else 'OFF'),
+ '-DFFT=FFTW3', # doesn't do harm withiout KSPACE
+ '-DENABLE_MANYBODY={0}'.format(
+ 'ON' if '+manybody' in spec else 'OFF'),
+ '-DENABLE_USER-NETCDF={0}'.format(
+ 'ON' if '+user-nc-dump' in spec else 'OFF'),
+ '-DENABLE_VORONOI={0}'.format(
+ 'ON' if '+voronoi' in spec else 'OFF'),
+ '-DENABLE_USER-ATC={0}'.format(
+ 'ON' if '+user-atc' in spec else 'OFF'),
+ ]