sci-chemistry/gromacs: drop 2020.7-r1, 2021.7-r1, 2022.6

Closes: https://bugs.gentoo.org/836855
Closes: https://bugs.gentoo.org/907989
Closes: https://bugs.gentoo.org/928852
Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
This commit is contained in:
Alexey Shvetsov
2024-11-23 20:41:33 +03:00
parent 86650bc76e
commit 08eb987097
9 changed files with 0 additions and 1469 deletions

View File

@@ -1,20 +1,11 @@
DIST gromacs-2020.7.tar.gz 29175554 BLAKE2B 98f1aa415946f8eb113febc81105f0c1b0919b96fc3c55a0ab83bf3950ff509b81eade92e645adb0bc2b407df239e20cf3f19828b6e08616437c8693c1fddcc8 SHA512 1d375c44cec38445e56cea252623b5b6c565680268999d4b6c14d6dc38759a27227655b2d29efaab9f9115d3677b446cb555e11cddafa0dc10c4827caaa2477b
DIST gromacs-2021.7.tar.gz 38028032 BLAKE2B 2dc1b15ca8692ca5cf4ad1c7a266b9e2ced064d34a63cef61fea69e48231dd0310cfd8484d29c56cdb599f795d7655959f40038ac933b46ad2841d57bf2b3646 SHA512 ca478533da3bcb377fda30682660db8eb13beef6456fac6013a1a97ec3be60b5594567412e1e2a31392e484f9a40a22da1f12336f4738cf0422ff4f3e8814609
DIST gromacs-2022.6.tar.gz 40330705 BLAKE2B fdafbd5b2a92d6022dec3e79e961fef220f1eba42850916e7cb70ef459a8d9c6ebc8c1bbe3c105f5b23161dd5c552ec00505d7c0036649b782cf52c311498743 SHA512 91217394f534ca8f78f73189059712e1c2cd354b658722f23768b12748f7bfaf1a5e95227c5ed1b69c1a9b72c3174e9600a712c157ea2f27156387efb823dd67
DIST gromacs-2023.5.tar.gz 42079310 BLAKE2B e50dbe76396230f4a886280bdebcf7b131506679240e77d2a2263c3b5dbfe7ef754c4265fc04e9acad7932c7691de7f694cc23140a25d0d5be649a4120f45b0c SHA512 f3a34cf0d379d6d4964d7494af6c6617c0c092293ea38a3a248af2dd2a90cae04696d52e68126176065efc480977942b00efa441028e526e1555c7e84551fc0c
DIST gromacs-2024.3.tar.gz 42373103 BLAKE2B f45af72ecdf119b423d98b84818eaca1aa2e3f43eaf1aff7435de2a5891079a880f19a654627ee2f43e3a38c9dcfa0638bc6eb6da201b3c9ce89b2dc32fc683b SHA512 13f23e581c2b63f6262e8359e7bed6a1a5f3164047ea38d2b6a44bcd2b20b61332705167435fe2ad30fe6f24f8ab49b982388550cdecb49167e4156e36286d3d
DIST gromacs-2024.4.tar.gz 42356162 BLAKE2B 3a1019128a2cfd47fb3ab23962a6fcd5bac3b5519d4bfa1239956740226468986ba93e645eb3bc20117968c024823e948fd819a603315399d573275c91c6e51b SHA512 32a08e9417d4d36a29bdfde4e0448bc136bd3db79b5d5c84fa99d9f022ffca6a94b7bd1c7e7a335430fb6bdcf0181e3cbabeb46d13978c0f87b5d88787ea8d63
DIST gromacs-2025.0-beta.tar.gz 45067499 BLAKE2B 661607007af6d1f697f5aec72a88cefec5546dee2c0facaf2776354665f56fd71b1a7a2ea92185b4d64e764cd0ac10e865b740dda6d7438318acbbadd1bd7fd0 SHA512 831b4ba2631f5dd65c1b48d4ba0455af0b101af22d8cc78c246e7b36f4ce3c8f33f1cb8d94e42559741dbe1585c75a6e05a2538708d7e57c86ac2174aca302b9
DIST manual-2020.7.pdf 11850780 BLAKE2B 38594e87993badfbbcf47d6010a7f67d3c3426dab85e1462916b4d62be27b5764953f912cf2b71ee24877e0bfa27b3f74431da2da81b4977d58cb66b2cc795a3 SHA512 4f184f2c90e0bac01a48069cc546cd5b04fa5f543f90dd2d68c6d17be278152fd09456b6a6c5c8236f8fb85a174d6ec7a1c7b44d437b4e6fea5d0ada73cec0f6
DIST manual-2021.7.pdf 12256526 BLAKE2B 6f298d7dac142f66914bbc2ea7d6ca70c4aeafaf33ccf12336d5cec64b1f1097b5332c767bb411ccef706ec6184479a84bcf59bda21c4249d45d8ce3dea08e79 SHA512 197765accb8ab6c5f1cc94b2697ff1817e157d85fa231dfe36a85036076e04da2a8035de66aba4f46c6dd7f553176357b94c92e1da5d1dabc574c627deee5279
DIST manual-2022.6.pdf 13081140 BLAKE2B e7ae3f23ddc076c295be2c464fe2177d6d6848d070ee5eba2b572e996ae08adead898ec6432b123802907f64983aa4d2e17426be8d540c48d12398a479519f9e SHA512 4724888b3c33c4fa4a035d5fb2f8c51496f67e1ee312676510d5ba74bc3cc1571e71e84464585b87ad0133e8e736343ae382bf8f7b556633f86a99560213d271
DIST manual-2023.5.pdf 13579081 BLAKE2B 42f687ebcdb79bfc77aabac4fd382940c23ba27da380b8eff342c2e9255a58fc11a0458220d1f71f3c13ab1cf6fdabad00ac1bad741781d0b787899165bea2cc SHA512 0661f166f7a8dc24b4244c0139f366832ddfc1298129df2a6e29800b5d1567318781ab547bc7e9ee54de7a62abba4996f8e3010c91d6917c248117e5711d7dbb
DIST manual-2024.3.pdf 13676383 BLAKE2B fa5b310ee8977c525781492c70a18d40f8842f5fa43831ad0283c033f39968ba98e74ea618a4a9c25d88c3ed694071327220617b17f316ba2f29777c3edc95ca SHA512 8dd09913b89213a6673a5f5e3462fb963d1f30d68e0d58b846b7e2cf2f73baacb14fabab6591b680849607f4ca617cf288899729939b2c32021b4ee5ba06835f
DIST manual-2024.4.pdf 13690684 BLAKE2B 7fac46df0da9d4cf7584599c7a71c4e1d11f75fc20a7a19ecc8069fdc2e9e35f0292e389f9c40d69dc96bdfea8d4ee370a54279b5531c0fb37c4cbd76caf7800 SHA512 5c4662527554171774adde5a3de220d775723154914838fd7fc3e40c981e1fccac0fd0def1acc500635cd39269d3bcc2edab5ec7aa85a7ea78350969d72ee13c
DIST manual-2025.0-beta.pdf 13788093 BLAKE2B 40652f32f35d73964dfb8146b916c0249d8b7044595114986108f209e98e3a0a402ead18842822ce12c9cdd24a224bb95f80fbe5eec908f013b1eddc14d2a2fd SHA512 eafc1fd060f4a5dd5e7317f0f0fa45cfd5ccc20518a9d67b9055a87c324893d92573dfd416fcbf0fc9b7a932a47e3a592fbc38837bccdd237466bb62cd3ad9ed
DIST regressiontests-2020.7.tar.gz 48541487 BLAKE2B 255608b52158c6c01e7c7c4dcf075128ecf22b2f26d32e8c203de8a4bc69c60ec95f49cf8ccd64abc3073c5e8dca9d6b01daed9dfb8f67bce2dd068ed01acd05 SHA512 2458582f94f3c9f4e1454824ce3940b4f5b6cb2151d06846c42e7a9448296fd2a6df4f53be9624e0d3317d2b59f89bb5348eb8b2970d7b46ac22ca989ef3458a
DIST regressiontests-2021.7.tar.gz 48537500 BLAKE2B b0c97fa652cb9b972c50f29822f530fcaa2ec9acb6d6442114fc6446c54aade5eb1bfa153c69a7e8bf64b66e8b041d7f8e0d51e7f7b0516f9e03f3d9ad626193 SHA512 7cbead90aa6d62346dcf7c2249c3cfa179884b987a749624444d2f59d93e0322f7721143bf6eb44d26102635dc70a73546ef82d4647558b6320bfdd459074017
DIST regressiontests-2022.6.tar.gz 48615697 BLAKE2B 566adafbc36d3c1faae322fca9cf451f57245c4ceed63f90f26208025937dae0c1bbb8c372bce618f63305d0368113fecd96c7275a75d8b9c19c22a6e5aa9b96 SHA512 68aa9bedffbea37fb7703c18c3f66f607a91f16ece4bec58ced6e42a481156b2fe83760d0e40cecbdcaf87b168441b8ebde27cec30d98c89f516360ea45ddd43
DIST regressiontests-2023.5.tar.gz 48619605 BLAKE2B f2549a34750c6866f054614a00a3360a09b82306e6bd5e5b848e18cdd3a3fabaac6203c5ca734901019403225dd47e0d662838abe9a1db7d07662f1c745b8e4f SHA512 3ccaf9db7dfba641a5e98ebff3d735cae3f679926aba443ffedec20dd6c85e67f0e9711ebad5dfa8105122d5411f5de6ded1802a7da4ddf0599657832c8c597a
DIST regressiontests-2024.3.tar.gz 32776961 BLAKE2B 6a74977a396f8e82f7aba7a384cc840275b86d470597a4bbb93e97f1c13cd8fcf6d86ab26bdd4a89464b863954c9ed7dbd49af095e821573845f7bda43c2b90b SHA512 1c4afbbca82c9b9ad371713ef5e7e093ca766f25f6fbda55c79ea1aecb2f0a06bdb042d3c8a86e3d9bf9e8b8091244827dbff544f66037ffa56b0bcb341a9d2c
DIST regressiontests-2024.4.tar.gz 32777006 BLAKE2B 41623de750b89410fa0a52037ea28d99a688b602b286cff732a6e8100b2b72072f579fc4f72bfe7c246ca086b6c6c1c10adb89874db6e1c9276494572e408a9f SHA512 dfbe8ee1b7c5b534842203f2295ea08875df6af3fb94798138b92ab8bc816719e3357db2935d2de4fd798d104ad7cb44860cd65887da7bb2438db422f35e6848

View File

@@ -1,35 +0,0 @@
From e4e1263776844d660c471e3d1203acf54cdc855f Mon Sep 17 00:00:00 2001
From: Alexey Shvetsov <alexxyum@gmail.com>
Date: Fri, 23 Apr 2021 13:21:24 +0300
Subject: [PATCH 2/2] Allow to build python part without build testing enabled
Signed-off-by: Alexey Shvetsov <alexxyum@gmail.com>
---
python_packaging/src/CMakeLists.txt | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/python_packaging/src/CMakeLists.txt b/python_packaging/src/CMakeLists.txt
index c75549fc82..4f983fdd5f 100644
--- a/python_packaging/src/CMakeLists.txt
+++ b/python_packaging/src/CMakeLists.txt
@@ -1,7 +1,7 @@
#
# This file is part of the GROMACS molecular simulation package.
#
-# Copyright (c) 2019,2020, by the GROMACS development team, led by
+# Copyright (c) 2019,2020,2021, by the GROMACS development team, led by
# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
# and including many others, as listed in the AUTHORS file in the
# top-level source directory and at http://www.gromacs.org.
@@ -252,5 +252,7 @@ endif()
# to the `check` target. Normal usage is to first install the Python package,
# then run `pytest` on the `tests` directory. Refer to gmxapi package documentation.
if(NOT GMXAPI_MASTER_PROJECT)
- add_subdirectory(test)
+ if (BUILD_TESTING)
+ add_subdirectory(test)
+ endif()
endif()
--
2.31.1

View File

@@ -1,12 +0,0 @@
# https://bugs.gentoo.org/915694
# Not needed for newer branches, that greatly refactored the code
--- a/src/gromacs/utility/flags.h~ 2023-01-31 12:45:46.000000000 +0100
+++ b/src/gromacs/utility/flags.h 2023-10-16 10:15:24.087340444 +0200
@@ -42,7 +42,7 @@
*/
#ifndef GMX_UTILITY_FLAGS_H
#define GMX_UTILITY_FLAGS_H
-
+#include <cstdint>
namespace gmx
{

View File

@@ -1,339 +0,0 @@
--- gromacs-2021.7/cmake/gmxManageNvccConfig.cmake 2023-01-31 12:45:45.000000000 +0100
+++ gromacs-2022.5/cmake/gmxManageNvccConfig.cmake 2023-02-03 12:53:34.000000000 +0100
@@ -1,11 +1,9 @@
#
# This file is part of the GROMACS molecular simulation package.
#
-# Copyright (c) 2012,2013,2014,2015,2016 by the GROMACS development team.
-# Copyright (c) 2017,2018,2019,2020,2021, by the GROMACS development team, led by
-# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
-# and including many others, as listed in the AUTHORS file in the
-# top-level source directory and at http://www.gromacs.org.
+# Copyright 2012- The GROMACS Authors
+# and the project initiators Erik Lindahl, Berk Hess and David van der Spoel.
+# Consult the AUTHORS/COPYING files and https://www.gromacs.org for details.
#
# GROMACS is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
@@ -19,7 +17,7 @@
#
# You should have received a copy of the GNU Lesser General Public
# License along with GROMACS; if not, see
-# http://www.gnu.org/licenses, or write to the Free Software Foundation,
+# https://www.gnu.org/licenses, or write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# If you want to redistribute modifications to GROMACS, please
@@ -28,10 +26,10 @@
# consider code for inclusion in the official distribution, but
# derived work must not be called official GROMACS. Details are found
# in the README & COPYING files - if they are missing, get the
-# official version at http://www.gromacs.org.
+# official version at https://www.gromacs.org.
#
# To help us fund GROMACS development, we humbly ask that you cite
-# the research papers on the package. Check out http://www.gromacs.org.
+# the research papers on the package. Check out https://www.gromacs.org.
# Manage CUDA nvcc compilation configuration, try to be smart to ease the users'
# pain as much as possible:
@@ -51,7 +49,7 @@
# glibc source shows that _FORCE_INLINES is only used in this string.h
# feature and performance of memcpy variants is unimportant for CUDA
# code in GROMACS. So this workaround is good enough to keep problems
-# away from users installing GROMACS. See Issue #1942.
+# away from users installing GROMACS. See Issue #1982.
function(work_around_glibc_2_23)
try_compile(IS_GLIBC_2_23_OR_HIGHER ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/cmake/TestGlibcVersion.cpp)
if(IS_GLIBC_2_23_OR_HIGHER)
@@ -83,67 +81,158 @@
mark_as_advanced(CUDA_HOST_COMPILER CUDA_HOST_COMPILER_OPTIONS)
endif()
+# We would like to be helpful and reject the host compiler with a
+# clear error message at configure time, rather than let nvcc
+# later reject the host compiler as not supported when the first
+# CUDA source file is built. We've implemented that for current
+# nvcc running on Unix-like systems, but e.g. changes to nvcc
+# will further affect the limited portability of this checking
+# code. Set the CMake variable GMX_NVCC_WORKS on if you want to
+# bypass this check.
+if((_cuda_nvcc_executable_or_flags_changed OR CUDA_HOST_COMPILER_CHANGED OR NOT GMX_NVCC_WORKS) AND NOT WIN32)
+ message(STATUS "Check for working NVCC/C++ compiler combination with nvcc '${CUDA_NVCC_EXECUTABLE}'")
+ execute_process(COMMAND ${CUDA_NVCC_EXECUTABLE} --compiler-bindir=${CUDA_HOST_COMPILER} -c ${CUDA_NVCC_FLAGS} ${CUDA_NVCC_FLAGS_${_build_type}} ${CMAKE_SOURCE_DIR}/cmake/TestCUDA.cu
+ RESULT_VARIABLE _cuda_test_res
+ OUTPUT_VARIABLE _cuda_test_out
+ ERROR_VARIABLE _cuda_test_err
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if(${_cuda_test_res})
+ message(STATUS "Check for working NVCC/C compiler combination - broken")
+ message(STATUS "${CUDA_NVCC_EXECUTABLE} standard output: '${_cuda_test_out}'")
+ message(STATUS "${CUDA_NVCC_EXECUTABLE} standard error: '${_cuda_test_err}'")
+ if(${_cuda_test_err} MATCHES "nsupported")
+ message(FATAL_ERROR "NVCC/C++ compiler combination does not seem to be supported. CUDA frequently does not support the latest versions of the host compiler, so you might want to try an earlier C++ compiler version and make sure your CUDA compiler and driver are as recent as possible. Set the GMX_NVCC_WORKS CMake cache variable to bypass this check if you know what you are doing.")
+ elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 11.2 AND CUDA_VERSION VERSION_GREATER 11.4 AND CUDA_VERSION VERSION_LESS 11.7) # Issue #4574, #4641
+ # Above, we should be checking for VERSION_LESS 11.6.2, but CUDA_VERSION is only "major.minor"
+ message(FATAL_ERROR "CUDA versions 11.5-11.6.1 are known to be incompatible with some GCC 11.x. Use a different GCC or update your CUDA installation to at least CUDA 11.6.2")
+ else()
+ message(FATAL_ERROR "CUDA compiler does not seem to be functional or is not compatible with the host compiler. Set the GMX_NVCC_WORKS CMake cache variable to bypass this check if you know what you are doing.")
+ endif()
+ elseif(NOT GMX_CUDA_TEST_COMPILER_QUIETLY)
+ message(STATUS "Check for working NVCC/C++ compiler combination - works")
+ set(GMX_NVCC_WORKS TRUE CACHE INTERNAL "Nvcc can compile a trivial test program")
+ endif()
+endif() # GMX_CHECK_NVCC
+
+# Tests a single flag to use with nvcc.
+#
+# If the flags are accepted, they are appended to the variable named
+# in the first argument. The cache variable named in the second
+# argument is used to avoid rerunning the check in future invocations
+# of cmake. The list of flags to check follows these two required
+# arguments.
+#
+# Note that a space-separated string of flags, or a flag-value pair
+# separated by spaces will not work. Use the single-argument forms
+# accepted by nvcc, like "--arg=value".
+#
+# As this code is not yet tested on Windows, it always accepts the
+# flags in that case.
+function(gmx_add_nvcc_flag_if_supported _output_variable_name_to_append_to _flags_cache_variable_name)
+ # If the check has already been run, do not re-run it
+ if (NOT ${_flags_cache_variable_name} AND NOT WIN32)
+ message(STATUS "Checking if nvcc accepts flags ${ARGN}")
+ # See detailed comment about gcc 7 below
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8)
+ set(_cache_variable_value TRUE)
+ message(STATUS "Checking if nvcc accepts flags ${ARGN} - Assuming success when using gcc 7")
+ else()
+ if(NOT(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11))
+ set(CCBIN "--compiler-bindir=${CUDA_HOST_COMPILER}")
+ endif()
+ execute_process(
+ COMMAND ${CUDA_NVCC_EXECUTABLE} ${ARGN} ${CCBIN} "${CMAKE_SOURCE_DIR}/cmake/TestCUDA.cu"
+ RESULT_VARIABLE _cuda_success
+ OUTPUT_QUIET
+ ERROR_QUIET
+ )
+ # Convert the success value to a boolean and report status
+ if (_cuda_success EQUAL 0)
+ set(_cache_variable_value TRUE)
+ message(STATUS "Checking if nvcc accepts flags ${ARGN} - Success")
+ else()
+ set(_cache_variable_value FALSE)
+ message(STATUS "Checking if nvcc accepts flags ${ARGN} - Failed")
+ endif()
+ endif()
+ set(${_flags_cache_variable_name} ${_cache_variable_value} CACHE BOOL "Whether NVCC supports flag(s) ${ARGN}")
+ endif()
+ # Append the flags to the output variable if they have been tested to work
+ if (${_flags_cache_variable_name} OR WIN32)
+ list(APPEND ${_output_variable_name_to_append_to} ${ARGN})
+ set(${_output_variable_name_to_append_to} ${${_output_variable_name_to_append_to}} PARENT_SCOPE)
+ endif()
+endfunction()
+
+# Versions of gcc 7 have differing behavior when executing
+#
+# nvcc $args --compiler-bindir=gcc TestCUDA.cu
+#
+# and would need e.g. adding -lstdc++ to the command line so that
+# linking of a C++/CUDA object by the C-compiler flavor of gcc works.
+# This means we can't reliably test compiler flags in this case
+# without risking creating other problems. Instead we assume (above)
+# that all compiler flags will work, and issue this warning.
+# We also want to skip this warning during GROMACS CI testing.
+if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8
+ AND NOT DEFINED ENV{GITLAB_CI})
+ message(WARNING "You are using gcc version 7 with the CUDA compiler nvcc. GROMACS cannot reliably test compiler arguments for this combination, so if you later experience errors in building GROMACS, please use a more recent version of gcc.")
+endif()
+
# If any of these manual override variables for target CUDA GPU architectures
# or virtual architecture is set, parse the values and assemble the nvcc
# command line for these. Otherwise use our defaults.
# Note that the manual override variables require a semicolon separating
# architecture codes.
+set(GMX_CUDA_NVCC_GENCODE_FLAGS)
if (GMX_CUDA_TARGET_SM OR GMX_CUDA_TARGET_COMPUTE)
- set(GMX_CUDA_NVCC_GENCODE_FLAGS)
set(_target_sm_list ${GMX_CUDA_TARGET_SM})
foreach(_target ${_target_sm_list})
- list(APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_${_target},code=sm_${_target}")
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_${_target} "--generate-code=arch=compute_${_target},code=sm_${_target}")
+ if (NOT NVCC_HAS_GENCODE_COMPUTE_AND_SM_${_target} AND NOT WIN32)
+ message(FATAL_ERROR "Your choice of ${_target} in GMX_CUDA_TARGET_SM was not accepted by nvcc, please choose a target that it accepts")
+ endif()
endforeach()
set(_target_compute_list ${GMX_CUDA_TARGET_COMPUTE})
foreach(_target ${_target_compute_list})
- list(APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_${_target},code=compute_${_target}")
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_${_target} --generate-code=arch=compute_${_target},code=compute_${_target})
+ if (NOT NVCC_HAS_GENCODE_COMPUTE_${_target} AND NOT WIN32)
+ message(FATAL_ERROR "Your choice of ${_target} in GMX_CUDA_TARGET_COMPUTE was not accepted by nvcc, please choose a target that it accepts")
+ endif()
endforeach()
else()
# Set the CUDA GPU architectures to compile for:
- # - with CUDA >=9.0 CC 7.0 is supported and CC 2.0 is no longer supported
- # => compile sm_30, sm_35, sm_37, sm_50, sm_52, sm_60, sm_61, sm_70 SASS, and compute_35, compute_70 PTX
- # - with CUDA >=10.0 CC 7.5 is supported
- # => compile sm_30, sm_35, sm_37, sm_50, sm_52, sm_60, sm_61, sm_70, sm_75 SASS, and compute_35, compute_75 PTX
# - with CUDA >=11.0 CC 8.0 is supported
# => compile sm_35, sm_37, sm_50, sm_52, sm_60, sm_61, sm_70, sm_75, sm_80 SASS, and compute_35, compute_80 PTX
# First add flags that trigger SASS (binary) code generation for physical arch
- if(CUDA_VERSION VERSION_LESS "11.0")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_30,code=sm_30")
- endif()
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_35,code=sm_35")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_37,code=sm_37")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_50,code=sm_50")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_52,code=sm_52")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_60,code=sm_60")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_61,code=sm_61")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_70,code=sm_70")
- if(NOT CUDA_VERSION VERSION_LESS "10.0")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_75,code=sm_75")
- endif()
- if(NOT CUDA_VERSION VERSION_LESS "11.0")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_80,code=sm_80")
- # Requesting sm or compute 35, 37, or 50 triggers deprecation messages with
- # nvcc 11.0, which we need to suppress for use in CI
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-Wno-deprecated-gpu-targets")
- endif()
- if(NOT CUDA_VERSION VERSION_LESS "11.1")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_86,code=sm_86")
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_35 --generate-code=arch=compute_35,code=sm_35)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_37 --generate-code=arch=compute_37,code=sm_37)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_50 --generate-code=arch=compute_50,code=sm_50)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_52 --generate-code=arch=compute_52,code=sm_52)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_60 --generate-code=arch=compute_60,code=sm_60)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_61 --generate-code=arch=compute_61,code=sm_61)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_70 --generate-code=arch=compute_70,code=sm_70)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_75 --generate-code=arch=compute_75,code=sm_75)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_80 --generate-code=arch=compute_80,code=sm_80)
+ # Don't attempt to add newest architectures with old GNU compiler, to avoid issues in CI
+ # related to being unable to test which flags are supported
+ if (NOT (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8))
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_86 --generate-code=arch=compute_86,code=sm_86)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_89 --generate-code=arch=compute_89,code=sm_89)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_AND_SM_90 --generate-code=arch=compute_90,code=sm_90)
endif()
+ # Requesting sm or compute 35, 37, or 50 triggers deprecation messages with
+ # nvcc 11.0, which we need to suppress for use in CI
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_WARNING_NO_DEPRECATED_GPU_TARGETS -Wno-deprecated-gpu-targets)
# Next add flags that trigger PTX code generation for the
# newest supported virtual arch that's useful to JIT to future architectures
# as well as an older one suitable for JIT-ing to any rare intermediate arch
# (like that of Jetson / Drive PX devices)
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_35,code=compute_35")
- if(CUDA_VERSION VERSION_LESS "11.0")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_32,code=compute_32")
- else()
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_53,code=compute_53")
- endif()
- if(NOT CUDA_VERSION VERSION_LESS "11.0")
- list (APPEND GMX_CUDA_NVCC_GENCODE_FLAGS "-gencode;arch=compute_80,code=compute_80")
- endif()
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_53 --generate-code=arch=compute_53,code=sm_53)
+ gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_GENCODE_FLAGS NVCC_HAS_GENCODE_COMPUTE_80 --generate-code=arch=compute_80,code=sm_80)
endif()
if (GMX_CUDA_TARGET_SM)
@@ -158,27 +247,20 @@
# FindCUDA.cmake is unaware of the mechanism used by cmake to embed
# the compiler flag for the required C++ standard in the generated
# build files, so we have to pass it ourselves
-if (CUDA_VERSION VERSION_LESS 11.0)
- # CUDA doesn't formally support C++17 until version 11.0, so for
- # now host-side code that compiles with CUDA is restricted to
- # C++14. This needs to be expressed formally for older CUDA
- # version.
+
+# gcc-7 pre-dated C++17, so uses the -std=c++1z compiler flag for it,
+# which modern nvcc does not recognize. So we work around that by
+# compiling in C++14 mode. Clang doesn't have this problem because nvcc
+# only supports version of clang that already understood -std=c++17
+if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8)
list(APPEND GMX_CUDA_NVCC_FLAGS "${CMAKE_CXX14_STANDARD_COMPILE_OPTION}")
else()
- # gcc-7 pre-dated C++17, so uses the -std=c++1z compiler flag for it,
- # which modern nvcc does not recognize. So we work around that by
- # compiling in C++14 mode. Clang doesn't have this problem because nvcc
- # only supports version of clang that already understood -std=c++17
- if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8)
- list(APPEND GMX_CUDA_NVCC_FLAGS "${CMAKE_CXX14_STANDARD_COMPILE_OPTION}")
- else()
- list(APPEND GMX_CUDA_NVCC_FLAGS "${CMAKE_CXX17_STANDARD_COMPILE_OPTION}")
- endif()
+ list(APPEND GMX_CUDA_NVCC_FLAGS "${CMAKE_CXX17_STANDARD_COMPILE_OPTION}")
endif()
# assemble the CUDA flags
list(APPEND GMX_CUDA_NVCC_FLAGS "${GMX_CUDA_NVCC_GENCODE_FLAGS}")
-list(APPEND GMX_CUDA_NVCC_FLAGS "-use_fast_math")
+gmx_add_nvcc_flag_if_supported(GMX_CUDA_NVCC_FLAGS NVCC_HAS_USE_FAST_MATH -use_fast_math)
# assemble the CUDA host compiler flags
list(APPEND GMX_CUDA_NVCC_FLAGS "${CUDA_HOST_COMPILER_OPTIONS}")
@@ -187,12 +269,18 @@
# CUDA header cuda_runtime_api.h in at least CUDA 10.1 uses 0
# where nullptr would be preferable. GROMACS can't fix these, so
# must suppress them.
- GMX_TEST_CXXFLAG(CXXFLAGS_NO_ZERO_AS_NULL_POINTER_CONSTANT "-Wno-zero-as-null-pointer-constant" NVCC_CLANG_SUPPRESSIONS_CXXFLAGS)
+ GMX_TEST_CXXFLAG(HAS_WARNING_NO_ZERO_AS_NULL_POINTER_CONSTANT "-Wno-zero-as-null-pointer-constant" NVCC_CLANG_SUPPRESSIONS_CXXFLAGS)
# CUDA header crt/math_functions.h in at least CUDA 10.x and 11.1
# used throw() specifications that are deprecated in more recent
# C++ versions. GROMACS can't fix these, so must suppress them.
- GMX_TEST_CXXFLAG(CXXFLAGS_NO_DEPRECATED_DYNAMIC_EXCEPTION_SPEC "-Wno-deprecated-dynamic-exception-spec" NVCC_CLANG_SUPPRESSIONS_CXXFLAGS)
+ GMX_TEST_CXXFLAG(HAS_WARNING_NO_DEPRECATED_DYNAMIC_EXCEPTION_SPEC "-Wno-deprecated-dynamic-exception-spec" NVCC_CLANG_SUPPRESSIONS_CXXFLAGS)
+
+ # CUDA headers cuda_runtime.h and channel_descriptor.h in at least
+ # CUDA 11.0 uses many C-style casts, which are ncessary for this
+ # header to work for C. GROMACS can't fix these, so must suppress
+ # the warnings they generate
+ GMX_TEST_CXXFLAG(HAS_WARNING_NO_OLD_STYLE_CAST "-Wno-old-style-cast" NVCC_CLANG_SUPPRESSIONS_CXXFLAGS)
# Add these flags to those used for the host compiler. The
# "-Xcompiler" prefix directs nvcc to only use them for host
@@ -205,37 +293,6 @@
string(TOUPPER "${CMAKE_BUILD_TYPE}" _build_type)
gmx_check_if_changed(_cuda_nvcc_executable_or_flags_changed CUDA_NVCC_EXECUTABLE CUDA_NVCC_FLAGS CUDA_NVCC_FLAGS_${_build_type})
-# We would like to be helpful and reject the host compiler with a
-# clear error message at configure time, rather than let nvcc
-# later reject the host compiler as not supported when the first
-# CUDA source file is built. We've implemented that for current
-# nvcc running on Unix-like systems, but e.g. changes to nvcc
-# will further affect the limited portability of this checking
-# code. Set the CMake variable GMX_NVCC_WORKS on if you want to
-# bypass this check.
-if((_cuda_nvcc_executable_or_flags_changed OR CUDA_HOST_COMPILER_CHANGED OR NOT GMX_NVCC_WORKS) AND NOT WIN32)
- message(STATUS "Check for working NVCC/C++ compiler combination with nvcc '${CUDA_NVCC_EXECUTABLE}'")
- execute_process(COMMAND ${CUDA_NVCC_EXECUTABLE} -ccbin ${CUDA_HOST_COMPILER} -c ${CUDA_NVCC_FLAGS} ${CUDA_NVCC_FLAGS_${_build_type}} ${CMAKE_SOURCE_DIR}/cmake/TestCUDA.cu
- RESULT_VARIABLE _cuda_test_res
- OUTPUT_VARIABLE _cuda_test_out
- ERROR_VARIABLE _cuda_test_err
- OUTPUT_STRIP_TRAILING_WHITESPACE)
-
- if(${_cuda_test_res})
- message(STATUS "Check for working NVCC/C compiler combination - broken")
- message(STATUS "${CUDA_NVCC_EXECUTABLE} standard output: '${_cuda_test_out}'")
- message(STATUS "${CUDA_NVCC_EXECUTABLE} standard error: '${_cuda_test_err}'")
- if(${_cuda_test_err} MATCHES "nsupported")
- message(FATAL_ERROR "NVCC/C++ compiler combination does not seem to be supported. CUDA frequently does not support the latest versions of the host compiler, so you might want to try an earlier C++ compiler version and make sure your CUDA compiler and driver are as recent as possible.")
- else()
- message(FATAL_ERROR "CUDA compiler does not seem to be functional.")
- endif()
- elseif(NOT GMX_CUDA_TEST_COMPILER_QUIETLY)
- message(STATUS "Check for working NVCC/C++ compiler combination - works")
- set(GMX_NVCC_WORKS TRUE CACHE INTERNAL "Nvcc can compile a trivial test program")
- endif()
-endif() # GMX_CHECK_NVCC
-
# The flags are set as local variables which shadow the cache variables. The cache variables
# (can be set by the user) are appended. This is done in a macro to set the flags when all

View File

@@ -1,25 +0,0 @@
From 8a38303c52fbca07c850e0c4cd03a783aabf9e49 Mon Sep 17 00:00:00 2001
From: Paul Bauer <paul.bauer.q@gmail.com>
Date: Mon, 21 Feb 2022 09:53:46 +0100
Subject: [PATCH] Fix missing includes for musl libc
Fixes #4404
---
src/gromacs/math/vectypes.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/gromacs/math/vectypes.h b/src/gromacs/math/vectypes.h
index d4d5211d11..bd9d31de20 100644
--- a/src/gromacs/math/vectypes.h
+++ b/src/gromacs/math/vectypes.h
@@ -40,6 +40,7 @@
#include <cassert>
#include <cmath>
+#include <cstdint>
#include <algorithm>
#include <type_traits>
--
2.35.1

View File

@@ -1,351 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
CMAKE_MAKEFILE_GENERATOR="ninja"
PYTHON_COMPAT=( python3_{10..12} )
DISTUTILS_OPTIONAL=1
DISTUTILS_USE_PEP517=no
DISTUTILS_SINGLE_IMPL=1
inherit bash-completion-r1 cmake cuda distutils-r1 flag-o-matic readme.gentoo-r1 toolchain-funcs xdg-utils
if [[ ${PV} = *9999* ]]; then
EGIT_REPO_URI="
https://gitlab.com/gromacs/gromacs.git
https://github.com/gromacs/gromacs.git
"
[[ ${PV} = 9999 ]] && EGIT_BRANCH="master" || EGIT_BRANCH="release-${PV:0:4}"
inherit git-r3
else
SRC_URI="
https://ftp.gromacs.org/gromacs/${PN}-${PV/_/-}.tar.gz
doc? ( https://ftp.gromacs.org/manual/manual-${PV/_/-}.pdf )
test? ( https://ftp.gromacs.org/regressiontests/regressiontests-${PV/_/-}.tar.gz )"
KEYWORDS="amd64 ~arm ~x86 ~amd64-linux ~x86-linux ~x64-macos"
fi
ACCE_IUSE="cpu_flags_x86_sse2 cpu_flags_x86_sse4_1 cpu_flags_x86_fma4 cpu_flags_x86_avx cpu_flags_x86_avx2"
DESCRIPTION="The ultimate molecular dynamics simulation package"
HOMEPAGE="https://www.gromacs.org/"
# see COPYING for details
# https://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/${PV}"
IUSE="X blas cuda +custom-cflags +doc build-manual double-precision +fftw +gmxapi +gmxapi-legacy +hwloc lapack +lmfit mkl mpi +offensive opencl openmp +python +single-precision test +threads +tng ${ACCE_IUSE}"
CDEPEND="
X? (
x11-libs/libX11
x11-libs/libSM
x11-libs/libICE
)
blas? ( virtual/blas )
cuda? ( >=dev-util/nvidia-cuda-toolkit-6.5.14:= )
opencl? ( virtual/opencl )
openmp? (
sys-devel/gcc[openmp]
sys-devel/clang-runtime[openmp]
)
fftw? ( sci-libs/fftw:3.0= )
hwloc? ( sys-apps/hwloc:= )
lapack? ( virtual/lapack )
lmfit? ( sci-libs/lmfit:= )
mkl? ( sci-libs/mkl )
mpi? ( virtual/mpi )
${PYTHON_DEPS}
"
BDEPEND="${CDEPEND}
virtual/pkgconfig
build-manual? (
app-text/doxygen
$(python_gen_cond_dep '
dev-python/sphinx[${PYTHON_USEDEP}]
')
media-gfx/mscgen
media-gfx/graphviz
dev-texlive/texlive-latex
dev-texlive/texlive-latexextra
media-gfx/imagemagick
)"
RDEPEND="${CDEPEND}"
REQUIRED_USE="
|| ( single-precision double-precision )
doc? ( !build-manual )
cuda? ( single-precision )
opencl? ( single-precision )
cuda? ( !opencl )
mkl? ( !blas !fftw !lapack )
${PYTHON_REQUIRED_USE}"
DOCS=( AUTHORS README )
RESTRICT="!test? ( test )"
if [[ ${PV} != *9999 ]]; then
S="${WORKDIR}/${PN}-${PV/_/-}"
fi
PATCHES=( "${FILESDIR}/${PN}-2020-pytest.patch" )
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
pkg_setup() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
python-single-r1_pkg_setup
}
src_unpack() {
if [[ ${PV} != *9999 ]]; then
default
else
git-r3_src_unpack
if use test; then
EGIT_REPO_URI="https://gitlab.com/gromacs/gromacs-regressiontests.git" \
EGIT_BRANCH="${EGIT_BRANCH}" \
EGIT_CHECKOUT_DIR="${WORKDIR}/regressiontests"\
git-r3_src_unpack
fi
fi
}
src_prepare() {
#notes/todos
# -on apple: there is framework support
xdg_environment_reset #591952
cmake_src_prepare
use cuda && cuda_src_prepare
GMX_DIRS=""
use single-precision && GMX_DIRS+=" float"
use double-precision && GMX_DIRS+=" double"
if use test; then
for x in ${GMX_DIRS}; do
mkdir -p "${WORKDIR}/${P}_${x}" || die
cp -al "${WORKDIR}/regressiontests"* "${WORKDIR}/${P}_${x}/tests" || die
done
fi
DOC_CONTENTS="Gromacs can use sci-chemistry/vmd to read additional file formats"
if use build-manual; then
# try to create policy for imagemagik
mkdir -p "${HOME}"/.config/ImageMagick
cat >> "${HOME}"/.config/ImageMagick/policy.xml <<- EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
<!ELEMENT policymap (policy)+>
!ATTLIST policymap xmlns CDATA #FIXED ''>
<!ELEMENT policy EMPTY>
<!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED
name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
stealth NMTOKEN #IMPLIED value CDATA #IMPLIED>
]>
<policymap>
<policy domain="coder" rights="read | write" pattern="PS" />
<policy domain="coder" rights="read | write" pattern="PS2" />
<policy domain="coder" rights="read | write" pattern="PS3" />
<policy domain="coder" rights="read | write" pattern="EPS" />
<policy domain="coder" rights="read | write" pattern="PDF" />
<policy domain="coder" rights="read | write" pattern="XPS" />
</policymap>
EOF
fi
}
src_configure() {
local mycmakeargs_pre=( ) extra fft_opts=( )
if use custom-cflags; then
#go from slowest to fastest acceleration
local acce="None"
use cpu_flags_x86_sse2 && acce="SSE2"
use cpu_flags_x86_sse4_1 && acce="SSE4.1"
use cpu_flags_x86_fma4 && acce="AVX_128_FMA"
use cpu_flags_x86_avx && acce="AVX_256"
use cpu_flags_x86_avx2 && acce="AVX2_256"
else
strip-flags
fi
#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; 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
if use lmfit; then
local lmfit_opts=( -DGMX_USE_LMFIT=EXTERNAL )
else
local lmfit_opts=( -DGMX_USE_LMFIT=INTERNAL )
fi
mycmakeargs_pre+=(
"${fft_opts[@]}"
"${lmfit_opts[@]}"
-DGMX_X11=$(usex X)
-DGMX_EXTERNAL_BLAS=$(usex blas)
-DGMX_EXTERNAL_LAPACK=$(usex lapack)
-DGMX_OPENMP=$(usex openmp)
-DGMX_COOL_QUOTES=$(usex offensive)
-DGMX_USE_TNG=$(usex tng)
-DGMX_BUILD_MANUAL=$(usex build-manual)
-DGMX_HWLOC=$(usex hwloc)
-DGMX_DEFAULT_SUFFIX=off
-DGMX_SIMD="$acce"
-DGMX_VMD_PLUGIN_PATH="${EPREFIX}/usr/$(get_libdir)/vmd/plugins/*/molfile/"
-DBUILD_TESTING=$(usex test)
-DGMX_BUILD_UNITTESTS=$(usex test)
-DPYTHON_EXECUTABLE="${EPREFIX}/usr/bin/${EPYTHON}"
${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=( "-DGMX_GPU=OFF" )
[[ ${x} = "float" ]] && use cuda && \
cuda=( "-DGMX_GPU=ON" )
local opencl=( "-DGMX_USE_OPENCL=OFF" )
use opencl && opencl=( "-DGMX_USE_OPENCL=ON" ) cuda=( "-DGMX_GPU=ON" )
local mycmakeargs=(
${mycmakeargs_pre[@]} ${p}
-DGMX_MPI=OFF
-DGMX_THREAD_MPI=$(usex threads)
-DGMXAPI=$(usex gmxapi)
-DGMX_INSTALL_LEGACY_API=$(usex gmxapi-legacy)
"${opencl[@]}"
"${cuda[@]}"
"$(use test && echo -DREGRESSIONTEST_PATH="${WORKDIR}/${P}_${x}/tests")"
-DGMX_BINARY_SUFFIX="${suffix}"
-DGMX_LIBS_SUFFIX="${suffix}"
-DGMX_PYTHON_PACKAGE=$(usex python)
)
BUILD_DIR="${WORKDIR}/${P}_${x}" cmake_src_configure
[[ ${CHOST} != *-darwin* ]] || \
sed -i '/SET(CMAKE_INSTALL_NAME_DIR/s/^/#/' "${WORKDIR}/${P}_${x}/gentoo_rules.cmake" || die
use mpi || continue
einfo "Configuring for ${x} precision with mpi"
local mycmakeargs=(
${mycmakeargs_pre[@]} ${p}
-DGMX_THREAD_MPI=OFF
-DGMX_MPI=ON
-DGMX_OPENMM=OFF
-DGMXAPI=OFF
"${opencl[@]}"
"${cuda[@]}"
-DGMX_BUILD_MDRUN_ONLY=ON
-DBUILD_SHARED_LIBS=OFF
-DGMX_BUILD_MANUAL=OFF
-DGMX_BINARY_SUFFIX="_mpi${suffix}"
-DGMX_LIBS_SUFFIX="_mpi${suffix}"
)
BUILD_DIR="${WORKDIR}/${P}_${x}_mpi" CC="mpicc" cmake_src_configure
[[ ${CHOST} != *-darwin* ]] || \
sed -i '/SET(CMAKE_INSTALL_NAME_DIR/s/^/#/' "${WORKDIR}/${P}_${x}_mpi/gentoo_rules.cmake" || die
done
}
src_compile() {
for x in ${GMX_DIRS}; do
einfo "Compiling for ${x} precision"
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile
if use python; then
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile python_packaging/all
BUILD_DIR="${WORKDIR}/${P}" \
distutils-r1_src_compile
fi
# not 100% necessary for rel ebuilds as available from website
if use build-manual; then
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile manual
fi
use mpi || continue
einfo "Compiling for ${x} precision with mpi"
BUILD_DIR="${WORKDIR}/${P}_${x}_mpi"\
cmake_src_compile
done
}
src_test() {
for x in ${GMX_DIRS}; do
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile check
done
}
src_install() {
for x in ${GMX_DIRS}; do
BUILD_DIR="${WORKDIR}/${P}_${x}" \
cmake_src_install
if use python; then
BUILD_DIR="${WORKDIR}/${P}_${x}" \
cmake_src_install python_packaging/install
fi
if use build-manual; then
newdoc "${WORKDIR}/${P}_${x}"/docs/manual/gromacs.pdf "${PN}-manual-${PV}.pdf"
fi
if use doc; then
if [[ ${PV} != *9999* ]]; then
newdoc "${DISTDIR}/manual-${PV}.pdf" "${PN}-manual-${PV}.pdf"
fi
fi
use mpi || continue
BUILD_DIR="${WORKDIR}/${P}_${x}_mpi" \
cmake_src_install
done
if use tng; then
insinto /usr/include/tng
doins src/external/tng_io/include/tng/*h
fi
# drop unneeded stuff
rm "${ED}"/usr/bin/GMXRC* || die
for x in "${ED}"/usr/bin/gmx-completion-*.bash ; do
local n=${x##*/gmx-completion-}
n="${n%.bash}"
cat "${ED}"/usr/bin/gmx-completion.bash "$x" > "${T}/${n}" || die
newbashcomp "${T}"/"${n}" "${n}"
done
rm "${ED}"/usr/bin/gmx-completion*.bash || die
readme.gentoo_create_doc
}
pkg_postinst() {
einfo
einfo "Please read and cite gromacs related papers from list:"
einfo "https://www.gromacs.org/articles.html"
einfo
readme.gentoo_print_elog
}

View File

@@ -1,360 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
CMAKE_MAKEFILE_GENERATOR="ninja"
PYTHON_COMPAT=( python3_{10..12} )
DISTUTILS_OPTIONAL=1
DISTUTILS_USE_PEP517=no
DISTUTILS_SINGLE_IMPL=1
inherit bash-completion-r1 cmake cuda distutils-r1 flag-o-matic readme.gentoo-r1 toolchain-funcs xdg-utils
if [[ ${PV} = *9999* ]]; then
EGIT_REPO_URI="
https://gitlab.com/gromacs/gromacs.git
https://github.com/gromacs/gromacs.git
"
[[ ${PV} = 9999 ]] && EGIT_BRANCH="master" || EGIT_BRANCH="release-${PV:0:4}"
inherit git-r3
else
SRC_URI="
https://ftp.gromacs.org/gromacs/${PN}-${PV/_/-}.tar.gz
doc? ( https://ftp.gromacs.org/manual/manual-${PV/_/-}.pdf )
test? ( https://ftp.gromacs.org/regressiontests/regressiontests-${PV/_/-}.tar.gz )"
KEYWORDS="amd64 ~arm ~x86 ~amd64-linux ~x86-linux ~x64-macos"
fi
ACCE_IUSE="cpu_flags_x86_sse2 cpu_flags_x86_sse4_1 cpu_flags_x86_fma4 cpu_flags_x86_avx cpu_flags_x86_avx2 cpu_flags_x86_avx512f cpu_flags_arm_neon"
DESCRIPTION="The ultimate molecular dynamics simulation package"
HOMEPAGE="https://www.gromacs.org/"
# see COPYING for details
# https://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/${PV}"
IUSE="X blas cuda +custom-cflags +doc build-manual double-precision +fftw +gmxapi +gmxapi-legacy +hwloc lapack +lmfit mkl mpi +offensive opencl openmp +python +single-precision test +threads +tng ${ACCE_IUSE}"
CDEPEND="
X? (
x11-libs/libX11
x11-libs/libSM
x11-libs/libICE
)
blas? ( virtual/blas )
cuda? ( >=dev-util/nvidia-cuda-toolkit-6.5.14:=[profiler] )
opencl? ( virtual/opencl )
openmp? (
sys-devel/gcc[openmp]
sys-devel/clang-runtime[openmp]
)
fftw? ( sci-libs/fftw:3.0= )
hwloc? ( sys-apps/hwloc:= )
lapack? ( virtual/lapack )
lmfit? ( sci-libs/lmfit:= )
mkl? ( sci-libs/mkl )
mpi? ( virtual/mpi )
${PYTHON_DEPS}
"
BDEPEND="${CDEPEND}
virtual/pkgconfig
build-manual? (
app-text/doxygen
$(python_gen_cond_dep '
dev-python/sphinx[${PYTHON_USEDEP}]
')
media-gfx/mscgen
media-gfx/graphviz
dev-texlive/texlive-latex
dev-texlive/texlive-latexextra
media-gfx/imagemagick
)"
RDEPEND="${CDEPEND}"
REQUIRED_USE="
|| ( single-precision double-precision )
doc? ( !build-manual )
cuda? ( single-precision )
opencl? ( single-precision )
cuda? ( !opencl )
mkl? ( !blas !fftw !lapack )
${PYTHON_REQUIRED_USE}"
DOCS=( AUTHORS README )
RESTRICT="!test? ( test )"
PATCHES=(
"${FILESDIR}/${PN}-2021-musl-stdint.patch"
"${FILESDIR}/${PN}-2021-cuda-detection.patch"
"${FILESDIR}/${PN}-2021-cstdint-include.patch"
)
if [[ ${PV} != *9999 ]]; then
S="${WORKDIR}/${PN}-${PV/_/-}"
fi
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
pkg_setup() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
python-single-r1_pkg_setup
}
src_unpack() {
if [[ ${PV} != *9999 ]]; then
default
else
git-r3_src_unpack
if use test; then
EGIT_REPO_URI="https://gitlab.com/gromacs/gromacs-regressiontests.git" \
EGIT_BRANCH="${EGIT_BRANCH}" \
EGIT_CHECKOUT_DIR="${WORKDIR}/regressiontests"\
git-r3_src_unpack
fi
fi
}
src_prepare() {
#notes/todos
# -on apple: there is framework support
xdg_environment_reset #591952
cmake_src_prepare
use cuda && cuda_src_prepare
GMX_DIRS=""
use single-precision && GMX_DIRS+=" float"
use double-precision && GMX_DIRS+=" double"
if use test; then
for x in ${GMX_DIRS}; do
mkdir -p "${WORKDIR}/${P}_${x}" || die
cp -al "${WORKDIR}/regressiontests"* "${WORKDIR}/${P}_${x}/tests" || die
done
fi
DOC_CONTENTS="Gromacs can use sci-chemistry/vmd to read additional file formats"
if use build-manual; then
# try to create policy for imagemagik
mkdir -p "${HOME}"/.config/ImageMagick
cat >> "${HOME}"/.config/ImageMagick/policy.xml <<- EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
<!ELEMENT policymap (policy)+>
!ATTLIST policymap xmlns CDATA #FIXED ''>
<!ELEMENT policy EMPTY>
<!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED
name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
stealth NMTOKEN #IMPLIED value CDATA #IMPLIED>
]>
<policymap>
<policy domain="coder" rights="read | write" pattern="PS" />
<policy domain="coder" rights="read | write" pattern="PS2" />
<policy domain="coder" rights="read | write" pattern="PS3" />
<policy domain="coder" rights="read | write" pattern="EPS" />
<policy domain="coder" rights="read | write" pattern="PDF" />
<policy domain="coder" rights="read | write" pattern="XPS" />
</policymap>
EOF
fi
}
src_configure() {
local mycmakeargs_pre=( ) extra fft_opts=( )
local acce="AUTO"
if use custom-cflags; then
#go from slowest to fastest acceleration
acce="None"
if (use amd64 || use x86); then
use cpu_flags_x86_sse2 && acce="SSE2"
use cpu_flags_x86_sse4_1 && acce="SSE4.1"
use cpu_flags_x86_fma4 && acce="AVX_128_FMA"
use cpu_flags_x86_avx && acce="AVX_256"
use cpu_flags_x86_avx2 && acce="AVX2_256"
use cpu_flags_x86_avx512f && acce="AVX_512"
elif (use arm); then
use cpu_flags_arm_neon && acce="ARM_NEON"
elif (use arm64); then
use cpu_flags_arm_neon && acce="ARM_NEON_ASIMD"
fi
else
strip-flags
fi
#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; 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
if use lmfit; then
local lmfit_opts=( -DGMX_USE_LMFIT=EXTERNAL )
else
local lmfit_opts=( -DGMX_USE_LMFIT=INTERNAL )
fi
mycmakeargs_pre+=(
"${fft_opts[@]}"
"${lmfit_opts[@]}"
-DGMX_X11=$(usex X)
-DGMX_EXTERNAL_BLAS=$(usex blas)
-DGMX_EXTERNAL_LAPACK=$(usex lapack)
-DGMX_OPENMP=$(usex openmp)
-DGMX_COOL_QUOTES=$(usex offensive)
-DGMX_USE_TNG=$(usex tng)
-DGMX_BUILD_MANUAL=$(usex build-manual)
-DGMX_HWLOC=$(usex hwloc)
-DGMX_DEFAULT_SUFFIX=off
-DGMX_SIMD="$acce"
-DGMX_VMD_PLUGIN_PATH="${EPREFIX}/usr/$(get_libdir)/vmd/plugins/*/molfile/"
-DBUILD_TESTING=$(usex test)
-DGMX_BUILD_UNITTESTS=$(usex test)
-DPYTHON_EXECUTABLE="${EPREFIX}/usr/bin/${EPYTHON}"
${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 gpu=( "-DGMX_GPU=OFF" )
[[ ${x} = "float" ]] && use cuda && gpu=( "-DGMX_GPU=CUDA" )
use opencl && gpu=( "-DGMX_GPU=OPENCL" )
local mycmakeargs=(
${mycmakeargs_pre[@]} ${p}
-DGMX_MPI=OFF
-DGMX_THREAD_MPI=$(usex threads)
-DGMXAPI=$(usex gmxapi)
-DGMX_INSTALL_LEGACY_API=$(usex gmxapi-legacy)
"${gpu[@]}"
"$(use test && echo -DREGRESSIONTEST_PATH="${WORKDIR}/${P}_${x}/tests")"
-DGMX_BINARY_SUFFIX="${suffix}"
-DGMX_LIBS_SUFFIX="${suffix}"
-DGMX_PYTHON_PACKAGE=$(usex python)
)
BUILD_DIR="${WORKDIR}/${P}_${x}" cmake_src_configure
[[ ${CHOST} != *-darwin* ]] || \
sed -i '/SET(CMAKE_INSTALL_NAME_DIR/s/^/#/' "${WORKDIR}/${P}_${x}/gentoo_rules.cmake" || die
use mpi || continue
einfo "Configuring for ${x} precision with mpi"
local mycmakeargs=(
${mycmakeargs_pre[@]} ${p}
-DGMX_THREAD_MPI=OFF
-DGMX_MPI=ON
-DGMX_OPENMM=OFF
-DGMXAPI=OFF
"${opencl[@]}"
"${cuda[@]}"
-DGMX_BUILD_MDRUN_ONLY=ON
-DBUILD_SHARED_LIBS=OFF
-DGMX_BUILD_MANUAL=OFF
-DGMX_BINARY_SUFFIX="_mpi${suffix}"
-DGMX_LIBS_SUFFIX="_mpi${suffix}"
)
BUILD_DIR="${WORKDIR}/${P}_${x}_mpi" CC="mpicc" cmake_src_configure
[[ ${CHOST} != *-darwin* ]] || \
sed -i '/SET(CMAKE_INSTALL_NAME_DIR/s/^/#/' "${WORKDIR}/${P}_${x}_mpi/gentoo_rules.cmake" || die
done
}
src_compile() {
for x in ${GMX_DIRS}; do
einfo "Compiling for ${x} precision"
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile
if use python; then
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile python_packaging/all
BUILD_DIR="${WORKDIR}/${P}" \
distutils-r1_src_compile
fi
# not 100% necessary for rel ebuilds as available from website
if use build-manual; then
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile manual
fi
use mpi || continue
einfo "Compiling for ${x} precision with mpi"
BUILD_DIR="${WORKDIR}/${P}_${x}_mpi"\
cmake_src_compile
done
}
src_test() {
for x in ${GMX_DIRS}; do
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile check
done
}
src_install() {
for x in ${GMX_DIRS}; do
BUILD_DIR="${WORKDIR}/${P}_${x}" \
cmake_src_install
if use python; then
BUILD_DIR="${WORKDIR}/${P}_${x}" \
cmake_src_install python_packaging/install
fi
if use build-manual; then
newdoc "${WORKDIR}/${P}_${x}"/docs/manual/gromacs.pdf "${PN}-manual-${PV}.pdf"
fi
if use doc; then
if [[ ${PV} != *9999* ]]; then
newdoc "${DISTDIR}/manual-${PV}.pdf" "${PN}-manual-${PV}.pdf"
fi
fi
use mpi || continue
BUILD_DIR="${WORKDIR}/${P}_${x}_mpi" \
cmake_src_install
done
if use tng; then
insinto /usr/include/tng
doins src/external/tng_io/include/tng/*h
fi
# drop unneeded stuff
rm "${ED}"/usr/bin/GMXRC* || die
for x in "${ED}"/usr/bin/gmx-completion-*.bash ; do
local n=${x##*/gmx-completion-}
n="${n%.bash}"
cat "${ED}"/usr/bin/gmx-completion.bash "$x" > "${T}/${n}" || die
newbashcomp "${T}"/"${n}" "${n}"
done
rm "${ED}"/usr/bin/gmx-completion*.bash || die
readme.gentoo_create_doc
}
pkg_postinst() {
einfo
einfo "Please read and cite gromacs related papers from list:"
einfo "https://www.gromacs.org/articles.html"
einfo
readme.gentoo_print_elog
}

View File

@@ -1,337 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
CMAKE_MAKEFILE_GENERATOR="ninja"
PYTHON_COMPAT=( python3_{10..12} )
DISTUTILS_OPTIONAL=1
DISTUTILS_USE_PEP517=no
DISTUTILS_SINGLE_IMPL=1
inherit bash-completion-r1 cmake cuda distutils-r1 flag-o-matic readme.gentoo-r1 toolchain-funcs xdg-utils
if [[ ${PV} = *9999* ]]; then
EGIT_REPO_URI="
https://gitlab.com/gromacs/gromacs.git
https://github.com/gromacs/gromacs.git
"
[[ ${PV} = 9999 ]] && EGIT_BRANCH="master" || EGIT_BRANCH="release-${PV:0:4}"
inherit git-r3
else
SRC_URI="
https://ftp.gromacs.org/gromacs/${P}.tar.gz
doc? ( https://ftp.gromacs.org/manual/manual-${PV}.pdf )
test? ( https://ftp.gromacs.org/regressiontests/regressiontests-${PV}.tar.gz )"
# since 2022 arm support was dropped (but not arm64)
KEYWORDS="~amd64 -arm ~arm64 ~x86 ~amd64-linux ~x86-linux ~x64-macos"
fi
ACCE_IUSE="cpu_flags_x86_sse2 cpu_flags_x86_sse4_1 cpu_flags_x86_fma4 cpu_flags_x86_avx cpu_flags_x86_avx2 cpu_flags_x86_avx512f cpu_flags_arm_neon"
DESCRIPTION="The ultimate molecular dynamics simulation package"
HOMEPAGE="https://www.gromacs.org/"
# see COPYING for details
# https://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/${PV}"
IUSE="blas clang clang-cuda cuda +custom-cflags +doc build-manual double-precision +fftw +gmxapi +gmxapi-legacy +hwloc lapack mkl mpi +offensive opencl openmp +python +single-precision test +threads +tng ${ACCE_IUSE}"
CDEPEND="
blas? ( virtual/blas )
cuda? ( >=dev-util/nvidia-cuda-toolkit-11:=[profiler] )
opencl? ( virtual/opencl )
openmp? (
sys-devel/gcc[openmp]
sys-devel/clang-runtime[openmp]
)
fftw? ( sci-libs/fftw:3.0= )
hwloc? ( sys-apps/hwloc:= )
lapack? ( virtual/lapack )
mkl? ( sci-libs/mkl )
mpi? ( virtual/mpi[cxx] )
sci-libs/lmfit:=
>=dev-cpp/muParser-2.3:=
${PYTHON_DEPS}
"
BDEPEND="${CDEPEND}
virtual/pkgconfig
clang? ( >=sys-devel/clang-6:* )
build-manual? (
app-text/doxygen
$(python_gen_cond_dep '
dev-python/sphinx[${PYTHON_USEDEP}]
')
media-gfx/mscgen
media-gfx/graphviz
dev-texlive/texlive-latex
dev-texlive/texlive-latexextra
media-gfx/imagemagick
)"
RDEPEND="${CDEPEND}
<sci-chemistry/dssp-4"
REQUIRED_USE="
|| ( single-precision double-precision )
doc? ( !build-manual )
cuda? ( single-precision )
opencl? ( single-precision )
cuda? ( !opencl )
clang-cuda? ( clang cuda )
mkl? ( !blas !fftw !lapack )
${PYTHON_REQUIRED_USE}"
DOCS=( AUTHORS README )
RESTRICT="!test? ( test )"
if [[ ${PV} != *9999 ]]; then
S="${WORKDIR}/${PN}-${PV/_/-}"
fi
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
pkg_setup() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
python-single-r1_pkg_setup
}
src_unpack() {
if [[ ${PV} != *9999 ]]; then
default
else
git-r3_src_unpack
if use test; then
EGIT_REPO_URI="https://gitlab.com/gromacs/gromacs-regressiontests.git" \
EGIT_BRANCH="${EGIT_BRANCH}" \
EGIT_CHECKOUT_DIR="${WORKDIR}/regressiontests"\
git-r3_src_unpack
fi
fi
}
src_prepare() {
#notes/todos
# -on apple: there is framework support
xdg_environment_reset #591952
# we can use clang as default
if use clang && ! tc-is-clang ; then
export CC=${CHOST}-clang
export CXX=${CHOST}-clang++
else
tc-export CXX CC
fi
# clang-cuda need to filter mfpmath
if use clang-cuda ; then
filter-mfpmath sse
filter-mfpmath i386
fi
cmake_src_prepare
use cuda && cuda_src_prepare
GMX_DIRS=""
use single-precision && GMX_DIRS+=" float"
use double-precision && GMX_DIRS+=" double"
if use test; then
for x in ${GMX_DIRS}; do
mkdir -p "${WORKDIR}/${P}_${x}" || die
cp -al "${WORKDIR}/regressiontests"* "${WORKDIR}/${P}_${x}/tests" || die
done
fi
DOC_CONTENTS="Gromacs can use sci-chemistry/vmd to read additional file formats"
if use build-manual; then
# try to create policy for imagemagik
mkdir -p "${HOME}"/.config/ImageMagick
cat >> "${HOME}"/.config/ImageMagick/policy.xml <<- EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
<!ELEMENT policymap (policy)+>
!ATTLIST policymap xmlns CDATA #FIXED ''>
<!ELEMENT policy EMPTY>
<!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED
name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
stealth NMTOKEN #IMPLIED value CDATA #IMPLIED>
]>
<policymap>
<policy domain="coder" rights="read | write" pattern="PS" />
<policy domain="coder" rights="read | write" pattern="PS2" />
<policy domain="coder" rights="read | write" pattern="PS3" />
<policy domain="coder" rights="read | write" pattern="EPS" />
<policy domain="coder" rights="read | write" pattern="PDF" />
<policy domain="coder" rights="read | write" pattern="XPS" />
</policymap>
EOF
fi
}
src_configure() {
local mycmakeargs_pre=( ) extra fft_opts=( )
local acce="AUTO"
if use custom-cflags; then
#go from slowest to fastest acceleration
acce="None"
if (use amd64 || use x86); then
use cpu_flags_x86_sse2 && acce="SSE2"
use cpu_flags_x86_sse4_1 && acce="SSE4.1"
use cpu_flags_x86_fma4 && acce="AVX_128_FMA"
use cpu_flags_x86_avx && acce="AVX_256"
use cpu_flags_x86_avx2 && acce="AVX2_256"
use cpu_flags_x86_avx512f && acce="AVX_512"
elif (use arm); then
use cpu_flags_arm_neon && acce="ARM_NEON"
elif (use arm64); then
use cpu_flags_arm_neon && acce="ARM_NEON_ASIMD"
fi
else
strip-flags
fi
#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; 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[@]}"
"${lmfit_opts[@]}"
-DGMX_USE_LMFIT=EXTERNAL
-DGMX_USE_MUPARSER=EXTERNAL
-DGMX_EXTERNAL_BLAS=$(usex blas)
-DGMX_EXTERNAL_LAPACK=$(usex lapack)
-DGMX_OPENMP=$(usex openmp)
-DGMX_COOL_QUOTES=$(usex offensive)
-DGMX_USE_TNG=$(usex tng)
-DGMX_BUILD_MANUAL=$(usex build-manual)
-DGMX_HWLOC=$(usex hwloc)
-DGMX_DEFAULT_SUFFIX=off
-DGMX_SIMD="$acce"
-DGMX_VMD_PLUGIN_PATH="${EPREFIX}/usr/$(get_libdir)/vmd/plugins/*/molfile/"
-DGMX_DSSP_PROGRAM_PATH="${EPREFIX}/usr/bin/dssp"
-DBUILD_TESTING=$(usex test)
-DGMX_BUILD_UNITTESTS=$(usex test)
-DPYTHON_EXECUTABLE="${EPREFIX}/usr/bin/${EPYTHON}"
${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 gpu=( "-DGMX_GPU=OFF" )
[[ ${x} = "float" ]] && use cuda && gpu=( "-DGMX_GPU=CUDA" )
[[ ${x} = "float" ]] && use clang-cuda && gpu=( "-DGMX_GPU=CUDA" "-DGMX_CLANG_CUDA=ON" )
use opencl && gpu=( "-DGMX_GPU=OPENCL" )
local mycmakeargs=(
${mycmakeargs_pre[@]} ${p}
-DGMX_MPI=$(usex mpi)
-DGMX_THREAD_MPI=$(usex threads)
-DGMXAPI=$(usex gmxapi)
-DGMX_INSTALL_LEGACY_API=$(usex gmxapi-legacy)
"${gpu[@]}"
"$(use test && echo -DREGRESSIONTEST_PATH="${WORKDIR}/${P}_${x}/tests")"
-DGMX_BINARY_SUFFIX="${suffix}"
-DGMX_LIBS_SUFFIX="${suffix}"
-DGMX_PYTHON_PACKAGE=$(usex python)
)
BUILD_DIR="${WORKDIR}/${P}_${x}" cmake_src_configure
[[ ${CHOST} != *-darwin* ]] || \
sed -i '/SET(CMAKE_INSTALL_NAME_DIR/s/^/#/' "${WORKDIR}/${P}_${x}/gentoo_rules.cmake" || die
done
}
src_compile() {
for x in ${GMX_DIRS}; do
einfo "Compiling for ${x} precision"
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile
if use python; then
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile python_packaging/all
BUILD_DIR="${WORKDIR}/${P}" \
distutils-r1_src_compile
fi
# not 100% necessary for rel ebuilds as available from website
if use build-manual; then
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile manual
fi
done
}
src_test() {
for x in ${GMX_DIRS}; do
BUILD_DIR="${WORKDIR}/${P}_${x}"\
cmake_src_compile check
done
}
src_install() {
for x in ${GMX_DIRS}; do
BUILD_DIR="${WORKDIR}/${P}_${x}" \
cmake_src_install
if use python; then
BUILD_DIR="${WORKDIR}/${P}_${x}" \
cmake_src_install python_packaging/install
fi
if use build-manual; then
newdoc "${WORKDIR}/${P}_${x}"/docs/manual/gromacs.pdf "${PN}-manual-${PV}.pdf"
fi
if use doc; then
if [[ ${PV} != *9999* ]]; then
newdoc "${DISTDIR}/manual-${PV}.pdf" "${PN}-manual-${PV}.pdf"
fi
fi
done
if use tng; then
insinto /usr/include/tng
doins src/external/tng_io/include/tng/*h
fi
# drop unneeded stuff
rm "${ED}"/usr/bin/GMXRC* || die
for x in "${ED}"/usr/bin/gmx-completion-*.bash ; do
local n=${x##*/gmx-completion-}
n="${n%.bash}"
cat "${ED}"/usr/bin/gmx-completion.bash "$x" > "${T}/${n}" || die
newbashcomp "${T}"/"${n}" "${n}"
done
rm "${ED}"/usr/bin/gmx-completion*.bash || die
readme.gentoo_create_doc
}
pkg_postinst() {
einfo
einfo "Please read and cite gromacs related papers from list:"
einfo "https://www.gromacs.org/articles.html"
einfo
readme.gentoo_print_elog
}

View File

@@ -18,7 +18,6 @@
<flag name="gmxapi">Add support for gmxapi library</flag>
<flag name="gmxapi-legacy">Enable installing lagacy headers</flag>
<flag name="hwloc">Enable HWLoc lib support</flag>
<flag name="lmfit">Use external <pkg>sci-libs/lmfit</pkg></flag>
<flag name="nnpot">Allow to use <pkg>sci-libs/caffe2</pkg> for NN Potentials</flag>
<flag name="opencl">Enable opencl non-bonded kernels</flag>
<flag name="single-precision">Single precision version of gromacs (default)</flag>