diff mbox series

[bug#40691,v3,1/1] gnu: Add gromacs.

Message ID d957d49d-2ce0-6e84-e1e1-28deb838b6fc@gmail.com
State Accepted
Headers show
Series [bug#40691,v3,1/1] gnu: Add gromacs. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch fail View Laminar job

Commit Message

Vincent Legoll April 23, 2020, 1:07 p.m. UTC
On 22/04/2020 17:38, Ludovic Courtès wrote:

> This v2 looks alright to me, but I got this test failure on x86_64:
> 
> --8<---------------cut here---------------start------------->8---
>        Start 13: HardwareUnitTests
> 13/52 Test #13: HardwareUnitTests ...................***Failed    0.04 sec
> [==========] Running 5 tests from 2 test cases.
> [----------] Global test environment set-up.
> [----------] 1 test from CpuInfoTest
> [ RUN      ] CpuInfoTest.SupportLevel
> [       OK ] CpuInfoTest.SupportLevel (0 ms)
> [----------] 1 test from CpuInfoTest (0 ms total)
> 
> [----------] 4 tests from HardwareTopologyTest
> [ RUN      ] HardwareTopologyTest.Execute
> [       OK ] HardwareTopologyTest.Execute (6 ms)
> [ RUN      ] HardwareTopologyTest.HwlocExecute
> /tmp/guix-build-gromacs-2020.1.drv-0/gromacs-2020.1/src/gromacs/hardware/tests/hardwaretopology.cpp:88: Failure
> Expected: (hwTop.supportLevel()) >= (gmx::HardwareTopology::SupportLevel::Basic), actual: 4-byte object <01-00 00-00> vs 4-byte object <02-00 00-00>
> Cannot determine basic hardware topology from hwloc. GROMACS will still
> 
> work, but it might affect your performance for large nodes.
> Please mail gmx-developers@gromacs.org so we can try to fix it.
> [  FAILED  ] HardwareTopologyTest.HwlocExecute (5 ms)
> [ RUN      ] HardwareTopologyTest.ProcessorSelfconsistency
> [       OK ] HardwareTopologyTest.ProcessorSelfconsistency (6 ms)
> [ RUN      ] HardwareTopologyTest.NumaCacheSelfconsistency
> [       OK ] HardwareTopologyTest.NumaCacheSelfconsistency (5 ms)
> [----------] 4 tests from HardwareTopologyTest (22 ms total)
> 
> [----------] Global test environment tear-down
> [==========] 5 tests from 2 test cases ran. (22 ms total)
> [  PASSED  ] 4 tests.
> [  FAILED  ] 1 test, listed below:
> [  FAILED  ] HardwareTopologyTest.HwlocExecute
> 
>   1 FAILED TEST
> 
> […]
> 
> The following tests FAILED:
>           13 - HardwareUnitTests (Failed)
> Errors while running CTest
> make: *** [Makefile:99: test] Error 8
> --8<---------------cut here---------------end--------------->8---
> 
> Could you check what the test is doing?

I think it tries to get CPU topology from the linux kernel,
which is not particularly useful to test on a build server,
the package may run on completely different hardware.

> It may be reasonable to just skip it.

Hope you don't mind trading a test suite failure for a (harmless)
test suite build warning...

How's the crude disabling in the attached patch v3 look to you ?

And does it fix the failure ?
This test is not failing here (kvm on ryzen).

Comments

Ludovic Courtès April 23, 2020, 7:52 p.m. UTC | #1
Hi Vincent,

Vincent Legoll <vincent.legoll@gmail.com> skribis:

>> It may be reasonable to just skip it.
>
> Hope you don't mind trading a test suite failure for a (harmless)
> test suite build warning...
>
> How's the crude disabling in the attached patch v3 look to you ?
>
> And does it fix the failure ?
> This test is not failing here (kvm on ryzen).

Oh that’s guix-daemon inside QEMU/KVM?  Then what can happen, unlike on
real hardware, is that hwloc doesn’t discrepancies between the actual
number of cores and the info it gathers from /sys or whatever.

> From 660371d5a3e7c7c763fc123357ddd6c31f730553 Mon Sep 17 00:00:00 2001
> From: Vincent Legoll <vincent.legoll@gmail.com>
> Date: Sat, 18 Apr 2020 00:14:56 +0200
> Subject: [PATCH] gnu: Add gromacs.
>
> * gnu/packages/bioinformatics.scm (gromacs): New variable.

[...]

> +         (add-after 'unpack 'disable-hwloc-test
> +          (lambda _
> +             ;; This test warns about the build host hardware
> +             (substitute* "src/gromacs/hardware/tests/hardwaretopology.cpp"
> +               (("TEST\\(HardwareTopologyTest, HwlocExecute\\)")
> +                "void __guix_disabled()"))

I was thinking it’d be nice to use whatever mechanism gtest has to mark
a test as skipped but I didn’t find anything, so it’s probably OK like
this.

However, there’s another issue I hadn’t noticed (apologies!):
src/external bundles a few things like googletest, tinyxml2, zlib
(indirectly), etc.

Could you check if we can use our own dependencies instead of the
bundled ones?

For gtest it’s good if we can unpack the source of our ‘googletest’
package in place of the bundled copy, but it’s optional (I think there
are cases where we found this wasn’t possible for some reason).

Thank you!

Ludo’.
Vincent Legoll May 1, 2020, 10:30 p.m. UTC | #2
Hello,

On 23/04/2020 21:52, Ludovic Courtès wrote:
> However, there’s another issue I hadn’t noticed (apologies!):
> src/external bundles a few things like googletest, tinyxml2, zlib
> (indirectly), etc.
> 
> Could you check if we can use our own dependencies instead of the
> bundled ones?

I'm working on it but it is not trivial, some of the bundled versions
are old enough that guix's are not compatible with the code using them.

I'm trying to get some fixes upstream for that.

> For gtest it’s good if we can unpack the source of our ‘googletest’
> package in place of the bundled copy, but it’s optional (I think there
> are cases where we found this wasn’t possible for some reason).

I'll try to fix this one also.
Ludovic Courtès May 2, 2020, 1:35 p.m. UTC | #3
Hi,

Vincent Legoll <vincent.legoll@gmail.com> skribis:

> On 23/04/2020 21:52, Ludovic Courtès wrote:
>> However, there’s another issue I hadn’t noticed (apologies!):
>> src/external bundles a few things like googletest, tinyxml2, zlib
>> (indirectly), etc.
>>
>> Could you check if we can use our own dependencies instead of the
>> bundled ones?
>
> I'm working on it but it is not trivial, some of the bundled versions
> are old enough that guix's are not compatible with the code using them.
>
> I'm trying to get some fixes upstream for that.

Awesome, let us know how it goes.

>> For gtest it’s good if we can unpack the source of our ‘googletest’
>> package in place of the bundled copy, but it’s optional (I think there
>> are cases where we found this wasn’t possible for some reason).
>
> I'll try to fix this one also.

Thank you!

Ludo’.
Vincent Legoll May 2, 2020, 1:46 p.m. UTC | #4
Hello,

here is my latest work on adding gromacs to guix.

- rebased on latest guix master
- gromacs had a new version
- unbundling 3rdparties
- packaged some 3rdparties to have our own

I unbundled googletest by extracting our tarball in
place of the bundled copy.

Zlib got unbundled via packaging tng and unbundling
it from there.

Unbundled lmfit by packaging it separately and using that.
I put it with gromacs, but its legitimate place may be
elsewhere, like in maths.scm.

Unbundled tinyxml2 to use our version, which is newer and
broke code compatibility, so I added a patch to fix the
fallout. I am trying to get those fixes upstream, but that
may not be always practical, they may want to keep their
well tested version. I'll follow up updating the patch in
case parts of it get applied / released upstream.

The remaining bundled 3rdparties are vmd_molfile & thread_mpi.

Vmd_molfile source is behind a registration-only web form, I'm
not going there.

Thread_mpi looks like it is made to be bundled like that, and
is part of the parallelizing of gromacs which is above my
level of understanding (I'm only trying to package it, I'm not
a user). More info here:
http://www.gromacs.org/Documentation/Acceleration_and_parallelization#Multithreading_with_thread-MPI

Latest license change for tng say "revised bsd", I don't know
which one to choose, I put bsd-3.

https://github.com/gromacs/tng/commit/65443992d81a8845ba3597620d84e8652e83a254

Lmfit is freebsd license, I choose bsd-2.

https://jugit.fz-juelich.de/mlz/lmfit/-/blob/master/COPYING

Gromacs itself is lgpl2.1+ and its copying file has bundled
3parties license explanations.

https://github.com/gromacs/gromacs/blob/master/COPYING

Please advise how to proceed further, this is already quite an
adventure for me.
diff mbox series

Patch

From 660371d5a3e7c7c763fc123357ddd6c31f730553 Mon Sep 17 00:00:00 2001
From: Vincent Legoll <vincent.legoll@gmail.com>
Date: Sat, 18 Apr 2020 00:14:56 +0200
Subject: [PATCH] gnu: Add gromacs.

* gnu/packages/bioinformatics.scm (gromacs): New variable.
---
 gnu/packages/bioinformatics.scm | 56 +++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index b9be0c1918..62647d6146 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -17,6 +17,7 @@ 
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
+;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -79,6 +80,7 @@ 
   #:use-module (gnu packages golang)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages graph)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
@@ -785,6 +787,60 @@  input/output delimiter.  When the new functionality is not used, bioawk is
 intended to behave exactly the same as the original BWK awk.")
     (license license:x11)))
 
+(define-public gromacs
+  (package
+    (name "gromacs")
+    (version "2020.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://ftp.gromacs.org/pub/gromacs/gromacs-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1kwrk3i1dxp8abhqqsl049lh361n4910h0415g052f8shdc6arp1"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "-DGMX_DEVELOPER_BUILD=on" ; Needed to run tests
+             ;; Workaround for cmake/FindSphinx.cmake version parsing that does
+             ;; not understand the guix-wrapped `sphinx-build --version' answer
+             (string-append "-DSPHINX_EXECUTABLE_VERSION="
+                            ,(package-version python-sphinx)))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-hwloc-test
+          (lambda _
+             ;; This test warns about the build host hardware
+             (substitute* "src/gromacs/hardware/tests/hardwaretopology.cpp"
+               (("TEST\\(HardwareTopologyTest, HwlocExecute\\)")
+                "void __guix_disabled()"))
+             #t)))))
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("graphviz" ,graphviz)
+       ("python" ,python)
+       ("python-pygments" ,python-pygments)
+       ("python-sphinx" ,python-sphinx)))
+    (inputs
+     `(("fftwf" ,fftwf)
+       ("hwloc" ,hwloc-2 "lib")
+       ("imagemagick" ,imagemagick)
+       ("lapack" ,lapack)
+       ("openblas" ,openblas)
+       ("openmpi" ,openmpi)
+       ("perl" ,perl)))
+    (home-page "http://www.gromacs.org/")
+    (synopsis "Molecular dynamics software package")
+    (description "GROMACS is a versatile package to perform molecular dynamics,
+i.e. simulate the Newtonian equations of motion for systems with hundreds to
+millions of particles.  It is primarily designed for biochemical molecules like
+proteins, lipids and nucleic acids that have a lot of complicated bonded
+interactions, but since GROMACS is extremely fast at calculating the nonbonded
+interactions (that usually dominate simulations) many groups are also using it
+for research on non-biological systems, e.g. polymers.  GROMACS supports all the
+usual algorithms you expect from a modern molecular dynamics implementation.")
+    (license license:lgpl2.1+)))
+
 (define-public python-pybedtools
   (package
     (name "python-pybedtools")
-- 
2.26.0