diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/onnxruntime')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/onnxruntime/default.nix | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/onnxruntime/default.nix b/nixpkgs/pkgs/development/libraries/onnxruntime/default.nix new file mode 100644 index 000000000000..1b955b57de42 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/onnxruntime/default.nix @@ -0,0 +1,205 @@ +{ stdenv +, lib +, fetchFromGitHub +, fetchFromGitLab +, fetchpatch +, fetchurl +, Foundation +, abseil-cpp +, cmake +, libpng +, nlohmann_json +, nsync +, pkg-config +, python3Packages +, re2 +, zlib +, microsoft-gsl +, iconv +, gtest +, protobuf3_21 +, pythonSupport ? true +}: + + +let + howard-hinnant-date = fetchFromGitHub { + owner = "HowardHinnant"; + repo = "date"; + rev = "v2.4.1"; + sha256 = "sha256-BYL7wxsYRI45l8C3VwxYIIocn5TzJnBtU0UZ9pHwwZw="; + }; + + eigen = fetchFromGitLab { + owner = "libeigen"; + repo = "eigen"; + rev = "d10b27fe37736d2944630ecd7557cefa95cf87c9"; + sha256 = "sha256-Lmco0s9gIm9sIw7lCr5Iewye3RmrHEE4HLfyzRkQCm0="; + }; + + mp11 = fetchFromGitHub { + owner = "boostorg"; + repo = "mp11"; + rev = "boost-1.79.0"; + sha256 = "sha256-ZxgPDLvpISrjpEHKpLGBowRKGfSwTf6TBfJD18yw+LM="; + }; + + safeint = fetchFromGitHub { + owner = "dcleblanc"; + repo = "safeint"; + rev = "ff15c6ada150a5018c5ef2172401cb4529eac9c0"; + sha256 = "sha256-PK1ce4C0uCR4TzLFg+elZdSk5DdPCRhhwT3LvEwWnPU="; + }; + + pytorch_cpuinfo = fetchFromGitHub { + owner = "pytorch"; + repo = "cpuinfo"; + # There are no tags in the repository + rev = "5916273f79a21551890fd3d56fc5375a78d1598d"; + sha256 = "sha256-nXBnloVTuB+AVX59VDU/Wc+Dsx94o92YQuHp3jowx2A="; + }; + + flatbuffers = fetchFromGitHub { + owner = "google"; + repo = "flatbuffers"; + rev = "v1.12.0"; + sha256 = "sha256-L1B5Y/c897Jg9fGwT2J3+vaXsZ+lfXnskp8Gto1p/Tg="; + }; + + gtest' = gtest.overrideAttrs (oldAttrs: rec { + version = "1.13.0"; + src = fetchFromGitHub { + owner = "google"; + repo = "googletest"; + rev = "v${version}"; + hash = "sha256-LVLEn+e7c8013pwiLzJiiIObyrlbBHYaioO/SWbItPQ="; + }; + }); +in +stdenv.mkDerivation rec { + pname = "onnxruntime"; + version = "1.15.1"; + + src = fetchFromGitHub { + owner = "microsoft"; + repo = "onnxruntime"; + rev = "v${version}"; + sha256 = "sha256-SnHo2sVACc++fog7Tg6f2LK/Sv/EskFzN7RZS7D113s="; + fetchSubmodules = true; + }; + + nativeBuildInputs = [ + cmake + pkg-config + python3Packages.python + protobuf3_21 + ] ++ lib.optionals pythonSupport (with python3Packages; [ + setuptools + wheel + pip + pythonOutputDistHook + ]); + + buildInputs = [ + libpng + zlib + nlohmann_json + nsync + re2 + microsoft-gsl + ] ++ lib.optionals pythonSupport [ + python3Packages.numpy + python3Packages.pybind11 + python3Packages.packaging + ] ++ lib.optionals stdenv.isDarwin [ + Foundation + iconv + ]; + + nativeCheckInputs = lib.optionals pythonSupport (with python3Packages; [ + gtest' + pytest + sympy + onnx + ]); + + # TODO: build server, and move .so's to lib output + # Python's wheel is stored in a separate dist output + outputs = [ "out" "dev" ] ++ lib.optionals pythonSupport [ "dist" ]; + + enableParallelBuilding = true; + + cmakeDir = "../cmake"; + + cmakeFlags = [ + "-DABSL_ENABLE_INSTALL=ON" + "-DCMAKE_BUILD_TYPE=RELEASE" + "-DFETCHCONTENT_FULLY_DISCONNECTED=ON" + "-DFETCHCONTENT_QUIET=OFF" + "-DFETCHCONTENT_SOURCE_DIR_ABSEIL_CPP=${abseil-cpp.src}" + "-DFETCHCONTENT_SOURCE_DIR_DATE=${howard-hinnant-date}" + "-DFETCHCONTENT_SOURCE_DIR_EIGEN=${eigen}" + "-DFETCHCONTENT_SOURCE_DIR_FLATBUFFERS=${flatbuffers}" + "-DFETCHCONTENT_SOURCE_DIR_GOOGLE_NSYNC=${nsync.src}" + "-DFETCHCONTENT_SOURCE_DIR_MP11=${mp11}" + "-DFETCHCONTENT_SOURCE_DIR_ONNX=${python3Packages.onnx.src}" + "-DFETCHCONTENT_SOURCE_DIR_PYTORCH_CPUINFO=${pytorch_cpuinfo}" + "-DFETCHCONTENT_SOURCE_DIR_RE2=${re2.src}" + "-DFETCHCONTENT_SOURCE_DIR_SAFEINT=${safeint}" + "-DFETCHCONTENT_TRY_FIND_PACKAGE_MODE=ALWAYS" + "-Donnxruntime_BUILD_SHARED_LIB=ON" + "-Donnxruntime_BUILD_UNIT_TESTS=ON" + "-Donnxruntime_ENABLE_LTO=ON" + "-Donnxruntime_USE_FULL_PROTOBUF=OFF" + ] ++ lib.optionals pythonSupport [ + "-Donnxruntime_ENABLE_PYTHON=ON" + ]; + + doCheck = true; + + postPatch = '' + substituteInPlace cmake/libonnxruntime.pc.cmake.in \ + --replace '$'{prefix}/@CMAKE_INSTALL_ @CMAKE_INSTALL_ + '' + lib.optionalString (stdenv.hostPlatform.system == "aarch64-linux") '' + # https://github.com/NixOS/nixpkgs/pull/226734#issuecomment-1663028691 + rm -v onnxruntime/test/optimizer/nhwc_transformer_test.cc + ''; + + postBuild = lib.optionalString pythonSupport '' + python ../setup.py bdist_wheel + ''; + + postInstall = '' + # perform parts of `tools/ci_build/github/linux/copy_strip_binary.sh` + install -m644 -Dt $out/include \ + ../include/onnxruntime/core/framework/provider_options.h \ + ../include/onnxruntime/core/providers/cpu/cpu_provider_factory.h \ + ../include/onnxruntime/core/session/onnxruntime_*.h + ''; + + passthru = { + protobuf = protobuf3_21; + tests = lib.optionalAttrs pythonSupport { + python = python3Packages.onnxruntime; + }; + }; + + meta = with lib; { + description = "Cross-platform, high performance scoring engine for ML models"; + longDescription = '' + ONNX Runtime is a performance-focused complete scoring engine + for Open Neural Network Exchange (ONNX) models, with an open + extensible architecture to continually address the latest developments + in AI and Deep Learning. ONNX Runtime stays up to date with the ONNX + standard with complete implementation of all ONNX operators, and + supports all ONNX releases (1.2+) with both future and backwards + compatibility. + ''; + homepage = "https://github.com/microsoft/onnxruntime"; + changelog = "https://github.com/microsoft/onnxruntime/releases/tag/v${version}"; + # https://github.com/microsoft/onnxruntime/blob/master/BUILD.md#architectures + platforms = platforms.unix; + license = licenses.mit; + maintainers = with maintainers; [ jonringer puffnfresh ck3d cbourjau ]; + }; +} |