timbertson / opam2nix

Generate nix expressions from opam packages
MIT License
93 stars 28 forks source link

failure building torch #64

Open joprice opened 2 years ago

joprice commented 2 years ago

I'm trying to build torch with opam2nix, which uses libtorch. The latter's opam file uses the extra-source directive to pull in libtorch:

opam-version: "2.0"
  homepage: "https://github.com/LaurentMazare/ocaml-torch"
  maintainer: "lmazare@gmail.com"
  bug-reports: "https://github.com/LaurentMazare/ocaml-torch/issues"
  authors: [
    "Laurent Mazare"
  ]
  install: [
    [
      "sh"
      "-c"
      "test -d %{lib}%/libtorch/lib/libtorch.so || ( unzip libtorch-macos.zip && mv -f libtorch %{lib}%/ && tar xzf mklml-maco  s.tgz && mv -f mklml_mac_2019.0.1.20181227/lib/libmklml.dylib %{lib}%/libtorch/lib/ && mv -f mklml_mac_2019.0.1.20181227/lib  /libiomp5.dylib %{lib}%/libtorch/lib/ )"
    ]
  ]
  depexts: [
    ["libomp"] {os-distribution = "homebrew"}
  ]
  synopsis: "LibTorch library package"
  description: """
  This is used by the torch package to trigger the install of the
  libtorch library."""
  extra-source "libtorch-macos.zip" {
    src: "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.8.0.zip"
    checksum: "md5=23f07569e0c942260c8b13fa8c3289b8"
  }
  extra-source "mklml-macos.tgz" {
    src: "https://github.com/intel/mkl-dnn/releases/download/v0.17.2/mklml_mac_2019.0.1.20181227.tgz"
    checksum: "md5=a8b4b158dc8e7aad13c0d594a9a8d241"
  }
  available: arch = "x86_64" & os = "macos"

I don't see this mentioned in opam2nix, so I assume it needs to be parsed and converted to a nix expression. If that's the case, I could try to work on it if needed. In the meantime, to work around this, I'll try overriding that package.

joprice commented 2 years ago

I got it to build with these overrides:


libtorch =
      stdenv.mkDerivation {
        name = "libtorch";
        version = "1.8.0";
        src = pkgs.fetchzip {
          url = "https://download.pytorch.org/libtorch/cpu/libtorch-macos-1.8.0.zip";
          sha256 = "109c85kjm71d9jzir2ha7w6k97f02ny2cqipb8rdrlq1sg75nnap";
        };
        installPhase = ''
          mkdir -p $out
          cp -r include/ $out/include
          cp -r lib/ $out/lib
        '';
      };
...
override = {selection}: {
        libtorch = _: libtorch;
        torch = super: super.overrideAttrs (
          super: {
            LIBTORCH = libtorch;
            buildInputs = (super.buildInputs or []) ++ [ pkgs.darwin.apple_sdk.frameworks.IOKit ];
          }
      );
...
timbertson commented 2 years ago

Yeah I've never encountered the extra-source directive before, so if you want to work on a PR to add support that'd be great 🙂