openmolcas: 24.10 -> 25.02 (#399186)

This commit is contained in:
Markus Kowalewski 2025-04-17 13:47:03 +02:00 committed by GitHub
commit d5b441b83f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 131 additions and 62 deletions

View file

@ -0,0 +1,22 @@
diff --git a/src/gctime.c b/src/gctime.c
index 34fcb6f..832459c 100644
--- a/src/gctime.c
+++ b/src/gctime.c
@@ -1,14 +1,15 @@
+#include <string.h>
typedef long f77_int; /* Fortran integer type */
typedef char * f77_char; /* Fortran character argument */
#define CH_F2C(X) ((char *) (X)) /* How to get char ptr from F77 argument */
-gctime (fstr, lstr) f77_char *fstr; int lstr; {
+int gctime (fstr, lstr) f77_char *fstr; int lstr; {
long time(), t;
char *ctime();
t = time ( (long *) 0);
strcpy(CH_F2C(fstr),ctime(&t));
return (0);
}
-gctime_(fstr, lstr) f77_char *fstr; int lstr; {
+int gctime_(fstr, lstr) f77_char *fstr; int lstr; {
long time(), t;
char *ctime();
t = time ( (long *) 0);

View file

@ -1,12 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 276ae4e2..db13e6e3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1507,7 +1507,6 @@ if (LINALG STREQUAL "OpenBLAS")
NAMES openblas
PATHS ${OPENBLASROOT}
PATH_SUFFIXES lib
- NO_DEFAULT_PATH
)
if (NOT LIBOPENBLAS)

View file

@ -7,6 +7,7 @@
gfortran,
perl,
blas-ilp64,
lapack-ilp64,
hdf5-cpp,
python3,
texliveMinimal,
@ -16,7 +17,7 @@
gsl,
boost,
autoPatchelfHook,
enableQcmaquis ? false,
enableQcmaquis ? true,
# Note that the CASPT2 module is broken with MPI
# See https://gitlab.com/Molcas/OpenMolcas/-/issues/169
enableMpi ? false,
@ -25,11 +26,7 @@
}:
assert blas-ilp64.isILP64;
assert lib.elem blas-ilp64.passthru.implementation [
"openblas"
"mkl"
];
assert enableQcmaquis -> lib.elem blas-ilp64.passthru.implementation "mkl";
assert lapack-ilp64.isILP64;
let
python = python3.withPackages (
@ -46,30 +43,43 @@ let
rev = "release-3.1.4"; # Must match tag in cmake/custom/qcmaquis.cmake
hash = "sha256-vhC5k+91IPFxdCi5oYt1NtF9W08RxonJjPpA0ls4I+o=";
};
nevtp2Src = fetchFromGitHub {
owner = "qcscine";
repo = "nevpt2";
rev = "e1484fd"; # Must match tag in cmake/custom/nevpt2.cmake
hash = "sha256-Vl+FhwhJBbD/7U2CwsYE9BClSQYLJ8DKXV9EXxQUmz0=";
# NEVPT2 sources must be patched to be valid C code in gctime.c
nevpt2Src = stdenv.mkDerivation {
pname = "nevpt2-src";
version = "unstable";
phases = [
"unpackPhase"
"patchPhase"
"installPhase"
];
src = fetchFromGitHub {
owner = "qcscine";
repo = "nevpt2";
rev = "e1484fd"; # Must match tag in cmake/custom/nevpt2.cmake
hash = "sha256-Vl+FhwhJBbD/7U2CwsYE9BClSQYLJ8DKXV9EXxQUmz0=";
};
patches = [ ./nevpt2.patch ];
installPhase = ''
mkdir $out
cp -r * $out/.
'';
};
in
stdenv.mkDerivation rec {
pname = "openmolcas";
version = "24.10";
version = "25.02";
src = fetchFromGitLab {
owner = "Molcas";
repo = "OpenMolcas";
rev = "v${version}";
hash = "sha256-LXxr/xqBHG7a0rOBrb8IMZ4IjZak3NsBw40Qf+z1fic=";
hash = "sha256-Ty7C7zj1lQixuUzeKLcwQCmcPexZXtIGDzp1wUMKDi0=";
};
patches = [
# Required to handle openblas multiple outputs
./openblasPath.patch
# Required for a local QCMaquis build
# Required for a local QCMaquis build. Also sanitises QCMaquis BLAS/LAPACK handling
./qcmaquis.patch
];
@ -83,7 +93,7 @@ stdenv.mkDerivation rec {
--subst-var-by "qcmaquis_src_url" "file://${qcmaquisSrc}"
substituteInPlace cmake/custom/nevpt2.cmake \
--subst-var-by "nevpt2_src_url" "file://${nevtp2Src}"
--subst-var-by "nevpt2_src_url" "file://${nevpt2Src}"
'';
nativeBuildInputs = [
@ -97,13 +107,14 @@ stdenv.mkDerivation rec {
buildInputs =
[
blas-ilp64.passthru.provider
hdf5-cpp
python
armadillo
libxc
gsl.dev
boost
blas-ilp64
lapack-ilp64
]
++ lib.optionals enableMpi [
mpi
@ -112,38 +123,31 @@ stdenv.mkDerivation rec {
passthru = lib.optionalAttrs enableMpi { inherit mpi; };
cmakeFlags =
[
"-DOPENMP=ON"
"-DTOOLS=ON"
"-DHDF5=ON"
"-DFDE=ON"
"-DEXTERNAL_LIBXC=${lib.getDev libxc}"
(lib.strings.cmakeBool "DMRG" enableQcmaquis)
(lib.strings.cmakeBool "NEVPT2" enableQcmaquis)
"-DCMAKE_SKIP_BUILD_RPATH=ON"
(lib.strings.cmakeBool "BUILD_STATIC_LIBS" stdenv.hostPlatform.isStatic)
(lib.strings.cmakeBool "BUILD_SHARED_LIBS" (!stdenv.hostPlatform.isStatic))
]
++ lib.optionals (blas-ilp64.passthru.implementation == "openblas") [
"-DOPENBLASROOT=${blas-ilp64.passthru.provider.dev}"
"-DLINALG=OpenBLAS"
]
++ lib.optionals (blas-ilp64.passthru.implementation == "mkl") [
"-DMKLROOT=${blas-ilp64.passthru.provider}"
"-DLINALG=MKL"
]
++ lib.optionals enableMpi [
"-DGA=ON"
"-DMPI=ON"
];
preConfigure = lib.optionalString enableMpi ''
export GAROOT=${globalarrays};
'';
preConfigure =
''
cmakeFlagsArray+=(
"-DOPENMP=ON"
"-DTOOLS=ON"
"-DHDF5=ON"
"-DFDE=ON"
"-DEXTERNAL_LIBXC=${lib.getDev libxc}"
${lib.strings.cmakeBool "DMRG" enableQcmaquis}
${lib.strings.cmakeBool "NEVPT2" enableQcmaquis}
"-DCMAKE_SKIP_BUILD_RPATH=ON"
${lib.strings.cmakeBool "BUILD_STATIC_LIBS" stdenv.hostPlatform.isStatic}
${lib.strings.cmakeBool "BUILD_SHARED_LIBS" (!stdenv.hostPlatform.isStatic)}
"-DLINALG=Manual"
"-DLINALG_LIBRARIES=-lblas -llapack"
${lib.strings.cmakeBool "DGA" enableMpi}
${lib.strings.cmakeBool "MPI" enableMpi}
)
''
+ lib.optionalString enableMpi ''
export GAROOT=${globalarrays};
'';
# The Makefile will install pymolcas during the build grrr.
postConfigure = ''
# The Makefile will install pymolcas during the build grrr.
mkdir -p $out/bin
export PATH=$PATH:$out/bin
'';
@ -158,8 +162,8 @@ stdenv.mkDerivation rec {
# removed by autopatchelf
noAuditTmpdir = true;
# Wrong store path in shebang (bare Python, no Python pkgs), force manual re-patching
postFixup = ''
# Wrong store path in shebang (bare Python, no Python pkgs), force manual re-patching
for exe in $(find $out/bin/ -type f -name "*.py"); do
sed -i "1s:.*:#!${python}/bin/python:" "$exe"
done

View file

@ -45,3 +45,58 @@ index 5fd1ef207..8d2957c6e 100644
SOURCE_SUBDIR dmrg
CMAKE_ARGS ${EP_CMAKE_ARGS}
CMAKE_CACHE_ARGS ${EP_CMAKE_CACHE_ARGS}
diff --git a/cmake/custom/qcmaquis.cmake b/cmake/custom/qcmaquis.cmake
index 5fd1ef207..4291ec3d7 100644
--- a/cmake/custom/qcmaquis.cmake
+++ b/cmake/custom/qcmaquis.cmake
@@ -94,47 +94,9 @@ if (NOT MAQUIS_DMRG_FOUND) # Does the opposite work?
)
endif (BOOST_ROOT)
- if (LINALG STREQUAL "Manual")
- target_files (LINALG_LIBRARIES_FILES ${LINALG_LIBRARIES})
- list (APPEND LINALG_LIBRARIES_FILES ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
- string (REPLACE ";" '\' LINALG_LIBRARIES_FILES "${LINALG_LIBRARIES_FILES}")
- list (APPEND QCMaquisCMakeArgs
- "-DBLAS_LAPACK_SELECTOR=manual"
- "-DMAQUISLapack_LIBRARIES=${LINALG_LIBRARIES_FILES}"
- )
- elseif (LINALG STREQUAL "MKL")
- list (APPEND QCMaquisCMakeArgs
- "-DBLAS_LAPACK_SELECTOR=mkl_sequential"
- )
- elseif (LINALG STREQUAL "OpenBLAS")
- list (APPEND QCMaquisCMakeArgs
- "-DBLAS_LAPACK_SELECTOR=openblas"
- "-DOPENBLASROOT=${OPENBLASROOT}"
- )
- elseif (LINALG STREQUAL "Accelerate")
- list (APPEND QCMaquisCMakeArgs
- "-DBLAS_LAPACK_SELECTOR:STRING=veclib"
- )
- elseif (LINALG STREQUAL "Internal")
-
- # To link QCMaquis with Fortran static libraries, we
- # need to add -lgfortran for gfortran
- # It seems that ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}
- # is not suited for this because it contains also other unnecessary libraries
-
- # for some reason, the list does not work if the generator expression -lgfortran is not first
- # but for correct linking it needs to be last AND with a prepended "-l"
- if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
- set (Fortran_RUNTIME_LIBRARY "gfortran")
- endif ()
-
- list (APPEND QCMaquisCMakeArgs
- "-DBLAS_LAPACK_SELECTOR=manual"
- "-DMAQUISLapack_LIBRARIES=$<$<BOOL:Fortran_RUNTIME_LIBRARY>:${Fortran_RUNTIME_LIBRARY}\ >$<TARGET_FILE:blas>\ $<TARGET_FILE:lapack>\ $<TARGET_FILE:blas>\ -l$<$<BOOL:Fortran_RUNTIME_LIBRARY>:${Fortran_RUNTIME_LIBRARY}>"
- )
- else ()
- message (FATAL_ERROR "LINALG=${LINALG} is not supported by QCMaquis")
- endif ()
+ list (APPEND QCMaquisCMakeArgs
+ "-DBLAS_LAPACK_SELECTOR=auto"
+ )
# Enabling source changes to keep ExternalProject happy
set (CMAKE_DISABLE_SOURCE_CHANGES OFF