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 0
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 BuildRequires: flatbuffers-devel
211 # tensorflow2-lite-custom requires scripts for rpm >= 4.9
212 BuildRequires: rpm >= 4.9
213 %global __requires_exclude ^libtensorflow2-lite-custom.*$
215 # custom_example_opencv filter requires opencv-devel
216 BuildRequires: opencv-devel
217 # For './testAll.sh' time limit.
218 BuildRequires: procps
220 %if 0%{?protobuf_support}
221 BuildRequires: protobuf-devel >= 3.4.0
224 %if 0%{?tensorflow_support}
225 BuildRequires: tensorflow
226 BuildRequires: tensorflow-devel
229 %if 0%{?armnn_support}
230 BuildRequires: armnn-devel
233 %if 0%{?edgetpu_support}
234 BuildRequires: pkgconfig(edgetpu)
237 %if 0%{?testcoverage}
238 # to be compatible with gcc-9, lcov should have a higher version than 1.14.1
240 # BuildRequires: taos-ci-unittest-coverage-assessment
243 %if 0%{mvncsdk2_support}
244 BuildRequires: pkgconfig(libmvnc)
247 %if 0%{openvino_support}
248 BuildRequires: pkgconfig(openvino)
252 # TODO: dann and opencv will be removed in the near future.
253 %if 0%{?vivante_support}
254 BuildRequires: pkgconfig(opencv)
255 BuildRequires: pkgconfig(dann)
256 BuildRequires: pkgconfig(ovxlib)
257 BuildRequires: pkgconfig(amlogic-vsi-npu-sdk)
260 %if 0%{?grpc_support}
261 BuildRequires: grpc-devel
265 BuildRequires: pkgconfig(dlog)
266 # For tizen sensor support
267 BuildRequires: pkgconfig(sensor)
268 BuildRequires: capi-system-sensor-devel
271 %if 0%{?nnfw_support}
272 # Tizen 5.5 M2+ support nn-runtime (nnfw)
273 # As of 2019-09-24, unfortunately, nnfw does not support pkg-config
274 BuildRequires: nnfw-devel
277 %if 0%{?pytorch_support}
278 BuildRequires: pytorch-devel
281 # Caffe2 is merged to pytorch
282 %if 0%{?caffe2_support}
283 BuildRequires: pytorch-devel
287 BuildRequires: lua-devel
291 BuildRequires: tvm-runtime-devel
294 %if 0%{?snpe_support}
295 BuildRequires: snpe-devel
298 %if 0%{?trix_engine_support}
299 BuildRequires: npu-engine-devel
302 %if 0%{?onnxruntime_support}
303 BuildRequires: onnxruntime-devel
306 # Unit Testing Uses SSAT (https://github.com/myungjoo/SSAT.git)
307 %if 0%{?unit_test} || 0%{?edge_test}
308 BuildRequires: ssat >= 1.1.0
309 # Mosquitto MQTT broker for unit testing
310 BuildRequires: mosquitto
313 # For ORC (Oil Runtime Compiler)
314 BuildRequires: pkgconfig(orc-0.4)
316 # For nnstreamer-parser
321 %if 0%{?datarepo_support}
322 BuildRequires: pkgconfig(json-glib-1.0)
325 # Note that debug packages generate an additional build and storage cost.
326 # If you do not need debug packages, run '$ gbs -c .TAOS-CI/.gbs.conf build ... --define "_skip_debug_rpm 1"'.
328 %if "%{?_skip_debug_rpm}" == "1"
329 %global debug_package %{nil}
330 %global __debug_install_post %{nil}
333 ## Define Packages ##
335 NNStreamer is a set of gstreamer plugins to support general neural networks
336 and their plugins in a gstreamer stream. NNStreamer is a meta package of
337 nnstreamer-core and nnstreamer-configuration
340 Requires: gstreamer >= 1.8.0
341 %if 0%{?nnstreamer_edge_support}
342 Requires: nnstreamer-edge
344 Summary: NNStreamer core package
346 NNStreamer is a set of gstreamer plugins to support general neural networks
347 and their plugins in a gstreamer stream, this package is core package without configuration
350 Summary: NNStreamer singe-shot package
352 Element to use general neural network framework directly without gstreamer pipeline.
354 %package default-configuration
355 Summary: NNStreamer global configuration
356 Provides: nnstreamer-configuration = %{version}-%{release}
357 Conflicts: nnstreamer-test-devel
358 %description default-configuration
359 NNStreamer's global configuration setup for the end user.
362 %if 0%{?tensorflow_support}
364 Summary: NNStreamer TensorFlow Support
365 Requires: nnstreamer-single = %{version}-%{release}
367 %description tensorflow
368 NNStreamer's tensor_filter subplugin of TensorFlow.
369 It uses C-API of tensorflow, which is not yet stable as of 1.1x.
370 Thus, the user needs to check the version of Tensorflow with the
371 Tensorflow used for building this package.
374 # for tensorflow-lite
375 %if 0%{?tensorflow_lite_support}
376 %package tensorflow-lite
377 Summary: NNStreamer TensorFlow Lite Support
378 Requires: nnstreamer-single = %{version}-%{release}
379 # tensorflow-lite provides .a file and it's embedded into the subplugin. No dep to tflite.
380 %description tensorflow-lite
381 NNStreamer's tensor_filter subplugin of TensorFlow Lite.
384 # for tensorflow2-lite
385 %if 0%{?tensorflow2_lite_support}
386 %package tensorflow2-lite
387 Summary: NNStreamer TensorFlow2 Lite Support
388 Requires: nnstreamer-single = %{version}-%{release}
389 # tensorflow2-lite provides .a file and it's embedded into the subplugin. No dep to tflite.
390 %description tensorflow2-lite
391 NNStreamer's tensor_filter subplugin of TensorFlow2 Lite.
394 %if 0%{?python3_support}
396 Summary: NNStreamer Python3 Custom Filter Support
397 Requires: nnstreamer = %{version}-%{release}
399 NNStreamer's tensor_filter subplugin of Python3.
402 %if 0%{?armnn_support}
404 Summary: NNStreamer Arm NN support
405 Requires: nnstreamer-single = %{version}-%{release}
408 NNStreamer's tensor_filter subplugin of Arm NN Inference Engine.
411 # Support vivante subplugin
412 %if 0%{?vivante_support}
414 Summary: NNStreamer subplugin for Verisilicon's Vivante
415 Requires: nnstreamer-single = %{version}-%{release}
417 NNStreamer filter subplugin for Verisilicon Vivante.
418 %define enable_vivante -Denable-vivante=true
420 %define enable_vivante -Denable-vivante=false
424 %if 0%{?protobuf_support}
426 Summary: NNStreamer Protobuf Support
427 Requires: nnstreamer = %{version}-%{release}
429 %description protobuf
430 NNStreamer's tensor_converter and decoder subplugin of Protobuf.
434 %if 0%{?flatbuf_support}
436 Summary: NNStreamer Flatbuf Support
437 Requires: nnstreamer = %{version}-%{release}
438 Requires: flatbuffers
439 %if "%{?profile}" != "tv"
440 Recommends: flatbuffers-python
443 NNStreamer's tensor_converter and decoder subplugin of flatbuf.
447 %if 0%{?pytorch_support}
449 Summary: NNStreamer PyTorch Support
450 Requires: nnstreamer-single = %{version}-%{release}
453 NNStreamer's tensor_filter subplugin of pytorch
457 %if 0%{?caffe2_support}
459 Summary: NNStreamer caffe2 Support
460 Requires: nnstreamer-single = %{version}-%{release}
463 NNStreamer's tensor_filter subplugin of caffe2
469 Summary: NNStreamer lua Support
470 Requires: nnstreamer-single = %{version}-%{release}
473 NNStreamer's tensor_filter subplugin of lua
478 Summary: NNStreamer TVM support
479 Requires: nnstreamer = %{version}-%{release}
482 NNStreamer's tensor_filter subplugin of tvm
486 %if 0%{?snpe_support}
488 Summary: NNStreamer snpe Support
489 Requires: nnstreamer-single = %{version}-%{release}
492 NNStreamer's tensor_filter subplugin of snpe
496 %if 0%{?trix_engine_support}
498 Summary: NNStreamer TRIx-Engine support
499 Requires: nnstreamer-single = %{version}-%{release}
500 Requires: trix-engine
501 %description trix-engine
502 NNStreamer's tensor_filter subplugin of trix-engine
506 %if 0%{?onnxruntime_support}
508 Summary: NNStreamer onnxruntime Support
509 Requires: nnstreamer-single = %{version}-%{release}
510 %description onnxruntime
511 NNStreamer's tensor_filter subplugin of onnxruntime
515 Summary: Development package for custom tensor operator developers (tensor_filter/custom)
516 Requires: nnstreamer = %{version}-%{release}
517 Requires: nnstreamer-single-devel = %{version}-%{release}
518 Requires: glib2-devel
519 Requires: gstreamer-devel
521 Development package for subplugin or custom filter developers.
522 Developers may add support for new hardware accelerators or neural network
523 frameworks, or introduce new data types and their converters for tensors.
524 However, applications or service developers generally do not need this.
525 This contains corresponding header files and .pc pkgconfig file.
527 %package devel-internal
528 Summary: Development package to access internal functions of NNStreamer
529 Requires: nnstreamer-devel = %{version}-%{release}
530 %description devel-internal
531 Development package to access internal functions of NNStreamer.
532 This may be used by API packages, which wrap nnstreamer features.
533 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.
535 %package devel-static
536 Summary: Static library for nnstreamer-devel package
537 Requires: nnstreamer-devel = %{version}-%{release}
538 %description devel-static
539 Static library package of nnstreamer-devel.
541 %package single-devel
542 Summary: Development package for NNStreamer single-shot
543 Requires: nnstreamer-single = %{version}-%{release}
544 %description single-devel
545 Development package for NNStreamer single-shot.
547 %package single-devel-static
548 Summary: Static library for nnstreamer-single-devel package
549 Requires: nnstreamer-single-devel = %{version}-%{release}
550 %description single-devel-static
551 Static library package of nnstreamer-single-devel.
554 Summary: Development package to provide testable environment of a subplugin (tensor_filter/custom)
555 Requires: nnstreamer-devel = %{version}-%{release}
556 Requires: nnstreamer-single-devel = %{version}-%{release}
557 Provides: nnstreamer-configuration = %{version}-%{release}
558 Conflicts: nnstreamer-default-configuration
559 %description test-devel
560 Development package to provide testable environment of NNStreamer sub-plugin.
561 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.
562 Also This package provides test templates to be used with.
564 %if 0%{?testcoverage}
565 %package unittest-coverage
566 Summary: NNStreamer UnitTest Coverage Analysis Result
567 %description unittest-coverage
568 HTML pages of lcov results of NNStreamer generated during rpmbuild
571 %if 0%{?nnfw_support}
573 Summary: NNStreamer Tizen-nnfw runtime support
574 Requires: nnstreamer-single = %{version}-%{release}
577 NNStreamer's tensor_filter subplugin of Tizen-NNFW Runtime. (5.5 M2 +)
580 %if 0%{?mvncsdk2_support}
582 Summary: NNStreamer Intel Movidius NCSDK2 support
583 Requires: nnstreamer-single = %{version}-%{release}
584 Group: Machine Learning/ML Framework
586 NNStreamer's tensor_filter subplugin of Intel Movidius Neural Compute stick SDK2.
587 %endif # mvncsdk2_support
589 %if 0%{openvino_support}
591 Summary: NNStreamer OpenVino support
592 Requires: nnstreamer-single = %{version}-%{release}
594 Group: Machine Learning/ML Framework
595 %description openvino
596 NNStreamer's tensor_filter subplugin for OpenVino support.
597 %endif # openvino_support
599 # Add Tizen's sensor framework API integration
600 %if 0%{tizen_sensor_support}
601 %package tizen-sensor
602 Summary: NNStreamer integration of tizen sensor framework (tensor_src_tizensensor)
603 Requires: nnstreamer = %{version}-%{release}
604 Requires: capi-system-sensor
605 %description tizen-sensor
606 You can include Tizen sensor framework nodes as source elements of GStreamer/NNStreamer pipelines with this package.
607 %endif # tizen_sensor_support
611 Summary: NNStreamer gRPC support
612 Requires: nnstreamer = %{version}-%{release}
614 Recommends: nnstreamer-grpc-protobuf = %{version}-%{release}
615 Recommends: nnstreamer-grpc-flatbuf = %{version}-%{release}
618 NNStreamer's tensor_source/sink plugins for gRPC support.
620 %if 0%{protobuf_support}
621 %package grpc-protobuf
622 Summary: NNStreamer gRPC/Protobuf support
623 Requires: nnstreamer-grpc = %{version}-%{release}
624 Requires: nnstreamer-protobuf = %{version}-%{release}
625 %description grpc-protobuf
626 NNStreamer's gRPC IDL support for protobuf
629 %if 0%{flatbuf_support}
630 %package grpc-flatbuf
631 Summary: NNStreamer gRPC/Flatbuf support
632 Requires: nnstreamer-grpc = %{version}-%{release}
633 Requires: nnstreamer-flatbuf = %{version}-%{release}
634 %description grpc-flatbuf
635 NNStreamer's gRPC IDL support for flatbuf
638 %endif # grpc_support
640 %if 0%{?edgetpu_support}
642 Summary: NNStreamer plugin for Google-Coral Edge TPU
643 Requires: libedgetpu1
644 Requires: nnstreamer-single = %{version}-%{release}
646 You may enable this package to use Google Edge TPU with NNStreamer and Tizen ML APIs.
649 %if 0%{?release_test}
651 Summary: NNStreamer unittests for core and plugins
652 Requires: nnstreamer = %{version}-%{release}
653 %description unittests
654 Various unit test cases and custom subplugin examples for NNStreamer.
658 Summary: NNStreamer developer utilities
660 NNStreamer developer utilities include nnstreamer configuration checker.
663 Summary: NNStreamer extra packages
664 %if 0%{?mqtt_support}
665 BuildRequires: pkgconfig(paho-mqtt-c)
669 Provides additional gstreamer plugins for nnstreamer pipelines
671 %if 0%{?datarepo_support}
673 Summary: NNStreamer MLOps Data Repository plugin packages
674 %description datarepo
675 NNStreamer's datareposrc/sink plugins for reading and writing files in MLOps Data Repository
676 %define enable_datarepo -Ddatarepo-support=enabled
678 %define enable_datarepo -Ddatarepo-support=disabled
681 ## Define build options ##
682 %define enable_tizen -Denable-tizen=false
683 %define enable_tizen_sensor -Denable-tizen-sensor=false
684 %define enable_mvncsdk2 -Dmvncsdk2-support=disabled
685 %define enable_openvino -Denable-openvino=false
686 %define enable_nnfw_runtime -Dnnfw-runtime-support=disabled
687 %define element_restriction -Denable-element-restriction=false
688 %define enable_test -Denable-test=true
689 %define install_test -Dinstall-test=false
691 %if 0%{mvncsdk2_support}
692 %define enable_mvncsdk2 -Dmvncsdk2-support=enabled
695 %if 0%{openvino_support}
696 %define enable_openvino -Denable-openvino=true
699 %if 0%{?nnfw_support}
700 %define enable_nnfw_runtime -Dnnfw-runtime-support=enabled
701 %endif # nnfw_support
703 %if 0%{tizen_sensor_support}
704 %define enable_tizen_sensor -Denable-tizen-sensor=true
708 %define enable_test -Denable-test=false
711 %if 0%{?release_test}
712 %define install_test -Dinstall-test=true
716 %define enable_tizen -Denable-tizen=true -Dtizen-version-major=0%{tizen_version_major}
717 # Element allowance in Tizen
718 %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 '
719 %define allowed_element_edgeai 'rtpdec rtspsrc rtspclientsink zmqsrc zmqsink mqttsrc mqttsink udpsrc udpsink multiudpsink tcpclientsink tcpclientsrc tcpserversink tcpserversrc edgesrc edgesink gdppay gdpdepay '
720 %define allowed_element_audio 'audioamplify audiochebband audiocheblimit audiodynamic audioecho audiofirfilter audioiirfilter audioinvert audiokaraoke audiopanorama audiowsincband audiowsinclimit scaletempo stereo '
721 %define allowed_element_tizen 'tizencamerasrc avsysvideosrc camerasrc tvcamerasrc fimcconvert tizenwlsink '
722 %define allowed_element_extra 'join datareposrc datareposink '
724 %define allowed_element_all %{allowed_element_base}%{allowed_element_audio}%{allowed_element_edgeai}%{allowed_element_tizen}%{allowed_element_extra}
725 %if "%{?profile}" == "tv"
726 %define allowed_element_vd 'tvdpbsrc '
727 %define allowed_element %{allowed_element_all}%{allowed_element_vd}
729 %define allowed_element %{allowed_element_all}
731 %define element_restriction -Denable-element-restriction=true -Dallowed-elements=%{allowed_element}
735 %if 0%{?tensorflow_support}
736 %define enable_tf -Dtf-support=enabled
738 %define enable_tf -Dtf-support=disabled
741 # Support tensorflow-lite
742 %if 0%{?tensorflow_lite_support}
743 %define enable_tf_lite -Dtflite-support=enabled
745 %define enable_tf_lite -Dtflite-support=disabled
748 # Support tensorflow2-lite
749 %if 0%{?tensorflow2_lite_support}
750 %define enable_tf2_lite -Dtflite2-support=enabled -Dtflite2-custom-support=enabled
752 %define enable_tf2_lite -Dtflite2-support=disabled -Dtflite2-custom-support=disabled
756 %if 0%{?pytorch_support}
757 %define enable_pytorch -Dpytorch-support=enabled
759 %define enable_pytorch -Dpytorch-support=disabled
763 %if 0%{?caffe2_support}
764 %define enable_caffe2 -Dcaffe2-support=enabled
766 %define enable_caffe2 -Dcaffe2-support=disabled
770 %if 0%{?armnn_support}
771 %define enable_armnn -Darmnn-support=enabled
773 %define enable_armnn -Darmnn-support=disabled
777 %if 0%{?python3_support}
778 %define enable_python3 -Dpython3-support=enabled
780 %define enable_python3 -Dpython3-support=disabled
784 %if 0%{?edgetpu_support}
785 %define enable_edgetpu -Denable-edgetpu=true
787 %define enable_edgetpu -Denable-edgetpu=false
791 %if 0%{?flatbuf_support}
792 %define enable_flatbuf -Dflatbuf-support=enabled
794 %define enable_flatbuf -Dflatbuf-support=disabled
798 %if 0%{?mqtt_support}
799 %define enable_mqtt -Dmqtt-support=enabled
801 %define enable_mqtt -Dmqtt-support=disabled
806 %define enable_lua -Dlua-support=enabled
808 %define enable_lua -Dlua-support=disabled
813 %define enable_tvm -Dtvm-support=enabled
815 %define enable_tvm -Dtvm-support=disabled
818 # Support trix-engine
819 %if 0%{?trix_engine_support}
820 %define enable_trix_engine -Dtrix-engine-support=enabled
822 %define enable_trix_engine -Dtrix-engine-support=disabled
826 %if 0%{?ml_agent_support}
827 %define enable_ml_agent -Dml-agent-support=enabled
829 %define enable_ml_agent -Dml-agent-support=disabled
832 # Support onnxruntime
833 %if 0%{?onnxruntime_support}
834 %define enable_onnxruntime -Donnxruntime-support=enabled
836 %define enable_onnxruntime -Donnxruntime-support=disabled
839 # Framework priority for each file extension
840 %define fw_priority_bin ''
841 %define fw_priority_nb ''
843 %if "%{?profile}" == "tv"
844 %define fw_priority_bin 'vd_aifw'
845 %define fw_priority_nb 'vd_aifw'
847 %if 0%{openvino_support}
848 %define fw_priority_bin 'openvino'
852 %define fp16_enabled 0
854 %define fp16_enabled 1
855 # x64/x86 requires GCC >= 12 for fp16 support.
859 %if 0%{?fp16_enabled}
860 %define fp16_support -Denable-float16=true
862 %define fp16_support -Denable-float16=false
865 %if 0%{?nnstreamer_edge_support}
866 %define nnsedge -Dnnstreamer-edge-support=enabled
868 %define nnsedge -Dnnstreamer-edge-support=disabled
871 %define fw_priority -Dframework-priority-nb=%{fw_priority_nb} -Dframework-priority-bin=%{fw_priority_bin}
879 # Remove compiler flags for meson to decide the cpp version
880 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-std=gnu++11||"`
882 %if 0%{?testcoverage}
883 # To test coverage, disable optimizations (and should unset _FORTIFY_SOURCE to use -O0)
884 CFLAGS=`echo $CFLAGS | sed -e "s|-O[1-9]|-O0|g"`
885 CFLAGS=`echo $CFLAGS | sed -e "s|-Wp,-D_FORTIFY_SOURCE=[1-9]||g"`
886 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-O[1-9]|-O0|g"`
887 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-Wp,-D_FORTIFY_SOURCE=[1-9]||g"`
888 # also, use the meson's base option, -Db_coverage, instead of --coverage/-fprofile-arcs and -ftest-coverage
889 %define enable_test_coverage -Db_coverage=true
891 %define enable_test_coverage -Db_coverage=false
896 meson --buildtype=plain --prefix=%{_prefix} --sysconfdir=%{_sysconfdir} --libdir=%{_lib} \
897 --bindir=%{nnstbindir} --includedir=include -Dsubplugindir=%{_prefix}/lib/nnstreamer \
898 %{enable_tizen} %{element_restriction} %{fw_priority} -Denable-env-var=false -Denable-symbolic-link=false \
899 %{enable_tf_lite} %{enable_tf2_lite} %{enable_tf} %{enable_pytorch} %{enable_caffe2} %{enable_python3} \
900 %{enable_nnfw_runtime} %{enable_mvncsdk2} %{enable_openvino} %{enable_armnn} %{enable_edgetpu} %{enable_vivante} \
901 %{enable_flatbuf} %{enable_trix_engine} %{enable_datarepo} \
902 %{enable_tizen_sensor} %{enable_mqtt} %{enable_lua} %{enable_tvm} %{enable_onnxruntime} %{enable_test} %{enable_test_coverage} %{install_test} \
903 %{fp16_support} %{nnsedge} %{enable_ml_agent} \
906 ninja -C %{builddir} %{?_smp_mflags}
908 export NNSTREAMER_SOURCE_ROOT_PATH=$(pwd)
909 export NNSTREAMER_BUILD_ROOT_PATH=$(pwd)/%{builddir}
910 export GST_PLUGIN_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/gst:${NNSTREAMER_BUILD_ROOT_PATH}/ext
911 export NNSTREAMER_CONF=${NNSTREAMER_BUILD_ROOT_PATH}/nnstreamer-test.ini
912 export NNSTREAMER_FILTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_filter
913 export NNSTREAMER_DECODERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_decoder
914 export NNSTREAMER_CONVERTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_converter
915 export NNSTREAMER_TRAINERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_trainer
917 %define test_script $(pwd)/packaging/run_unittests_binaries.sh
919 # if it's tizen && non-TV, run unittest even if "unit_test"==0 for build-time sanity checks.
920 %if ( %{with tizen} && "%{?profile}" != "tv" )
922 bash %{test_script} ./tests/tizen_nnfw_runtime/unittest_nnfw_runtime_raw
924 %if 0%{tizen_sensor_support}
925 bash %{test_script} ./tests/tizen_sensor/unittest_tizen_sensor
929 # If "unit_test"==0, don't run these for the sake of build speed.
931 bash %{test_script} ./tests
932 bash %{test_script} ./tests/cpp_methods
933 bash %{test_script} ./tests/nnstreamer_filter_extensions_common
934 %if 0%{?datarepo_support}
935 bash %{test_script} ./tests/nnstreamer_datarepo
937 %if 0%{?nnstreamer_edge_support}
938 bash %{test_script} ./tests/nnstreamer_edge
940 %if 0%{mvncsdk2_support}
941 LD_LIBRARY_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/tests/nnstreamer_filter_mvncsdk2:. bash %{test_script} ./tests/nnstreamer_filter_mvncsdk2/unittest_filter_mvncsdk2
943 %if 0%{edgetpu_support}
944 LD_LIBRARY_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/tests/nnstreamer_filter_edgetpu:. bash %{test_script} ./tests/nnstreamer_filter_edgetpu/unittest_edgetpu
946 %ifarch %arm x86_64 aarch64 ## @todo This is a workaround. Need to remove %ifarch/%endif some day.
947 bash %{test_script} ./tests/nnstreamer_filter_tvm
952 ## @todo Workaround for QEMU compatibility issue. Newer qemu may be ok with this.
953 export SKIP_QEMU_ARM_INCOMPATIBLE_TESTS=1
955 export SKIP_QEMU_ARM_INCOMPATIBLE_TESTS=0
958 %if 0%{?fp16_enabled}
959 ## If fp16 tests fail, stop the build!
960 export FLOAT16_SUPPORTED=1
962 ssat -n -p=1 --summary summary.txt -cn _n
965 python3 tools/development/count_test_cases.py %{builddir} tests/summary.txt
967 %if 0%{?edge_test} && 0%{?nnstreamer_edge_support}
968 bash %{test_script} tests/nnstreamer_edge
969 pushd tests/nnstreamer_edge
970 ssat -n -p=1 --summary summary.txt -cn _n
972 python3 tools/development/count_test_cases.py %{builddir} tests/nnstreamer_edge/summary.txt
977 DESTDIR=%{buildroot} ninja -C %{builddir} install
979 mkdir -p %{buildroot}%{_bindir}
980 pushd %{buildroot}%{_bindir}
981 ln -sf %{_prefix}/%{nnstbindir}/nnstreamer-check nnstreamer-check
982 ln -sf %{_prefix}/%{nnstbindir}/nnstreamer-parser nnstreamer-parser
985 %if 0%{?python3_support}
986 mkdir -p %{buildroot}%{python3_sitelib}
987 pushd %{buildroot}%{python3_sitelib}
988 ln -sf %{_libdir}/nnstreamer_python3.so nnstreamer_python.so
992 %if 0%{?snpe_support}
993 %define snpe_sub_plugin libnnstreamer_filter_snpe.so
994 %define files_for_snpe_subpackage files_for_snpe_subpackage.txt
995 rm -f %{files_for_snpe_subpackage}
996 find %{buildroot} -type f -name '%{snpe_sub_plugin}' -printf '/%%P\n' > %{files_for_snpe_subpackage}
999 %if 0%{?testcoverage}
1001 # The included directories are:
1003 # gst: the nnstreamer elements
1004 # nnstreamer_example: custom plugin examples
1005 # common: common libraries for gst (elements)
1006 # include: common library headers and headers for external code (packaged as "devel")
1008 # Intentionally excluded directories are:
1010 # tests: We are not going to show testcoverage of the test code itself or example applications
1012 # 'lcov' generates the date format with UTC time zone by default. Let's replace UTC with KST.
1013 # If you ccan get a root privilege, run ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
1014 TZ='Asia/Seoul'; export TZ
1017 VCS=`cat ${RPM_SOURCE_DIR}/nnstreamer.spec | grep "^VCS:" | sed "s|VCS:\\W*\\(.*\\)|\\1|"`
1019 # Create human readable unit test coverage report web page.
1020 # Create null gcda files if gcov didn't create it because there is completely no unit test for them.
1021 find . -name "*.gcno" -exec sh -c 'touch -a "${1%.gcno}.gcda"' _ {} \;
1022 # Remove gcda for meaningless file (CMake's autogenerated)
1023 find . -name "CMakeCCompilerId*.gcda" -delete
1024 find . -name "CMakeCXXCompilerId*.gcda" -delete
1025 #find . -path "/%{builddir}/*.j
1027 lcov -t 'NNStreamer Unit Test Coverage' -o unittest.info -c -d . -b %{builddir} --no-external
1028 # Exclude generated files (e.g., Orc, Protobuf) and device-dependent filters.
1029 lcov -r unittest.info "*/*-orc.*" "*/tests/*" "*/tools/*" "*/meson*/*" "*/*@sha/*" "*/*_openvino*" "*/*_edgetpu*" "*/*_movidius_ncsdk2*" "*/*.so.p/*" -o unittest-filtered.info
1030 # Visualize the report
1031 genhtml -o result unittest-filtered.info -t "nnstreamer %{version}-%{release} ${VCS}" --ignore-errors source -p ${RPM_BUILD_DIR}
1033 mkdir -p %{buildroot}%{_datadir}/nnstreamer/unittest/
1034 cp -r result %{buildroot}%{_datadir}/nnstreamer/unittest/
1035 %endif # test coverage
1037 %post -p /sbin/ldconfig
1039 %postun -p /sbin/ldconfig
1044 %manifest nnstreamer.manifest
1045 %defattr(-,root,root,-)
1047 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_bounding_boxes.so
1048 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_tensor_region.so
1049 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_pose_estimation.so
1050 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_image_segment.so
1051 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_image_labeling.so
1052 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_direct_video.so
1053 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_octet_stream.so
1054 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_cpp.so
1055 %{gstlibdir}/libnnstreamer.so
1056 %if 0%{?nnstreamer_edge_support}
1057 %{gstlibdir}/libgstedge.so
1059 %{_libdir}/libnnstreamer.so
1062 %manifest nnstreamer.manifest
1063 %defattr(-,root,root,-)
1065 %{_libdir}/libnnstreamer-single.so
1067 %files default-configuration
1068 %config %{_sysconfdir}/nnstreamer.ini
1071 %if 0%{?tensorflow_support}
1073 %manifest nnstreamer.manifest
1074 %defattr(-,root,root,-)
1075 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow.so
1078 %if 0%{?tensorflow_lite_support}
1079 %files tensorflow-lite
1080 %manifest nnstreamer.manifest
1081 %defattr(-,root,root,-)
1082 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow1-lite.so
1085 # for tensorflow2-lite
1086 %if 0%{?tensorflow2_lite_support}
1087 %files tensorflow2-lite
1088 %manifest nnstreamer.manifest
1089 %defattr(-,root,root,-)
1090 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow2-lite.so
1091 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow2-lite-custom.so
1094 %if 0%{?python3_support}
1096 %manifest nnstreamer.manifest
1097 %defattr(-,root,root,-)
1098 %{_libdir}/nnstreamer_python3.so
1099 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_python3.so
1100 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_python3.so
1101 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_python3.so
1102 %{python3_sitelib}/nnstreamer_python.so
1105 %if 0%{?protobuf_support}
1107 %manifest nnstreamer.manifest
1108 %defattr(-,root,root,-)
1109 %{_libdir}/libnnstreamer_protobuf.so
1110 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_protobuf.so
1111 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_protobuf.so
1114 %if 0%{?flatbuf_support}
1116 %manifest nnstreamer.manifest
1117 %defattr(-,root,root,-)
1118 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_flatbuf.so
1119 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_flatbuf.so
1120 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_flexbuf.so
1121 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_flexbuf.so
1125 %if 0%{?pytorch_support}
1127 %manifest nnstreamer.manifest
1128 %defattr(-,root,root,-)
1129 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_pytorch.so
1133 %if 0%{?caffe2_support}
1135 %manifest nnstreamer.manifest
1136 %defattr(-,root,root,-)
1137 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_caffe2.so
1141 %if 0%{?lua_support}
1143 %manifest nnstreamer.manifest
1144 %defattr(-,root,root,-)
1145 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_lua.so
1149 %if 0%{?tvm_support}
1151 %manifest nnstreamer.manifest
1152 %defattr(-,root,root,-)
1153 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tvm.so
1157 %if 0%{?snpe_support}
1158 # Workaround: Conditionally enable nnstreamer-snpe rpm package
1159 # when existing actual snpe library (snpe.pc)
1160 %files snpe -f %{files_for_snpe_subpackage}
1161 %manifest nnstreamer.manifest
1162 %defattr(-,root,root,-)
1166 %if 0%{?trix_engine_support}
1168 %manifest nnstreamer.manifest
1169 %defattr(-,root,root,-)
1170 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_trix-engine.so
1174 %if 0%{?onnxruntime_support}
1176 %manifest nnstreamer.manifest
1177 %defattr(-,root,root,-)
1178 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_onnxruntime.so
1182 %{_includedir}/nnstreamer/tensor_if.h
1183 %{_includedir}/nnstreamer/tensor_filter_custom.h
1184 %{_includedir}/nnstreamer/tensor_filter_custom_easy.h
1185 %{_includedir}/nnstreamer/tensor_converter_custom.h
1186 %{_includedir}/nnstreamer/tensor_decoder_custom.h
1187 %{_includedir}/nnstreamer/nnstreamer_plugin_api_decoder.h
1188 %{_includedir}/nnstreamer/nnstreamer_plugin_api_converter.h
1189 %{_includedir}/nnstreamer/nnstreamer_plugin_api.h
1190 %{_includedir}/nnstreamer/nnstreamer_util.h
1191 %{_includedir}/nnstreamer/tensor_filter_cpp.hh
1192 %{_includedir}/nnstreamer/nnstreamer_cppplugin_api_filter.hh
1193 %{_libdir}/pkgconfig/nnstreamer.pc
1194 %{_libdir}/pkgconfig/nnstreamer-cpp.pc
1196 %files devel-internal
1197 %{_includedir}/nnstreamer/nnstreamer_internal.h
1198 %{_includedir}/nnstreamer/tensor_filter_single.h
1199 %{_libdir}/pkgconfig/nnstreamer-internal.pc
1203 %exclude %{_libdir}/libnnstreamer-single.a
1206 %{_includedir}/nnstreamer/tensor_typedef.h
1207 %{_includedir}/nnstreamer/nnstreamer_plugin_api_filter.h
1208 %{_includedir}/nnstreamer/nnstreamer_plugin_api_trainer.h
1209 %{_includedir}/nnstreamer/nnstreamer_plugin_api_util.h
1210 %{_includedir}/nnstreamer/nnstreamer_version.h
1211 %{_libdir}/pkgconfig/nnstreamer-single.pc
1213 %files single-devel-static
1214 %{_libdir}/libnnstreamer-single.a
1216 %if 0%{?testcoverage}
1217 %files unittest-coverage
1218 %{_datadir}/nnstreamer/unittest/*
1221 %if 0%{?nnfw_support}
1223 %manifest nnstreamer.manifest
1224 %defattr(-,root,root,-)
1225 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_nnfw.so
1228 %if 0%{?armnn_support}
1230 %manifest nnstreamer.manifest
1231 %defattr(-,root,root,-)
1232 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_armnn.so
1235 %if 0%{mvncsdk2_support}
1236 %files -n nnstreamer-ncsdk2
1237 %defattr(-,root,root,-)
1238 %manifest nnstreamer.manifest
1239 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_movidius-ncsdk2.so
1240 %endif # mvncsdk2_support
1242 %if 0%{?vivante_support}
1244 %defattr(-,root,root,-)
1245 %manifest nnstreamer.manifest
1246 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_vivante.so
1249 %if 0%{tizen_sensor_support}
1251 %manifest nnstreamer.manifest
1252 %{gstlibdir}/libnnstreamer-tizen-sensor.so
1253 %endif # tizen_sensor_support
1255 %if 0%{?grpc_support}
1257 %defattr(-,root,root,-)
1258 %manifest nnstreamer.manifest
1260 %{gstlibdir}/libnnstreamer-grpc.so
1262 %if 0%{?protobuf_support}
1263 %files grpc-protobuf
1264 %defattr(-,root,root,-)
1265 %manifest nnstreamer.manifest
1267 %{_libdir}/libnnstreamer_grpc_protobuf.so
1270 %if 0%{?flatbuf_support}
1272 %defattr(-,root,root,-)
1273 %manifest nnstreamer.manifest
1275 %{_libdir}/libnnstreamer_grpc_flatbuf.so
1278 %endif # grpc_support
1280 %if 0%{?edgetpu_support}
1282 %manifest nnstreamer.manifest
1284 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_edgetpu.so
1287 %if 0%{?release_test}
1289 %manifest nnstreamer.manifest
1290 %{_libdir}/libnnstreamer_unittest_util.so
1291 %{_libdir}/libcppfilter_test.so
1292 %if 0%{?mvncsdk2_support}
1293 %{_libdir}/libmvncsdk_test.so
1295 %{_prefix}/lib/nnstreamer/customfilters/*.so
1296 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/nnstreamer-test.ini
1297 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/tests
1300 %if 0%{?openvino_support}
1302 %manifest nnstreamer.manifest
1304 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_openvino.so
1308 %{_bindir}/nnstreamer-check
1309 %{_bindir}/nnstreamer-parser
1310 %{_prefix}/%{nnstbindir}/nnstreamer-check
1311 %{_prefix}/%{nnstbindir}/nnstreamer-parser
1314 %{gstlibdir}/libgstjoin.so
1315 %if 0%{?mqtt_support}
1316 %{gstlibdir}/libgstmqtt.so
1319 %if 0%{?datarepo_support}
1321 %manifest nnstreamer.manifest
1322 %defattr(-,root,root,-)
1324 %{gstlibdir}/libgstdatarepo.so
1327 %if 0%{?release_test}
1329 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/subplugin_unittest_template.cc.in
1330 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/nnstreamer-test.ini.in
1334 * Fri Sep 15 2023 MyungJoo Ham <myungjoo.ham@samsung.com>
1335 - Start development of 2.4.1 (2.4.2-RC1)
1337 * Thu Sep 12 2023 MyungJoo Ham <myungjoo.ham@samsung.com>
1338 - Release of 2.4.0, the new LTS version of 2023. (Tizen 8.0 M2)
1340 * Tue Sep 27 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1341 - Start development of 2.3.0 (2.4.0-RC1) for experimental and unstable features.
1343 * Thu Sep 22 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1344 - Release of 2.2.0, the new LTS version of 2022. (Tizen 7.0 M2)
1346 * Wed Apr 13 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1347 - Start development of 2.1.1 (2.2.0-RC2)
1349 * Tue Sep 28 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1350 - Start development of 2.1.0 (2.2.0-RC1)
1352 * Tue Sep 28 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1353 - Release of 2.0.0, the new LTS version of 2021.
1355 * Thu Jun 03 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1356 - Start development of 1.7.2 (1.8.0-RC3)
1358 * Fri Nov 20 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1359 - Start development of 1.7.1 (1.8.0-RC2)
1361 * Wed Sep 09 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1362 - Start development of 1.7.0 (1.8.0-RC1)
1364 * Wed Sep 09 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1365 - Release of 1.6.0 (LTS for Tizen 6.0 M2 and Android-next products)
1367 * Thu Jun 04 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1368 - Start development of 1.5.3 (1.6.0-RC4)
1370 * Wed Apr 08 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1371 - Start development of 1.5.2 (1.6.0-RC3)
1373 * Wed Mar 18 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1374 - Start development of 1.5.1 (1.6.0-RC2)
1376 * Tue Feb 11 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1377 - Start development of 1.5.0 (1.6.0-RC1)
1379 * Tue Feb 11 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1380 - Release of 1.4.0 (Tensor-filter API has been updated!)
1382 * Mon Feb 03 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1385 * Wed Dec 11 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1386 - 1.3.0 development starts
1388 * Wed Dec 11 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1391 * Thu Sep 26 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1392 - Release of 1.0.0 (1.0 RC2 == 1.0 Release for Tizen 5.5 M2)
1394 * Wed Aug 14 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1395 - Release of 0.3.0 (1.0 RC1)
1397 * Mon May 27 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1400 * Wed Mar 20 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1403 * Mon Feb 25 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1406 * Thu Jan 24 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1409 * Mon Dec 03 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1412 * Mon Oct 15 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1413 - Started single-binary packaging for 0.0.3
1415 * Fri May 25 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1416 - Packaged tensor_convert plugin.