about summary refs log tree commit diff
path: root/pkgs/applications/science/robotics/mujoco/default.nix
diff options
context:
space:
mode:
authorViktor Sonesten <v@tmplt.dev>2023-11-07 21:18:36 +0100
committerViktor Sonesten <v@tmplt.dev>2023-11-12 11:45:20 +0100
commit290bc1fbe0855cbc82efa17bf9382f428512910f (patch)
treeb90899004b427cb85707264d00314a83da5c4bbb /pkgs/applications/science/robotics/mujoco/default.nix
parente4346914e19f1ffc1b26a8eac09b245f92a513e0 (diff)
downloadnixlib-290bc1fbe0855cbc82efa17bf9382f428512910f.tar
nixlib-290bc1fbe0855cbc82efa17bf9382f428512910f.tar.gz
nixlib-290bc1fbe0855cbc82efa17bf9382f428512910f.tar.bz2
nixlib-290bc1fbe0855cbc82efa17bf9382f428512910f.tar.lz
nixlib-290bc1fbe0855cbc82efa17bf9382f428512910f.tar.xz
nixlib-290bc1fbe0855cbc82efa17bf9382f428512910f.tar.zst
nixlib-290bc1fbe0855cbc82efa17bf9382f428512910f.zip
mujoco: 2.3.7 -> 3.0.0, add Python bindings
https://mujoco.readthedocs.io/en/stable/changelog.html#version-3-0-0-october-18-2023

Fixes #262698
Fixes #262629
Fixes #262593

Co-authored-by: Silvio Traversaro <silvio@traversaro.it>
Diffstat (limited to 'pkgs/applications/science/robotics/mujoco/default.nix')
-rw-r--r--pkgs/applications/science/robotics/mujoco/default.nix242
1 files changed, 152 insertions, 90 deletions
diff --git a/pkgs/applications/science/robotics/mujoco/default.nix b/pkgs/applications/science/robotics/mujoco/default.nix
index c4f84e158399..94524672789d 100644
--- a/pkgs/applications/science/robotics/mujoco/default.nix
+++ b/pkgs/applications/science/robotics/mujoco/default.nix
@@ -1,122 +1,184 @@
-{ cmake
+{ cereal_1_3_2
+, cmake
 , fetchFromGitHub
 , fetchFromGitLab
-, git
+, glfw
+, glm
 , lib
-, libGL
+, spdlog
 , stdenv
-, xorg
 }:
 
 let
-  # See https://github.com/deepmind/mujoco/blob/c9246e1f5006379d599e0bcddf159a8616d31441/cmake/MujocoDependencies.cmake#L17-L55
-  abseil-cpp = fetchFromGitHub {
-    owner = "abseil";
-    repo = "abseil-cpp";
-    rev = "c2435f8342c2d0ed8101cb43adfd605fdc52dca2";
-    hash = "sha256-PLoI7ix+reUqkZ947kWzls8lujYqWXk9A9a55UcfahI=";
-  };
-  benchmark = fetchFromGitHub {
-    owner = "google";
-    repo = "benchmark";
-    rev = "2dd015dfef425c866d9a43f2c67d8b52d709acb6";
-    hash = "sha256-pUW9YVaujs/y00/SiPqDgK4wvVsaM7QUp/65k0t7Yr0=";
-  };
-  ccd = fetchFromGitHub {
-    owner = "danfis";
-    repo = "libccd";
-    rev = "7931e764a19ef6b21b443376c699bbc9c6d4fba8";
-    hash = "sha256-TIZkmqQXa0+bSWpqffIgaBela0/INNsX9LPM026x1Wk=";
-  };
-  eigen3 = fetchFromGitLab {
-    owner = "libeigen";
-    repo = "eigen";
-    rev = "211c5dfc6741a5570ad007983c113ef4d144f9f3";
-    hash = "sha256-oT/h8QkL0vwaflh46Zsnu9Db1b65AP6p//nAga8M5jI=";
-  };
-  googletest = fetchFromGitHub {
-    owner = "google";
-    repo = "googletest";
-    rev = "b796f7d44681514f58a683a3a71ff17c94edb0c1";
-    hash = "sha256-LVLEn+e7c8013pwiLzJiiIObyrlbBHYaioO/SWbItPQ=";
-  };
-  lodepng = fetchFromGitHub {
-    owner = "lvandeve";
-    repo = "lodepng";
-    rev = "b4ed2cd7ecf61d29076169b49199371456d4f90b";
-    hash = "sha256-5cCkdj/izP4e99BKfs/Mnwu9aatYXjlyxzzYiMD/y1M=";
-  };
-  qhull = fetchFromGitHub {
-    owner = "qhull";
-    repo = "qhull";
-    rev = "0c8fc90d2037588024d9964515c1e684f6007ecc";
-    hash = "sha256-Ptzxad3ewmKJbbcmrBT+os4b4SR976zlCG9F0nq0x94=";
-  };
-  tinyobjloader = fetchFromGitHub {
-    owner = "tinyobjloader";
-    repo = "tinyobjloader";
-    rev = "1421a10d6ed9742f5b2c1766d22faa6cfbc56248";
-    hash = "sha256-9z2Ne/WPCiXkQpT8Cun/pSGUwgClYH+kQ6Dx1JvW6w0=";
-  };
-  tinyxml2 = fetchFromGitHub {
-    owner = "leethomason";
-    repo = "tinyxml2";
-    rev = "9a89766acc42ddfa9e7133c7d81a5bda108a0ade";
-    hash = "sha256-YGAe4+Ttv/xeou+9FoJjmQCKgzupTYdDhd+gzvtz/88=";
-  };
+  pin = {
+
+    # See https://github.com/google-deepmind/mujoco/blob/3.0.0/cmake/MujocoDependencies.cmake#L17-L64
+    abseil-cpp = fetchFromGitHub {
+      owner = "abseil";
+      repo = "abseil-cpp";
+      rev = "fb3621f4f897824c0dbe0615fa94543df6192f30";
+      hash = "sha256-uNGrTNg5G5xFGtc+BSWE389x0tQ/KxJQLHfebNWas/k=";
+    };
+    benchmark = fetchFromGitHub {
+      owner = "google";
+      repo = "benchmark";
+      rev = "344117638c8ff7e239044fd0fa7085839fc03021";
+      hash = "sha256-gztnxui9Fe/FTieMjdvfJjWHjkImtlsHn6fM1FruyME=";
+    };
+    ccd = fetchFromGitHub {
+      owner = "danfis";
+      repo = "libccd";
+      rev = "7931e764a19ef6b21b443376c699bbc9c6d4fba8";
+      hash = "sha256-TIZkmqQXa0+bSWpqffIgaBela0/INNsX9LPM026x1Wk=";
+    };
+    eigen3 = fetchFromGitLab {
+      owner = "libeigen";
+      repo = "eigen";
+      rev = "e8515f78ac098329ab9f8cab21c87caede090a3f";
+      hash = "sha256-HXKtFJsKGpug+wNPjYynTuyaG0igo3oG4rFQktveh1g=";
+    };
+    googletest = fetchFromGitHub {
+      owner = "google";
+      repo = "googletest";
+      rev = "f8d7d77c06936315286eb55f8de22cd23c188571";
+      hash = "sha256-t0RchAHTJbuI5YW4uyBPykTvcjy90JW9AOPNjIhwh6U=";
+    };
+    lodepng = fetchFromGitHub {
+      owner = "lvandeve";
+      repo = "lodepng";
+      rev = "b4ed2cd7ecf61d29076169b49199371456d4f90b";
+      hash = "sha256-5cCkdj/izP4e99BKfs/Mnwu9aatYXjlyxzzYiMD/y1M=";
+    };
+    qhull = fetchFromGitHub {
+      owner = "qhull";
+      repo = "qhull";
+      rev = "0c8fc90d2037588024d9964515c1e684f6007ecc";
+      hash = "sha256-Ptzxad3ewmKJbbcmrBT+os4b4SR976zlCG9F0nq0x94=";
+    };
+    tinyobjloader = fetchFromGitHub {
+      owner = "tinyobjloader";
+      repo = "tinyobjloader";
+      rev = "1421a10d6ed9742f5b2c1766d22faa6cfbc56248";
+      hash = "sha256-9z2Ne/WPCiXkQpT8Cun/pSGUwgClYH+kQ6Dx1JvW6w0=";
+    };
+    tinyxml2 = fetchFromGitHub {
+      owner = "leethomason";
+      repo = "tinyxml2";
+      rev = "9a89766acc42ddfa9e7133c7d81a5bda108a0ade";
+      hash = "sha256-YGAe4+Ttv/xeou+9FoJjmQCKgzupTYdDhd+gzvtz/88=";
+    };
+    marchingcubecpp = fetchFromGitHub {
+      owner = "aparis69";
+      repo = "MarchingCubeCpp";
+      rev = "5b79e5d6bded086a0abe276a4b5a69fc17ae9bf1";
+      hash = "sha256-L0DH1GJZ/3vatQAU/KZj/2xTKE6Fwcw9eQYzLdqX2N4=";
+    };
+
+    tmd = stdenv.mkDerivation rec {
+      name = "TriangleMeshDistance";
+
+      src = fetchFromGitHub {
+        owner = "InteractiveComputerGraphics";
+        repo = name;
+        rev = "e55a15c20551f36242fd6368df099a99de71d43a";
+        hash = "sha256-vj6TMMT8mp7ciLa5nzVAhMWPcAHXq+ZwHlWsRA3uCmg=";
+      };
+
+      installPhase = ''
+        mkdir -p $out/include/tmd
+        cp ${name}/include/tmd/${name}.h $out/include/tmd/
+      '';
+    };
+
+    sdflib = stdenv.mkDerivation rec {
+      name = "SdfLib";
+
+      src = fetchFromGitHub {
+        owner = "UPC-ViRVIG";
+        repo = name;
+        rev = "7c49cfba9bbec763b5d0f7b90b26555f3dde8088";
+        hash = "sha256-5bnQ3rHH9Pw1jRVpZpamFnhIJHWnGm6krgZgIBqNtVg=";
+      };
+
+      patches = [ ./sdflib-system-deps.patch ];
+
+      cmakeFlags = [
+        "-DSDFLIB_USE_ASSIMP=OFF"
+        "-DSDFLIB_USE_OPENMP=OFF"
+        "-DSDFLIB_USE_ENOKI=OFF"
+        "-DSDFLIB_USE_SYSTEM_GLM=ON"
+        "-DSDFLIB_USE_SYSTEM_SPDLOG=ON"
+        "-DSDFLIB_USE_SYSTEM_CEREAL=ON"
+        "-DSDFLIB_USE_SYSTEM_TRIANGLEMESHDISTANCE=ON"
+      ];
+
+      nativeBuildInputs = [ cmake ];
+      buildInputs = [
+        pin.tmd
+
+        # Mainline. The otherwise pinned glm realease from 2018 does
+        # not build due to test failures and missing files.
+        glm
+
+        spdlog
+        cereal_1_3_2
+      ];
+    };
 
-  # See https://github.com/deepmind/mujoco/blob/c9246e1f5006379d599e0bcddf159a8616d31441/simulate/cmake/SimulateDependencies.cmake#L32-L35
-  glfw3 = fetchFromGitHub {
-    owner = "glfw";
-    repo = "glfw";
-    rev = "7482de6071d21db77a7236155da44c172a7f6c9e";
-    hash = "sha256-4+H0IXjAwbL5mAWfsIVhW0BSJhcWjkQx4j2TrzZ3aIo=";
   };
-in
-stdenv.mkDerivation rec {
+
+in stdenv.mkDerivation rec {
   pname = "mujoco";
-  version = "2.3.7";
+  version = "3.0.0";
 
   src = fetchFromGitHub {
-    owner = "deepmind";
+    owner = "google-deepmind";
     repo = pname;
     rev = version;
-    hash = "sha256-LgpA+iPGqciHuWBSD6/7yvZ7p+vo48ZYKjjrDZSnAwE=";
+    hash = "sha256-zHK1uYtWkKFWBMqkw/NwuBlLoXyiZJeNC/sSXwSfgW4=";
   };
 
-  patches = [ ./dependencies.patch ];
+  patches = [ ./mujoco-system-deps-dont-fetch.patch ];
 
-  nativeBuildInputs = [ cmake git ];
+  nativeBuildInputs = [ cmake ];
 
   buildInputs = [
-    libGL
-    xorg.libX11
-    xorg.libXcursor
-    xorg.libXext
-    xorg.libXi
-    xorg.libXinerama
-    xorg.libXrandr
+    pin.sdflib
+    glm
+
+    # non-numerical
+    spdlog
+    cereal_1_3_2
+    glfw
+  ];
+
+  cmakeFlags = [
+    "-DMUJOCO_USE_SYSTEM_sdflib=ON"
+    "-DMUJOCO_SIMULATE_USE_SYSTEM_GLFW=ON"
+    "-DMUJOCO_SAMPLES_USE_SYSTEM_GLFW=ON"
   ];
 
   # Move things into place so that cmake doesn't try downloading dependencies.
   preConfigure = ''
     mkdir -p build/_deps
-    ln -s ${abseil-cpp} build/_deps/abseil-cpp-src
-    ln -s ${benchmark} build/_deps/benchmark-src
-    ln -s ${ccd} build/_deps/ccd-src
-    ln -s ${eigen3} build/_deps/eigen3-src
-    ln -s ${glfw3} build/_deps/glfw3-src
-    ln -s ${googletest} build/_deps/googletest-src
-    ln -s ${lodepng} build/_deps/lodepng-src
-    ln -s ${qhull} build/_deps/qhull-src
-    ln -s ${tinyobjloader} build/_deps/tinyobjloader-src
-    ln -s ${tinyxml2} build/_deps/tinyxml2-src
+    ln -s ${pin.abseil-cpp} build/_deps/abseil-cpp-src
+    ln -s ${pin.benchmark} build/_deps/benchmark-src
+    ln -s ${pin.ccd} build/_deps/ccd-src
+    ln -s ${pin.eigen3} build/_deps/eigen3-src
+    ln -s ${pin.googletest} build/_deps/googletest-src
+    ln -s ${pin.lodepng} build/_deps/lodepng-src
+    ln -s ${pin.qhull} build/_deps/qhull-src
+    ln -s ${pin.tinyobjloader} build/_deps/tinyobjloader-src
+    ln -s ${pin.tinyxml2} build/_deps/tinyxml2-src
+    ln -s ${pin.marchingcubecpp} build/_deps/marchingcubecpp-src
   '';
 
+  passthru.pin = { inherit (pin) lodepng eigen3 abseil-cpp; };
+
   meta = with lib; {
     description = "Multi-Joint dynamics with Contact. A general purpose physics simulator.";
     homepage = "https://mujoco.org/";
     license = licenses.asl20;
-    maintainers = with maintainers; [ samuela ];
+    maintainers = with maintainers; [ samuela tmplt ];
   };
 }