if get_option('enable-ml-service')
nns_capi_service_shared_lib = shared_library ('capi-ml-service',
nns_capi_service_srcs,
- dependencies: [nns_capi_dep, ai_service_daemon_deps],
- include_directories: nns_capi_include,
+ dependencies: [nns_capi_dep, ml_agentd_deps],
+ include_directories: [nns_capi_include, ml_agentd_incs],
install: true,
install_dir: api_install_libdir,
+ link_with: ml_agentd_lib,
version: api_version,
)
nns_capi_service_static_lib = static_library ('capi-ml-service',
nns_capi_service_srcs,
- dependencies: [nns_capi_dep, ai_service_daemon_deps],
- include_directories: nns_capi_include,
+ dependencies: [nns_capi_dep, ml_agentd_deps],
+ include_directories: [nns_capi_include, ml_agentd_incs],
install: true,
+ link_with: ml_agentd_lib,
install_dir: api_install_libdir,
)
endif
nns_capi_service_dep = declare_dependency(link_with: nns_capi_service_lib,
- dependencies: [nns_capi_dep, ai_service_daemon_deps],
+ dependencies: [nns_capi_dep, ml_agentd_deps],
include_directories: nns_capi_include
)
endif
#include <glib/gstdio.h>
#include <json-glib/json-glib.h>
+#include "ml-agent-dbus-interface.h"
#include "ml-api-internal.h"
-#include "ml-api-service.h"
#include "ml-api-service-private.h"
+#include "ml-api-service.h"
#if defined(__TIZEN__)
#include <app_common.h>
ml_service_set_pipeline (const char *name, const char *pipeline_desc)
{
int ret = ML_ERROR_NONE;
- MachinelearningServicePipeline *mlsp;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
"The parameter, 'pipeline_desc' is NULL. It should be a valid string.");
}
- mlsp = _get_mlsp_proxy_new_for_bus_sync ();
- if (!mlsp) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_pipeline_call_set_pipeline_sync (mlsp, name,
- pipeline_desc, &ret, NULL, &err);
-
- g_object_unref (mlsp);
-
- if (!result) {
+ ret =
+ ml_agent_dbus_interface_pipeline_set_description (name, pipeline_desc,
+ &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method set_pipeline (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
g_clear_error (&err);
ml_service_get_pipeline (const char *name, char **pipeline_desc)
{
int ret = ML_ERROR_NONE;
- MachinelearningServicePipeline *mlsp;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
"The parameter 'pipeline_desc'. It should be a valid char**");
}
- mlsp = _get_mlsp_proxy_new_for_bus_sync ();
- if (!mlsp) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_pipeline_call_get_pipeline_sync (mlsp, name,
- &ret, pipeline_desc, NULL, &err);
-
- g_object_unref (mlsp);
-
- if (!result) {
+ ret =
+ ml_agent_dbus_interface_pipeline_get_description (name, pipeline_desc,
+ &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method get_pipeline (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
g_clear_error (&err);
ml_service_delete_pipeline (const char *name)
{
int ret = ML_ERROR_NONE;
- MachinelearningServicePipeline *mlsp;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
"The parameter, 'name' is NULL, It should be a valid string");
}
- mlsp = _get_mlsp_proxy_new_for_bus_sync ();
- if (!mlsp) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_pipeline_call_delete_pipeline_sync (mlsp,
- name, &ret, NULL, &err);
-
- g_object_unref (mlsp);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_pipeline_delete (name, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method delete_pipeline (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
g_clear_error (&err);
ml_service_launch_pipeline (const char *name, ml_service_h * h)
{
int ret = ML_ERROR_NONE;
+ GError *err = NULL;
ml_service_s *mls;
_ml_service_server_s *server;
gint64 out_id;
- MachinelearningServicePipeline *mlsp;
- GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'h' is NULL. It should be a valid ml_service_h");
- mlsp = _get_mlsp_proxy_new_for_bus_sync ();
- if (!mlsp) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_pipeline_call_launch_pipeline_sync (mlsp,
- name, &ret, &out_id, NULL, &err);
-
- g_object_unref (mlsp);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_pipeline_launch (name, &out_id, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method launch_pipeline (%s).",
- err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
- }
- g_clear_error (&err);
-
- if (ML_ERROR_NONE != ret) {
- _ml_error_report_return (ret,
- "Failed to launch pipeline, please check its integrity.");
+ (err ? err->message : "Unknown error"));
+ g_clear_error (&err);
+ return ret;
}
mls = g_new0 (ml_service_s, 1);
int ret = ML_ERROR_NONE;
ml_service_s *mls = (ml_service_s *) h;
_ml_service_server_s *server;
- MachinelearningServicePipeline *mlsp;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'h' is NULL. It should be a valid ml_service_h");
- mlsp = _get_mlsp_proxy_new_for_bus_sync ();
- if (!mlsp) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
server = (_ml_service_server_s *) mls->priv;
- result = machinelearning_service_pipeline_call_start_pipeline_sync (mlsp,
- server->id, &ret, NULL, &err);
-
- g_object_unref (mlsp);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_pipeline_start (server->id, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method start_pipeline (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
g_clear_error (&err);
int ret = ML_ERROR_NONE;
ml_service_s *mls = (ml_service_s *) h;
_ml_service_server_s *server;
- MachinelearningServicePipeline *mlsp;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'h' is NULL. It should be a valid ml_service_h");
- mlsp = _get_mlsp_proxy_new_for_bus_sync ();
- if (!mlsp) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
server = (_ml_service_server_s *) mls->priv;
- result = machinelearning_service_pipeline_call_stop_pipeline_sync (mlsp,
- server->id, &ret, NULL, &err);
-
- g_object_unref (mlsp);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_pipeline_stop (server->id, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method stop_pipeline (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
g_clear_error (&err);
gint _state = ML_PIPELINE_STATE_UNKNOWN;
ml_service_s *mls = (ml_service_s *) h;
_ml_service_server_s *server;
- MachinelearningServicePipeline *mlsp;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'state' is NULL. It should be a valid ml_pipeline_state_e pointer");
- mlsp = _get_mlsp_proxy_new_for_bus_sync ();
- if (!mlsp) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
server = (_ml_service_server_s *) mls->priv;
- result = machinelearning_service_pipeline_call_get_state_sync (mlsp,
- server->id, &ret, &_state, NULL, &err);
-
- *state = (ml_pipeline_state_e) _state;
-
- g_object_unref (mlsp);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_pipeline_get_state (server->id, &_state, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method get_state (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
g_clear_error (&err);
+ *state = (ml_pipeline_state_e) _state;
return ret;
}
{
int ret = ML_ERROR_NONE;
- MachinelearningServiceModel *mlsm;
+ g_autofree gchar *dir_name = NULL;
GError *err = NULL;
- gboolean result;
- gchar *dir_name;
GStatBuf statbuf;
g_autofree gchar *app_info = NULL;
dir_name = g_path_get_dirname (path);
ret = g_stat (dir_name, &statbuf);
- g_free (dir_name);
-
- if (ret != 0)
+ if (ret != 0) {
_ml_error_report_return (ML_ERROR_PERMISSION_DENIED,
"Failed to get the information of the model file '%s'.", path);
+ }
- if (!g_path_is_absolute (path) ||
- !g_file_test (path, (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) ||
- g_file_test (path, G_FILE_TEST_IS_SYMLINK))
+ if (!g_path_is_absolute (path)
+ || !g_file_test (path, (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))
+ || g_file_test (path, G_FILE_TEST_IS_SYMLINK))
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The model file '%s' is not a regular file.", path);
* _ml_error_report_return (ML_ERROR_PERMISSION_DENIED,
* "The model file '%s' is not in the app's resource directory.", path);
* }
- */
+ */
builder = json_builder_new ();
json_builder_begin_object (builder);
app_info = json_generator_to_data (gen, NULL);
app_info_exit:
#endif
-
- mlsm = _get_mlsm_proxy_new_for_bus_sync ();
- if (!mlsm) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result =
- machinelearning_service_model_call_register_sync (mlsm, name, path,
- activate, description ? description : "", app_info ? app_info : "",
- version, &ret, NULL, &err);
-
- g_object_unref (mlsm);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_model_register (name, path, activate,
+ description ? description : "", app_info ? app_info : "", version, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method register (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
g_clear_error (&err);
{
int ret = ML_ERROR_NONE;
- MachinelearningServiceModel *mlsm;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'description' is NULL. It should be a valid string");
- mlsm = _get_mlsm_proxy_new_for_bus_sync ();
- if (!mlsm) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_model_call_update_description_sync (mlsm,
- name, version, description, &ret, NULL, &err);
+ ret =
+ ml_agent_dbus_interface_model_update_description (name, version,
+ description, &err);
- g_object_unref (mlsm);
-
- if (!result) {
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method update_description (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
-
g_clear_error (&err);
return ret;
{
int ret = ML_ERROR_NONE;
- MachinelearningServiceModel *mlsm;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'version' is 0. It should be a valid unsigned int");
- mlsm = _get_mlsm_proxy_new_for_bus_sync ();
- if (!mlsm) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_model_call_activate_sync (mlsm,
- name, version, &ret, NULL, &err);
-
- g_object_unref (mlsm);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_model_activate (name, version, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method activate (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
-
g_clear_error (&err);
return ret;
int ret = ML_ERROR_NONE;
ml_option_h _info = NULL;
- MachinelearningServiceModel *mlsm;
GError *err = NULL;
- gboolean result;
gchar *description = NULL;
JsonParser *parser = NULL;
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'info' is NULL. It should be a valid pointer to ml_info_h");
- mlsm = _get_mlsm_proxy_new_for_bus_sync ();
- if (!mlsm) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_model_call_get_sync (mlsm,
- name, version, &description, &ret, NULL, &err);
-
- g_object_unref (mlsm);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_model_get (name, version, &description, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method get_activated (%s).",
err ? err->message : "Unknown error");
g_clear_error (&err);
- ret = ML_ERROR_IO_ERROR;
goto error;
}
int ret = ML_ERROR_NONE;
ml_option_h _info = NULL;
- MachinelearningServiceModel *mlsm;
GError *err = NULL;
- gboolean result;
g_autofree gchar *description = NULL;
-
g_autoptr (JsonParser) parser = NULL;
JsonObjectIter iter;
JsonNode *root_node;
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'info' is NULL. It should be a valid pointer to ml_info_h");
- mlsm = _get_mlsm_proxy_new_for_bus_sync ();
- if (!mlsm) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_model_call_get_activated_sync (mlsm,
- name, &description, &ret, NULL, &err);
-
- g_object_unref (mlsm);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_model_get_activated (name, &description, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method get_activated (%s).",
err ? err->message : "Unknown error");
g_clear_error (&err);
- ret = ML_ERROR_IO_ERROR;
goto error;
}
int ret = ML_ERROR_NONE;
ml_option_h *_info_list = NULL;
- MachinelearningServiceModel *mlsm;
GError *err = NULL;
- gboolean result;
gchar *description = NULL;
guint i, n;
*num = 0;
- mlsm = _get_mlsm_proxy_new_for_bus_sync ();
- if (!mlsm) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_model_call_get_all_sync (mlsm,
- name, &description, &ret, NULL, &err);
-
- g_object_unref (mlsm);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_model_get_all (name, &description, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method get_activated (%s).",
err ? err->message : "Unknown error");
g_clear_error (&err);
- ret = ML_ERROR_IO_ERROR;
goto error;
}
ml_service_model_delete (const char *name, const unsigned int version)
{
int ret = ML_ERROR_NONE;
- MachinelearningServiceModel *mlsm;
GError *err = NULL;
- gboolean result;
check_feature_state (ML_FEATURE_SERVICE);
_ml_error_report_return (ML_ERROR_INVALID_PARAMETER,
"The parameter, 'name' is NULL. It should be a valid string");
- mlsm = _get_mlsm_proxy_new_for_bus_sync ();
- if (!mlsm) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_model_call_delete_sync (mlsm,
- name, version, &ret, NULL, &err);
-
- g_object_unref (mlsm);
-
- if (!result) {
+ ret = ml_agent_dbus_interface_model_delete (name, version, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method delete (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
-
g_clear_error (&err);
return ret;
#include "ml-api-internal.h"
#include "ml-api-service.h"
#include "ml-api-service-private.h"
-
-/**
- * @brief Internal function to get proxy of the pipeline d-bus interface
- */
-MachinelearningServicePipeline *
-_get_mlsp_proxy_new_for_bus_sync (void)
-{
- MachinelearningServicePipeline *mlsp;
-
- /** @todo deal with GError */
- mlsp = machinelearning_service_pipeline_proxy_new_for_bus_sync
- (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE,
- "org.tizen.machinelearning.service",
- "/Org/Tizen/MachineLearning/Service/Pipeline", NULL, NULL);
-
- if (mlsp)
- return mlsp;
-
- /** Try with session type */
- mlsp = machinelearning_service_pipeline_proxy_new_for_bus_sync
- (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE,
- "org.tizen.machinelearning.service",
- "/Org/Tizen/MachineLearning/Service/Pipeline", NULL, NULL);
-
- return mlsp;
-}
-
-/**
- * @brief Internal function to get proxy of the model d-bus interface
- */
-MachinelearningServiceModel *
-_get_mlsm_proxy_new_for_bus_sync (void)
-{
- MachinelearningServiceModel *mlsm;
-
- /** @todo deal with GError */
- mlsm = machinelearning_service_model_proxy_new_for_bus_sync
- (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE,
- "org.tizen.machinelearning.service",
- "/Org/Tizen/MachineLearning/Service/Model", NULL, NULL);
-
- if (mlsm)
- return mlsm;
-
- /** Try with session type */
- mlsm = machinelearning_service_model_proxy_new_for_bus_sync
- (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE,
- "org.tizen.machinelearning.service",
- "/Org/Tizen/MachineLearning/Service/Model", NULL, NULL);
-
- return mlsm;
-}
+#include "../../daemon/includes/ml-agent-dbus-interface.h"
/**
* @brief Destroy the pipeline of given ml_service_h
"The parameter, 'h' is NULL. It should be a valid ml_service_h.");
if (ML_SERVICE_TYPE_SERVER_PIPELINE == mls->type) {
- MachinelearningServicePipeline *mlsp;
_ml_service_server_s *server = (_ml_service_server_s *) mls->priv;
GError *err = NULL;
- gboolean result;
-
- mlsp = _get_mlsp_proxy_new_for_bus_sync ();
- if (!mlsp) {
- _ml_error_report_return (ML_ERROR_IO_ERROR, "Failed to get dbus proxy.");
- }
-
- result = machinelearning_service_pipeline_call_destroy_pipeline_sync (mlsp,
- server->id, &ret, NULL, &err);
-
- g_object_unref (mlsp);
- if (!result) {
+ ret = ml_agent_dbus_interface_pipeline_destroy (server->id, &err);
+ if (ret < 0) {
_ml_error_report ("Failed to invoke the method destroy_pipeline (%s).",
err ? err->message : "Unknown error");
- ret = ML_ERROR_IO_ERROR;
}
g_clear_error (&err);
--- /dev/null
+ml_agentd_headers = files('ml-agent-dbus-interface.h')
--- /dev/null
+/**
+ * @file ml-agent-dbus-interface.h
+ * @date 5 April 2023
+ * @brief A set of exported DBus interfaces for managing pipelines and models
+ * @see https://github.com/nnstreamer/api
+ * @author Wook Song <wook16.song@samsung.com>
+ * @bug No known bugs except for NYI items
+ */
+
+#ifndef __ML_AGENT_DBUS_INTERFACE_H__
+#define __ML_AGENT_DBUS_INTERFACE_H__
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <glib.h>
+
+/**
+ * @brief A dbus interface exported for setting the description of a pipeline
+ * @param[in] name A name indicating the pipeline whose description would be set
+ * @param[in] pipeline_desc A stringified description of the pipeline
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_pipeline_set_description (const gchar *name, const gchar *pipeline_desc, GError **err);
+
+/**
+ * @brief A dbus interface exported for getting the pipeline's description corresponding to the given @name
+ * @param[in] name A given name of the pipeline to get the description
+ * @param[out] pipeline_desc A stringified description of the pipeline
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_pipeline_get_description (const gchar *name, gchar **pipeline_desc, GError **err);
+
+/**
+ * @brief A dbus interface exported for deletion of the pipeline's description corresponding to the given @name
+ * @param[in] name A given name of the pipeline to remove the description
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_pipeline_delete (const gchar * name, GError ** err);
+
+/**
+ * @brief A dbus interface exported for launching the pipeline's description corresponding to the given @name
+ * @param[in] name A given name of the pipeline to launch
+ * @param[out] id Return an integer identifier for the launched pipeline
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_pipeline_launch (const gchar *name, gint64 *id, GError ** err);
+
+/**
+ * @brief A dbus interface exported for changing the pipeline's state of the given @id to start
+ * @param[in] id An identifier of the launched pipeline whose state would be changed to start
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_pipeline_start (gint64 id, GError ** err);
+
+/**
+ * @brief A dbus interface exported for changing the pipeline's state of the given @id to stop
+ * @param[in] id An identifier of the launched pipeline whose state would be changed to stop
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_pipeline_stop (gint64 id, GError ** err);
+
+/**
+ * @brief A dbus interface exported for destroying a launched pipeline corresponding to the given @id
+ * @param[in] id An identifier of the launched pipeline that would be destroyed
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_pipeline_destroy (gint64 id, GError ** err);
+
+/**
+ * @brief A dbus interface exported for getting the pipeline's state of the given @id
+ * @param[in] id An identifier of the launched pipeline that would be destroyed
+ * @param[out] state Return location for the pieline's state
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_pipeline_get_state (gint64 id, gint * state, GError ** err);
+
+/**
+ * @brief A dbus interface exported for registering a model
+ * @param[in] name A name indicating the model that would be registered
+ * @param[in] path A path that specifies the location of the model file
+ * @param[in] activate An initial activation state
+ * @param[in] description A stringified description of the given model
+ * @param[in] app_info Application-specific information from Tizen's RPK
+ * @param[out] version Return location for the version of the given model registered
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_model_register(const gchar *name, const gchar *path, const gboolean activate, const gchar *description, const gchar *app_info, guint *version, GError ** err);
+
+/**
+ * @brief A dbus interface exported for updating the description of the given model, @name
+ * @param[in] name A name indicating the model whose description would be updated
+ * @param[in] version A version for identifying the model whose description would be updated
+ * @param[in] description A new description to update the existing one
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_model_update_description (const gchar *name, const guint version, const gchar *description, GError ** err);
+
+/**
+ * @brief A dbus interface exported for activating the model of @name and @version
+ * @param[in] name A name indicating a registered model
+ * @param[in] version A version of the given model, @name
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_model_activate(const gchar *name, const guint version, GError ** err);
+
+/**
+ * @brief A dbus interface exported for getting the description of the given model of @name and @version
+ * @param[in] name A name indicating the model whose description would be get
+ * @param[in] version A version of the given model, @name
+ * @param[out] description Return location for the description of the given model of @name and @version
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_model_get(const gchar *name, const guint version, gchar ** description, GError ** err);
+
+/**
+ * @brief A dbus interface exported for getting the description of the activated model of the given @name
+ * @param[in] name A name indicating the model whose description would be get
+ * @param[out] description Return location for the description of an activated model of the given @name
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_model_get_activated(const gchar *name, gchar ** description, GError ** err);
+
+/**
+ * @brief A dbus interface exported for getting the description of all the models corresponding to the given @name
+ * @param[in] name A name indicating the models whose description would be get
+ * @param[out] description Return location for the description of all the models corresponding to the given @name
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_model_get_all(const gchar *name, gchar ** description, GError ** err);
+
+/**
+ * @brief A dbus interface exported for removing the model of @name and @version
+ * @param[in] name A name indicating the model that would be removed
+ * @param[in] version A version for identifying a specific model whose name is @name
+ * @param[in] description A new description to update the existing one
+ * @param[out] err Return location for error of NULL
+ * @return 0 on success, a negative error value if @err is set
+ */
+gint ml_agent_dbus_interface_model_delete(const gchar *name, const guint version, GError ** err);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __ML_AGENT_DBUS_INTERFACE_H__ */
# Machine Learning Agent
# This file should be included when ml-service feature is enabled.
-nns_ml_agent_incs = include_directories('includes')
-nns_ml_agent_common_srcs = files('main.c', 'modules.c', 'gdbus-util.c',
+ml_agentd_incs = include_directories('includes')
+ml_agentd_lib_common_srcs = files('modules.c', 'gdbus-util.c', 'ml-agent-dbus-interface.c',
'pipeline-dbus-impl.cc', 'model-dbus-impl.cc')
-nns_ml_agent_service_db_srcs = files('service-db.cc')
+ml_agentd_lib_service_db_srcs = files('service-db.cc')
if (get_option('enable-tizen'))
- nns_ml_agent_common_srcs += files('pkg-mgr.cc')
+ ml_agentd_lib_common_srcs += files('pkg-mgr.cc')
endif
-nns_ml_agent_srcs = [nns_ml_agent_common_srcs, nns_ml_agent_service_db_srcs]
-
# Generate GDbus header and code
gdbus_prog = find_program('gdbus-codegen', required: true)
gdbus_gen_pipeline_src = custom_target('gdbus-gencode',
gdbus_gen_header_dep = declare_dependency(sources: [gdbus_gen_pipeline_src, gdbus_gen_model_src])
-ai_service_daemon_deps = [
+ml_agentd_deps = [
gdbus_gen_header_dep,
glib_dep,
gio_dep,
]
if (get_option('enable-tizen'))
- ai_service_daemon_deps += [
+ ml_agentd_deps += [
dependency('capi-appfw-app-common'),
dependency('capi-appfw-package-manager'),
dependency('dlog')
serviceDBKeyPrefix = get_option('service-db-key-prefix')
daemon_cpp_db_key_prefix_arg = '-DMESON_KEY_PREFIX="' + serviceDBKeyPrefix + '"'
-nns_ml_agent_executable = executable('machine-learning-agent',
- nns_ml_agent_srcs,
- dependencies: [ai_service_daemon_deps],
- include_directories: nns_ml_agent_incs,
+ml_agentd_lib_srcs = [ml_agentd_lib_common_srcs, ml_agentd_lib_service_db_srcs]
+ml_agentd_shared_lib = shared_library ('ml-agentd',
+ ml_agentd_lib_srcs,
+ dependencies: ml_agentd_deps,
+ include_directories: ml_agentd_incs,
install: true,
- install_dir: api_install_bindir,
+ install_dir: api_install_libdir,
cpp_args: [daemon_cpp_db_path_arg, daemon_cpp_db_key_prefix_arg],
+ version: api_version,
+)
+ml_agentd_static_lib = static_library('ml-agentd',
+ ml_agentd_lib_srcs,
+ dependencies: ml_agentd_deps,
+ include_directories: ml_agentd_incs,
+ install: true,
+ install_dir: api_install_libdir,
+ cpp_args: [daemon_cpp_db_path_arg, daemon_cpp_db_key_prefix_arg],
+ pic: true,
+)
+
+ml_agentd_lib = ml_agentd_shared_lib
+if get_option('default_library') == 'static'
+ ml_agentd_lib = ml_agentd_static_lib
+endif
+
+subdir('includes')
+install_headers(ml_agentd_headers,
+ subdir: 'ml-agentd'
+)
+
+ml_agentd_main_file = files('main.c')
+ml_agent_executable = executable('machine-learning-agent',
+ ml_agentd_main_file,
+ link_with: ml_agentd_lib,
+ dependencies: ml_agentd_deps,
+ include_directories: ml_agentd_incs,
+ install: true,
+ install_dir: api_install_bindir,
pie: true
)
--- /dev/null
+/**
+ * @file ml-agent-dbus-interface.c
+ * @date 5 April 2023
+ * @brief A set of exported DBus interfaces for managing pipelines and models
+ * @see https://github.com/nnstreamer/api
+ * @author Wook Song <wook16.song@samsung.com>
+ * @bug No known bugs except for NYI items
+ */
+
+#include "includes/ml-agent-dbus-interface.h"
+#include "includes/dbus-interface.h"
+#include "model-dbus.h"
+#include "pipeline-dbus.h"
+
+#include <glib.h>
+
+typedef enum
+{
+ ML_AGENT_DBUS_SERVICE_PIPELINE = 0,
+ ML_AGENT_DBUS_SERVICE_MODEL,
+ ML_AGENT_DBUS_SERVICE_END,
+} ml_agent_dbus_service_type_e;
+
+typedef gpointer ml_agent_dbus_proxy_h;
+
+/**
+ * @brief An internal helper to get the dbus proxy
+ */
+static ml_agent_dbus_proxy_h
+_get_proxy_new_for_bus_sync (ml_agent_dbus_service_type_e type, GError ** err)
+{
+ static const GBusType bus_types[] = { G_BUS_TYPE_SYSTEM, G_BUS_TYPE_SESSION };
+ static const size_t num_bus_types =
+ sizeof (bus_types) / sizeof (bus_types[0]);
+ ml_agent_dbus_proxy_h *proxy = NULL;
+ GError *_err = NULL;
+ size_t i;
+
+ switch (type) {
+ case ML_AGENT_DBUS_SERVICE_PIPELINE:
+ {
+ MachinelearningServicePipeline *mlsp;
+
+ for (i = 0; i < num_bus_types; ++i) {
+ g_clear_error (&_err);
+ mlsp =
+ machinelearning_service_pipeline_proxy_new_for_bus_sync (bus_types
+ [i], G_DBUS_PROXY_FLAGS_NONE, DBUS_ML_BUS_NAME, DBUS_PIPELINE_PATH,
+ NULL, &_err);
+ if (mlsp) {
+ break;
+ }
+ }
+ proxy = (ml_agent_dbus_proxy_h *) mlsp;
+ break;
+ }
+ case ML_AGENT_DBUS_SERVICE_MODEL:
+ {
+ MachinelearningServiceModel *mlsm;
+
+ for (i = 0; i < num_bus_types; ++i) {
+ g_clear_error (&_err);
+
+ mlsm =
+ machinelearning_service_model_proxy_new_for_bus_sync (bus_types[i],
+ G_DBUS_PROXY_FLAGS_NONE, DBUS_ML_BUS_NAME, DBUS_MODEL_PATH, NULL,
+ &_err);
+ if (mlsm)
+ break;
+ }
+ proxy = (ml_agent_dbus_proxy_h *) mlsm;
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (_err) {
+ *err = g_error_copy (_err);
+ g_clear_error (&_err);
+ }
+
+ return proxy;
+}
+
+/**
+ * @brief A dbus interface exported for setting the description of a pipeline
+ */
+gint
+ml_agent_dbus_interface_pipeline_set_description (const gchar * name,
+ const gchar * pipeline_desc, GError ** err)
+{
+ MachinelearningServicePipeline *mlsp;
+ gboolean result;
+
+ if (!name || !pipeline_desc) {
+ g_return_val_if_reached (-EINVAL);
+ }
+
+ mlsp = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_PIPELINE, err);
+ if (!mlsp) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_pipeline_call_set_pipeline_sync
+ (MACHINELEARNING_SERVICE_PIPELINE (mlsp), name, pipeline_desc, NULL, NULL,
+ err);
+ g_object_unref (mlsp);
+ g_return_val_if_fail (result, -EIO);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for getting the pipeline's description corresponding to the given @name
+ */
+gint
+ml_agent_dbus_interface_pipeline_get_description (const gchar * name,
+ gchar ** pipeline_desc, GError ** err)
+{
+ MachinelearningServicePipeline *mlsp;
+ gboolean result;
+ gint ret;
+
+ if (!name || !pipeline_desc) {
+ g_return_val_if_reached (-EINVAL);
+ }
+
+ mlsp = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_PIPELINE, err);
+ if (!mlsp) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_pipeline_call_get_pipeline_sync
+ (MACHINELEARNING_SERVICE_PIPELINE (mlsp), name, &ret, pipeline_desc, NULL,
+ err);
+ g_object_unref (mlsp);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for deletion of the pipeline's description corresponding to the given @name
+ */
+gint
+ml_agent_dbus_interface_pipeline_delete (const gchar * name, GError ** err)
+{
+ MachinelearningServicePipeline *mlsp;
+ gboolean result;
+ gint ret;
+
+ if (!name) {
+ g_return_val_if_reached (-EINVAL);
+ }
+
+ mlsp = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_PIPELINE, err);
+ if (!mlsp) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_pipeline_call_delete_pipeline_sync
+ (MACHINELEARNING_SERVICE_PIPELINE (mlsp), name, &ret, NULL, err);
+ g_object_unref (mlsp);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for launching the pipeline's description corresponding to the given @name
+ */
+gint
+ml_agent_dbus_interface_pipeline_launch (const gchar * name, gint64 * id,
+ GError ** err)
+{
+ MachinelearningServicePipeline *mlsp;
+ gboolean result;
+ gint ret;
+
+ if (!name) {
+ g_return_val_if_reached (-EINVAL);
+ }
+
+ mlsp = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_PIPELINE, err);
+ if (!mlsp) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_pipeline_call_launch_pipeline_sync (mlsp, name,
+ &ret, id, NULL, err);
+ g_object_unref (mlsp);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for changing the pipeline's state of the given @id to start
+ */
+gint
+ml_agent_dbus_interface_pipeline_start (gint64 id, GError ** err)
+{
+ MachinelearningServicePipeline *mlsp;
+ gboolean result;
+ gint ret;
+
+ mlsp = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_PIPELINE, err);
+ if (!mlsp) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_pipeline_call_start_pipeline_sync (mlsp, id, &ret,
+ NULL, err);
+ g_object_unref (mlsp);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for changing the pipeline's state of the given @id to stop
+ */
+gint
+ml_agent_dbus_interface_pipeline_stop (gint64 id, GError ** err)
+{
+ MachinelearningServicePipeline *mlsp;
+ gboolean result;
+ gint ret;
+
+ mlsp = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_PIPELINE, err);
+ if (!mlsp) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_pipeline_call_stop_pipeline_sync (mlsp, id, &ret,
+ NULL, err);
+ g_object_unref (mlsp);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for destroying a launched pipeline corresponding to the given @id
+ */
+gint
+ml_agent_dbus_interface_pipeline_destroy (gint64 id, GError ** err)
+{
+ MachinelearningServicePipeline *mlsp;
+
+ gboolean result;
+ gint ret;
+
+ mlsp = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_PIPELINE, err);
+ if (!mlsp) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_pipeline_call_destroy_pipeline_sync (mlsp, id,
+ &ret, NULL, err);
+ g_object_unref (mlsp);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for getting the pipeline's state of the given @id
+ */
+gint
+ml_agent_dbus_interface_pipeline_get_state (gint64 id, gint * state,
+ GError ** err)
+{
+ MachinelearningServicePipeline *mlsp;
+
+ gboolean result;
+ gint ret;
+
+ mlsp = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_PIPELINE, err);
+ if (!mlsp) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_pipeline_call_get_state_sync (mlsp, id, &ret,
+ state, NULL, err);
+ g_object_unref (mlsp);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+
+/**
+ * @brief A dbus interface exported for registering a model
+ */
+gint
+ml_agent_dbus_interface_model_register (const gchar * name, const gchar * path,
+ const gboolean activate, const gchar * description, const gchar *app_info,
+ guint * version, GError ** err)
+{
+ MachinelearningServiceModel *mlsm;
+
+ gboolean result;
+ gint ret;
+
+ mlsm = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_MODEL, err);
+ if (!mlsm) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result = machinelearning_service_model_call_register_sync (mlsm, name, path,
+ activate, description ? description : "", app_info ? app_info : "",
+ version, &ret, NULL, err);
+ g_object_unref (mlsm);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for updating the description of the given model, @name
+ */
+gint
+ml_agent_dbus_interface_model_update_description (const gchar * name,
+ const guint version, const gchar * description, GError ** err)
+{
+ MachinelearningServiceModel *mlsm;
+
+ gboolean result;
+ gint ret;
+
+ mlsm = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_MODEL, err);
+ if (!mlsm) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_model_call_update_description_sync (mlsm, name,
+ version, description, &ret, NULL, err);
+ g_object_unref (mlsm);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for activating the model of @name and @version
+ */
+gint
+ml_agent_dbus_interface_model_activate (const gchar * name, const guint version,
+ GError ** err)
+{
+ MachinelearningServiceModel *mlsm;
+
+ gboolean result;
+ gint ret;
+
+ mlsm = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_MODEL, err);
+ if (!mlsm) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_model_call_activate_sync (mlsm, name, version,
+ &ret, NULL, err);
+ g_object_unref (mlsm);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for getting the description of the given model of @name and @version
+ */
+gint
+ml_agent_dbus_interface_model_get (const gchar * name, const guint version,
+ gchar ** description, GError ** err)
+{
+ MachinelearningServiceModel *mlsm;
+
+ gboolean result;
+ gint ret;
+
+ mlsm = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_MODEL, err);
+ if (!mlsm) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_model_call_get_sync (mlsm, name, version,
+ description, &ret, NULL, err);
+ g_object_unref (mlsm);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for getting the description of the activated model of the given @name
+ */
+gint
+ml_agent_dbus_interface_model_get_activated (const gchar * name,
+ gchar ** description, GError ** err)
+{
+ MachinelearningServiceModel *mlsm;
+ gboolean result;
+ gint ret;
+
+ mlsm = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_MODEL, err);
+ if (!mlsm) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_model_call_get_activated_sync (mlsm, name,
+ description, &ret, NULL, err);
+ g_object_unref (mlsm);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for getting the description of all the models corresponding to the given @name
+ */
+gint
+ml_agent_dbus_interface_model_get_all (const gchar * name, gchar ** description,
+ GError ** err)
+{
+ MachinelearningServiceModel *mlsm;
+ gboolean result;
+ gint ret;
+
+ mlsm = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_MODEL, err);
+ if (!mlsm) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_model_call_get_all_sync (mlsm, name, description,
+ &ret, NULL, err);
+ g_object_unref (mlsm);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
+
+/**
+ * @brief A dbus interface exported for removing the model of @name and @version
+ */
+gint
+ml_agent_dbus_interface_model_delete (const gchar * name, const guint version,
+ GError ** err)
+{
+ MachinelearningServiceModel *mlsm;
+ gboolean result;
+ gint ret;
+
+ mlsm = _get_proxy_new_for_bus_sync (ML_AGENT_DBUS_SERVICE_MODEL, err);
+ if (!mlsm) {
+ g_return_val_if_reached (-EIO);
+ }
+
+ result =
+ machinelearning_service_model_call_delete_sync (mlsm, name, version, &ret,
+ NULL, err);
+ g_object_unref (mlsm);
+
+ g_return_val_if_fail (ret == 0 && result, ret);
+
+ return 0;
+}
Tizen internal headers for Tizen Machine Learning API.
%if 0%{?enable_ml_service}
+%package -n libmachine-learning-agent
+Summary: Library that exports interfaces provided by Machine Learning Agent Service
+Group: Machine Learning/ML Framework = %{version}-%{release}
+%description -n libmachine-learning-agent
+Shared library to export interfaces provided by the Machine Learning Agent Service.
+
+%package -n libmachine-learning-agent-devel
+Summary: Development headers and static library for interfaces provided by Machine Learning Agent Service
+Group: Machine Learning/ML Framework
+Requires: libmachine-learning-agent = %{version}-%{release}
+%description -n libmachine-learning-agent-devel
+Development headers and static library for interfaces provided by Machine Learning Agent Service.
+
%package -n machine-learning-agent
Summary: AI Service Daemon
Group: Machine Learning/ML Framework
-Requires: capi-machine-learning-service = %{version}-%{release}
+Requires: libmachine-learning-agent = %{version}-%{release}
%description -n machine-learning-agent
AI Service Daemon
%{_includedir}/nnstreamer/nnstreamer-tizen-internal.h
%if 0%{?enable_ml_service}
+%files -n libmachine-learning-agent
+%manifest machine-learning-agent.manifest
+%{_libdir}/libml-agentd.so.*
+
+#TODO: Need to provide a pkg-config file
+%files -n libmachine-learning-agent-devel
+%manifest machine-learning-agent.manifest
+%{_libdir}/libml-agentd.so
+%{_libdir}/libml-agentd.a
+%{_includedir}/ml-agentd/ml-agent-dbus-interface.h
+
+
%files -n machine-learning-agent
%manifest machine-learning-agent.manifest
%attr(0755,root,root) %{_bindir}/machine-learning-agent
if get_option('enable-ml-service')
unittest_capi_service_agent_client = executable('unittest_capi_service_agent_client',
'unittest_capi_service_agent_client.cc',
- dependencies: [unittest_common_dep, nns_capi_service_dep, gdbus_test_gen_dep],
+ link_with: nns_capi_service_lib,
+ dependencies: [unittest_common_dep, gdbus_gen_test_dep],
install: get_option('install-test'),
install_dir: unittest_install_dir,
- include_directories: [nns_capi_include, nns_ml_agent_incs],
+ include_directories: [nns_capi_include, ml_agentd_incs],
)
test('unittest_capi_service_agent_client', unittest_capi_service_agent_client, env: testenv, timeout: 100)
endif
unittest_ml_agent = executable('unittest_ml_agent',
'unittest_ml_agent.cc',
- dependencies: [unittest_common_dep, ai_service_daemon_deps, gdbus_test_gen_dep],
+ dependencies: [unittest_common_dep, ml_agentd_deps, gdbus_gen_test_dep],
install: get_option('install-test'),
install_dir: unittest_install_dir,
- include_directories: [nns_capi_include, nns_ml_agent_incs]
+ include_directories: [nns_capi_include, ml_agentd_incs]
)
test('unittest_ml_agent', unittest_ml_agent, env: testenv, timeout: 100)
dependencies: [unittest_common_dep, service_db_dep_for_test],
install: get_option('install-test'),
install_dir: unittest_install_dir,
- include_directories: [nns_capi_include, nns_ml_agent_incs],
+ include_directories: [nns_capi_include, ml_agentd_incs],
)
test('unittest_service_db', unittest_service_db, env: testenv, timeout: 100)
'--generate-c-code', 'test-dbus',
'--output-directory', meson.current_build_dir(),
'@INPUT@'])
-gdbus_test_gen_dep = declare_dependency(sources: gdbus_gen_test_src,
+gdbus_gen_test_dep = declare_dependency(sources: gdbus_gen_test_src,
dependencies: gdbus_gen_header_dep)
test_db_config_args = declare_dependency(
compile_args: ['-DDB_PATH="."', daemon_cpp_db_key_prefix_arg])
-
- nns_ml_agent_common_objs = nns_ml_agent_executable.extract_objects(nns_ml_agent_common_srcs)
+ ml_agentd_main_objs = ml_agent_executable.extract_objects(ml_agentd_main_file)
+ ml_agentd_common_objs = ml_agentd_lib.extract_objects(ml_agentd_lib_common_srcs)
executable('machine-learning-agent-test',
- [nns_ml_agent_service_db_srcs, test_dbus_impl_srcs],
- dependencies: [ai_service_daemon_deps, gdbus_test_gen_dep, test_db_config_args],
- include_directories: nns_ml_agent_incs,
+ [ml_agentd_lib_service_db_srcs, test_dbus_impl_srcs],
+ dependencies: [ml_agentd_deps, gdbus_gen_test_dep, test_db_config_args],
+ include_directories: ml_agentd_incs,
link_with: lib_unittest_mock,
- objects: [nns_ml_agent_common_objs]
+ objects: [ml_agentd_common_objs, ml_agentd_main_objs],
)
service_db_dep_for_test = declare_dependency(
- sources: nns_ml_agent_service_db_srcs,
+ sources: ml_agentd_lib_service_db_srcs,
dependencies: [glib_dep, sqlite_dep, test_db_config_args],
- include_directories: nns_ml_agent_incs
+ include_directories: ml_agentd_incs
)
subdir('services')