1 ###########################################################################
3 # Options for gbs/rpmbuild users
5 # gbs -c .TAOS-CI/.gbs.conf build --define "unit_test 1"
6 # Execute all unit test cases
8 # gbs -c .TAOS-CI/.gbs.conf build --define "testcoverage 1"
9 # Generate unittest coverage statistics
10 # Use with "unit_test 1" to do it with as many cases as possible:
11 # $ gbs -c .TAOS-CI/.gbs.conf build --define "unit_test 1" --define "testcoverage 1"
14 %define gstpostfix gstreamer-1.0
15 %define gstlibdir %{_libdir}/%{gstpostfix}
16 %define nnstbindir lib/nnstreamer/bin
17 %define builddir build
19 ###########################################################################
20 # Default features for Tizen releases
21 # If you want to build RPM for other Linux distro, you may need to
22 # touch these values for your needs.
23 %define tensorflow_support 0
24 %define tensorflow_lite_support 1
25 %define tensorflow2_lite_support 1
26 %define armnn_support 0
27 %define vivante_support 0
28 %define flatbuf_support 1
29 %define protobuf_support 1
30 %define nnfw_support 1
31 %define grpc_support 1
32 %define pytorch_support 0
33 %define caffe2_support 0
34 %define mqtt_support 1
37 %define snpe_support 1
38 %define trix_engine_support 1
39 %define onnxruntime_support 1
40 # Support AI offloading (tensor_query) using nnstreamer-edge interface
41 %define nnstreamer_edge_support 1
42 %define datarepo_support 1
45 %define release_test 1
47 ###########################################################################
48 # Conditional features for Tizen releases
50 # Enable python if it's Tizen 5.0+
51 %if 0%{tizen_version_major} >= 5
52 %define python3_support 1
54 %define python3_support 0
57 # Enable Tizen-Sensor, OpenVINO, MVNCSDK2 if it's Tizen 6.0+
58 %if 0%{tizen_version_major} >= 6
59 %define tizen_sensor_support 1
60 %define mvncsdk2_support 1
61 %define openvino_support 1
62 %define edgetpu_support 1
64 %define tizen_sensor_support 0
65 %define mvncsdk2_support 0
66 %define openvino_support 0
67 %define edgetpu_support 0
70 # tizen 6.0 (or less) backward-compatibility check
71 %if ( 0%{?tizen_version_major} == 6 && 0%{?tizen_version_minor} < 5 ) || 0%{?tizen_version_major} < 6
72 %define grpc_support 0
73 %define tensorflow2_lite_support 0
74 %define trix_engine_support 0
77 # Disable e-TPU if it's not 64bit system
78 %ifnarch aarch64 x86_64
79 %define edgetpu_support 0
82 # Disable ARMNN/Vivante/NNFW if it's not ARM.
84 %define armnn_support 0
85 %define vivante_support 0
88 # Disable NNFW if it's not ARM/x64 and x86
89 %ifnarch %arm aarch64 x86_64 i586 i686 %ix86
90 %define nnfw_support 0
93 # Disable a few features for TV releases
94 %if "%{?profile}" == "tv"
95 %define grpc_support 0
97 %define edgetpu_support 0
98 %define protobuf_support 0
99 %define python3_support 0
100 %define mvncsdk2_support 0
101 %define openvino_support 0
102 %define nnfw_support 0
103 %define armnn_support 0
104 %define vivante_support 0
105 %define pytorch_support 0
106 %define caffe2_support 0
107 %define tensorflow_support 0
108 %define lua_support 0
109 %define mqtt_support 0
110 %define tvm_support 0
111 %define snpe_support 0
112 %define trix_engine_support 0
113 %define onnxruntime_support 0
114 %define nnstreamer_edge_support 0
117 # DA requested to remove unnecessary module builds
118 %if 0%{?_with_da_profile}
119 %define mvncsdk2_support 0
120 %define edgetpu_support 0
121 %define openvino_support 0
122 %define edgetpu_support 0
123 %define armnn_support 0
124 %define lua_support 0
125 %define mqtt_support 0
126 %define tvm_support 0
127 %define trix_engine_support 0
128 %define onnxruntime_support 0
131 # Release unit test suite as a subpackage only if check_test is enabled.
133 %define release_test 0
136 # Current Tizen Robot profile only supports aarch64.
138 %define snpe_support 0
141 # If it is tizen, we can export Tizen API packages.
144 ###########################################################################
145 # Package / sub-package definitions
147 Summary: gstreamer plugins for neural networks
148 # Synchronize the version information among Ubuntu, Tizen, Android, and Meson.
149 # 1. Ubuntu : ./debian/changelog
150 # 2. Tizen : ./packaging/nnstreamer.spec
151 # 3. Android: ./jni/nnstreamer.mk
152 # 4. Meson : ./meson.build
155 Group: Machine Learning/ML Framework
156 Packager: MyungJoo Ham <myungjoo.ham@samsung.com>
158 Source0: nnstreamer-%{version}.tar
159 Source1001: nnstreamer.manifest
161 ## Define requirements ##
162 Requires: nnstreamer-core = %{version}-%{release}
163 Requires: nnstreamer-configuration = %{version}-%{release}
164 Requires: nnstreamer-single = %{version}-%{release}
165 Recommends: nnstreamer-default-configuration = %{version}-%{release}
166 %if 0%{?nnstreamer_edge_support}
167 BuildRequires: nnstreamer-edge-devel
170 ## Define build requirements ##
171 BuildRequires: gstreamer-devel
172 BuildRequires: gst-plugins-base-devel
173 BuildRequires: gst-plugins-bad-devel
174 BuildRequires: glib2-devel
175 BuildRequires: meson >= 0.50.0
177 # To run test cases, we need gst plugins
178 BuildRequires: gst-plugins-good
179 %if 0%{tizen_version_major} >= 5
180 BuildRequires: gst-plugins-good-extra
182 BuildRequires: gst-plugins-base
184 BuildRequires: gtest-devel
185 # a few test cases uses python
187 BuildRequires: python3
189 %if 0%{?python3_support}
190 # for python3 custom filters
191 BuildRequires: python3-devel
192 BuildRequires: python3-numpy-devel
194 # Testcase requires bmp2png, which requires libpng
195 BuildRequires: pkgconfig(libpng)
196 %if 0%{?flatbuf_support}
198 BuildRequires: flatbuffers-devel
200 BuildRequires: flatbuffers-python
203 %if 0%{?tensorflow_lite_support}
204 # for tensorflow-lite
205 BuildRequires: tensorflow-lite-devel
207 %if 0%{?tensorflow2_lite_support}
208 # for tensorflow2-lite
209 BuildRequires: tensorflow2-lite-devel
210 # tensorflow2-lite-custom requires scripts for rpm >= 4.9
211 BuildRequires: rpm >= 4.9
212 %global __requires_exclude ^libtensorflow2-lite-custom.*$
214 # custom_example_opencv filter requires opencv-devel
215 BuildRequires: opencv-devel
216 # For './testAll.sh' time limit.
217 BuildRequires: procps
219 %if 0%{?protobuf_support}
220 BuildRequires: protobuf-devel >= 3.4.0
223 %if 0%{?tensorflow_support}
224 BuildRequires: tensorflow
225 BuildRequires: tensorflow-devel
228 %if 0%{?armnn_support}
229 BuildRequires: armnn-devel
232 %if 0%{?edgetpu_support}
233 BuildRequires: pkgconfig(edgetpu)
236 %if 0%{?testcoverage}
237 # to be compatible with gcc-9, lcov should have a higher version than 1.14.1
239 # BuildRequires: taos-ci-unittest-coverage-assessment
242 %if 0%{mvncsdk2_support}
243 BuildRequires: pkgconfig(libmvnc)
246 %if 0%{openvino_support}
247 BuildRequires: pkgconfig(openvino)
251 # TODO: dann and opencv will be removed in the near future.
252 %if 0%{?vivante_support}
253 BuildRequires: pkgconfig(opencv)
254 BuildRequires: pkgconfig(dann)
255 BuildRequires: pkgconfig(ovxlib)
256 BuildRequires: pkgconfig(amlogic-vsi-npu-sdk)
259 %if 0%{?grpc_support}
260 BuildRequires: grpc-devel
264 BuildRequires: pkgconfig(dlog)
265 # For tizen sensor support
266 BuildRequires: pkgconfig(sensor)
267 BuildRequires: capi-system-sensor-devel
270 %if 0%{?nnfw_support}
271 # Tizen 5.5 M2+ support nn-runtime (nnfw)
272 # As of 2019-09-24, unfortunately, nnfw does not support pkg-config
273 BuildRequires: nnfw-devel
276 %if 0%{?pytorch_support}
277 BuildRequires: pytorch-devel
280 # Caffe2 is merged to pytorch
281 %if 0%{?caffe2_support}
282 BuildRequires: pytorch-devel
286 BuildRequires: lua-devel
290 BuildRequires: tvm-runtime-devel
293 %if 0%{?snpe_support}
294 BuildRequires: snpe-devel
297 %if 0%{?trix_engine_support}
298 BuildRequires: npu-engine-devel
301 %if 0%{?onnxruntime_support}
302 BuildRequires: onnxruntime-devel
305 # Unit Testing Uses SSAT (https://github.com/myungjoo/SSAT.git)
306 %if 0%{?unit_test} || 0%{?edge_test}
307 BuildRequires: ssat >= 1.1.0
308 # Mosquitto MQTT broker for unit testing
309 BuildRequires: mosquitto
312 # For ORC (Oil Runtime Compiler)
313 BuildRequires: pkgconfig(orc-0.4)
315 # For nnstreamer-parser
319 # For datarepo or ml-agent
320 #TODO: the dependency on ml-agent should be changed from mandatory to optional
321 %if 0%{?datarepo_support} || 0%{?ml_agent_support}
322 BuildRequires: pkgconfig(json-glib-1.0)
326 %if 0%{?ml_agent_support}
327 BuildRequires: pkgconfig(mlops-agent)
330 # Note that debug packages generate an additional build and storage cost.
331 # If you do not need debug packages, run '$ gbs -c .TAOS-CI/.gbs.conf build ... --define "_skip_debug_rpm 1"'.
333 %if "%{?_skip_debug_rpm}" == "1"
334 %global debug_package %{nil}
335 %global __debug_install_post %{nil}
338 ## Define Packages ##
340 NNStreamer is a set of gstreamer plugins to support general neural networks
341 and their plugins in a gstreamer stream. NNStreamer is a meta package of
342 nnstreamer-core and nnstreamer-configuration
345 Requires: gstreamer >= 1.8.0
346 %if 0%{?nnstreamer_edge_support}
347 Requires: nnstreamer-edge
349 Summary: NNStreamer core package
351 NNStreamer is a set of gstreamer plugins to support general neural networks
352 and their plugins in a gstreamer stream, this package is core package without configuration
355 Summary: NNStreamer singe-shot package
357 Element to use general neural network framework directly without gstreamer pipeline.
359 %package default-configuration
360 Summary: NNStreamer global configuration
361 Provides: nnstreamer-configuration = %{version}-%{release}
362 Conflicts: nnstreamer-test-devel
363 %description default-configuration
364 NNStreamer's global configuration setup for the end user.
367 %if 0%{?tensorflow_support}
369 Summary: NNStreamer TensorFlow Support
370 Requires: nnstreamer-single = %{version}-%{release}
372 %description tensorflow
373 NNStreamer's tensor_filter subplugin of TensorFlow.
374 It uses C-API of tensorflow, which is not yet stable as of 1.1x.
375 Thus, the user needs to check the version of Tensorflow with the
376 Tensorflow used for building this package.
379 # for tensorflow-lite
380 %if 0%{?tensorflow_lite_support}
381 %package tensorflow-lite
382 Summary: NNStreamer TensorFlow Lite Support
383 Requires: nnstreamer-single = %{version}-%{release}
384 # tensorflow-lite provides .a file and it's embedded into the subplugin. No dep to tflite.
385 %description tensorflow-lite
386 NNStreamer's tensor_filter subplugin of TensorFlow Lite.
389 # for tensorflow2-lite
390 %if 0%{?tensorflow2_lite_support}
391 %package tensorflow2-lite
392 Summary: NNStreamer TensorFlow2 Lite Support
393 Requires: nnstreamer-single = %{version}-%{release}
394 # tensorflow2-lite provides .a file and it's embedded into the subplugin. No dep to tflite.
395 %description tensorflow2-lite
396 NNStreamer's tensor_filter subplugin of TensorFlow2 Lite.
399 %if 0%{?python3_support}
401 Summary: NNStreamer Python3 Custom Filter Support
402 Requires: nnstreamer = %{version}-%{release}
404 NNStreamer's tensor_filter subplugin of Python3.
407 %if 0%{?armnn_support}
409 Summary: NNStreamer Arm NN support
410 Requires: nnstreamer-single = %{version}-%{release}
413 NNStreamer's tensor_filter subplugin of Arm NN Inference Engine.
416 # Support vivante subplugin
417 %if 0%{?vivante_support}
419 Summary: NNStreamer subplugin for Verisilicon's Vivante
420 Requires: nnstreamer-single = %{version}-%{release}
422 NNStreamer filter subplugin for Verisilicon Vivante.
423 %define enable_vivante -Denable-vivante=true
425 %define enable_vivante -Denable-vivante=false
429 %if 0%{?protobuf_support}
431 Summary: NNStreamer Protobuf Support
432 Requires: nnstreamer = %{version}-%{release}
434 %description protobuf
435 NNStreamer's tensor_converter and decoder subplugin of Protobuf.
439 %if 0%{?flatbuf_support}
441 Summary: NNStreamer Flatbuf Support
442 Requires: nnstreamer = %{version}-%{release}
443 Requires: flatbuffers
445 NNStreamer's tensor_converter and decoder subplugin of flatbuf.
449 %if 0%{?pytorch_support}
451 Summary: NNStreamer PyTorch Support
452 Requires: nnstreamer-single = %{version}-%{release}
455 NNStreamer's tensor_filter subplugin of pytorch
459 %if 0%{?caffe2_support}
461 Summary: NNStreamer caffe2 Support
462 Requires: nnstreamer-single = %{version}-%{release}
465 NNStreamer's tensor_filter subplugin of caffe2
471 Summary: NNStreamer lua Support
472 Requires: nnstreamer-single = %{version}-%{release}
475 NNStreamer's tensor_filter subplugin of lua
480 Summary: NNStreamer TVM support
481 Requires: nnstreamer = %{version}-%{release}
484 NNStreamer's tensor_filter subplugin of tvm
488 %if 0%{?snpe_support}
490 Summary: NNStreamer snpe Support
491 Requires: nnstreamer-single = %{version}-%{release}
494 NNStreamer's tensor_filter subplugin of snpe
498 %if 0%{?trix_engine_support}
500 Summary: NNStreamer TRIx-Engine support
501 Requires: nnstreamer-single = %{version}-%{release}
502 Requires: trix-engine
503 %description trix-engine
504 NNStreamer's tensor_filter subplugin of trix-engine
508 %if 0%{?onnxruntime_support}
510 Summary: NNStreamer onnxruntime Support
511 Requires: nnstreamer-single = %{version}-%{release}
512 Requires: onnxruntime
513 %description onnxruntime
514 NNStreamer's tensor_filter subplugin of onnxruntime
518 Summary: Development package for custom tensor operator developers (tensor_filter/custom)
519 Requires: nnstreamer = %{version}-%{release}
520 Requires: nnstreamer-single-devel = %{version}-%{release}
521 Requires: glib2-devel
522 Requires: gstreamer-devel
524 Development package for subplugin or custom filter developers.
525 Developers may add support for new hardware accelerators or neural network
526 frameworks, or introduce new data types and their converters for tensors.
527 However, applications or service developers generally do not need this.
528 This contains corresponding header files and .pc pkgconfig file.
530 %package devel-internal
531 Summary: Development package to access internal functions of NNStreamer
532 Requires: nnstreamer-devel = %{version}-%{release}
533 %description devel-internal
534 Development package to access internal functions of NNStreamer.
535 This may be used by API packages, which wrap nnstreamer features.
536 In most cases, custom-filter or subplugin authors do not need this internal devel package; however, if they want to access more internal functions, they may need this.
538 %package devel-static
539 Summary: Static library for nnstreamer-devel package
540 Requires: nnstreamer-devel = %{version}-%{release}
541 %description devel-static
542 Static library package of nnstreamer-devel.
544 %package single-devel
545 Summary: Development package for NNStreamer single-shot
546 Requires: nnstreamer-single = %{version}-%{release}
547 %description single-devel
548 Development package for NNStreamer single-shot.
550 %package single-devel-static
551 Summary: Static library for nnstreamer-single-devel package
552 Requires: nnstreamer-single-devel = %{version}-%{release}
553 %description single-devel-static
554 Static library package of nnstreamer-single-devel.
557 Summary: Development package to provide testable environment of a subplugin (tensor_filter/custom)
558 Requires: nnstreamer-devel = %{version}-%{release}
559 Requires: nnstreamer-single-devel = %{version}-%{release}
560 Provides: nnstreamer-configuration = %{version}-%{release}
561 Conflicts: nnstreamer-default-configuration
562 %description test-devel
563 Development package to provide testable environment of NNStreamer sub-plugin.
564 This package enables testable environment of NNStreamer sub-plugin by making nnstreamer to recognize NNSTREAMER_CONF_PATH to steer a sub-plugin path to a custom path.
565 Also This package provides test templates to be used with.
567 %if 0%{?testcoverage}
568 %package unittest-coverage
569 Summary: NNStreamer UnitTest Coverage Analysis Result
570 %description unittest-coverage
571 HTML pages of lcov results of NNStreamer generated during rpmbuild
574 %if 0%{?nnfw_support}
576 Summary: NNStreamer Tizen-nnfw runtime support
577 Requires: nnstreamer-single = %{version}-%{release}
580 NNStreamer's tensor_filter subplugin of Tizen-NNFW Runtime. (5.5 M2 +)
583 %if 0%{?mvncsdk2_support}
585 Summary: NNStreamer Intel Movidius NCSDK2 support
586 Requires: nnstreamer-single = %{version}-%{release}
587 Group: Machine Learning/ML Framework
589 NNStreamer's tensor_filter subplugin of Intel Movidius Neural Compute stick SDK2.
590 %endif # mvncsdk2_support
592 %if 0%{openvino_support}
594 Summary: NNStreamer OpenVino support
595 Requires: nnstreamer-single = %{version}-%{release}
597 Group: Machine Learning/ML Framework
598 %description openvino
599 NNStreamer's tensor_filter subplugin for OpenVino support.
600 %endif # openvino_support
602 # Add Tizen's sensor framework API integration
603 %if 0%{tizen_sensor_support}
604 %package tizen-sensor
605 Summary: NNStreamer integration of tizen sensor framework (tensor_src_tizensensor)
606 Requires: nnstreamer = %{version}-%{release}
607 Requires: capi-system-sensor
608 %description tizen-sensor
609 You can include Tizen sensor framework nodes as source elements of GStreamer/NNStreamer pipelines with this package.
610 %endif # tizen_sensor_support
614 Summary: NNStreamer gRPC support
615 Requires: nnstreamer = %{version}-%{release}
617 Recommends: nnstreamer-grpc-protobuf = %{version}-%{release}
618 Recommends: nnstreamer-grpc-flatbuf = %{version}-%{release}
621 NNStreamer's tensor_source/sink plugins for gRPC support.
623 %if 0%{protobuf_support}
624 %package grpc-protobuf
625 Summary: NNStreamer gRPC/Protobuf support
626 Requires: nnstreamer-grpc = %{version}-%{release}
627 Requires: nnstreamer-protobuf = %{version}-%{release}
628 %description grpc-protobuf
629 NNStreamer's gRPC IDL support for protobuf
632 %if 0%{flatbuf_support}
633 %package grpc-flatbuf
634 Summary: NNStreamer gRPC/Flatbuf support
635 Requires: nnstreamer-grpc = %{version}-%{release}
636 Requires: nnstreamer-flatbuf = %{version}-%{release}
637 %description grpc-flatbuf
638 NNStreamer's gRPC IDL support for flatbuf
641 %endif # grpc_support
643 %if 0%{?edgetpu_support}
645 Summary: NNStreamer plugin for Google-Coral Edge TPU
646 Requires: libedgetpu1
647 Requires: nnstreamer-single = %{version}-%{release}
649 You may enable this package to use Google Edge TPU with NNStreamer and Tizen ML APIs.
652 %if 0%{?release_test}
654 Summary: NNStreamer unittests for core and plugins
655 Requires: nnstreamer = %{version}-%{release}
656 %description unittests
657 Various unit test cases and custom subplugin examples for NNStreamer.
661 Summary: NNStreamer developer utilities
663 NNStreamer developer utilities include nnstreamer configuration checker.
666 Summary: NNStreamer extra packages
667 %if 0%{?mqtt_support}
668 BuildRequires: pkgconfig(paho-mqtt-c)
671 Provides additional gstreamer plugins for nnstreamer pipelines
673 %if 0%{?datarepo_support}
675 Summary: NNStreamer MLOps Data Repository plugin packages
676 %description datarepo
677 NNStreamer's datareposrc/sink plugins for reading and writing files in MLOps Data Repository
678 %define enable_datarepo -Ddatarepo-support=enabled
680 %define enable_datarepo -Ddatarepo-support=disabled
683 ## Define build options ##
684 %define enable_tizen -Denable-tizen=false
685 %define enable_tizen_sensor -Denable-tizen-sensor=false
686 %define enable_mvncsdk2 -Dmvncsdk2-support=disabled
687 %define enable_openvino -Denable-openvino=false
688 %define enable_nnfw_runtime -Dnnfw-runtime-support=disabled
689 %define element_restriction -Denable-element-restriction=false
690 %define enable_test -Denable-test=true
691 %define install_test -Dinstall-test=false
693 %if 0%{mvncsdk2_support}
694 %define enable_mvncsdk2 -Dmvncsdk2-support=enabled
697 %if 0%{openvino_support}
698 %define enable_openvino -Denable-openvino=true
701 %if 0%{?nnfw_support}
702 %define enable_nnfw_runtime -Dnnfw-runtime-support=enabled
703 %endif # nnfw_support
705 %if 0%{tizen_sensor_support}
706 %define enable_tizen_sensor -Denable-tizen-sensor=true
710 %define enable_test -Denable-test=false
713 %if 0%{?release_test}
714 %define install_test -Dinstall-test=true
718 %define enable_tizen -Denable-tizen=true -Dtizen-version-major=0%{tizen_version_major}
719 # Element allowance in Tizen
720 %define allowed_element_base 'capsfilter identity input-selector output-selector queue tee valve appsink appsrc audioconvert audiorate audioresample audiomixer videoconvert videocrop videorate videoscale videoflip videomixer compositor fakesrc fakesink filesrc filesink multifilesrc multifilesink audiotestsrc videotestsrc jpegparse jpegenc jpegdec pngenc pngdec xvimagesink ximagesink evasimagesink evaspixmapsink glimagesink theoraenc lame vorbisenc wavenc volume oggmux avimux matroskamux v4l2src pulsesrc '
721 %define allowed_element_edgeai 'rtpdec rtspsrc rtspclientsink zmqsrc zmqsink mqttsrc mqttsink udpsrc udpsink multiudpsink tcpclientsink tcpclientsrc tcpserversink tcpserversrc edgesrc edgesink gdppay gdpdepay '
722 %define allowed_element_audio 'audioamplify audiochebband audiocheblimit audiodynamic audioecho audiofirfilter audioiirfilter audioinvert audiokaraoke audiopanorama audiowsincband audiowsinclimit scaletempo stereo '
723 %define allowed_element_tizen 'tizencamerasrc avsysvideosrc camerasrc tvcamerasrc fimcconvert tizenwlsink '
724 %define allowed_element_extra 'join datareposrc datareposink '
726 %define allowed_element_all %{allowed_element_base}%{allowed_element_audio}%{allowed_element_edgeai}%{allowed_element_tizen}%{allowed_element_extra}
727 %if "%{?profile}" == "tv"
728 %define allowed_element_vd 'tvdpbsrc '
729 %define allowed_element %{allowed_element_all}%{allowed_element_vd}
731 %define allowed_element %{allowed_element_all}
733 %define element_restriction -Denable-element-restriction=true -Dallowed-elements=%{allowed_element}
737 %if 0%{?tensorflow_support}
738 %define enable_tf -Dtf-support=enabled
740 %define enable_tf -Dtf-support=disabled
743 # Support tensorflow-lite
744 %if 0%{?tensorflow_lite_support}
745 %define enable_tf_lite -Dtflite-support=enabled
747 %define enable_tf_lite -Dtflite-support=disabled
750 # Support tensorflow2-lite
751 %if 0%{?tensorflow2_lite_support}
752 %define enable_tf2_lite -Dtflite2-support=enabled -Dtflite2-custom-support=enabled
754 %define enable_tf2_lite -Dtflite2-support=disabled -Dtflite2-custom-support=disabled
758 %if 0%{?pytorch_support}
759 %define enable_pytorch -Dpytorch-support=enabled
761 %define enable_pytorch -Dpytorch-support=disabled
765 %if 0%{?caffe2_support}
766 %define enable_caffe2 -Dcaffe2-support=enabled
768 %define enable_caffe2 -Dcaffe2-support=disabled
772 %if 0%{?armnn_support}
773 %define enable_armnn -Darmnn-support=enabled
775 %define enable_armnn -Darmnn-support=disabled
779 %if 0%{?python3_support}
780 %define enable_python3 -Dpython3-support=enabled
782 %define enable_python3 -Dpython3-support=disabled
786 %if 0%{?edgetpu_support}
787 %define enable_edgetpu -Denable-edgetpu=true
789 %define enable_edgetpu -Denable-edgetpu=false
793 %if 0%{?flatbuf_support}
794 %define enable_flatbuf -Dflatbuf-support=enabled
796 %define enable_flatbuf -Dflatbuf-support=disabled
800 %if 0%{?mqtt_support}
801 %define enable_mqtt -Dmqtt-support=enabled
803 %define enable_mqtt -Dmqtt-support=disabled
808 %define enable_lua -Dlua-support=enabled
810 %define enable_lua -Dlua-support=disabled
815 %define enable_tvm -Dtvm-support=enabled
817 %define enable_tvm -Dtvm-support=disabled
820 # Support trix-engine
821 %if 0%{?trix_engine_support}
822 %define enable_trix_engine -Dtrix-engine-support=enabled
824 %define enable_trix_engine -Dtrix-engine-support=disabled
828 %if 0%{?ml_agent_support}
829 %define enable_ml_agent -Dml-agent-support=enabled
831 %define enable_ml_agent -Dml-agent-support=disabled
834 # Support onnxruntime
835 %if 0%{?onnxruntime_support}
836 %define enable_onnxruntime -Donnxruntime-support=enabled
838 %define enable_onnxruntime -Donnxruntime-support=disabled
841 # Framework priority for each file extension
842 %define fw_priority_bin ''
843 %define fw_priority_nb ''
845 %if "%{?profile}" == "tv"
846 %define fw_priority_bin 'vd_aifw'
847 %define fw_priority_nb 'vd_aifw'
849 %if 0%{openvino_support}
850 %define fw_priority_bin 'openvino'
854 %define fp16_enabled 0
856 %define fp16_enabled 1
857 # x64/x86 requires GCC >= 12 for fp16 support.
861 %if 0%{?fp16_enabled}
862 %define fp16_support -Denable-float16=true
864 %define fp16_support -Denable-float16=false
867 %if 0%{?nnstreamer_edge_support}
868 %define nnsedge -Dnnstreamer-edge-support=enabled
870 %define nnsedge -Dnnstreamer-edge-support=disabled
873 %define fw_priority -Dframework-priority-nb=%{fw_priority_nb} -Dframework-priority-bin=%{fw_priority_bin}
881 # Remove compiler flags for meson to decide the cpp version
882 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-std=gnu++11||"`
884 %if 0%{?testcoverage}
885 # To test coverage, disable optimizations (and should unset _FORTIFY_SOURCE to use -O0)
886 CFLAGS=`echo $CFLAGS | sed -e "s|-O[1-9]|-O0|g"`
887 CFLAGS=`echo $CFLAGS | sed -e "s|-Wp,-D_FORTIFY_SOURCE=[1-9]||g"`
888 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-O[1-9]|-O0|g"`
889 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-Wp,-D_FORTIFY_SOURCE=[1-9]||g"`
890 # also, use the meson's base option, -Db_coverage, instead of --coverage/-fprofile-arcs and -ftest-coverage
891 %define enable_test_coverage -Db_coverage=true
893 %define enable_test_coverage -Db_coverage=false
898 meson --buildtype=plain --prefix=%{_prefix} --sysconfdir=%{_sysconfdir} --libdir=%{_lib} \
899 --bindir=%{nnstbindir} --includedir=include -Dsubplugindir=%{_prefix}/lib/nnstreamer \
900 %{enable_tizen} %{element_restriction} %{fw_priority} -Denable-env-var=false -Denable-symbolic-link=false \
901 %{enable_tf_lite} %{enable_tf2_lite} %{enable_tf} %{enable_pytorch} %{enable_caffe2} %{enable_python3} \
902 %{enable_nnfw_runtime} %{enable_mvncsdk2} %{enable_openvino} %{enable_armnn} %{enable_edgetpu} %{enable_vivante} \
903 %{enable_flatbuf} %{enable_trix_engine} %{enable_datarepo} \
904 %{enable_tizen_sensor} %{enable_mqtt} %{enable_lua} %{enable_tvm} %{enable_onnxruntime} \
905 %{enable_test} %{enable_test_coverage} %{install_test} \
906 %{fp16_support} %{nnsedge} %{enable_ml_agent} \
909 ninja -C %{builddir} %{?_smp_mflags}
911 export NNSTREAMER_SOURCE_ROOT_PATH=$(pwd)
912 export NNSTREAMER_BUILD_ROOT_PATH=$(pwd)/%{builddir}
913 export GST_PLUGIN_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/gst:${NNSTREAMER_BUILD_ROOT_PATH}/ext
914 export NNSTREAMER_CONF=${NNSTREAMER_BUILD_ROOT_PATH}/nnstreamer-test.ini
915 export NNSTREAMER_FILTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_filter
916 export NNSTREAMER_DECODERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_decoder
917 export NNSTREAMER_CONVERTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_converter
918 export NNSTREAMER_TRAINERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_trainer
920 # Suppress ORC logs during unittests (showing WARNING or higher)
923 %define test_script $(pwd)/packaging/run_unittests_binaries.sh
925 # if it's tizen && non-TV, run unittest even if "unit_test"==0 for build-time sanity checks.
926 %if ( %{with tizen} && "%{?profile}" != "tv" )
928 bash %{test_script} ./tests/tizen_nnfw_runtime/unittest_nnfw_runtime_raw
930 %if 0%{tizen_sensor_support}
931 bash %{test_script} ./tests/tizen_sensor/unittest_tizen_sensor
935 # If "unit_test"==0, don't run these for the sake of build speed.
937 bash %{test_script} ./tests
938 bash %{test_script} ./tests/cpp_methods
939 bash %{test_script} ./tests/nnstreamer_filter_extensions_common
940 %if 0%{?datarepo_support}
941 bash %{test_script} ./tests/nnstreamer_datarepo
943 %if 0%{?nnstreamer_edge_support}
944 bash %{test_script} ./tests/nnstreamer_edge
946 %if 0%{mvncsdk2_support}
947 LD_LIBRARY_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/tests/nnstreamer_filter_mvncsdk2:. bash %{test_script} ./tests/nnstreamer_filter_mvncsdk2/unittest_filter_mvncsdk2
949 %if 0%{edgetpu_support}
950 LD_LIBRARY_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/tests/nnstreamer_filter_edgetpu:. bash %{test_script} ./tests/nnstreamer_filter_edgetpu/unittest_edgetpu
952 %ifarch %arm x86_64 aarch64 ## @todo This is a workaround. Need to remove %ifarch/%endif some day.
953 bash %{test_script} ./tests/nnstreamer_filter_tvm
958 ## @todo Workaround for QEMU compatibility issue. Newer qemu may be ok with this.
959 export SKIP_QEMU_ARM_INCOMPATIBLE_TESTS=1
961 export SKIP_QEMU_ARM_INCOMPATIBLE_TESTS=0
964 %if 0%{?fp16_enabled}
965 ## If fp16 tests fail, stop the build!
966 export FLOAT16_SUPPORTED=1
968 ssat -n -p=1 --summary summary.txt -cn _n
971 python3 tools/development/count_test_cases.py %{builddir} tests/summary.txt
973 %if 0%{?edge_test} && 0%{?nnstreamer_edge_support}
974 bash %{test_script} tests/nnstreamer_edge
975 pushd tests/nnstreamer_edge
976 ssat -n -p=1 --summary summary.txt -cn _n
978 python3 tools/development/count_test_cases.py %{builddir} tests/nnstreamer_edge/summary.txt
983 DESTDIR=%{buildroot} ninja -C %{builddir} install
985 mkdir -p %{buildroot}%{_bindir}
986 pushd %{buildroot}%{_bindir}
987 ln -sf %{_prefix}/%{nnstbindir}/nnstreamer-check nnstreamer-check
988 ln -sf %{_prefix}/%{nnstbindir}/nnstreamer-parser nnstreamer-parser
991 %if 0%{?python3_support}
992 mkdir -p %{buildroot}%{python3_sitelib}
993 pushd %{buildroot}%{python3_sitelib}
994 ln -sf %{_libdir}/nnstreamer_python3.so nnstreamer_python.so
998 %if 0%{?snpe_support}
999 %define snpe_sub_plugin libnnstreamer_filter_snpe.so
1000 %define files_for_snpe_subpackage files_for_snpe_subpackage.txt
1001 rm -f %{files_for_snpe_subpackage}
1002 find %{buildroot} -type f -name '%{snpe_sub_plugin}' -printf '/%%P\n' > %{files_for_snpe_subpackage}
1005 %if 0%{?testcoverage}
1007 # The included directories are:
1009 # gst: the nnstreamer elements
1010 # nnstreamer_example: custom plugin examples
1011 # common: common libraries for gst (elements)
1012 # include: common library headers and headers for external code (packaged as "devel")
1014 # Intentionally excluded directories are:
1016 # tests: We are not going to show testcoverage of the test code itself or example applications
1018 # 'lcov' generates the date format with UTC time zone by default. Let's replace UTC with KST.
1019 # If you ccan get a root privilege, run ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
1020 TZ='Asia/Seoul'; export TZ
1023 VCS=`cat ${RPM_SOURCE_DIR}/nnstreamer.spec | grep "^VCS:" | sed "s|VCS:\\W*\\(.*\\)|\\1|"`
1025 # Create human readable unit test coverage report web page.
1026 # Create null gcda files if gcov didn't create it because there is completely no unit test for them.
1027 find . -name "*.gcno" -exec sh -c 'touch -a "${1%.gcno}.gcda"' _ {} \;
1028 # Remove gcda for meaningless file (CMake's autogenerated)
1029 find . -name "CMakeCCompilerId*.gcda" -delete
1030 find . -name "CMakeCXXCompilerId*.gcda" -delete
1031 #find . -path "/%{builddir}/*.j
1033 lcov -t 'NNStreamer Unit Test Coverage' -o unittest.info -c -d . -b %{builddir} --no-external --ignore-errors mismatch
1034 # Exclude generated files (e.g., Orc, Protobuf) and device-dependent filters.
1035 lcov -r unittest.info "*/*-orc.*" "*/tests/*" "*/tools/*" "*/meson*/*" "*/*@sha/*" "*/*_openvino*" "*/*_edgetpu*" "*/*_movidius_ncsdk2*" "*/*.so.p/*" -o unittest-filtered.info --ignore-errors graph,unused
1036 # Visualize the report
1037 genhtml -o result unittest-filtered.info -t "nnstreamer %{version}-%{release} ${VCS}" --ignore-errors source -p ${RPM_BUILD_DIR}
1039 mkdir -p %{buildroot}%{_datadir}/nnstreamer/unittest/
1040 cp -r result %{buildroot}%{_datadir}/nnstreamer/unittest/
1041 %endif # test coverage
1043 %post -p /sbin/ldconfig
1045 %postun -p /sbin/ldconfig
1050 %manifest nnstreamer.manifest
1051 %defattr(-,root,root,-)
1053 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_bounding_boxes.so
1054 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_tensor_region.so
1055 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_pose_estimation.so
1056 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_image_segment.so
1057 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_image_labeling.so
1058 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_direct_video.so
1059 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_octet_stream.so
1060 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_cpp.so
1061 %{gstlibdir}/libnnstreamer.so
1062 %if 0%{?nnstreamer_edge_support}
1063 %{gstlibdir}/libgstedge.so
1065 %{_libdir}/libnnstreamer.so
1068 %manifest nnstreamer.manifest
1069 %defattr(-,root,root,-)
1071 %{_libdir}/libnnstreamer-single.so
1073 %files default-configuration
1074 %config %{_sysconfdir}/nnstreamer.ini
1077 %if 0%{?tensorflow_support}
1079 %manifest nnstreamer.manifest
1080 %defattr(-,root,root,-)
1081 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow.so
1084 %if 0%{?tensorflow_lite_support}
1085 %files tensorflow-lite
1086 %manifest nnstreamer.manifest
1087 %defattr(-,root,root,-)
1088 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow1-lite.so
1091 # for tensorflow2-lite
1092 %if 0%{?tensorflow2_lite_support}
1093 %files tensorflow2-lite
1094 %manifest nnstreamer.manifest
1095 %defattr(-,root,root,-)
1096 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow2-lite.so
1097 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow2-lite-custom.so
1100 %if 0%{?python3_support}
1102 %manifest nnstreamer.manifest
1103 %defattr(-,root,root,-)
1104 %{_libdir}/nnstreamer_python3.so
1105 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_python3.so
1106 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_python3.so
1107 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_python3.so
1108 %{python3_sitelib}/nnstreamer_python.so
1111 %if 0%{?protobuf_support}
1113 %manifest nnstreamer.manifest
1114 %defattr(-,root,root,-)
1115 %{_libdir}/libnnstreamer_protobuf.so
1116 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_protobuf.so
1117 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_protobuf.so
1120 %if 0%{?flatbuf_support}
1122 %manifest nnstreamer.manifest
1123 %defattr(-,root,root,-)
1124 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_flatbuf.so
1125 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_flatbuf.so
1126 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_flexbuf.so
1127 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_flexbuf.so
1131 %if 0%{?pytorch_support}
1133 %manifest nnstreamer.manifest
1134 %defattr(-,root,root,-)
1135 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_pytorch.so
1139 %if 0%{?caffe2_support}
1141 %manifest nnstreamer.manifest
1142 %defattr(-,root,root,-)
1143 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_caffe2.so
1147 %if 0%{?lua_support}
1149 %manifest nnstreamer.manifest
1150 %defattr(-,root,root,-)
1151 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_lua.so
1155 %if 0%{?tvm_support}
1157 %manifest nnstreamer.manifest
1158 %defattr(-,root,root,-)
1159 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tvm.so
1163 %if 0%{?snpe_support}
1164 # Workaround: Conditionally enable nnstreamer-snpe rpm package
1165 # when existing actual snpe library (snpe.pc)
1166 %files snpe -f %{files_for_snpe_subpackage}
1167 %manifest nnstreamer.manifest
1168 %defattr(-,root,root,-)
1172 %if 0%{?trix_engine_support}
1174 %manifest nnstreamer.manifest
1175 %defattr(-,root,root,-)
1176 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_trix-engine.so
1180 %if 0%{?onnxruntime_support}
1182 %manifest nnstreamer.manifest
1183 %defattr(-,root,root,-)
1184 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_onnxruntime.so
1188 %{_includedir}/nnstreamer/tensor_if.h
1189 %{_includedir}/nnstreamer/tensor_filter_custom.h
1190 %{_includedir}/nnstreamer/tensor_filter_custom_easy.h
1191 %{_includedir}/nnstreamer/tensor_converter_custom.h
1192 %{_includedir}/nnstreamer/tensor_decoder_custom.h
1193 %{_includedir}/nnstreamer/nnstreamer_plugin_api_decoder.h
1194 %{_includedir}/nnstreamer/nnstreamer_plugin_api_converter.h
1195 %{_includedir}/nnstreamer/nnstreamer_plugin_api_trainer.h
1196 %{_includedir}/nnstreamer/nnstreamer_plugin_api.h
1197 %{_includedir}/nnstreamer/nnstreamer_util.h
1198 %{_includedir}/nnstreamer/tensor_filter_cpp.hh
1199 %{_includedir}/nnstreamer/nnstreamer_cppplugin_api_filter.hh
1200 %{_libdir}/pkgconfig/nnstreamer.pc
1201 %{_libdir}/pkgconfig/nnstreamer-cpp.pc
1203 %files devel-internal
1204 %{_includedir}/nnstreamer/nnstreamer_internal.h
1205 %{_includedir}/nnstreamer/tensor_filter_single.h
1206 %{_libdir}/pkgconfig/nnstreamer-internal.pc
1210 %exclude %{_libdir}/libnnstreamer-single.a
1213 %{_includedir}/nnstreamer/tensor_typedef.h
1214 %{_includedir}/nnstreamer/nnstreamer_plugin_api_filter.h
1215 %{_includedir}/nnstreamer/nnstreamer_plugin_api_util.h
1216 %{_includedir}/nnstreamer/nnstreamer_version.h
1217 %{_libdir}/pkgconfig/nnstreamer-single.pc
1219 %files single-devel-static
1220 %{_libdir}/libnnstreamer-single.a
1222 %if 0%{?testcoverage}
1223 %files unittest-coverage
1224 %{_datadir}/nnstreamer/unittest/*
1227 %if 0%{?nnfw_support}
1229 %manifest nnstreamer.manifest
1230 %defattr(-,root,root,-)
1231 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_nnfw.so
1234 %if 0%{?armnn_support}
1236 %manifest nnstreamer.manifest
1237 %defattr(-,root,root,-)
1238 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_armnn.so
1241 %if 0%{mvncsdk2_support}
1242 %files -n nnstreamer-ncsdk2
1243 %defattr(-,root,root,-)
1244 %manifest nnstreamer.manifest
1245 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_movidius-ncsdk2.so
1246 %endif # mvncsdk2_support
1248 %if 0%{?vivante_support}
1250 %defattr(-,root,root,-)
1251 %manifest nnstreamer.manifest
1252 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_vivante.so
1255 %if 0%{tizen_sensor_support}
1257 %manifest nnstreamer.manifest
1258 %{gstlibdir}/libnnstreamer-tizen-sensor.so
1259 %endif # tizen_sensor_support
1261 %if 0%{?grpc_support}
1263 %defattr(-,root,root,-)
1264 %manifest nnstreamer.manifest
1266 %{gstlibdir}/libnnstreamer-grpc.so
1268 %if 0%{?protobuf_support}
1269 %files grpc-protobuf
1270 %defattr(-,root,root,-)
1271 %manifest nnstreamer.manifest
1273 %{_libdir}/libnnstreamer_grpc_protobuf.so
1276 %if 0%{?flatbuf_support}
1278 %defattr(-,root,root,-)
1279 %manifest nnstreamer.manifest
1281 %{_libdir}/libnnstreamer_grpc_flatbuf.so
1284 %endif # grpc_support
1286 %if 0%{?edgetpu_support}
1288 %manifest nnstreamer.manifest
1290 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_edgetpu.so
1293 %if 0%{?release_test}
1295 %manifest nnstreamer.manifest
1296 %{_libdir}/libnnstreamer_unittest_util.so
1297 %{_libdir}/libcppfilter_test.so
1298 %if 0%{?mvncsdk2_support}
1299 %{_libdir}/libmvncsdk_test.so
1301 %{_prefix}/lib/nnstreamer/customfilters/*.so
1302 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/nnstreamer-test.ini
1303 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/tests
1306 %if 0%{?openvino_support}
1308 %manifest nnstreamer.manifest
1310 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_openvino.so
1314 %{_bindir}/nnstreamer-check
1315 %{_bindir}/nnstreamer-parser
1316 %{_prefix}/%{nnstbindir}/nnstreamer-check
1317 %{_prefix}/%{nnstbindir}/nnstreamer-parser
1320 %{gstlibdir}/libgstjoin.so
1321 %if 0%{?mqtt_support}
1322 %{gstlibdir}/libgstmqtt.so
1325 %if 0%{?datarepo_support}
1327 %manifest nnstreamer.manifest
1328 %defattr(-,root,root,-)
1330 %{gstlibdir}/libgstdatarepo.so
1333 %if 0%{?release_test}
1335 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/subplugin_unittest_template.cc.in
1336 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/nnstreamer-test.ini.in
1340 * Fri Sep 15 2023 MyungJoo Ham <myungjoo.ham@samsung.com>
1341 - Start development of 2.4.1 (2.4.2-RC1)
1343 * Tue Sep 12 2023 MyungJoo Ham <myungjoo.ham@samsung.com>
1344 - Release of 2.4.0, the new LTS version of 2023. (Tizen 8.0 M2)
1346 * Tue Sep 27 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1347 - Start development of 2.3.0 (2.4.0-RC1) for experimental and unstable features.
1349 * Thu Sep 22 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1350 - Release of 2.2.0, the new LTS version of 2022. (Tizen 7.0 M2)
1352 * Wed Apr 13 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1353 - Start development of 2.1.1 (2.2.0-RC2)
1355 * Tue Sep 28 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1356 - Start development of 2.1.0 (2.2.0-RC1)
1358 * Tue Sep 28 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1359 - Release of 2.0.0, the new LTS version of 2021.
1361 * Thu Jun 03 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1362 - Start development of 1.7.2 (1.8.0-RC3)
1364 * Fri Nov 20 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1365 - Start development of 1.7.1 (1.8.0-RC2)
1367 * Wed Sep 09 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1368 - Start development of 1.7.0 (1.8.0-RC1)
1370 * Wed Sep 09 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1371 - Release of 1.6.0 (LTS for Tizen 6.0 M2 and Android-next products)
1373 * Thu Jun 04 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1374 - Start development of 1.5.3 (1.6.0-RC4)
1376 * Wed Apr 08 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1377 - Start development of 1.5.2 (1.6.0-RC3)
1379 * Wed Mar 18 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1380 - Start development of 1.5.1 (1.6.0-RC2)
1382 * Tue Feb 11 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1383 - Start development of 1.5.0 (1.6.0-RC1)
1385 * Tue Feb 11 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1386 - Release of 1.4.0 (Tensor-filter API has been updated!)
1388 * Mon Feb 03 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1391 * Wed Dec 11 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1392 - 1.3.0 development starts
1394 * Wed Dec 11 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1397 * Thu Sep 26 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1398 - Release of 1.0.0 (1.0 RC2 == 1.0 Release for Tizen 5.5 M2)
1400 * Wed Aug 14 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1401 - Release of 0.3.0 (1.0 RC1)
1403 * Mon May 27 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1406 * Wed Mar 20 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1409 * Mon Feb 25 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1412 * Thu Jan 24 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1415 * Mon Dec 03 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1418 * Mon Oct 15 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1419 - Started single-binary packaging for 0.0.3
1421 * Fri May 25 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1422 - Packaged tensor_convert plugin.