Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / libraries / openvino / default.nix
blobb3809f09536419ec6e1a88380564ba0aeeb6a666
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , fetchurl
5 , substituteAll
7 # build
8 , addOpenGLRunpath
9 , autoPatchelfHook
10 , cmake
11 , git
12 , libarchive
13 , pkg-config
14 , python
15 , shellcheck
17 # runtime
18 , libusb1
19 , libxml2
20 , opencv
21 , protobuf
22 , pugixml
23 , tbb
26 let
27   # See GNA_VERSION in cmake/dependencies.cmake
28   gna_version = "03.05.00.1906";
29   gna = fetchurl {
30     url = "https://storage.openvinotoolkit.org/dependencies/gna/gna_${gna_version}.zip";
31     hash = "sha256-SlvobZwCaw4Qr6wqV/x8mddisw49UGq7OjOA+8/icm4=";
32   };
34   tbbbind_version = "2_5";
35   tbbbind = fetchurl {
36     url = "https://storage.openvinotoolkit.org/dependencies/thirdparty/linux/tbbbind_${tbbbind_version}_static_lin_v3.tgz";
37     hash = "sha256-053rJiwGmBteLS48WT6fyb5izk/rkd1OZI6SdTZZprM=";
38   };
41 stdenv.mkDerivation rec {
42   pname = "openvino";
43   version = "2023.0.0";
45   src = fetchFromGitHub {
46     owner = "openvinotoolkit";
47     repo = "openvino";
48     rev = "refs/tags/${version}";
49     fetchSubmodules = true;
50     hash = "sha256-z88SgAZ0UX9X7BhBA7/NU/UhVLltb6ANKolruU8YiZQ=";
51   };
53   outputs = [
54     "out"
55     "python"
56   ];
58   nativeBuildInputs = [
59     addOpenGLRunpath
60     autoPatchelfHook
61     cmake
62     git
63     libarchive
64     pkg-config
65     (python.withPackages (ps: with ps; [
66       cython
67       pybind11
68       setuptools
69     ]))
70     shellcheck
71   ];
73   patches = [
74     (substituteAll {
75       src = ./cmake.patch;
76       inherit (lib) version;
77     })
78   ];
80   postPatch = ''
81     mkdir -p temp/gna_${gna_version}
82     pushd temp/
83     bsdtar -xf ${gna}
84     autoPatchelf gna_${gna_version}
85     echo "${gna.url}" > gna_${gna_version}/ie_dependency.info
86     popd
88     mkdir -p temp/tbbbind_${tbbbind_version}
89     pushd temp/tbbbind_${tbbbind_version}
90     bsdtar -xf ${tbbbind}
91     echo "${tbbbind.url}" > ie_dependency.info
92     popd
93   '';
95   dontUseCmakeBuildDir = true;
97   cmakeFlags = [
98     "-DCMAKE_PREFIX_PATH:PATH=${placeholder "out"}"
99     "-DCMAKE_MODULE_PATH:PATH=${placeholder "out"}/lib/cmake"
100     "-DENABLE_LTO:BOOL=ON"
101     # protobuf
102     "-DENABLE_SYSTEM_PROTOBUF:BOOL=OFF"
103     "-DProtobuf_LIBRARIES=${protobuf}/lib/libprotobuf${stdenv.hostPlatform.extensions.sharedLibrary}"
104     # tbb
105     "-DENABLE_SYSTEM_TBB:BOOL=ON"
106     # opencv
107     "-DENABLE_OPENCV:BOOL=ON"
108     "-DOpenCV_DIR=${opencv}/lib/cmake/opencv4/"
109     # pugixml
110     "-DENABLE_SYSTEM_PUGIXML:BOOL=ON"
111     # onednn
112     "-DENABLE_ONEDNN_FOR_GPU:BOOL=OFF"
113     # intel gna
114     "-DENABLE_INTEL_GNA:BOOL=ON"
115     # python
116     "-DENABLE_PYTHON:BOOL=ON"
117     # tests
118     "-DENABLE_CPPLINT:BOOL=OFF"
119     "-DBUILD_TESTING:BOOL=OFF"
120     "-DENABLE_SAMPLES:BOOL=OFF"
121   ];
123   env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isAarch64 "-Wno-narrowing";
125   autoPatchelfIgnoreMissingDeps = [
126     "libngraph_backend.so"
127   ];
129   buildInputs = [
130     libusb1
131     libxml2
132     opencv
133     protobuf
134     pugixml
135     tbb
136   ];
138   enableParallelBuilding = true;
140   postInstall = ''
141     pushd $out/python/python${lib.versions.majorMinor python.version}
142     mkdir -p $python
143     mv ./* $python/
144     popd
145     rm -r $out/python
146   '';
148   postFixup = ''
149     # Link to OpenCL
150     find $out -type f \( -name '*.so' -or -name '*.so.*' \) | while read lib; do
151       addOpenGLRunpath "$lib"
152     done
153   '';
155   meta = with lib; {
156     description = "OpenVINO™ Toolkit repository";
157     longDescription = ''
158       This toolkit allows developers to deploy pre-trained deep learning models through a high-level C++ Inference Engine API integrated with application logic.
160       This open source version includes several components: namely Model Optimizer, nGraph and Inference Engine, as well as CPU, GPU, MYRIAD,
161       multi device and heterogeneous plugins to accelerate deep learning inferencing on Intel® CPUs and Intel® Processor Graphics.
162       It supports pre-trained models from the Open Model Zoo, along with 100+ open source and public models in popular formats such as Caffe*, TensorFlow*, MXNet* and ONNX*.
163     '';
164     homepage = "https://docs.openvinotoolkit.org/";
165     license = with licenses; [ asl20 ];
166     platforms = platforms.all;
167     broken = (stdenv.isLinux && stdenv.isAarch64) # requires scons, then fails with *** Source directory cannot be under variant directory.
168       || stdenv.isDarwin; # Cannot find macos sdk
169     maintainers = with maintainers; [ tfmoraes ];
170   };