diff options
Diffstat (limited to 'pkgs/applications/science/robotics/mujoco/default.nix')
-rw-r--r-- | pkgs/applications/science/robotics/mujoco/default.nix | 242 |
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 ]; }; } |