diff --git a/pkgs/applications/science/chemistry/cp2k/default.nix b/pkgs/by-name/cp/cp2k/package.nix similarity index 53% rename from pkgs/applications/science/chemistry/cp2k/default.nix rename to pkgs/by-name/cp/cp2k/package.nix index 70d6c515d3d7..95c7f0461032 100644 --- a/pkgs/applications/science/chemistry/cp2k/default.nix +++ b/pkgs/by-name/cp/cp2k/package.nix @@ -1,55 +1,61 @@ -{ lib -, stdenv -, fetchFromGitHub -, mpiCheckPhaseHook -, python3 -, gfortran -, blas -, lapack -, fftw -, libint -, libvori -, libxc -, dftd4 -, mctc-lib -, mstore -, multicharge -, mpi -, gsl -, scalapack -, openssh -, makeWrapper -, libxsmm -, spglib -, which -, pkg-config -, plumed -, zlib -, hdf5-fortran -, sirius -, libvdwxc -, spla -, spfft -, enableElpa ? false -, elpa -, cudaPackages -, rocmPackages -, config -, gpuBackend ? ( - if config.cudaSupport - then "cuda" - else if config.rocmSupport - then "rocm" - else "none" -) -# Change to a value suitable for your target GPU. -# For AMD values see https://github.com/cp2k/cp2k/blob/master/INSTALL.md#2v-rocmhip-support-for-amd-gpu -# and for Nvidia see https://github.com/cp2k/cp2k/blob/master/INSTALL.md#2i-cuda-optional-improved-performance-on-gpu-systems -, gpuVersion ? ( if gpuBackend == "cuda" then "A100" else "Mi100" ) -, gpuArch ? ( if gpuBackend == "cuda" then "sm_80" else "gfx908" ) +{ + lib, + stdenv, + fetchFromGitHub, + mpiCheckPhaseHook, + python3, + gfortran, + blas, + lapack, + fftw, + libint, + libvori, + libxc, + dftd4, + mctc-lib, + mstore, + multicharge, + mpi, + gsl, + scalapack, + openssh, + makeWrapper, + libxsmm, + spglib, + which, + pkg-config, + plumed, + zlib, + hdf5-fortran, + sirius, + libvdwxc, + spla, + spfft, + enableElpa ? false, + elpa, + cudaPackages, + rocmPackages, + config, + gpuBackend ? ( + if config.cudaSupport then + "cuda" + else if config.rocmSupport then + "rocm" + else + "none" + ), + # Change to a value suitable for your target GPU. + # For AMD values see https://github.com/cp2k/cp2k/blob/master/INSTALL.md#2v-rocmhip-support-for-amd-gpu + # and for Nvidia see https://github.com/cp2k/cp2k/blob/master/INSTALL.md#2i-cuda-optional-improved-performance-on-gpu-systems + gpuVersion ? (if gpuBackend == "cuda" then "A100" else "Mi100"), + gpuArch ? (if gpuBackend == "cuda" then "sm_80" else "gfx908"), }: -assert builtins.elem gpuBackend [ "none" "cuda" "rocm" ]; +assert builtins.elem gpuBackend [ + "none" + "cuda" + "rocm" +]; let cp2kVersion = "psmp"; @@ -74,47 +80,53 @@ stdenv.mkDerivation rec { ./remove-compiler-options.patch ]; - nativeBuildInputs = [ python3 which openssh makeWrapper pkg-config ] - ++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc; + nativeBuildInputs = [ + python3 + which + openssh + makeWrapper + pkg-config + ] ++ lib.optional (gpuBackend == "cuda") cudaPackages.cuda_nvcc; - buildInputs = [ - gfortran - fftw - gsl - libint - libvori - libxc - dftd4 - mctc-lib - mstore - multicharge - libxsmm - mpi - spglib - scalapack - blas - lapack - plumed - zlib - hdf5-fortran - sirius - spla - spfft - libvdwxc - ] - ++ lib.optional enableElpa elpa - ++ lib.optionals (gpuBackend == "cuda") [ - cudaPackages.cuda_cudart - cudaPackages.libcublas - cudaPackages.cuda_nvrtc - ] ++ lib.optionals (gpuBackend == "rocm") [ - rocmPackages.clr - rocmPackages.rocm-core - rocmPackages.hipblas - rocmPackages.hipfft - rocmPackages.rocblas - ] - ; + buildInputs = + [ + gfortran + fftw + gsl + libint + libvori + libxc + dftd4 + mctc-lib + mstore + multicharge + libxsmm + mpi + spglib + scalapack + blas + lapack + plumed + zlib + hdf5-fortran + sirius + spla + spfft + libvdwxc + ] + ++ lib.optional enableElpa elpa + ++ lib.optionals (gpuBackend == "cuda") [ + cudaPackages.cuda_cudart + cudaPackages.libcublas + cudaPackages.cuda_nvrtc + ] + ++ lib.optionals (gpuBackend == "rocm") [ + rocmPackages.clr + rocmPackages.rocm-core + rocmPackages.hipblas + rocmPackages.hipfft + rocmPackages.rocblas + ]; propagatedBuildInputs = [ (lib.getBin mpi) ]; propagatedUserEnvPkgs = [ mpi ]; @@ -136,6 +148,8 @@ stdenv.mkDerivation rec { ''; configurePhase = '' + runHook preConfigure + cat > arch/${arch}.${cp2kVersion} << EOF CC = mpicc CPP = @@ -143,28 +157,34 @@ stdenv.mkDerivation rec { LD = mpif90 AR = ar -r ${lib.strings.optionalString (gpuBackend == "cuda") '' - OFFLOAD_CC = nvcc - OFFLOAD_FLAGS = -O3 -g -w --std=c++11 -arch ${gpuArch} - OFFLOAD_TARGET = cuda - GPUVER = ${gpuVersion} - CXX = mpicxx - CXXFLAGS = -std=c++11 -fopenmp + OFFLOAD_CC = nvcc + OFFLOAD_FLAGS = -O3 -g -w --std=c++11 -arch ${gpuArch} + OFFLOAD_TARGET = cuda + GPUVER = ${gpuVersion} + CXX = mpicxx + CXXFLAGS = -std=c++11 -fopenmp ''} ${lib.strings.optionalString (gpuBackend == "rocm") '' - GPUVER = ${gpuVersion} - OFFLOAD_CC = hipcc - OFFLOAD_FLAGS = -fopenmp -m64 -pthread -fPIC -D__GRID_HIP -O2 --offload-arch=${gpuArch} --rocm-path=${rocmPackages.rocm-core} - OFFLOAD_TARGET = hip - CXX = mpicxx - CXXFLAGS = -std=c++11 -fopenmp -D__HIP_PLATFORM_AMD__ + GPUVER = ${gpuVersion} + OFFLOAD_CC = hipcc + OFFLOAD_FLAGS = -fopenmp -m64 -pthread -fPIC -D__GRID_HIP -O2 --offload-arch=${gpuArch} --rocm-path=${rocmPackages.rocm-core} + OFFLOAD_TARGET = hip + CXX = mpicxx + CXXFLAGS = -std=c++11 -fopenmp -D__HIP_PLATFORM_AMD__ ''} DFLAGS = -D__FFTW3 -D__LIBXC -D__LIBINT -D__parallel -D__SCALAPACK \ -D__MPI_VERSION=3 -D__F2008 -D__LIBXSMM -D__SPGLIB \ -D__MAX_CONTR=4 -D__LIBVORI ${lib.optionalString enableElpa "-D__ELPA"} \ -D__PLUMED2 -D__HDF5 -D__GSL -D__SIRIUS -D__LIBVDWXC -D__SPFFT -D__SPLA \ -D__DFTD4 \ - ${lib.strings.optionalString (gpuBackend == "cuda") "-D__OFFLOAD_CUDA -D__ACC -D__DBCSR_ACC -D__NO_OFFLOAD_PW"} \ - ${lib.strings.optionalString (gpuBackend == "rocm") "-D__OFFLOAD_HIP -D__DBCSR_ACC -D__NO_OFFLOAD_PW"} + ${ + lib.strings.optionalString ( + gpuBackend == "cuda" + ) "-D__OFFLOAD_CUDA -D__ACC -D__DBCSR_ACC -D__NO_OFFLOAD_PW" + } \ + ${ + lib.strings.optionalString (gpuBackend == "rocm") "-D__OFFLOAD_HIP -D__DBCSR_ACC -D__NO_OFFLOAD_PW" + } CFLAGS = -fopenmp FCFLAGS = \$(DFLAGS) -O2 -ffree-form -ffree-line-length-none \ -ftree-vectorize -funroll-loops -msse2 \ @@ -187,15 +207,20 @@ stdenv.mkDerivation rec { -lz -ldl ${lib.optionalString (mpi.pname == "openmpi") "$(mpicxx --showme:link)"} \ -lplumed -lhdf5_fortran -lhdf5_hl -lhdf5 -lgsl -lsirius -lspla -lspfft -lvdwxc \ -ldftd4 -lmstore -lmulticharge -lmctc-lib \ - ${lib.strings.optionalString (gpuBackend == "cuda") '' - -L${cudaPackages.cuda_cudart}/lib/stubs/ \ - -lcudart -lnvrtc -lcuda -lcublas + ${ + lib.strings.optionalString (gpuBackend == "cuda") '' + -L${cudaPackages.cuda_cudart}/lib/stubs/ \ + -lcudart -lnvrtc -lcuda -lcublas '' } \ - ${lib.strings.optionalString (gpuBackend == "rocm") "-lamdhip64 -lhipfft -lhipblas -lrocblas"} + ${ + lib.strings.optionalString (gpuBackend == "rocm") "-lamdhip64 -lhipfft -lhipblas -lrocblas" + } LDFLAGS = \$(FCFLAGS) \$(LIBS) include ${plumed}/lib/plumed/src/lib/Plumed.inc EOF + + runHook postConfigure ''; nativeCheckInputs = [ @@ -213,6 +238,8 @@ stdenv.mkDerivation rec { ''; installPhase = '' + runHook preInstall + mkdir -p $out/bin $out/share/cp2k cp exe/${arch}/* $out/bin @@ -228,15 +255,19 @@ stdenv.mkDerivation rec { --set OMP_NUM_THREADS 1 cp -r data/* $out/share/cp2k + + runHook postInstall ''; - passthru = { inherit mpi; }; + passthru = { + inherit mpi; + }; - meta = with lib; { + meta = { description = "Quantum chemistry and solid state physics program"; homepage = "https://www.cp2k.org"; - license = licenses.gpl2Plus; - maintainers = [ maintainers.sheepforce ]; + license = lib.licenses.gpl2Plus; + maintainers = [ lib.maintainers.sheepforce ]; platforms = [ "x86_64-linux" ]; }; } diff --git a/pkgs/applications/science/chemistry/cp2k/remove-compiler-options.patch b/pkgs/by-name/cp/cp2k/remove-compiler-options.patch similarity index 100% rename from pkgs/applications/science/chemistry/cp2k/remove-compiler-options.patch rename to pkgs/by-name/cp/cp2k/remove-compiler-options.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 04f23329415d..ea26f96ba51d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -36024,8 +36024,6 @@ with pkgs; avogadro2 = libsForQt5.callPackage ../applications/science/chemistry/avogadro2 { }; - cp2k = callPackage ../applications/science/chemistry/cp2k { }; - d-seams = callPackage ../applications/science/chemistry/d-seams { }; ergoscf = callPackage ../applications/science/chemistry/ergoscf { };