summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Junghans <ottxor@gentoo.org>2013-03-06 02:02:01 +0000
committerChristoph Junghans <ottxor@gentoo.org>2013-03-06 02:02:01 +0000
commit18a365cd7cd593da93cd0353f6ff9c522b31af7b (patch)
tree513b42b33364f171705dddd5e4c9f25d024c4a47 /sci-chemistry
parentadded ~arm (tested by me) (diff)
downloadgentoo-2-18a365cd7cd593da93cd0353f6ff9c522b31af7b.tar.gz
gentoo-2-18a365cd7cd593da93cd0353f6ff9c522b31af7b.tar.bz2
gentoo-2-18a365cd7cd593da93cd0353f6ff9c522b31af7b.zip
version bump
(Portage version: 2.2.0_alpha165/cvs/Linux x86_64, signed Manifest commit with key C2000586)
Diffstat (limited to 'sci-chemistry')
-rw-r--r--sci-chemistry/gromacs/ChangeLog9
-rw-r--r--sci-chemistry/gromacs/files/gromacs-4.6.1-openmm.patch151
-rw-r--r--sci-chemistry/gromacs/gromacs-4.6.1.ebuild (renamed from sci-chemistry/gromacs/gromacs-4.6.ebuild)113
-rw-r--r--sci-chemistry/gromacs/gromacs-4.6_beta3-r1.ebuild244
4 files changed, 241 insertions, 276 deletions
diff --git a/sci-chemistry/gromacs/ChangeLog b/sci-chemistry/gromacs/ChangeLog
index b12fe733590b..aeaf99af3f11 100644
--- a/sci-chemistry/gromacs/ChangeLog
+++ b/sci-chemistry/gromacs/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for sci-chemistry/gromacs
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sci-chemistry/gromacs/ChangeLog,v 1.120 2013/02/12 04:11:10 ottxor Exp $
+# $Header: /var/cvsroot/gentoo-x86/sci-chemistry/gromacs/ChangeLog,v 1.121 2013/03/06 02:02:01 ottxor Exp $
+
+*gromacs-4.6.1 (06 Mar 2013)
+
+ 06 Mar 2013; Christoph Junghans <ottxor@gentoo.org>
+ +files/gromacs-4.6.1-openmm.patch, +gromacs-4.6.1.ebuild, -gromacs-4.6.ebuild,
+ -gromacs-4.6_beta3-r1.ebuild:
+ version bump
12 Feb 2013; Christoph Junghans <ottxor@gentoo.org> gromacs-4.6.ebuild,
gromacs-4.6_beta3-r1.ebuild, metadata.xml:
diff --git a/sci-chemistry/gromacs/files/gromacs-4.6.1-openmm.patch b/sci-chemistry/gromacs/files/gromacs-4.6.1-openmm.patch
new file mode 100644
index 000000000000..dd4214af0513
--- /dev/null
+++ b/sci-chemistry/gromacs/files/gromacs-4.6.1-openmm.patch
@@ -0,0 +1,151 @@
+From e96c29f92e6cd1dd05945ef80e6a78d55747cf2e Mon Sep 17 00:00:00 2001
+From: Christoph Junghans <junghans@votca.org>
+Date: Thu, 17 Jan 2013 20:30:30 -0700
+Subject: [PATCH] fix out of source build for OpenMM
+
+* introduced in e508a07b6e127fa1cf31d263bcbd33e4040066cb
+
+Change-Id: I6ad45fd2d5766d1c4a91ef2e0c442ff030fc1296
+---
+ CMakeLists.txt | 2 +-
+ src/contrib/BuildMdrunOpenMM.cmake | 6 +++---
+ src/contrib/CMakeLists.txt | 3 ---
+ src/contrib/mdrun_openmm.c | 12 +++++++-----
+ src/contrib/openmm_wrapper.cpp | 1 +
+ src/kernel/CMakeLists.txt | 5 ++++-
+ 6 files changed, 16 insertions(+), 13 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index df12172..4c11a29 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -153,7 +153,7 @@ mark_as_advanced(GMX_FORCE_CXX)
+ option(GMX_COOL_QUOTES "Enable Gromacs cool quotes" ON)
+ mark_as_advanced(GMX_COOL_QUOTES)
+
+-if(GMX_GPU OR GMX_FORCE_CXX)
++if(GMX_GPU OR GMX_FORCE_CXX OR GMX_OPENMM)
+ enable_language(CXX)
+ endif()
+ set(CMAKE_PREFIX_PATH "" CACHE STRING "Extra locations to search for external libraries and tools (give directory without lib, bin, or include)")
+diff --git a/src/contrib/BuildMdrunOpenMM.cmake b/src/contrib/BuildMdrunOpenMM.cmake
+index bc954d6..6d04958 100644
+--- a/src/contrib/BuildMdrunOpenMM.cmake
++++ b/src/contrib/BuildMdrunOpenMM.cmake
+@@ -39,14 +39,14 @@ link_directories(${OpenMM_LIBRARY_DIR})
+ # if the same OpenMM installation is used for running and building
+ add_definitions( -DOPENMM_PLUGIN_DIR="${OpenMM_PLUGIN_DIR}" )
+ file(TO_CMAKE_PATH ${OpenMM_PLUGIN_DIR} _path)
+-add_library(openmm_api_wrapper STATIC openmm_wrapper.cpp)
++add_library(openmm_api_wrapper STATIC ${CMAKE_SOURCE_DIR}/src/contrib/openmm_wrapper.cpp)
+ target_link_libraries(openmm_api_wrapper ${OpenMM_LIBRARIES})
+ list(APPEND GMX_EXTRA_LIBRARIES openmm_api_wrapper ${OpenMM_LIBRARIES})
+
+ list(REMOVE_ITEM MDRUN_SOURCES mdrun.c)
+ list(APPEND MDRUN_SOURCES
+- ${CMAKE_CURRENT_SOURCE_DIR}/src/contrib/md_openmm.c
+- ${CMAKE_CURRENT_SOURCE_DIR}/src/contrib/mdrun_openmm.c)
++ ${CMAKE_SOURCE_DIR}/src/contrib/md_openmm.c
++ ${CMAKE_SOURCE_DIR}/src/contrib/mdrun_openmm.c)
+
+ # this is to circumvent the following MSVC error:
+ # warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs
+diff --git a/src/contrib/CMakeLists.txt b/src/contrib/CMakeLists.txt
+index 7c5bb83..7725210 100644
+--- a/src/contrib/CMakeLists.txt
++++ b/src/contrib/CMakeLists.txt
+@@ -49,7 +49,6 @@ if(GMX_OPENMM)
+ message(FATAL_ERROR "The OpenMM build is not compatible with the native GPU build")
+ endif()
+
+- enable_language(CXX)
+ set (GMX_BINARY_SUFFIX "-openmm")
+ set (GMX_LIBS_SUFFIX "_openmm")
+
+@@ -99,8 +98,6 @@ if(GMX_OPENMM)
+ if(CMAKE_BUILD_TYPE STREQUAL "DEBUG")
+ set(CUDA_VERBOSE_BUILD ON)
+ endif()
+- list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src/contrib)
+- find_package(OpenMM)
+
+ # mark as advanced the unused variables
+ mark_as_advanced(FORCE GMX_CPU_ACCELERATION GMX_MPI GMX_FFT_LIBRARY
+diff --git a/src/contrib/mdrun_openmm.c b/src/contrib/mdrun_openmm.c
+index 7771dcd..aeedeb4 100644
+--- a/src/contrib/mdrun_openmm.c
++++ b/src/contrib/mdrun_openmm.c
+@@ -153,7 +153,7 @@ int cmain(int argc,char *argv[])
+ { efXVG, "-tpi", "tpi", ffOPTWR },
+ { efXVG, "-tpid", "tpidist", ffOPTWR },
+ { efEDI, "-ei", "sam", ffOPTRD },
+- { efEDO, "-eo", "sam", ffOPTWR },
++ { efXVG, "-eo", "sam", ffOPTWR },
+ { efGCT, "-j", "wham", ffOPTRD },
+ { efGCT, "-jo", "bam", ffOPTWR },
+ { efXVG, "-ffout", "gct", ffOPTWR },
+@@ -205,6 +205,8 @@ int cmain(int argc,char *argv[])
+ { NULL, "interleave", "pp_pme", "cartesian", NULL };
+ const char *dddlb_opt[] =
+ { NULL, "auto", "no", "yes", NULL };
++ const char *thread_aff_opt[threadaffNR+1] =
++ { NULL, "auto", "no", "yes", NULL };
+ const char *nbpu_opt[] =
+ { NULL, "auto", "cpu", "gpu", "gpu_cpu", NULL };
+ real rdd=0.0,rconstr=0.0,dlb_scale=0.8,pforce=-1;
+@@ -236,12 +238,12 @@ int cmain(int argc,char *argv[])
+ "Number of OpenMP threads per MPI process/thread to start (0 is guess)" },
+ { "-ntomp_pme", FALSE, etINT, {&hw_opt.nthreads_omp_pme},
+ "Number of OpenMP threads per MPI process/thread to start (0 is -ntomp)" },
+- { "-pin", FALSE, etBOOL, {&hw_opt.bThreadPinning},
++ { "-pin", FALSE, etBOOL, {thread_aff_opt},
+ "Pin OpenMP threads to cores" },
+- { "-pinht", FALSE, etBOOL, {&hw_opt.bPinHyperthreading},
+- "Always pin threads to Hyper-Threading cores" },
+ { "-pinoffset", FALSE, etINT, {&hw_opt.core_pinning_offset},
+ "Core offset for pinning (for running multiple mdrun processes on a single physical node)" },
++ { "-pinstride", FALSE, etINT, {&hw_opt.core_pinning_stride},
++ "Pinning distance in logical cores for threads, use 0 to minimize the number of threads per physical core" },
+ { "-gpu_id", FALSE, etSTR, {&hw_opt.gpu_id},
+ "List of GPU id's to use" },
+ { "-ddcheck", FALSE, etBOOL, {&bDDBondCheck},
+@@ -413,7 +415,7 @@ int cmain(int argc,char *argv[])
+
+ if (MULTISIM(cr) && MASTER(cr))
+ {
+- check_multi_int(stdout,cr->ms,sim_part,"simulation part");
++ check_multi_int(stdout,cr->ms,sim_part,"simulation part", TRUE);
+ }
+ }
+ else
+diff --git a/src/contrib/openmm_wrapper.cpp b/src/contrib/openmm_wrapper.cpp
+index 07f0eca..05c3210 100644
+--- a/src/contrib/openmm_wrapper.cpp
++++ b/src/contrib/openmm_wrapper.cpp
+@@ -63,6 +63,7 @@ using namespace std;
+ #include "mdrun.h"
+ #include "physics.h"
+ #include "string2.h"
++#include "openmm_gpu_utils.h"
+ #include "gpu_utils.h"
+ #include "mtop_util.h"
+
+diff --git a/src/kernel/CMakeLists.txt b/src/kernel/CMakeLists.txt
+index 01e290c..3f95d33 100644
+--- a/src/kernel/CMakeLists.txt
++++ b/src/kernel/CMakeLists.txt
+@@ -88,7 +88,10 @@ if(GMX_OPENMM)
+ # Even though the OpenMM build has "moved to contrib", many things
+ # have be be done from within the scope of the CMakeLists.txt that
+ # builds its mdrun, and that is here
+- include(../contrib/BuildMdrunOpenMM)
++ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/src/contrib)
++ find_package(OpenMM)
++ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
++ include(${CMAKE_SOURCE_DIR}/src/contrib/BuildMdrunOpenMM.cmake)
+ endif(GMX_OPENMM)
+
+ if(GMX_GPU OR GMX_FORCE_CXX)
+--
+1.8.1.5
+
diff --git a/sci-chemistry/gromacs/gromacs-4.6.ebuild b/sci-chemistry/gromacs/gromacs-4.6.1.ebuild
index cbf14cd62ed1..226082edf7c4 100644
--- a/sci-chemistry/gromacs/gromacs-4.6.ebuild
+++ b/sci-chemistry/gromacs/gromacs-4.6.1.ebuild
@@ -1,13 +1,15 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sci-chemistry/gromacs/gromacs-4.6.ebuild,v 1.4 2013/02/12 04:11:10 ottxor Exp $
+# $Header: /var/cvsroot/gentoo-x86/sci-chemistry/gromacs/gromacs-4.6.1.ebuild,v 1.1 2013/03/06 02:02:01 ottxor Exp $
EAPI=5
-TEST_PV="4.6"
-MANUAL_PV="4.6"
+TEST_PV="4.6.1"
+MANUAL_PV="4.6.1"
-inherit bash-completion-r1 cmake-utils eutils multilib readme.gentoo toolchain-funcs
+CMAKE_MAKEFILE_GENERATOR="ninja"
+
+inherit bash-completion-r1 cmake-utils cuda eutils multilib readme.gentoo toolchain-funcs
if [[ $PV = *9999* ]]; then
EGIT_REPO_URI="git://git.gromacs.org/gromacs.git
@@ -16,11 +18,17 @@ if [[ $PV = *9999* ]]; then
http://repo.or.cz/r/gromacs.git"
EGIT_BRANCH="release-4-6"
inherit git-2
- PDEPEND="doc? ( ~app-doc/${PN}-manual-${PV} )"
+ LIVE_DEPEND="doc? (
+ dev-texlive/texlive-latex
+ media-gfx/imagemagick
+ sys-apps/coreutils
+ )"
else
SRC_URI="ftp://ftp.gromacs.org/pub/${PN}/${P}.tar.gz
doc? ( ftp://ftp.gromacs.org/pub/manual/manual-${MANUAL_PV}.pdf -> ${PN}-manual-${MANUAL_PV}.pdf )
test? ( http://${PN}.googlecode.com/files/regressiontests-${TEST_PV}.tar.gz )"
+ PATCHES=( "${FILESDIR}/${P}-openmm.patch" )
+ LIVE_DEPEND=""
fi
ACCE_IUSE="sse2 sse4_1 avx128fma avx256"
@@ -32,9 +40,9 @@ HOMEPAGE="http://www.gromacs.org/"
# http://repo.or.cz/w/gromacs.git/blob/HEAD:/COPYING
# base, vmd plugins, fftpack from numpy, blas/lapck from netlib, memtestG80 library, mpi_thread lib
LICENSE="LGPL-2.1 UoI-NCSA !mkl? ( !fftw? ( BSD ) !blas? ( BSD ) !lapack? ( BSD ) ) cuda? ( LGPL-3 ) threads? ( BSD )"
-SLOT="0"
+SLOT="0/${PV}"
KEYWORDS="~alpha ~amd64 ~arm ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-linux ~x86-macos"
-IUSE="X blas cuda doc -double-precision +fftw gsl lapack mkl mpi +offensive openmp +single-precision test +threads zsh-completion ${ACCE_IUSE}"
+IUSE="X blas cuda doc -double-precision +fftw gsl lapack mkl mpi +offensive openmm openmp +single-precision test +threads zsh-completion ${ACCE_IUSE}"
CDEPEND="
X? (
@@ -43,33 +51,63 @@ CDEPEND="
x11-libs/libICE
)
blas? ( virtual/blas )
- cuda? ( dev-util/nvidia-cuda-toolkit )
+ cuda? ( >=dev-util/nvidia-cuda-toolkit-4.2.9-r1 )
fftw? ( sci-libs/fftw:3.0 )
gsl? ( sci-libs/gsl )
lapack? ( virtual/lapack )
mkl? ( sci-libs/mkl )
- mpi? ( virtual/mpi )"
+ mpi? ( virtual/mpi )
+ openmm? (
+ >=dev-util/nvidia-cuda-toolkit-4.2.9-r1
+ sci-libs/openmm[cuda,opencl]
+ )"
DEPEND="${CDEPEND}
- virtual/pkgconfig"
+ virtual/pkgconfig
+ ${LIVE_DEPEND}"
RDEPEND="${CDEPEND}"
REQUIRED_USE="
|| ( single-precision double-precision )
cuda? ( single-precision )
+ openmm? ( single-precision )
mkl? ( !blas !fftw !lapack )"
+DOCS=( AUTHORS README )
+HTML_DOCS=( "${ED}"/usr/share/gromacs/html/ )
+
pkg_pretend() {
[[ $(gcc-version) == "4.1" ]] && die "gcc 4.1 is not supported by gromacs"
use openmp && ! tc-has-openmp && \
die "Please switch to an openmp compatible compiler"
}
+src_unpack() {
+ if [[ ${PV} != *9999 ]]; then
+ default
+ else
+ git-2_src_unpack
+ if use doc; then
+ EGIT_REPO_URI="git://git.gromacs.org/manual.git" \
+ EGIT_BRANCH="release-4-6" EGIT_NOUNPACK="yes" EGIT_COMMIT="release-4-6" \
+ EGIT_SOURCEDIR="${WORKDIR}/manual"\
+ git-2_src_unpack
+ fi
+ if use test; then
+ EGIT_REPO_URI="git://git.gromacs.org/regressiontests.git" \
+ EGIT_BRANCH="master" EGIT_NOUNPACK="yes" EGIT_COMMIT="master" \
+ EGIT_SOURCEDIR="${WORKDIR}/regressiontests"\
+ git-2_src_unpack
+ fi
+ fi
+}
+
src_prepare() {
#notes/todos
# -on apple: there is framework support
- #add user patches from /etc/portage/patches/sci-chemistry/gromacs
- epatch_user
+ cmake-utils_src_prepare
+
+ use cuda && cuda_src_prepare
GMX_DIRS=""
use single-precision && GMX_DIRS+=" float"
@@ -78,7 +116,7 @@ src_prepare() {
if use test; then
for x in ${GMX_DIRS}; do
mkdir -p "${WORKDIR}/${P}_${x}" || die
- cp -al "${WORKDIR}/regressiontests-${TEST_PV}" "${WORKDIR}/${P}_${x}/tests" || die
+ cp -al "${WORKDIR}/regressiontests"* "${WORKDIR}/${P}_${x}/tests" || die
done
fi
@@ -149,6 +187,15 @@ src_configure() {
"$(use test && echo -DREGRESSIONTEST_PATH="${WORKDIR}/${P}_${x}/tests")"
-DGMX_BINARY_SUFFIX="${suffix}" -DGMX_LIBS_SUFFIX="${suffix}" )
BUILD_DIR="${WORKDIR}/${P}_${x}" cmake-utils_src_configure
+ if [[ ${x} = float ]] && use openmm; then
+ einfo "Configuring for openmm build"
+ mycmakeargs=( ${mycmakeargs_pre[@]} ${p} -DGMX_MPI=OFF
+ -DGMX_THREAD_MPI=OFF -DGMX_GPU=OFF -DGMX_OPENMM=ON
+ -DOpenMM_PLUGIN_DIR="${EPREFIX}/usr/$(get_libdir)/plugins"
+ -DGMX_BINARY_SUFFIX="_openmm" -DGMX_LIBS_SUFFIX="_openmm" )
+ BUILD_DIR="${WORKDIR}/${P}_openmm" \
+ OPENMM_ROOT_DIR="${EPREFIX}/usr" cmake-utils_src_configure
+ fi
use mpi || continue
einfo "Configuring for ${x} precision with mpi"
mycmakeargs=( ${mycmakeargs_pre[@]} ${p} -DGMX_THREAD_MPI=OFF
@@ -163,6 +210,11 @@ src_compile() {
einfo "Compiling for ${x} precision"
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake-utils_src_compile
+ if [[ ${x} = float ]] && use openmm; then
+ einfo "Compiling for openmm build"
+ BUILD_DIR="${WORKDIR}/${P}_openmm"\
+ cmake-utils_src_compile mdrun
+ fi
use mpi || continue
einfo "Compiling for ${x} precision with mpi"
BUILD_DIR="${WORKDIR}/${P}_${x}_mpi"\
@@ -181,34 +233,33 @@ src_install() {
for x in ${GMX_DIRS}; do
BUILD_DIR="${WORKDIR}/${P}_${x}" \
cmake-utils_src_install
+ if [[ ${x} = float ]] && use openmm; then
+ BUILD_DIR="${WORKDIR}/${P}_openmm" \
+ DESTDIR="${D}" cmake-utils_src_make install-mdrun
+ fi
+ #manual can only be build after gromacs was installed once in image
+ if use doc && [[ $PV = *9999* && ! -d ${WORKDIR}/manual_build ]]; then
+ mycmakeargs=( -DGMXBIN="${ED}"/usr/bin -DGMXSRC="${WORKDIR}/${P}" )
+ BUILD_DIR="${WORKDIR}"/manual_build \
+ CMAKE_USE_DIR="${WORKDIR}/manual" cmake-utils_src_configure
+ BUILD_DIR="${WORKDIR}"/manual_build cmake-utils_src_make
+ newdoc "${WORKDIR}"/manual_build/gromacs.pdf "${PN}-manual-${PV}.pdf"
+ fi
use mpi || continue
BUILD_DIR="${WORKDIR}/${P}_${x}_mpi" \
DESTDIR="${D}" cmake-utils_src_make install-mdrun
done
- rm -f "${ED}"/usr/bin/GMXRC*
-
+ use doc && [[ $PV != *9999* ]] && dodoc "${DISTDIR}/${PN}-manual-${MANUAL_PV}.pdf"
newbashcomp "${ED}"/usr/bin/completion.bash ${PN}
if use zsh-completion ; then
insinto /usr/share/zsh/site-functions
newins "${ED}"/usr/bin/completion.zsh _${PN}
fi
- rm -f "${ED}"/usr/bin/completion.*
-
- cd "${S}"
- dodoc AUTHORS INSTALL* README*
- if use doc; then
- dohtml -r "${ED}usr/share/gromacs/html/"
- if [[ $PV = *9999* ]]; then
- insinto /usr/share/gromacs
- doins "admin/programs.txt"
- ls -1 "${ED}"/usr/bin | sed -e '/_d$/d' > "${T}"/programs.list
- doins "${T}"/programs.list
- else
- dodoc "${DISTDIR}/${PN}-manual-${MANUAL_PV}.pdf"
- fi
- fi
- rm -rf "${ED}usr/share/gromacs/html/"
+ rm -f "${ED}"usr/bin/completion.*
+ rm -rf "${ED}"usr/share/gromacs/html
+ rm -f "${ED}"usr/bin/g_options*
+ rm -f "${ED}"usr/bin/GMXRC*
readme.gentoo_create_doc
}
diff --git a/sci-chemistry/gromacs/gromacs-4.6_beta3-r1.ebuild b/sci-chemistry/gromacs/gromacs-4.6_beta3-r1.ebuild
deleted file mode 100644
index fe224cb808d4..000000000000
--- a/sci-chemistry/gromacs/gromacs-4.6_beta3-r1.ebuild
+++ /dev/null
@@ -1,244 +0,0 @@
-# Copyright 1999-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sci-chemistry/gromacs/gromacs-4.6_beta3-r1.ebuild,v 1.3 2013/02/12 04:11:10 ottxor Exp $
-
-EAPI=5
-
-TEST_PV="4.0.4"
-MANUAL_PV="4.6-beta1"
-
-inherit bash-completion-r1 cmake-utils eutils multilib toolchain-funcs
-
-SRC_URI="test? ( ftp://ftp.gromacs.org/pub/tests/gmxtest-${TEST_PV}.tgz )"
-
-if [[ $PV = *9999* ]]; then
- EGIT_REPO_URI="git://git.gromacs.org/gromacs.git
- https://gerrit.gromacs.org/gromacs.git
- git://github.com/gromacs/gromacs.git
- http://repo.or.cz/r/gromacs.git"
- EGIT_BRANCH="release-4-6"
- inherit git-2
- PDEPEND="doc? ( ~app-doc/${PN}-manual-${PV} )"
-else
- S="${WORKDIR}/${P//_/-}"
- SRC_URI="${SRC_URI} ftp://ftp.gromacs.org/pub/${PN}/${P//_/-}.tar.gz
- doc? ( ftp://ftp.gromacs.org/pub/manual/${PN}-manual-${MANUAL_PV}.pdf )"
-fi
-
-ACCE_IUSE="sse2 sse4_1 avx128fma avx256"
-
-DESCRIPTION="The ultimate molecular dynamics simulation package"
-HOMEPAGE="http://www.gromacs.org/"
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-linux ~x86-macos"
-IUSE="X blas cuda doc -double-precision +fftw gsl lapack mkl mpi +offensive openmm openmp +single-precision test +threads zsh-completion ${ACCE_IUSE}"
-
-CDEPEND="
- X? (
- x11-libs/libX11
- x11-libs/libSM
- x11-libs/libICE
- )
- blas? ( virtual/blas )
- cuda? ( dev-util/nvidia-cuda-toolkit )
- fftw? ( sci-libs/fftw:3.0 )
- gsl? ( sci-libs/gsl )
- lapack? ( virtual/lapack )
- mkl? ( sci-libs/mkl )
- mpi? ( virtual/mpi )
- openmm? (
- dev-util/nvidia-cuda-toolkit
- sci-libs/openmm[cuda,opencl]
- )"
-DEPEND="${CDEPEND}
- virtual/pkgconfig"
-RDEPEND="${CDEPEND}"
-
-RESTRICT="test"
-
-REQUIRED_USE="
- || ( single-precision double-precision )
- cuda? ( single-precision )
- openmm? ( single-precision )
- mkl? ( !blas !fftw !lapack )"
-
-pkg_pretend() {
- [[ $(gcc-version) == "4.1" ]] && die "gcc 4.1 is not supported by gromacs"
- use openmp && ! tc-has-openmp && \
- die "Please switch to an openmp compatible compiler"
-}
-
-src_prepare() {
- #notes/todos
- # -on apple: there is framework support
-
- #add user patches from /etc/portage/patches/sci-chemistry/gromacs
- epatch_user
-
- GMX_DIRS=""
- use single-precision && GMX_DIRS+=" float"
- use double-precision && GMX_DIRS+=" double"
-
- for x in ${GMX_DIRS}; do
- mkdir -p "${WORKDIR}/${P}_${x}" || die
- use test && cp -r "${WORKDIR}"/gmxtest "${WORKDIR}/${P}_${x}"
- done
-}
-
-src_configure() {
- local mycmakeargs_pre=( ) extra fft_opts=( )
-
- #go from slowest to fastest acceleration
- local acce="None"
- use sse2 && acce="SSE2"
- use sse4_1 && acce="SSE4.1"
- use avx128fma && acce="AVX_128_FMA"
- use avx256 && acce="AVX_256"
-
- #to create man pages, build tree binaries are executed (bug #398437)
- [[ ${CHOST} = *-darwin* ]] && \
- extra+=" -DCMAKE_BUILD_WITH_INSTALL_RPATH=OFF"
-
- if use fftw; then
- fft_opts=( -DGMX_FFT_LIBRARY=fftw3 )
- elif use mkl && has_version "=sci-libs/mkl-10*"; then
- fft_opts=( -DGMX_FFT_LIBRARY=mkl
- -DMKL_INCLUDE_DIR="${MKLROOT}/include"
- -DMKL_LIBRARIES="$(echo /opt/intel/mkl/10.0.5.025/lib/*/libmkl.so);$(echo /opt/intel/mkl/10.0.5.025/lib/*/libiomp*.so)"
- )
- elif use mkl; then
- local bits=$(get_libdir)
- fft_opts=( -DGMX_FFT_LIBRARY=mkl
- -DMKL_INCLUDE_DIR="$(echo /opt/intel/*/mkl/include)"
- -DMKL_LIBRARIES="$(echo /opt/intel/*/mkl/lib/*${bits/lib}/libmkl_rt.so)"
- )
- else
- fft_opts=( -DGMX_FFT_LIBRARY=fftpack )
- fi
-
- mycmakeargs_pre+=(
- "${fft_opts[@]}"
- $(cmake-utils_use X GMX_X11)
- $(cmake-utils_use blas GMX_EXTERNAL_BLAS)
- $(cmake-utils_use gsl GMX_GSL)
- $(cmake-utils_use lapack GMX_EXTERNAL_LAPACK)
- $(cmake-utils_use openmp GMX_OPENMP)
- $(cmake-utils_use !offensive GMX_NO_QUOTES)
- -DGMX_DEFAULT_SUFFIX=off
- -DGMX_ACCELERATION="$acce"
- -DGMXLIB="$(get_libdir)"
- -DGMX_VMD_PLUGIN_PATH="${EPREFIX}/usr/$(get_libdir)/vmd/plugins/*/molfile/"
- ${extra}
- )
-
- for x in ${GMX_DIRS}; do
- einfo "Configuring for ${x} precision"
- local suffix=""
- #if we build single and double - double is suffixed
- use double-precision && use single-precision && \
- [[ ${x} = "double" ]] && suffix="_d"
- local p
- [[ ${x} = "double" ]] && p="-DGMX_DOUBLE=ON" || p="-DGMX_DOUBLE=OFF"
- local cuda=$(cmake-utils_use cuda GMX_GPU)
- [[ ${x} = "double" ]] && use cuda && cuda="-DGMX_GPU=OFF"
- mycmakeargs=( ${mycmakeargs_pre[@]} ${p} -DGMX_MPI=OFF
- $(cmake-utils_use threads GMX_THREAD_MPI) ${cuda}
- -DGMX_BINARY_SUFFIX="${suffix}" -DGMX_LIBS_SUFFIX="${suffix}" )
- BUILD_DIR="${WORKDIR}/${P}_${x}" cmake-utils_src_configure
- if [[ ${x} = float ]] && use openmm; then
- einfo "Configuring for openmm build"
- mycmakeargs=( ${mycmakeargs_pre[@]} ${p} -DGMX_MPI=OFF
- -DGMX_THREAD_MPI=OFF -DGMX_GPU=OFF -DGMX_OPENMM=ON
- -DGMX_BINARY_SUFFIX="_openmm" -DGMX_LIBS_SUFFIX="_openmm" )
- BUILD_DIR="${WORKDIR}/${P}_openmm" \
- OPENMM_ROOT_DIR="${EPREFIX}/usr" cmake-utils_src_configure
- fi
- use mpi || continue
- einfo "Configuring for ${x} precision with mpi"
- mycmakeargs=( ${mycmakeargs_pre[@]} ${p} -DGMX_THREAD_MPI=OFF
- -DGMX_MPI=ON ${cuda}
- -DGMX_BINARY_SUFFIX="_mpi${suffix}" -DGMX_LIBS_SUFFIX="_mpi${suffix}" )
- BUILD_DIR="${WORKDIR}/${P}_${x}_mpi" CC="mpicc" cmake-utils_src_configure
- done
-}
-
-src_compile() {
- for x in ${GMX_DIRS}; do
- einfo "Compiling for ${x} precision"
- BUILD_DIR="${WORKDIR}/${P}_${x}"\
- cmake-utils_src_compile
- if [[ ${x} = float ]] && use openmm; then
- einfo "Compiling for openmm build"
- BUILD_DIR="${WORKDIR}/${P}_openmm"\
- cmake-utils_src_compile mdrun
- fi
- use mpi || continue
- einfo "Compiling for ${x} precision with mpi"
- BUILD_DIR="${WORKDIR}/${P}_${x}_mpi"\
- cmake-utils_src_compile mdrun
- done
-}
-
-src_test() {
- for x in ${GMX_DIRS}; do
- local oldpath="${PATH}"
- export PATH="${WORKDIR}/${P}_${x}/src/kernel:${S}-{x}/src/tools:${PATH}"
- cd "${WORKDIR}/${P}_${x}"
- emake -j1 tests || die "${x} Precision test failed"
- export PATH="${oldpath}"
- done
-}
-
-src_install() {
- for x in ${GMX_DIRS}; do
- BUILD_DIR="${WORKDIR}/${P}_${x}" \
- cmake-utils_src_install
- if [[ ${x} = float ]] && use openmm; then
- BUILD_DIR="${WORKDIR}/${P}_openmm" \
- DESTDIR="${D}" cmake-utils_src_make install-mdrun
- fi
- use mpi || continue
- BUILD_DIR="${WORKDIR}/${P}_${x}_mpi" \
- DESTDIR="${D}" cmake-utils_src_make install-mdrun
- done
-
- rm -f "${ED}"/usr/bin/GMXRC*
-
- newbashcomp "${ED}"/usr/bin/completion.bash ${PN}
- if use zsh-completion ; then
- insinto /usr/share/zsh/site-functions
- newins "${ED}"/usr/bin/completion.zsh _${PN}
- fi
- rm -f "${ED}"/usr/bin/completion.*
-
- cd "${S}"
- dodoc AUTHORS INSTALL* README*
- if use doc; then
- dohtml -r "${ED}usr/share/gromacs/html/"
- if [[ $PV = *9999* ]]; then
- insinto /usr/share/gromacs
- doins "admin/programs.txt"
- ls -1 "${ED}"/usr/bin | sed -e '/_d$/d' > "${T}"/programs.list
- doins "${T}"/programs.list
- else
- dodoc "${DISTDIR}/${PN}-manual-${MANUAL_PV}.pdf"
- fi
- fi
- rm -rf "${ED}usr/share/gromacs/html/"
-}
-
-pkg_postinst() {
- einfo
- einfo "Please read and cite:"
- einfo "Gromacs 4, J. Chem. Theory Comput. 4, 435 (2008). "
- einfo "http://dx.doi.org/10.1021/ct700301q"
- if use offensive; then
- einfo
- einfo $(g_luck)
- einfo "For more Gromacs cool quotes (gcq) add g_luck to your .bashrc"
- fi
- einfo
- elog "Gromacs can use sci-chemistry/vmd to read additional file formats"
-}