Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / applications / science / robotics / mujoco / default.nix
blobc4f84e1583999ccdc68f62d5ca0c276dbf3c9ec4
1 { cmake
2 , fetchFromGitHub
3 , fetchFromGitLab
4 , git
5 , lib
6 , libGL
7 , stdenv
8 , xorg
9 }:
11 let
12   # See https://github.com/deepmind/mujoco/blob/c9246e1f5006379d599e0bcddf159a8616d31441/cmake/MujocoDependencies.cmake#L17-L55
13   abseil-cpp = fetchFromGitHub {
14     owner = "abseil";
15     repo = "abseil-cpp";
16     rev = "c2435f8342c2d0ed8101cb43adfd605fdc52dca2";
17     hash = "sha256-PLoI7ix+reUqkZ947kWzls8lujYqWXk9A9a55UcfahI=";
18   };
19   benchmark = fetchFromGitHub {
20     owner = "google";
21     repo = "benchmark";
22     rev = "2dd015dfef425c866d9a43f2c67d8b52d709acb6";
23     hash = "sha256-pUW9YVaujs/y00/SiPqDgK4wvVsaM7QUp/65k0t7Yr0=";
24   };
25   ccd = fetchFromGitHub {
26     owner = "danfis";
27     repo = "libccd";
28     rev = "7931e764a19ef6b21b443376c699bbc9c6d4fba8";
29     hash = "sha256-TIZkmqQXa0+bSWpqffIgaBela0/INNsX9LPM026x1Wk=";
30   };
31   eigen3 = fetchFromGitLab {
32     owner = "libeigen";
33     repo = "eigen";
34     rev = "211c5dfc6741a5570ad007983c113ef4d144f9f3";
35     hash = "sha256-oT/h8QkL0vwaflh46Zsnu9Db1b65AP6p//nAga8M5jI=";
36   };
37   googletest = fetchFromGitHub {
38     owner = "google";
39     repo = "googletest";
40     rev = "b796f7d44681514f58a683a3a71ff17c94edb0c1";
41     hash = "sha256-LVLEn+e7c8013pwiLzJiiIObyrlbBHYaioO/SWbItPQ=";
42   };
43   lodepng = fetchFromGitHub {
44     owner = "lvandeve";
45     repo = "lodepng";
46     rev = "b4ed2cd7ecf61d29076169b49199371456d4f90b";
47     hash = "sha256-5cCkdj/izP4e99BKfs/Mnwu9aatYXjlyxzzYiMD/y1M=";
48   };
49   qhull = fetchFromGitHub {
50     owner = "qhull";
51     repo = "qhull";
52     rev = "0c8fc90d2037588024d9964515c1e684f6007ecc";
53     hash = "sha256-Ptzxad3ewmKJbbcmrBT+os4b4SR976zlCG9F0nq0x94=";
54   };
55   tinyobjloader = fetchFromGitHub {
56     owner = "tinyobjloader";
57     repo = "tinyobjloader";
58     rev = "1421a10d6ed9742f5b2c1766d22faa6cfbc56248";
59     hash = "sha256-9z2Ne/WPCiXkQpT8Cun/pSGUwgClYH+kQ6Dx1JvW6w0=";
60   };
61   tinyxml2 = fetchFromGitHub {
62     owner = "leethomason";
63     repo = "tinyxml2";
64     rev = "9a89766acc42ddfa9e7133c7d81a5bda108a0ade";
65     hash = "sha256-YGAe4+Ttv/xeou+9FoJjmQCKgzupTYdDhd+gzvtz/88=";
66   };
68   # See https://github.com/deepmind/mujoco/blob/c9246e1f5006379d599e0bcddf159a8616d31441/simulate/cmake/SimulateDependencies.cmake#L32-L35
69   glfw3 = fetchFromGitHub {
70     owner = "glfw";
71     repo = "glfw";
72     rev = "7482de6071d21db77a7236155da44c172a7f6c9e";
73     hash = "sha256-4+H0IXjAwbL5mAWfsIVhW0BSJhcWjkQx4j2TrzZ3aIo=";
74   };
76 stdenv.mkDerivation rec {
77   pname = "mujoco";
78   version = "2.3.7";
80   src = fetchFromGitHub {
81     owner = "deepmind";
82     repo = pname;
83     rev = version;
84     hash = "sha256-LgpA+iPGqciHuWBSD6/7yvZ7p+vo48ZYKjjrDZSnAwE=";
85   };
87   patches = [ ./dependencies.patch ];
89   nativeBuildInputs = [ cmake git ];
91   buildInputs = [
92     libGL
93     xorg.libX11
94     xorg.libXcursor
95     xorg.libXext
96     xorg.libXi
97     xorg.libXinerama
98     xorg.libXrandr
99   ];
101   # Move things into place so that cmake doesn't try downloading dependencies.
102   preConfigure = ''
103     mkdir -p build/_deps
104     ln -s ${abseil-cpp} build/_deps/abseil-cpp-src
105     ln -s ${benchmark} build/_deps/benchmark-src
106     ln -s ${ccd} build/_deps/ccd-src
107     ln -s ${eigen3} build/_deps/eigen3-src
108     ln -s ${glfw3} build/_deps/glfw3-src
109     ln -s ${googletest} build/_deps/googletest-src
110     ln -s ${lodepng} build/_deps/lodepng-src
111     ln -s ${qhull} build/_deps/qhull-src
112     ln -s ${tinyobjloader} build/_deps/tinyobjloader-src
113     ln -s ${tinyxml2} build/_deps/tinyxml2-src
114   '';
116   meta = with lib; {
117     description = "Multi-Joint dynamics with Contact. A general purpose physics simulator.";
118     homepage = "https://mujoco.org/";
119     license = licenses.asl20;
120     maintainers = with maintainers; [ samuela ];
121   };