| # Copyright 1999-2015 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Id$ |
| |
| EAPI=5 |
| |
| inherit eutils flag-o-matic fortran-2 multilib |
| |
| convert_month() { |
| case $1 in |
| 01) echo Jan |
| ;; |
| 02) echo Feb |
| ;; |
| 03) echo Mar |
| ;; |
| 04) echo Apr |
| ;; |
| 05) echo May |
| ;; |
| 06) echo Jun |
| ;; |
| 07) echo Jul |
| ;; |
| 08) echo Aug |
| ;; |
| 09) echo Sep |
| ;; |
| 10) echo Oct |
| ;; |
| 11) echo Nov |
| ;; |
| 12) echo Dec |
| ;; |
| *) echo unknown |
| ;; |
| esac |
| } |
| |
| MY_P=${PN}-$((10#${PV:6:2}))$(convert_month ${PV:4:2})${PV:2:2} |
| |
| DESCRIPTION="Large-scale Atomic/Molecular Massively Parallel Simulator" |
| HOMEPAGE="http://lammps.sandia.gov/" |
| SRC_URI="http://lammps.sandia.gov/tars/${MY_P}.tar.gz" |
| |
| LICENSE="GPL-2" |
| SLOT="0" |
| KEYWORDS="amd64 x86" |
| IUSE="doc examples gzip lammps-memalign mpi static-libs" |
| |
| DEPEND=" |
| mpi? ( |
| virtual/blas |
| virtual/lapack |
| virtual/mpi |
| ) |
| sci-libs/voro++ |
| " |
| RDEPEND="${DEPEND}" |
| |
| S="${WORKDIR}/${MY_P}" |
| |
| lmp_emake() { |
| local LAMMPS_INCLUDEFLAGS |
| LAMMPS_INCLUDEFLAGS="$(usex gzip '-DLAMMPS_GZIP' '')" |
| LAMMPS_INCLUDEFLAGS+="$(usex lammps-memalign ' -DLAMMPS_MEMALIGN' '')" |
| |
| # The lammps makefile uses CC to indicate the C++ compiler. |
| emake \ |
| ARCHIVE=$(tc-getAR) \ |
| CC=$(usex mpi "mpic++" "$(tc-getCXX)") \ |
| F90=$(usex mpi "mpif90" "$(tc-getFC)") \ |
| LINK=$(usex mpi "mpic++" "$(tc-getCXX)") \ |
| CCFLAGS="${CXXFLAGS}" \ |
| F90FLAGS="${FCFLAGS}" \ |
| LINKFLAGS="${LDFLAGS}" \ |
| LMP_INC="${LAMMPS_INCLUDEFLAGS}" \ |
| MPI_INC=$(usex mpi '' "-I../STUBS") \ |
| MPI_PATH=$(usex mpi '' '-L../STUBS') \ |
| MPI_LIB=$(usex mpi '' '-lmpi_stubs') \ |
| user-atc_SYSLIB="$(usex mpi "$($(tc-getPKG_CONFIG) --libs blas) $($(tc-getPKG_CONFIG) --libs lapack)" '')"\ |
| "$@" |
| } |
| |
| src_prepare() { |
| # Fix inconsistent use of SHFLAGS. |
| sed -i \ |
| -e 's:voronoi_SYSINC\s\+=.*$:voronoi_SYSINC = -I/usr/include/voro++:' \ |
| -e 's:voronoi_SYSPATH\s\+=.*$:voronoi_SYSPATH =:' \ |
| lib/voronoi/Makefile.lammps || die |
| |
| # Fix missing .so name. |
| sed -i \ |
| -e 's:SHLIBFLAGS\s\+=\s\+:SHLIBFLAGS = -Wl,-soname,liblammps.so.0 :' \ |
| src/MAKE/Makefile.serial || die |
| |
| # Fix makefile in tools. |
| sed -i \ |
| -e 's:g++:$(CXX) $(CXXFLAGS):' \ |
| -e 's:gcc:$(CC) $(CCFLAGS):' \ |
| -e 's:ifort:$(FC) $(FCFLAGS):' \ |
| tools/Makefile || die |
| } |
| |
| src_compile() { |
| # Prepare compiler flags. |
| append-cxxflags -fPIC -I../../src |
| append-fflags -fPIC |
| |
| # Compile stubs for serial version. |
| use mpi || lmp_emake -C src stubs |
| |
| # Build packages |
| emake -C src yes-asphere |
| emake -C src yes-body |
| emake -C src yes-class2 |
| emake -C src yes-colloid |
| emake -C src yes-dipole |
| emake -C src yes-fld |
| #emake -C src yes-gpu |
| emake -C src yes-granular |
| # Need OpenKIM external dependency. |
| #emake -C src yes-kim |
| # Need Kokkos external dependency. |
| #emake -C src yes-kokkos |
| emake -C src yes-kspace |
| emake -C src yes-manybody |
| emake -C src yes-mc |
| lmp_emake -C src yes-meam |
| lmp_emake -j1 -C lib/meam -f Makefile.gfortran |
| emake -C src yes-misc |
| emake -C src yes-molecule |
| #emake -C src yes-mpiio |
| emake -C src yes-opt |
| emake -C src yes-peri |
| emake -C src yes-poems |
| lmp_emake -C lib/poems -f Makefile.g++ |
| emake -C src yes-reax |
| lmp_emake -j1 -C lib/reax -f Makefile.gfortran |
| emake -C src yes-replica |
| emake -C src yes-rigid |
| emake -C src yes-shock |
| emake -C src yes-snap |
| emake -C src yes-srd |
| emake -C src yes-voronoi |
| emake -C src yes-xtc |
| |
| emake -C src yes-user-eff |
| emake -C src yes-user-fep |
| use mpi && emake -C src yes-user-lb |
| emake -C src yes-user-phonon |
| emake -C src yes-user-sph |
| |
| if use mpi; then |
| emake -C src yes-user-atc |
| lmp_emake -C lib/atc -f Makefile.g++ |
| fi |
| |
| if use static-libs; then |
| # Build static library. |
| lmp_emake -C src makelib |
| lmp_emake -C src -f Makefile.lib serial |
| fi |
| |
| # Build shared library. |
| lmp_emake -C src makeshlib |
| lmp_emake -C src -f Makefile.shlib serial |
| |
| # Compile main executable. |
| lmp_emake -C src serial |
| |
| # Compile tools. |
| emake -C tools binary2txt chain micelle2d data2xmovie |
| } |
| |
| src_install() { |
| use static-libs && newlib.a src/liblammps_serial.a liblammps.a |
| newlib.so src/liblammps_serial.so liblammps.so.0.0.0 |
| dosym liblammps.so.0.0.0 /usr/$(get_libdir)/liblammps.so |
| dosym liblammps.so.0.0.0 /usr/$(get_libdir)/liblammps.so.0 |
| newbin src/lmp_serial lmp |
| dobin tools/binary2txt |
| # Don't forget to add header files of optional packages as they are added |
| # to this ebuild. There may also be .mod files from Fortran based |
| # packages. |
| insinto "/usr/include/${PN}" |
| doins -r src/*.h lib/meam/*.mod |
| |
| local LAMMPS_POTENTIALS="usr/share/${PN}/potentials" |
| insinto "/${LAMMPS_POTENTIALS}" |
| doins potentials/* |
| echo "LAMMPS_POTENTIALS=${EROOT}${LAMMPS_POTENTIALS}" > 99lammps |
| doenvd 99lammps |
| |
| if use examples; then |
| local LAMMPS_EXAMPLES="/usr/share/${PN}/examples" |
| insinto "${LAMMPS_EXAMPLES}" |
| doins -r examples/* |
| fi |
| |
| dodoc README |
| if use doc; then |
| dodoc doc/Manual.pdf |
| dohtml -r doc/* |
| fi |
| } |