frigate: fix event preview (#372427)
[NixPkgs.git] / pkgs / by-name / la / lammps / package.nix
blobb6e7b89b913440fda42998314bafdf85243f561f
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   libpng,
6   gzip,
7   fftw,
8   blas,
9   lapack,
10   python3,
11   cmake,
12   autoAddDriverRunpath,
13   pkg-config,
14   # Available list of packages can be found near here:
15   #
16   # - https://github.com/lammps/lammps/blob/develop/cmake/CMakeLists.txt#L222
17   # - https://docs.lammps.org/Build_extras.html
18   packages ? {
19     ASPHERE = true;
20     BODY = true;
21     CLASS2 = true;
22     COLLOID = true;
23     COMPRESS = true;
24     CORESHELL = true;
25     DIPOLE = true;
26     GRANULAR = true;
27     KSPACE = true;
28     MANYBODY = true;
29     MC = true;
30     MISC = true;
31     MOLECULE = true;
32     OPT = true;
33     PERI = true;
34     QEQ = true;
35     REPLICA = true;
36     RIGID = true;
37     SHOCK = true;
38     ML-SNAP = true;
39     SRD = true;
40     REAXFF = true;
41     PYTHON = true;
42   },
43   # Extra cmakeFlags to add as "-D${attr}=${value}"
44   extraCmakeFlags ? { },
45   # Extra `buildInputs` - meant for packages that require more inputs
46   extraBuildInputs ? [ ],
49 stdenv.mkDerivation (finalAttrs: {
50   # LAMMPS has weird versioning convention. Updates should go smoothly with:
51   # nix-update --commit lammps --version-regex 'stable_(.*)'
52   version = "29Aug2024_update1";
53   pname = "lammps";
55   src = fetchFromGitHub {
56     owner = "lammps";
57     repo = "lammps";
58     rev = "stable_${finalAttrs.version}";
59     hash = "sha256-B2oMs9bVYO+G3yL1DGJVK/INIfANMDREV7AtC4kH3H8=";
60   };
61   preConfigure = ''
62     cd cmake
63   '';
64   nativeBuildInputs = [
65     cmake
66     pkg-config
67     # Although not always needed, it is needed if cmakeFlags include
68     # GPU_API=cuda, and it doesn't users that don't enable the GPU package.
69     autoAddDriverRunpath
70   ];
72   passthru = {
73     inherit packages;
74     inherit extraCmakeFlags;
75     inherit extraBuildInputs;
76   };
77   cmakeFlags =
78     [
79       (lib.cmakeBool "BUILD_SHARED_LIBS" true)
80     ]
81     ++ (lib.mapAttrsToList (n: v: lib.cmakeBool "PKG_${n}" v) packages)
82     ++ (lib.mapAttrsToList (n: v: "-D${n}=${v}") extraCmakeFlags);
84   buildInputs =
85     [
86       fftw
87       libpng
88       blas
89       lapack
90       gzip
91     ]
92     ++ lib.optionals packages.PYTHON [ python3 ]
93     ++ extraBuildInputs;
95   postInstall = ''
96     # For backwards compatibility
97     ln -s $out/bin/lmp $out/bin/lmp_serial
98     # Install vim and neovim plugin
99     install -Dm644 ../../tools/vim/lammps.vim $out/share/vim-plugins/lammps/syntax/lammps.vim
100     install -Dm644 ../../tools/vim/filetype.vim $out/share/vim-plugins/lammps/ftdetect/lammps.vim
101     mkdir -p $out/share/nvim
102     ln -s $out/share/vim-plugins/lammps $out/share/nvim/site
103   '';
105   meta = {
106     description = "Classical Molecular Dynamics simulation code";
107     longDescription = ''
108       LAMMPS is a classical molecular dynamics simulation code designed to
109       run efficiently on parallel computers. It was developed at Sandia
110       National Laboratories, a US Department of Energy facility, with
111       funding from the DOE. It is an open-source code, distributed freely
112       under the terms of the GNU Public License (GPL).
113     '';
114     homepage = "https://www.lammps.org";
115     license = lib.licenses.gpl2Only;
116     platforms = lib.platforms.linux;
117     # compiling lammps with 64 bit support blas and lapack might cause runtime
118     # segfaults. In anycase both blas and lapack should have the same #bits
119     # support.
120     broken = (blas.isILP64 && lapack.isILP64);
121     maintainers = with lib.maintainers; [
122       costrouc
123       doronbehar
124     ];
125     mainProgram = "lmp";
126   };