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
440 NNStreamer's tensor_converter and decoder subplugin of flatbuf.
444 %if 0%{?pytorch_support}
446 Summary: NNStreamer PyTorch Support
447 Requires: nnstreamer-single = %{version}-%{release}
450 NNStreamer's tensor_filter subplugin of pytorch
454 %if 0%{?caffe2_support}
456 Summary: NNStreamer caffe2 Support
457 Requires: nnstreamer-single = %{version}-%{release}
460 NNStreamer's tensor_filter subplugin of caffe2
466 Summary: NNStreamer lua Support
467 Requires: nnstreamer-single = %{version}-%{release}
470 NNStreamer's tensor_filter subplugin of lua
475 Summary: NNStreamer TVM support
476 Requires: nnstreamer = %{version}-%{release}
479 NNStreamer's tensor_filter subplugin of tvm
483 %if 0%{?snpe_support}
485 Summary: NNStreamer snpe Support
486 Requires: nnstreamer-single = %{version}-%{release}
489 NNStreamer's tensor_filter subplugin of snpe
493 %if 0%{?trix_engine_support}
495 Summary: NNStreamer TRIx-Engine support
496 Requires: nnstreamer-single = %{version}-%{release}
497 Requires: trix-engine
498 %description trix-engine
499 NNStreamer's tensor_filter subplugin of trix-engine
503 %if 0%{?onnxruntime_support}
505 Summary: NNStreamer onnxruntime Support
506 Requires: nnstreamer-single = %{version}-%{release}
507 %description onnxruntime
508 NNStreamer's tensor_filter subplugin of onnxruntime
512 Summary: Development package for custom tensor operator developers (tensor_filter/custom)
513 Requires: nnstreamer = %{version}-%{release}
514 Requires: nnstreamer-single-devel = %{version}-%{release}
515 Requires: glib2-devel
516 Requires: gstreamer-devel
518 Development package for subplugin or custom filter developers.
519 Developers may add support for new hardware accelerators or neural network
520 frameworks, or introduce new data types and their converters for tensors.
521 However, applications or service developers generally do not need this.
522 This contains corresponding header files and .pc pkgconfig file.
524 %package devel-internal
525 Summary: Development package to access internal functions of NNStreamer
526 Requires: nnstreamer-devel = %{version}-%{release}
527 %description devel-internal
528 Development package to access internal functions of NNStreamer.
529 This may be used by API packages, which wrap nnstreamer features.
530 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.
532 %package devel-static
533 Summary: Static library for nnstreamer-devel package
534 Requires: nnstreamer-devel = %{version}-%{release}
535 %description devel-static
536 Static library package of nnstreamer-devel.
538 %package single-devel
539 Summary: Development package for NNStreamer single-shot
540 Requires: nnstreamer-single = %{version}-%{release}
541 %description single-devel
542 Development package for NNStreamer single-shot.
544 %package single-devel-static
545 Summary: Static library for nnstreamer-single-devel package
546 Requires: nnstreamer-single-devel = %{version}-%{release}
547 %description single-devel-static
548 Static library package of nnstreamer-single-devel.
551 Summary: Development package to provide testable environment of a subplugin (tensor_filter/custom)
552 Requires: nnstreamer-devel = %{version}-%{release}
553 Requires: nnstreamer-single-devel = %{version}-%{release}
554 Provides: nnstreamer-configuration = %{version}-%{release}
555 Conflicts: nnstreamer-default-configuration
556 %description test-devel
557 Development package to provide testable environment of NNStreamer sub-plugin.
558 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.
559 Also This package provides test templates to be used with.
561 %if 0%{?testcoverage}
562 %package unittest-coverage
563 Summary: NNStreamer UnitTest Coverage Analysis Result
564 %description unittest-coverage
565 HTML pages of lcov results of NNStreamer generated during rpmbuild
568 %if 0%{?nnfw_support}
570 Summary: NNStreamer Tizen-nnfw runtime support
571 Requires: nnstreamer-single = %{version}-%{release}
574 NNStreamer's tensor_filter subplugin of Tizen-NNFW Runtime. (5.5 M2 +)
577 %if 0%{?mvncsdk2_support}
579 Summary: NNStreamer Intel Movidius NCSDK2 support
580 Requires: nnstreamer-single = %{version}-%{release}
581 Group: Machine Learning/ML Framework
583 NNStreamer's tensor_filter subplugin of Intel Movidius Neural Compute stick SDK2.
584 %endif # mvncsdk2_support
586 %if 0%{openvino_support}
588 Summary: NNStreamer OpenVino support
589 Requires: nnstreamer-single = %{version}-%{release}
591 Group: Machine Learning/ML Framework
592 %description openvino
593 NNStreamer's tensor_filter subplugin for OpenVino support.
594 %endif # openvino_support
596 # Add Tizen's sensor framework API integration
597 %if 0%{tizen_sensor_support}
598 %package tizen-sensor
599 Summary: NNStreamer integration of tizen sensor framework (tensor_src_tizensensor)
600 Requires: nnstreamer = %{version}-%{release}
601 Requires: capi-system-sensor
602 %description tizen-sensor
603 You can include Tizen sensor framework nodes as source elements of GStreamer/NNStreamer pipelines with this package.
604 %endif # tizen_sensor_support
608 Summary: NNStreamer gRPC support
609 Requires: nnstreamer = %{version}-%{release}
611 Recommends: nnstreamer-grpc-protobuf = %{version}-%{release}
612 Recommends: nnstreamer-grpc-flatbuf = %{version}-%{release}
615 NNStreamer's tensor_source/sink plugins for gRPC support.
617 %if 0%{protobuf_support}
618 %package grpc-protobuf
619 Summary: NNStreamer gRPC/Protobuf support
620 Requires: nnstreamer-grpc = %{version}-%{release}
621 Requires: nnstreamer-protobuf = %{version}-%{release}
622 %description grpc-protobuf
623 NNStreamer's gRPC IDL support for protobuf
626 %if 0%{flatbuf_support}
627 %package grpc-flatbuf
628 Summary: NNStreamer gRPC/Flatbuf support
629 Requires: nnstreamer-grpc = %{version}-%{release}
630 Requires: nnstreamer-flatbuf = %{version}-%{release}
631 %description grpc-flatbuf
632 NNStreamer's gRPC IDL support for flatbuf
635 %endif # grpc_support
637 %if 0%{?edgetpu_support}
639 Summary: NNStreamer plugin for Google-Coral Edge TPU
640 Requires: libedgetpu1
641 Requires: nnstreamer-single = %{version}-%{release}
643 You may enable this package to use Google Edge TPU with NNStreamer and Tizen ML APIs.
646 %if 0%{?release_test}
648 Summary: NNStreamer unittests for core and plugins
649 Requires: nnstreamer = %{version}-%{release}
650 %description unittests
651 Various unit test cases and custom subplugin examples for NNStreamer.
655 Summary: NNStreamer developer utilities
657 NNStreamer developer utilities include nnstreamer configuration checker.
660 Summary: NNStreamer extra packages
661 %if 0%{?mqtt_support}
662 BuildRequires: pkgconfig(paho-mqtt-c)
666 Provides additional gstreamer plugins for nnstreamer pipelines
668 %if 0%{?datarepo_support}
670 Summary: NNStreamer MLOps Data Repository plugin packages
671 %description datarepo
672 NNStreamer's datareposrc/sink plugins for reading and writing files in MLOps Data Repository
673 %define enable_datarepo -Ddatarepo-support=enabled
675 %define enable_datarepo -Ddatarepo-support=disabled
678 ## Define build options ##
679 %define enable_tizen -Denable-tizen=false
680 %define enable_tizen_sensor -Denable-tizen-sensor=false
681 %define enable_mvncsdk2 -Dmvncsdk2-support=disabled
682 %define enable_openvino -Denable-openvino=false
683 %define enable_nnfw_runtime -Dnnfw-runtime-support=disabled
684 %define element_restriction -Denable-element-restriction=false
685 %define enable_test -Denable-test=true
686 %define install_test -Dinstall-test=false
688 %if 0%{mvncsdk2_support}
689 %define enable_mvncsdk2 -Dmvncsdk2-support=enabled
692 %if 0%{openvino_support}
693 %define enable_openvino -Denable-openvino=true
696 %if 0%{?nnfw_support}
697 %define enable_nnfw_runtime -Dnnfw-runtime-support=enabled
698 %endif # nnfw_support
700 %if 0%{tizen_sensor_support}
701 %define enable_tizen_sensor -Denable-tizen-sensor=true
705 %define enable_test -Denable-test=false
708 %if 0%{?release_test}
709 %define install_test -Dinstall-test=true
713 %define enable_tizen -Denable-tizen=true -Dtizen-version-major=0%{tizen_version_major}
714 # Element allowance in Tizen
715 %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 '
716 %define allowed_element_edgeai 'rtpdec rtspsrc rtspclientsink zmqsrc zmqsink mqttsrc mqttsink udpsrc udpsink multiudpsink tcpclientsink tcpclientsrc tcpserversink tcpserversrc edgesrc edgesink gdppay gdpdepay '
717 %define allowed_element_audio 'audioamplify audiochebband audiocheblimit audiodynamic audioecho audiofirfilter audioiirfilter audioinvert audiokaraoke audiopanorama audiowsincband audiowsinclimit scaletempo stereo '
718 %define allowed_element_tizen 'tizencamerasrc avsysvideosrc camerasrc tvcamerasrc fimcconvert tizenwlsink '
719 %define allowed_element_extra 'join datareposrc datareposink '
721 %define allowed_element_all %{allowed_element_base}%{allowed_element_audio}%{allowed_element_edgeai}%{allowed_element_tizen}%{allowed_element_extra}
722 %if "%{?profile}" == "tv"
723 %define allowed_element_vd 'tvdpbsrc '
724 %define allowed_element %{allowed_element_all}%{allowed_element_vd}
726 %define allowed_element %{allowed_element_all}
728 %define element_restriction -Denable-element-restriction=true -Dallowed-elements=%{allowed_element}
732 %if 0%{?tensorflow_support}
733 %define enable_tf -Dtf-support=enabled
735 %define enable_tf -Dtf-support=disabled
738 # Support tensorflow-lite
739 %if 0%{?tensorflow_lite_support}
740 %define enable_tf_lite -Dtflite-support=enabled
742 %define enable_tf_lite -Dtflite-support=disabled
745 # Support tensorflow2-lite
746 %if 0%{?tensorflow2_lite_support}
747 %define enable_tf2_lite -Dtflite2-support=enabled -Dtflite2-custom-support=enabled
749 %define enable_tf2_lite -Dtflite2-support=disabled -Dtflite2-custom-support=disabled
753 %if 0%{?pytorch_support}
754 %define enable_pytorch -Dpytorch-support=enabled
756 %define enable_pytorch -Dpytorch-support=disabled
760 %if 0%{?caffe2_support}
761 %define enable_caffe2 -Dcaffe2-support=enabled
763 %define enable_caffe2 -Dcaffe2-support=disabled
767 %if 0%{?armnn_support}
768 %define enable_armnn -Darmnn-support=enabled
770 %define enable_armnn -Darmnn-support=disabled
774 %if 0%{?python3_support}
775 %define enable_python3 -Dpython3-support=enabled
777 %define enable_python3 -Dpython3-support=disabled
781 %if 0%{?edgetpu_support}
782 %define enable_edgetpu -Denable-edgetpu=true
784 %define enable_edgetpu -Denable-edgetpu=false
788 %if 0%{?flatbuf_support}
789 %define enable_flatbuf -Dflatbuf-support=enabled
791 %define enable_flatbuf -Dflatbuf-support=disabled
795 %if 0%{?mqtt_support}
796 %define enable_mqtt -Dmqtt-support=enabled
798 %define enable_mqtt -Dmqtt-support=disabled
803 %define enable_lua -Dlua-support=enabled
805 %define enable_lua -Dlua-support=disabled
810 %define enable_tvm -Dtvm-support=enabled
812 %define enable_tvm -Dtvm-support=disabled
815 # Support trix-engine
816 %if 0%{?trix_engine_support}
817 %define enable_trix_engine -Dtrix-engine-support=enabled
819 %define enable_trix_engine -Dtrix-engine-support=disabled
823 %if 0%{?ml_agent_support}
824 %define enable_ml_agent -Dml-agent-support=enabled
826 %define enable_ml_agent -Dml-agent-support=disabled
829 # Support onnxruntime
830 %if 0%{?onnxruntime_support}
831 %define enable_onnxruntime -Donnxruntime-support=enabled
833 %define enable_onnxruntime -Donnxruntime-support=disabled
836 # Framework priority for each file extension
837 %define fw_priority_bin ''
838 %define fw_priority_nb ''
840 %if "%{?profile}" == "tv"
841 %define fw_priority_bin 'vd_aifw'
842 %define fw_priority_nb 'vd_aifw'
844 %if 0%{openvino_support}
845 %define fw_priority_bin 'openvino'
849 %define fp16_enabled 0
851 %define fp16_enabled 1
852 # x64/x86 requires GCC >= 12 for fp16 support.
856 %if 0%{?fp16_enabled}
857 %define fp16_support -Denable-float16=true
859 %define fp16_support -Denable-float16=false
862 %if 0%{?nnstreamer_edge_support}
863 %define nnsedge -Dnnstreamer-edge-support=enabled
865 %define nnsedge -Dnnstreamer-edge-support=disabled
868 %define fw_priority -Dframework-priority-nb=%{fw_priority_nb} -Dframework-priority-bin=%{fw_priority_bin}
876 # Remove compiler flags for meson to decide the cpp version
877 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-std=gnu++11||"`
879 %if 0%{?testcoverage}
880 # To test coverage, disable optimizations (and should unset _FORTIFY_SOURCE to use -O0)
881 CFLAGS=`echo $CFLAGS | sed -e "s|-O[1-9]|-O0|g"`
882 CFLAGS=`echo $CFLAGS | sed -e "s|-Wp,-D_FORTIFY_SOURCE=[1-9]||g"`
883 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-O[1-9]|-O0|g"`
884 CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-Wp,-D_FORTIFY_SOURCE=[1-9]||g"`
885 # also, use the meson's base option, -Db_coverage, instead of --coverage/-fprofile-arcs and -ftest-coverage
886 %define enable_test_coverage -Db_coverage=true
888 %define enable_test_coverage -Db_coverage=false
893 meson --buildtype=plain --prefix=%{_prefix} --sysconfdir=%{_sysconfdir} --libdir=%{_lib} \
894 --bindir=%{nnstbindir} --includedir=include -Dsubplugindir=%{_prefix}/lib/nnstreamer \
895 %{enable_tizen} %{element_restriction} %{fw_priority} -Denable-env-var=false -Denable-symbolic-link=false \
896 %{enable_tf_lite} %{enable_tf2_lite} %{enable_tf} %{enable_pytorch} %{enable_caffe2} %{enable_python3} \
897 %{enable_nnfw_runtime} %{enable_mvncsdk2} %{enable_openvino} %{enable_armnn} %{enable_edgetpu} %{enable_vivante} \
898 %{enable_flatbuf} %{enable_trix_engine} %{enable_datarepo} \
899 %{enable_tizen_sensor} %{enable_mqtt} %{enable_lua} %{enable_tvm} %{enable_onnxruntime} %{enable_test} %{enable_test_coverage} %{install_test} \
900 %{fp16_support} %{nnsedge} %{enable_ml_agent} \
903 ninja -C %{builddir} %{?_smp_mflags}
905 export NNSTREAMER_SOURCE_ROOT_PATH=$(pwd)
906 export NNSTREAMER_BUILD_ROOT_PATH=$(pwd)/%{builddir}
907 export GST_PLUGIN_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/gst:${NNSTREAMER_BUILD_ROOT_PATH}/ext
908 export NNSTREAMER_CONF=${NNSTREAMER_BUILD_ROOT_PATH}/nnstreamer-test.ini
909 export NNSTREAMER_FILTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_filter
910 export NNSTREAMER_DECODERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_decoder
911 export NNSTREAMER_CONVERTERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_converter
912 export NNSTREAMER_TRAINERS=${NNSTREAMER_BUILD_ROOT_PATH}/ext/nnstreamer/tensor_trainer
914 %define test_script $(pwd)/packaging/run_unittests_binaries.sh
916 # if it's tizen && non-TV, run unittest even if "unit_test"==0 for build-time sanity checks.
917 %if ( %{with tizen} && "%{?profile}" != "tv" )
919 bash %{test_script} ./tests/tizen_nnfw_runtime/unittest_nnfw_runtime_raw
921 %if 0%{tizen_sensor_support}
922 bash %{test_script} ./tests/tizen_sensor/unittest_tizen_sensor
926 # If "unit_test"==0, don't run these for the sake of build speed.
928 bash %{test_script} ./tests
929 bash %{test_script} ./tests/cpp_methods
930 bash %{test_script} ./tests/nnstreamer_filter_extensions_common
931 %if 0%{?datarepo_support}
932 bash %{test_script} ./tests/nnstreamer_datarepo
934 %if 0%{?nnstreamer_edge_support}
935 bash %{test_script} ./tests/nnstreamer_edge
937 %if 0%{mvncsdk2_support}
938 LD_LIBRARY_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/tests/nnstreamer_filter_mvncsdk2:. bash %{test_script} ./tests/nnstreamer_filter_mvncsdk2/unittest_filter_mvncsdk2
940 %if 0%{edgetpu_support}
941 LD_LIBRARY_PATH=${NNSTREAMER_BUILD_ROOT_PATH}/tests/nnstreamer_filter_edgetpu:. bash %{test_script} ./tests/nnstreamer_filter_edgetpu/unittest_edgetpu
943 %ifarch %arm x86_64 aarch64 ## @todo This is a workaround. Need to remove %ifarch/%endif some day.
944 bash %{test_script} ./tests/nnstreamer_filter_tvm
949 ## @todo Workaround for QEMU compatibility issue. Newer qemu may be ok with this.
950 export SKIP_QEMU_ARM_INCOMPATIBLE_TESTS=1
952 export SKIP_QEMU_ARM_INCOMPATIBLE_TESTS=0
955 %if 0%{?fp16_enabled}
956 ## If fp16 tests fail, stop the build!
957 export FLOAT16_SUPPORTED=1
959 ssat -n -p=1 --summary summary.txt -cn _n
962 python3 tools/development/count_test_cases.py %{builddir} tests/summary.txt
964 %if 0%{?edge_test} && 0%{?nnstreamer_edge_support}
965 bash %{test_script} tests/nnstreamer_edge
966 pushd tests/nnstreamer_edge
967 ssat -n -p=1 --summary summary.txt -cn _n
969 python3 tools/development/count_test_cases.py %{builddir} tests/nnstreamer_edge/summary.txt
974 DESTDIR=%{buildroot} ninja -C %{builddir} install
976 mkdir -p %{buildroot}%{_bindir}
977 pushd %{buildroot}%{_bindir}
978 ln -sf %{_prefix}/%{nnstbindir}/nnstreamer-check nnstreamer-check
979 ln -sf %{_prefix}/%{nnstbindir}/nnstreamer-parser nnstreamer-parser
982 %if 0%{?python3_support}
983 mkdir -p %{buildroot}%{python3_sitelib}
984 pushd %{buildroot}%{python3_sitelib}
985 ln -sf %{_libdir}/nnstreamer_python3.so nnstreamer_python.so
989 %if 0%{?snpe_support}
990 %define snpe_sub_plugin libnnstreamer_filter_snpe.so
991 %define files_for_snpe_subpackage files_for_snpe_subpackage.txt
992 rm -f %{files_for_snpe_subpackage}
993 find %{buildroot} -type f -name '%{snpe_sub_plugin}' -printf '/%%P\n' > %{files_for_snpe_subpackage}
996 %if 0%{?testcoverage}
998 # The included directories are:
1000 # gst: the nnstreamer elements
1001 # nnstreamer_example: custom plugin examples
1002 # common: common libraries for gst (elements)
1003 # include: common library headers and headers for external code (packaged as "devel")
1005 # Intentionally excluded directories are:
1007 # tests: We are not going to show testcoverage of the test code itself or example applications
1009 # 'lcov' generates the date format with UTC time zone by default. Let's replace UTC with KST.
1010 # If you ccan get a root privilege, run ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
1011 TZ='Asia/Seoul'; export TZ
1014 VCS=`cat ${RPM_SOURCE_DIR}/nnstreamer.spec | grep "^VCS:" | sed "s|VCS:\\W*\\(.*\\)|\\1|"`
1016 # Create human readable unit test coverage report web page.
1017 # Create null gcda files if gcov didn't create it because there is completely no unit test for them.
1018 find . -name "*.gcno" -exec sh -c 'touch -a "${1%.gcno}.gcda"' _ {} \;
1019 # Remove gcda for meaningless file (CMake's autogenerated)
1020 find . -name "CMakeCCompilerId*.gcda" -delete
1021 find . -name "CMakeCXXCompilerId*.gcda" -delete
1022 #find . -path "/%{builddir}/*.j
1024 lcov -t 'NNStreamer Unit Test Coverage' -o unittest.info -c -d . -b %{builddir} --no-external
1025 # Exclude generated files (e.g., Orc, Protobuf) and device-dependent filters.
1026 lcov -r unittest.info "*/*-orc.*" "*/tests/*" "*/tools/*" "*/meson*/*" "*/*@sha/*" "*/*_openvino*" "*/*_edgetpu*" "*/*_movidius_ncsdk2*" "*/*.so.p/*" -o unittest-filtered.info
1027 # Visualize the report
1028 genhtml -o result unittest-filtered.info -t "nnstreamer %{version}-%{release} ${VCS}" --ignore-errors source -p ${RPM_BUILD_DIR}
1030 mkdir -p %{buildroot}%{_datadir}/nnstreamer/unittest/
1031 cp -r result %{buildroot}%{_datadir}/nnstreamer/unittest/
1032 %endif # test coverage
1034 %post -p /sbin/ldconfig
1036 %postun -p /sbin/ldconfig
1041 %manifest nnstreamer.manifest
1042 %defattr(-,root,root,-)
1044 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_bounding_boxes.so
1045 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_tensor_region.so
1046 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_pose_estimation.so
1047 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_image_segment.so
1048 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_image_labeling.so
1049 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_direct_video.so
1050 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_octet_stream.so
1051 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_cpp.so
1052 %{gstlibdir}/libnnstreamer.so
1053 %if 0%{?nnstreamer_edge_support}
1054 %{gstlibdir}/libgstedge.so
1056 %{_libdir}/libnnstreamer.so
1059 %manifest nnstreamer.manifest
1060 %defattr(-,root,root,-)
1062 %{_libdir}/libnnstreamer-single.so
1064 %files default-configuration
1065 %config %{_sysconfdir}/nnstreamer.ini
1068 %if 0%{?tensorflow_support}
1070 %manifest nnstreamer.manifest
1071 %defattr(-,root,root,-)
1072 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow.so
1075 %if 0%{?tensorflow_lite_support}
1076 %files tensorflow-lite
1077 %manifest nnstreamer.manifest
1078 %defattr(-,root,root,-)
1079 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow1-lite.so
1082 # for tensorflow2-lite
1083 %if 0%{?tensorflow2_lite_support}
1084 %files tensorflow2-lite
1085 %manifest nnstreamer.manifest
1086 %defattr(-,root,root,-)
1087 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow2-lite.so
1088 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tensorflow2-lite-custom.so
1091 %if 0%{?python3_support}
1093 %manifest nnstreamer.manifest
1094 %defattr(-,root,root,-)
1095 %{_libdir}/nnstreamer_python3.so
1096 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_python3.so
1097 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_python3.so
1098 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_python3.so
1099 %{python3_sitelib}/nnstreamer_python.so
1102 %if 0%{?protobuf_support}
1104 %manifest nnstreamer.manifest
1105 %defattr(-,root,root,-)
1106 %{_libdir}/libnnstreamer_protobuf.so
1107 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_protobuf.so
1108 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_protobuf.so
1111 %if 0%{?flatbuf_support}
1113 %manifest nnstreamer.manifest
1114 %defattr(-,root,root,-)
1115 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_flatbuf.so
1116 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_flatbuf.so
1117 %{_prefix}/lib/nnstreamer/decoders/libnnstreamer_decoder_flexbuf.so
1118 %{_prefix}/lib/nnstreamer/converters/libnnstreamer_converter_flexbuf.so
1122 %if 0%{?pytorch_support}
1124 %manifest nnstreamer.manifest
1125 %defattr(-,root,root,-)
1126 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_pytorch.so
1130 %if 0%{?caffe2_support}
1132 %manifest nnstreamer.manifest
1133 %defattr(-,root,root,-)
1134 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_caffe2.so
1138 %if 0%{?lua_support}
1140 %manifest nnstreamer.manifest
1141 %defattr(-,root,root,-)
1142 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_lua.so
1146 %if 0%{?tvm_support}
1148 %manifest nnstreamer.manifest
1149 %defattr(-,root,root,-)
1150 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_tvm.so
1154 %if 0%{?snpe_support}
1155 # Workaround: Conditionally enable nnstreamer-snpe rpm package
1156 # when existing actual snpe library (snpe.pc)
1157 %files snpe -f %{files_for_snpe_subpackage}
1158 %manifest nnstreamer.manifest
1159 %defattr(-,root,root,-)
1163 %if 0%{?trix_engine_support}
1165 %manifest nnstreamer.manifest
1166 %defattr(-,root,root,-)
1167 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_trix-engine.so
1171 %if 0%{?onnxruntime_support}
1173 %manifest nnstreamer.manifest
1174 %defattr(-,root,root,-)
1175 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_onnxruntime.so
1179 %{_includedir}/nnstreamer/tensor_if.h
1180 %{_includedir}/nnstreamer/tensor_filter_custom.h
1181 %{_includedir}/nnstreamer/tensor_filter_custom_easy.h
1182 %{_includedir}/nnstreamer/tensor_converter_custom.h
1183 %{_includedir}/nnstreamer/tensor_decoder_custom.h
1184 %{_includedir}/nnstreamer/nnstreamer_plugin_api_decoder.h
1185 %{_includedir}/nnstreamer/nnstreamer_plugin_api_converter.h
1186 %{_includedir}/nnstreamer/nnstreamer_plugin_api.h
1187 %{_includedir}/nnstreamer/nnstreamer_util.h
1188 %{_includedir}/nnstreamer/tensor_filter_cpp.hh
1189 %{_includedir}/nnstreamer/nnstreamer_cppplugin_api_filter.hh
1190 %{_libdir}/pkgconfig/nnstreamer.pc
1191 %{_libdir}/pkgconfig/nnstreamer-cpp.pc
1193 %files devel-internal
1194 %{_includedir}/nnstreamer/nnstreamer_internal.h
1195 %{_includedir}/nnstreamer/tensor_filter_single.h
1196 %{_libdir}/pkgconfig/nnstreamer-internal.pc
1200 %exclude %{_libdir}/libnnstreamer-single.a
1203 %{_includedir}/nnstreamer/tensor_typedef.h
1204 %{_includedir}/nnstreamer/nnstreamer_plugin_api_filter.h
1205 %{_includedir}/nnstreamer/nnstreamer_plugin_api_trainer.h
1206 %{_includedir}/nnstreamer/nnstreamer_plugin_api_util.h
1207 %{_includedir}/nnstreamer/nnstreamer_version.h
1208 %{_libdir}/pkgconfig/nnstreamer-single.pc
1210 %files single-devel-static
1211 %{_libdir}/libnnstreamer-single.a
1213 %if 0%{?testcoverage}
1214 %files unittest-coverage
1215 %{_datadir}/nnstreamer/unittest/*
1218 %if 0%{?nnfw_support}
1220 %manifest nnstreamer.manifest
1221 %defattr(-,root,root,-)
1222 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_nnfw.so
1225 %if 0%{?armnn_support}
1227 %manifest nnstreamer.manifest
1228 %defattr(-,root,root,-)
1229 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_armnn.so
1232 %if 0%{mvncsdk2_support}
1233 %files -n nnstreamer-ncsdk2
1234 %defattr(-,root,root,-)
1235 %manifest nnstreamer.manifest
1236 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_movidius-ncsdk2.so
1237 %endif # mvncsdk2_support
1239 %if 0%{?vivante_support}
1241 %defattr(-,root,root,-)
1242 %manifest nnstreamer.manifest
1243 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_vivante.so
1246 %if 0%{tizen_sensor_support}
1248 %manifest nnstreamer.manifest
1249 %{gstlibdir}/libnnstreamer-tizen-sensor.so
1250 %endif # tizen_sensor_support
1252 %if 0%{?grpc_support}
1254 %defattr(-,root,root,-)
1255 %manifest nnstreamer.manifest
1257 %{gstlibdir}/libnnstreamer-grpc.so
1259 %if 0%{?protobuf_support}
1260 %files grpc-protobuf
1261 %defattr(-,root,root,-)
1262 %manifest nnstreamer.manifest
1264 %{_libdir}/libnnstreamer_grpc_protobuf.so
1267 %if 0%{?flatbuf_support}
1269 %defattr(-,root,root,-)
1270 %manifest nnstreamer.manifest
1272 %{_libdir}/libnnstreamer_grpc_flatbuf.so
1275 %endif # grpc_support
1277 %if 0%{?edgetpu_support}
1279 %manifest nnstreamer.manifest
1281 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_edgetpu.so
1284 %if 0%{?release_test}
1286 %manifest nnstreamer.manifest
1287 %{_libdir}/libnnstreamer_unittest_util.so
1288 %{_libdir}/libcppfilter_test.so
1289 %if 0%{?mvncsdk2_support}
1290 %{_libdir}/libmvncsdk_test.so
1292 %{_prefix}/lib/nnstreamer/customfilters/*.so
1293 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/nnstreamer-test.ini
1294 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/tests
1297 %if 0%{?openvino_support}
1299 %manifest nnstreamer.manifest
1301 %{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_openvino.so
1305 %{_bindir}/nnstreamer-check
1306 %{_bindir}/nnstreamer-parser
1307 %{_prefix}/%{nnstbindir}/nnstreamer-check
1308 %{_prefix}/%{nnstbindir}/nnstreamer-parser
1311 %{gstlibdir}/libgstjoin.so
1312 %if 0%{?mqtt_support}
1313 %{gstlibdir}/libgstmqtt.so
1316 %if 0%{?datarepo_support}
1318 %manifest nnstreamer.manifest
1319 %defattr(-,root,root,-)
1321 %{gstlibdir}/libgstdatarepo.so
1324 %if 0%{?release_test}
1326 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/subplugin_unittest_template.cc.in
1327 %{_prefix}/%{nnstbindir}/unittest-nnstreamer/nnstreamer-test.ini.in
1331 * Fri Sep 15 2023 MyungJoo Ham <myungjoo.ham@samsung.com>
1332 - Start development of 2.4.1 (2.4.2-RC1)
1334 * Thu Sep 12 2023 MyungJoo Ham <myungjoo.ham@samsung.com>
1335 - Release of 2.4.0, the new LTS version of 2023. (Tizen 8.0 M2)
1337 * Tue Sep 27 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1338 - Start development of 2.3.0 (2.4.0-RC1) for experimental and unstable features.
1340 * Thu Sep 22 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1341 - Release of 2.2.0, the new LTS version of 2022. (Tizen 7.0 M2)
1343 * Wed Apr 13 2022 MyungJoo Ham <myungjoo.ham@samsung.com>
1344 - Start development of 2.1.1 (2.2.0-RC2)
1346 * Tue Sep 28 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1347 - Start development of 2.1.0 (2.2.0-RC1)
1349 * Tue Sep 28 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1350 - Release of 2.0.0, the new LTS version of 2021.
1352 * Thu Jun 03 2021 MyungJoo Ham <myungjoo.ham@samsung.com>
1353 - Start development of 1.7.2 (1.8.0-RC3)
1355 * Fri Nov 20 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1356 - Start development of 1.7.1 (1.8.0-RC2)
1358 * Wed Sep 09 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1359 - Start development of 1.7.0 (1.8.0-RC1)
1361 * Wed Sep 09 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1362 - Release of 1.6.0 (LTS for Tizen 6.0 M2 and Android-next products)
1364 * Thu Jun 04 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1365 - Start development of 1.5.3 (1.6.0-RC4)
1367 * Wed Apr 08 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1368 - Start development of 1.5.2 (1.6.0-RC3)
1370 * Wed Mar 18 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1371 - Start development of 1.5.1 (1.6.0-RC2)
1373 * Tue Feb 11 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1374 - Start development of 1.5.0 (1.6.0-RC1)
1376 * Tue Feb 11 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1377 - Release of 1.4.0 (Tensor-filter API has been updated!)
1379 * Mon Feb 03 2020 MyungJoo Ham <myungjoo.ham@samsung.com>
1382 * Wed Dec 11 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1383 - 1.3.0 development starts
1385 * Wed Dec 11 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1388 * Thu Sep 26 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1389 - Release of 1.0.0 (1.0 RC2 == 1.0 Release for Tizen 5.5 M2)
1391 * Wed Aug 14 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1392 - Release of 0.3.0 (1.0 RC1)
1394 * Mon May 27 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1397 * Wed Mar 20 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1400 * Mon Feb 25 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1403 * Thu Jan 24 2019 MyungJoo Ham <myungjoo.ham@samsung.com>
1406 * Mon Dec 03 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1409 * Mon Oct 15 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1410 - Started single-binary packaging for 0.0.3
1412 * Fri May 25 2018 MyungJoo Ham <myungjoo.ham@samsung.com>
1413 - Packaged tensor_convert plugin.