[Build] Support VD product build system accepted/tizen/unified/20200728.045308 submit/tizen/20200724.082310
authorSangjung Woo <sangjung.woo@samsung.com>
Mon, 20 Jul 2020 07:48:51 +0000 (16:48 +0900)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Fri, 24 Jul 2020 08:21:03 +0000 (17:21 +0900)
This patch supports the VD product build system.
`enable_tizen_privilege_check` and `enable_tizen_feature_check` are
newly added and below features are disabled.
* Privacy / Privilege Manager
* Resource Manager
* ProtoBuffer / FlatBuffer
* Test since python-numpy is not supported

Signed-off-by: Sangjung Woo <sangjung.woo@samsung.com>
api/capi/include/nnstreamer-capi-private.h
api/capi/meson.build
api/capi/src/nnstreamer-capi-tizen-feature-check.c [new file with mode: 0644]
api/capi/src/nnstreamer-capi-tizen-privilege-check.c [moved from api/capi/src/nnstreamer-capi-tizen.c with 87% similarity]
meson.build
meson_options.txt
packaging/nnstreamer.spec

index d985c57..cfba864 100644 (file)
@@ -36,6 +36,7 @@
 #if defined (__TIZEN__)
 #include "nnstreamer-tizen-internal.h"
 
+#if defined (__FEATURE_CHECK_SUPPORT__)
 #define check_feature_state() \
   do { \
     int feature_ret = ml_tizen_get_feature_enabled (); \
   } while (0);
 
 #define set_feature_state(...) ml_tizen_set_feature_state(__VA_ARGS__)
+#else
+#define check_feature_state()
+#define set_feature_state(...)
+#endif  /* __FEATURE_CHECK_SUPPORT__ */
+
+#if defined (__PRIVILEGE_CHECK_SUPPORT__)
+
 #define convert_tizen_element(...) ml_tizen_convert_element(__VA_ARGS__)
 
 #if (TIZENVERSION >= 5) && (TIZENVERSION < 9999)
@@ -63,13 +71,22 @@ typedef enum { MM_RESOURCE_MANAGER_RES_TYPE_MAX } mm_resource_manager_res_type_e
 #endif
 
 #else
+
+#define convert_tizen_element(...) ML_ERROR_NONE
+#define get_tizen_resource(...) ML_ERROR_NONE
+#define release_tizen_resource(...)
+#define TIZEN5PLUS 0
+
+#endif  /* __PRIVILEGE_CHECK_SUPPORT__ */
+
+#else
 #define check_feature_state()
 #define set_feature_state(...)
 #define convert_tizen_element(...) ML_ERROR_NONE
 #define get_tizen_resource(...) ML_ERROR_NONE
 #define release_tizen_resource(...)
 #define TIZEN5PLUS 0
-#endif
+#endif  /* __TIZEN__ */
 
 #ifdef __cplusplus
 extern "C" {
index 58ebc35..49804cd 100644 (file)
@@ -32,8 +32,12 @@ capi_main += join_paths(meson.current_source_dir(), 'src', 'nnstreamer-capi-util
 capi_main += join_paths(meson.current_source_dir(), 'src', 'nnstreamer-capi-single.c')
 capi_main += join_paths(meson.current_source_dir(), 'src', 'tensor_filter_single.c')
 
-if get_option('enable-tizen')
-  capi_main += join_paths('src', 'nnstreamer-capi-tizen.c')
+if get_option('enable-tizen') and get_option('enable-tizen-feature-check')
+  capi_main += join_paths(meson.current_source_dir(), 'src', 'nnstreamer-capi-tizen-feature-check.c')
+endif
+
+if get_option('enable-tizen') and get_option('enable-tizen-privilege-check')
+  capi_main += join_paths(meson.current_source_dir(), 'src', 'nnstreamer-capi-tizen-privilege-check.c')
 endif
 
 capi_devel_main = []
@@ -59,21 +63,27 @@ if (get_option('enable-tizen'))
     tizen_deps = [
       dependency('dpm'),
       dependency('mm-camcorder'),
-      dependency('capi-privacy-privilege-manager'),
       dependency('capi-base-common'),
       dependency('capi-system-info'),
       dependency('dlog')
     ]
+
+    if get_option('enable-tizen-privilege-check')
+      tizen_deps += dependency('capi-privacy-privilege-manager')
+    endif
   else
     tizen_deps = [
       dependency('dpm'),
-      dependency('mm-resource-manager'),
       dependency('mm-camcorder'),
-      dependency('capi-privacy-privilege-manager'),
       dependency('capi-base-common'),
       dependency('capi-system-info'),
       dependency('dlog')
     ]
+
+    if get_option('enable-tizen-privilege-check')
+      tizen_deps += dependency('mm-resource-manager')
+      tizen_deps += dependency('capi-privacy-privilege-manager')
+    endif
   endif
 
   capi_deps += tizen_deps
diff --git a/api/capi/src/nnstreamer-capi-tizen-feature-check.c b/api/capi/src/nnstreamer-capi-tizen-feature-check.c
new file mode 100644 (file)
index 0000000..61970da
--- /dev/null
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ */
+
+/**
+ * @file nnstreamer-capi-tizen-feature-check.c
+ * @date 21 July 2020
+ * @brief NNStreamer/C-API Tizen dependent functions.
+ * @see        https://github.com/nnstreamer/nnstreamer
+ * @author MyungJoo Ham <myungjoo.ham@samsung.com>
+ * @bug No known bugs except for NYI items
+ */
+
+#if !defined (__TIZEN__) || !defined (__FEATURE_CHECK_SUPPORT__)
+#error "This file can be included only in Tizen."
+#endif
+
+#include <glib.h>
+#include <system_info.h>
+
+#include "nnstreamer-capi-private.h"
+
+/**
+ * @brief Tizen ML feature.
+ */
+#define ML_INF_FEATURE_PATH "tizen.org/feature/machine_learning.inference"
+
+/**
+ * @brief Internal struct to control tizen feature support (machine_learning.inference).
+ * -1: Not checked yet, 0: Not supported, 1: Supported
+ */
+typedef struct
+{
+  GMutex mutex;
+  int feature_state;
+} feature_info_s;
+
+static feature_info_s *feature_info = NULL;
+
+/**
+ * @brief Internal function to initialize feature state.
+ */
+static void
+ml_tizen_initialize_feature_state (void)
+{
+  if (feature_info == NULL) {
+    feature_info = g_new0 (feature_info_s, 1);
+    g_assert (feature_info);
+
+    g_mutex_init (&feature_info->mutex);
+    feature_info->feature_state = -1;
+  }
+}
+
+/**
+ * @brief Set the feature status of machine_learning.inference.
+ */
+int
+ml_tizen_set_feature_state (int state)
+{
+  ml_tizen_initialize_feature_state ();
+  g_mutex_lock (&feature_info->mutex);
+
+  /**
+   * Update feature status
+   * -1: Not checked yet, 0: Not supported, 1: Supported
+   */
+  feature_info->feature_state = state;
+
+  g_mutex_unlock (&feature_info->mutex);
+  return ML_ERROR_NONE;
+}
+
+/**
+ * @brief Checks whether machine_learning.inference feature is enabled or not.
+ */
+int
+ml_tizen_get_feature_enabled (void)
+{
+  int ret;
+  int feature_enabled;
+
+  ml_tizen_initialize_feature_state ();
+
+  g_mutex_lock (&feature_info->mutex);
+  feature_enabled = feature_info->feature_state;
+  g_mutex_unlock (&feature_info->mutex);
+
+  if (0 == feature_enabled) {
+    ml_loge ("machine_learning.inference NOT supported");
+    return ML_ERROR_NOT_SUPPORTED;
+  } else if (-1 == feature_enabled) {
+    bool ml_inf_supported = false;
+    ret =
+        system_info_get_platform_bool (ML_INF_FEATURE_PATH, &ml_inf_supported);
+    if (0 == ret) {
+      if (false == ml_inf_supported) {
+        ml_loge ("machine_learning.inference NOT supported");
+        ml_tizen_set_feature_state (0);
+        return ML_ERROR_NOT_SUPPORTED;
+      }
+
+      ml_tizen_set_feature_state (1);
+    } else {
+      switch (ret) {
+        case SYSTEM_INFO_ERROR_INVALID_PARAMETER:
+          ml_loge
+              ("failed to get feature value because feature key is not vaild");
+          ret = ML_ERROR_NOT_SUPPORTED;
+          break;
+
+        case SYSTEM_INFO_ERROR_IO_ERROR:
+          ml_loge ("failed to get feature value because of input/output error");
+          ret = ML_ERROR_NOT_SUPPORTED;
+          break;
+
+        case SYSTEM_INFO_ERROR_PERMISSION_DENIED:
+          ml_loge ("failed to get feature value because of permission denied");
+          ret = ML_ERROR_PERMISSION_DENIED;
+          break;
+
+        default:
+          ml_loge ("failed to get feature value because of unknown error");
+          ret = ML_ERROR_NOT_SUPPORTED;
+          break;
+      }
+      return ret;
+    }
+  }
+
+  return ML_ERROR_NONE;
+}
similarity index 87%
rename from api/capi/src/nnstreamer-capi-tizen.c
rename to api/capi/src/nnstreamer-capi-tizen-privilege-check.c
index 43042d2..64a69bf 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
  */
 
 /**
- * @file nnstreamer-capi-tizen.c
- * @date 26 August 2019
+ * @file nnstreamer-capi-tizen-privilege-check.c
+ * @date 22 July 2020
  * @brief NNStreamer/C-API Tizen dependent functions.
  * @see        https://github.com/nnstreamer/nnstreamer
  * @author MyungJoo Ham <myungjoo.ham@samsung.com>
  * @bug No known bugs except for NYI items
  */
 
-#if !defined (__TIZEN__)
+#if !defined (__TIZEN__) || !defined (__PRIVILEGE_CHECK_SUPPORT__)
 #error "This file can be included only in Tizen."
 #endif
 
@@ -130,11 +130,6 @@ typedef struct
 #define TIZEN_RES_MM "tizen_res_mm"
 
 /**
- * @brief Tizen ML feature.
- */
-#define ML_INF_FEATURE_PATH "tizen.org/feature/machine_learning.inference"
-
-/**
  * @brief Tizen Privilege Camera (See https://www.tizen.org/privilege)
  */
 #define TIZEN_PRIVILEGE_CAMERA "http://tizen.org/privilege/camera"
@@ -144,112 +139,6 @@ typedef struct
  */
 #define TIZEN_PRIVILEGE_RECODER "http://tizen.org/privilege/recorder"
 
-/**
- * @brief Internal struct to control tizen feature support (machine_learning.inference).
- * -1: Not checked yet, 0: Not supported, 1: Supported
- */
-typedef struct
-{
-  GMutex mutex;
-  int feature_state;
-} feature_info_s;
-
-static feature_info_s *feature_info = NULL;
-
-/**
- * @brief Internal function to initialize feature state.
- */
-static void
-ml_tizen_initialize_feature_state (void)
-{
-  if (feature_info == NULL) {
-    feature_info = g_new0 (feature_info_s, 1);
-    g_assert (feature_info);
-
-    g_mutex_init (&feature_info->mutex);
-    feature_info->feature_state = -1;
-  }
-}
-
-/**
- * @brief Set the feature status of machine_learning.inference.
- */
-int
-ml_tizen_set_feature_state (int state)
-{
-  ml_tizen_initialize_feature_state ();
-  g_mutex_lock (&feature_info->mutex);
-
-  /**
-   * Update feature status
-   * -1: Not checked yet, 0: Not supported, 1: Supported
-   */
-  feature_info->feature_state = state;
-
-  g_mutex_unlock (&feature_info->mutex);
-  return ML_ERROR_NONE;
-}
-
-/**
- * @brief Checks whether machine_learning.inference feature is enabled or not.
- */
-int
-ml_tizen_get_feature_enabled (void)
-{
-  int ret;
-  int feature_enabled;
-
-  ml_tizen_initialize_feature_state ();
-
-  g_mutex_lock (&feature_info->mutex);
-  feature_enabled = feature_info->feature_state;
-  g_mutex_unlock (&feature_info->mutex);
-
-  if (0 == feature_enabled) {
-    ml_loge ("machine_learning.inference NOT supported");
-    return ML_ERROR_NOT_SUPPORTED;
-  } else if (-1 == feature_enabled) {
-    bool ml_inf_supported = false;
-    ret =
-        system_info_get_platform_bool (ML_INF_FEATURE_PATH, &ml_inf_supported);
-    if (0 == ret) {
-      if (false == ml_inf_supported) {
-        ml_loge ("machine_learning.inference NOT supported");
-        ml_tizen_set_feature_state (0);
-        return ML_ERROR_NOT_SUPPORTED;
-      }
-
-      ml_tizen_set_feature_state (1);
-    } else {
-      switch (ret) {
-        case SYSTEM_INFO_ERROR_INVALID_PARAMETER:
-          ml_loge
-              ("failed to get feature value because feature key is not vaild");
-          ret = ML_ERROR_NOT_SUPPORTED;
-          break;
-
-        case SYSTEM_INFO_ERROR_IO_ERROR:
-          ml_loge ("failed to get feature value because of input/output error");
-          ret = ML_ERROR_NOT_SUPPORTED;
-          break;
-
-        case SYSTEM_INFO_ERROR_PERMISSION_DENIED:
-          ml_loge ("failed to get feature value because of permission denied");
-          ret = ML_ERROR_PERMISSION_DENIED;
-          break;
-
-        default:
-          ml_loge ("failed to get feature value because of unknown error");
-          ret = ML_ERROR_NOT_SUPPORTED;
-          break;
-      }
-      return ret;
-    }
-  }
-
-  return ML_ERROR_NONE;
-}
-
 /** The following functions are either not used or supported in Tizen 4 */
 #if TIZEN5PLUS
 /**
index e983de7..e595af2 100644 (file)
@@ -31,6 +31,14 @@ if get_option('enable-tizen')
   tizenVmajor = get_option('tizen-version-major')
   add_project_arguments('-DTIZENVERSION='+tizenVmajor.to_string(), language: ['c', 'cpp'])
 
+  if get_option('enable-tizen-feature-check')
+    add_project_arguments('-D__FEATURE_CHECK_SUPPORT__', language: ['c', 'cpp'])
+  endif
+
+  if get_option('enable-tizen-privilege-check')
+    add_project_arguments('-D__PRIVILEGE_CHECK_SUPPORT__', language: ['c', 'cpp'])
+  endif
+
 elif not meson.is_cross_build()
   if cc.get_id() == 'clang' and cxx.get_id() == 'clang'
     if build_machine.system() == 'darwin'
index 63e48dd..d087d2e 100644 (file)
@@ -37,4 +37,6 @@ option('enable-tizen-sensor', type: 'boolean', value: false)
 option('enable-edgetpu', type: 'boolean', value: false)
 option('enable-openvino', type: 'boolean', value: false)
 option('enable-vivante', type: 'boolean', value: false)
+option('enable-tizen-feature-check', type: 'boolean', value: true)
+option('enable-tizen-privilege-check', type: 'boolean', value: true)
 option('framework-priority-tflite', type: 'string', value: 'tensorflow-lite,nnfw,armnn,edgetpu', description: 'A comma separated prioritized list of neural network frameworks to open a .tflite file')
index c9abc01..e4380a1 100644 (file)
@@ -9,6 +9,16 @@
 %define                flatbuf_support 1
 %define                protobuf_support 1
 %define                nnfw_support 1
+%define                check_test 1
+%define                enable_tizen_privilege 1
+%define                enable_tizen_feature 1
+%define                enable_extra_subplugins 1
+
+%if "%{?profile}" == "tv"
+%define                enable_extra_subplugins 0
+%define                enable_tizen_privilege 0
+%define                check_test 0
+%endif
 
 %if 0%{tizen_version_major} >= 5
 %define                python_support 1
 %define        edgetpu_support 0
 %endif
 
+%if !0%{?enable_extra_subplugins}
+%define                flatbuf_support 0
+%define                protobuf_support 0
+%define                python_support 0
+%define                mvncsdk2_support 0
+%define                edgetpu_support 0
+%endif
+
 # If it is tizen, we can export Tizen API packages.
 %bcond_with tizen
 
@@ -88,8 +106,10 @@ BuildRequires:      gst-plugins-base
 # and gtest
 BuildRequires: gtest-devel
 # a few test cases uses python
+%if 0%{?check_test}
 BuildRequires: python
 BuildRequires: python-numpy
+%endif
 %if 0%{?python_support}
 # for python custom filters
 BuildRequires: pkgconfig(python2)
@@ -151,10 +171,14 @@ BuildRequires:  pkgconfig(amlogic-vsi-npu-sdk)
 %if %{with tizen}
 BuildRequires: pkgconfig(dpm)
 %if 0%{tizen_version_major} >= 5
+%if 0%{?enable_tizen_privilege}
 BuildRequires: pkgconfig(mm-resource-manager)
 %endif
+%endif
 BuildRequires: pkgconfig(mm-camcorder)
+%if 0%{?enable_tizen_privilege}
 BuildRequires: pkgconfig(capi-privacy-privilege-manager)
+%endif
 BuildRequires: pkgconfig(capi-system-info)
 BuildRequires: pkgconfig(capi-base-common)
 BuildRequires: pkgconfig(dlog)
@@ -386,6 +410,9 @@ You may enable this package to use Google Edge TPU with NNStreamer and Tizen ML
 %define enable_mvncsdk2 -Dmvncsdk2-support=disabled
 %define enable_nnfw_runtime -Dnnfw-runtime-support=disabled
 %define element_restriction -Denable-element-restriction=false
+%define enable_tizen_privilege_check -Denable-tizen-privilege-check=true
+%define enable_tizen_feature_check -Denable-tizen-feature-check=true
+%define enable_test -Denable-test=true
 
 %if 0%{mvncsdk2_support}
 %define enable_mvncsdk2 -Dmvncsdk2-support=enabled
@@ -395,13 +422,26 @@ You may enable this package to use Google Edge TPU with NNStreamer and Tizen ML
 %define enable_tizen_sensor -Denable-tizen-sensor=true
 %endif
 
+%if !0%{?check_test}
+%define enable_test -Denable-test=false
+%endif
+
+%if !0%{?enable_tizen_privilege}
+%define enable_tizen_privilege_check -Denable-tizen-privilege-check=false
+%endif
+
+%if !0%{?enable_tizen_feature}
+%define enable_tizen_feature_check -Denable-tizen-feature-check=false
+%endif
+
 %if %{with tizen}
 %define enable_tizen -Denable-tizen=true -Dtizen-version-major=0%{tizen_version_major}
 %define enable_api -Denable-capi=true
 %ifarch %arm aarch64
 %if 0%{?nnfw_support}
 %define enable_nnfw_runtime -Dnnfw-runtime-support=enabled
-%endif
+%endif  # nnfw_support
+
 %endif
 # Element restriction in Tizen
 %define restricted_element     'capsfilter input-selector output-selector queue tee valve appsink appsrc audioconvert audiorate audioresample audiomixer videoconvert videocrop videorate videoscale videoflip videomixer compositor fakesrc fakesink filesrc filesink audiotestsrc videotestsrc jpegparse jpegenc jpegdec pngenc pngdec tcpclientsink tcpclientsrc tcpserversink tcpserversrc udpsink udpsrc xvimagesink ximagesink evasimagesink evaspixmapsink glimagesink theoraenc lame vorbisenc wavenc volume oggmux avimux matroskamux v4l2src avsysvideosrc camerasrc tvcamerasrc pulsesrc fimcconvert tizenwlsink gdppay gdpdepay'
@@ -497,7 +537,7 @@ meson --buildtype=plain --prefix=%{_prefix} --sysconfdir=%{_sysconfdir} --libdir
        %{enable_api} %{enable_tizen} %{element_restriction} -Denable-env-var=false -Denable-symbolic-link=false \
        %{enable_tf_lite} %{enable_tf} %{enable_pytorch} %{enable_caffe2} %{enable_python} \
        %{enable_nnfw_runtime} %{enable_mvncsdk2} %{enable_armnn} %{enable_edgetpu}  %{enable_vivante} %{enable_flatbuf} \
-       %{enable_tizen_sensor} %{enable_test_coverage} \
+       %{enable_tizen_privilege_check} %{enable_tizen_feature_check} %{enable_tizen_sensor} %{enable_test} %{enable_test_coverage} \
        build
 
 ninja -C build %{?_smp_mflags}