{ 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" "-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 ]; }; }