summaryrefslogtreecommitdiffstats
path: root/pkgs/applications/science/molecular-dynamics/gromacs/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/science/molecular-dynamics/gromacs/default.nix')
-rw-r--r--pkgs/applications/science/molecular-dynamics/gromacs/default.nix34
1 files changed, 25 insertions, 9 deletions
diff --git a/pkgs/applications/science/molecular-dynamics/gromacs/default.nix b/pkgs/applications/science/molecular-dynamics/gromacs/default.nix
index bfa4a1f43391..84dd3b729b2b 100644
--- a/pkgs/applications/science/molecular-dynamics/gromacs/default.nix
+++ b/pkgs/applications/science/molecular-dynamics/gromacs/default.nix
@@ -1,26 +1,44 @@
{ stdenv
, fetchurl
, cmake
-, singlePrec ? true
-, mpiEnabled ? false
+, hwloc
, fftw
, openmpi
, perl
+, singlePrec ? true
+, mpiEnabled ? false
+, cpuAcceleration ? null
}:
-stdenv.mkDerivation {
- name = "gromacs-2020.4";
+let
+ # Select reasonable defaults for all major platforms
+ # The possible values are defined in CMakeLists.txt:
+ # AUTO None SSE2 SSE4.1 AVX_128_FMA AVX_256 AVX2_256
+ # AVX2_128 AVX_512 AVX_512_KNL MIC ARM_NEON ARM_NEON_ASIMD
+ SIMD = x: if (cpuAcceleration != null) then x else
+ if stdenv.hostPlatform.system == "i686-linux" then "SSE2" else
+ if stdenv.hostPlatform.system == "x86_64-linux" then "SSE4.1" else
+ if stdenv.hostPlatform.system == "x86_64-darwin" then "SSE4.1" else
+ if stdenv.hostPlatform.system == "aarch64-linux" then "ARM_NEON" else
+ "None";
+
+in stdenv.mkDerivation rec {
+ pname = "gromacs";
+ version = "2020.4";
src = fetchurl {
- url = "ftp://ftp.gromacs.org/pub/gromacs/gromacs-2020.4.tar.gz";
+ url = "ftp://ftp.gromacs.org/pub/gromacs/gromacs-${version}.tar.gz";
sha256 = "1rplvgna60nqyb8nspaz3bfkwb044kv3zxdaa5whql5m441nj6am";
};
nativeBuildInputs = [ cmake ];
- buildInputs = [ fftw perl ]
+ buildInputs = [ fftw perl hwloc ]
++ (stdenv.lib.optionals mpiEnabled [ openmpi ]);
- cmakeFlags = (
+ cmakeFlags = [
+ "-DGMX_SIMD:STRING=${SIMD cpuAcceleration}"
+ "-DGMX_OPENMP:BOOL=TRUE"
+ ] ++ (
if singlePrec then [
"-DGMX_DOUBLE=OFF"
] else [
@@ -30,8 +48,6 @@ stdenv.mkDerivation {
) ++ (
if mpiEnabled then [
"-DGMX_MPI:BOOL=TRUE"
- "-DGMX_CPU_ACCELERATION:STRING=SSE4.1"
- "-DGMX_OPENMP:BOOL=TRUE"
"-DGMX_THREAD_MPI:BOOL=FALSE"
] else [
"-DGMX_MPI:BOOL=FALSE"