%define name hal-api-common
%define devel_name hal-api-common-devel
%define test_name hal-api-common-haltests
+%if "%{tizen_profile_name}" != "tv"
+%define enable_halcc 1
+%else
+%define enable_halcc 0
+%endif
### main package #########
Name: %{name}
cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_LIBDIR_PREFIX=%{_libdir} \
+ -DENABLE_HALCC=%{enable_halcc} \
-DENABLE_DLOG=1
%build
rm -rf %{buildroot}
%make_install
+%if %{enable_halcc}
mkdir -p %{buildroot}%{_unitdir}
cp %{SOURCE4} %{buildroot}%{_unitdir}
+%endif
mkdir -p %{buildroot}/hal
install -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/ld.so.conf.d/libhal-api.conf
%dir /hal
%{_libdir}/hal/*.so*
%{_bindir}/lshal
-%{_bindir}/hal-compatibility-checker
%{_sysconfdir}/ld.so.conf.d/libhal-api.conf
%{_systemdgeneratordir}/systemd-hal-firmware-generator
+%if %{enable_halcc}
+%{_bindir}/hal-compatibility-checker
%{_unitdir}/hal-compatibility-checker.service
+%endif
%{_datadir}/upgrade/scripts/500.%{name}.sh
%files -n %{devel_name}
info->handle = NULL;
}
+static int __check_backend_compatibility_by_version(enum hal_module module,
+ unsigned int major, unsigned int minor)
+{
+ int ret;
+ enum hal_common_backend_compatibility compatibility =
+ HAL_COMMON_BACKEND_COMPATIBILITY_UNKNOWN;
+
+ if (!HALCC_ENABLED)
+ return 0;
+
+ ret = hal_api_cc_check_backend_compatibility_by_version(module, major, minor, &compatibility);
+ if (ret != 0 || compatibility == HAL_COMMON_BACKEND_COMPATIBILITY_INCOMPATIBLE) {
+ struct __hal_module_info *info = _hal_api_conf_get_module_info(module, NULL);
+
+ _W("%s: Failed to check compatibility, ret=%d, compatibility=%d\n",
+ info ? info->module_name : "Unknown", ret, compatibility);
+ /**
+ * FIXME:
+ * Do not return error but just print warning for now. Need time to
+ * deploy compatibility manifest to all hal modules.
+ *
+ * return -ELIBBAD;
+ */
+ }
+
+ return 0;
+}
+
static int __init_backend(struct __hal_module_info *info,
void **data, void *user_data,
int (*init_backend)(void **data, void *user_data))
{
int ret;
- enum hal_common_backend_compatibility compatibility =
- HAL_COMMON_BACKEND_COMPATIBILITY_UNKNOWN;
if (!info->handle || !info->backend) {
_I("%s: Has not yet dlopend backend\n", info->module_name);
return -EINVAL;
}
- ret = hal_api_cc_check_backend_compatibility_by_version(info->module,
- info->backend->major_version, info->backend->minor_version,
- &compatibility);
- if (ret != 0 || compatibility == HAL_COMMON_BACKEND_COMPATIBILITY_INCOMPATIBLE) {
- /**
- * FIXME:
- * Not return but just print warning for now. Need time to
- * deploy compatibility manifest to all hal modules.
- */
- _W("%s: Failed to check compatibility, ret=%d, compatibility=%d\n",
- info->module_name, ret, compatibility);
- }
+ ret = __check_backend_compatibility_by_version(info->module,
+ info->backend->major_version, info->backend->minor_version);
+ if (ret < 0)
+ return -EINVAL;
/* Initialize backend */
ret = info->backend->init(data);
int hal_common_check_backend_compatibility(enum hal_module module,
enum hal_common_backend_compatibility *backend_compatibility)
{
+ if (!backend_compatibility)
+ return -EINVAL;
+
+ if (!HALCC_ENABLED) {
+ _W("Hal compatibility checker is disabled. Consider it always compatible.");
+ *backend_compatibility = HAL_COMMON_BACKEND_COMPATIBILITY_COMPATIBLE;
+ return 0;
+ }
+
return hal_api_cc_check_backend_compatibility(module, backend_compatibility);
}
int hal_common_get_supported_interface_versions(enum hal_module module,
unsigned int **major_versions, unsigned int **minor_versions, int *num_versions)
{
+ if (!major_versions || !minor_versions || !num_versions)
+ return -EINVAL;
+
+ if (!HALCC_ENABLED) {
+ _W("Hal compatibility checker is disabled. No interface version has been provided.");
+ *num_versions = 0;
+ return 0;
+ }
+
return hal_api_cc_get_supported_interface_versions(module,
major_versions, minor_versions, num_versions);
}