|
|
|
@ -32,23 +32,23 @@ inline string JoinARMFeatures(int cpu_id) |
|
|
|
|
|
|
|
|
|
if (FEATURES_HAS_NEON2 & cpu_id) |
|
|
|
|
{ |
|
|
|
|
if (!((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id) ||(ARCH_ARMv7 & cpu_id))) |
|
|
|
|
result = string(FEATURES_HAS_NEON2_NAME); |
|
|
|
|
if (!((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id) ||(ARCH_ARMv7 & cpu_id))) |
|
|
|
|
result = string(FEATURES_HAS_NEON2_NAME); |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_NEON & cpu_id) |
|
|
|
|
{ |
|
|
|
|
if (!((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id))) |
|
|
|
|
result = string(FEATURES_HAS_NEON_NAME); |
|
|
|
|
if (!((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id))) |
|
|
|
|
result = string(FEATURES_HAS_NEON_NAME); |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_VFPv3 & cpu_id) |
|
|
|
|
{ |
|
|
|
|
if ((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id)) |
|
|
|
|
result = string(FEATURES_HAS_VFPv3_NAME); |
|
|
|
|
if ((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id)) |
|
|
|
|
result = string(FEATURES_HAS_VFPv3_NAME); |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_VFPv3d16 & cpu_id) |
|
|
|
|
{ |
|
|
|
|
if ((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id)) |
|
|
|
|
result = string(FEATURES_HAS_VFPv3d16_NAME); |
|
|
|
|
if ((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id)) |
|
|
|
|
result = string(FEATURES_HAS_VFPv3d16_NAME); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
@ -60,22 +60,22 @@ inline int SplitARMFeatures(const vector<string>& features) |
|
|
|
|
|
|
|
|
|
for (size_t i = 3; i < features.size(); i++) |
|
|
|
|
{ |
|
|
|
|
if (FEATURES_HAS_VFPv3_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_VFPv3; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_VFPv3d16_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_VFPv3d16; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_NEON_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_NEON; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_NEON2_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_NEON2; |
|
|
|
|
} |
|
|
|
|
if (FEATURES_HAS_VFPv3_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_VFPv3; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_VFPv3d16_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_VFPv3d16; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_NEON_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_NEON; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_NEON2_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_NEON2; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
@ -87,15 +87,15 @@ inline string JoinIntelFeatures(int cpu_id) |
|
|
|
|
|
|
|
|
|
if (FEATURES_HAS_SSSE3 & cpu_id) |
|
|
|
|
{ |
|
|
|
|
result = FEATURES_HAS_SSSE3_NAME; |
|
|
|
|
result = FEATURES_HAS_SSSE3_NAME; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_SSE2 & cpu_id) |
|
|
|
|
{ |
|
|
|
|
result = FEATURES_HAS_SSE2_NAME; |
|
|
|
|
result = FEATURES_HAS_SSE2_NAME; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_SSE & cpu_id) |
|
|
|
|
{ |
|
|
|
|
result = FEATURES_HAS_SSE_NAME; |
|
|
|
|
result = FEATURES_HAS_SSE_NAME; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
@ -107,18 +107,18 @@ inline int SplitIntelFeatures(const vector<string>& features) |
|
|
|
|
|
|
|
|
|
for (size_t i = 3; i < features.size(); i++) |
|
|
|
|
{ |
|
|
|
|
if (FEATURES_HAS_SSSE3_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_SSSE3; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_SSE2_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_SSE2; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_SSE_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_SSE; |
|
|
|
|
} |
|
|
|
|
if (FEATURES_HAS_SSSE3_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_SSSE3; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_SSE2_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_SSE2; |
|
|
|
|
} |
|
|
|
|
else if (FEATURES_HAS_SSE_NAME == features[i]) |
|
|
|
|
{ |
|
|
|
|
result |= FEATURES_HAS_SSE; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
@ -130,12 +130,12 @@ inline string SplitVersion(const vector<string>& features, const string& package |
|
|
|
|
|
|
|
|
|
if ((features.size() > 1) && ('v' == features[1][0])) |
|
|
|
|
{ |
|
|
|
|
result = features[1].substr(1); |
|
|
|
|
result += SplitStringVector(package_version, '.')[0]; |
|
|
|
|
result = features[1].substr(1); |
|
|
|
|
result += SplitStringVector(package_version, '.')[0]; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
// TODO: Report package name format error
|
|
|
|
|
// TODO: Report package name format error
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
@ -158,23 +158,23 @@ inline int SplitPlatfrom(const vector<string>& features) |
|
|
|
|
|
|
|
|
|
if (features.size() > 2) |
|
|
|
|
{ |
|
|
|
|
string tmp = features[2]; |
|
|
|
|
if (PLATFORM_TEGRA_NAME == tmp) |
|
|
|
|
{ |
|
|
|
|
result = PLATFORM_TEGRA; |
|
|
|
|
} |
|
|
|
|
else if (PLATFORM_TEGRA2_NAME == tmp) |
|
|
|
|
{ |
|
|
|
|
result = PLATFORM_TEGRA2; |
|
|
|
|
} |
|
|
|
|
else if (PLATFORM_TEGRA3_NAME == tmp) |
|
|
|
|
{ |
|
|
|
|
result = PLATFORM_TEGRA3; |
|
|
|
|
} |
|
|
|
|
string tmp = features[2]; |
|
|
|
|
if (PLATFORM_TEGRA_NAME == tmp) |
|
|
|
|
{ |
|
|
|
|
result = PLATFORM_TEGRA; |
|
|
|
|
} |
|
|
|
|
else if (PLATFORM_TEGRA2_NAME == tmp) |
|
|
|
|
{ |
|
|
|
|
result = PLATFORM_TEGRA2; |
|
|
|
|
} |
|
|
|
|
else if (PLATFORM_TEGRA3_NAME == tmp) |
|
|
|
|
{ |
|
|
|
|
result = PLATFORM_TEGRA3; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
// TODO: Report package name format error
|
|
|
|
|
// TODO: Report package name format error
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
@ -189,135 +189,135 @@ inline int SplitPlatfrom(const vector<string>& features) |
|
|
|
|
* Example: armv7_neon, armv5_vfpv3 |
|
|
|
|
*/ |
|
|
|
|
PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::string install_path): |
|
|
|
|
Version(version), |
|
|
|
|
Platform(platform), |
|
|
|
|
CpuID(cpu_id), |
|
|
|
|
InstallPath("") |
|
|
|
|
Version(version), |
|
|
|
|
Platform(platform), |
|
|
|
|
CpuID(cpu_id), |
|
|
|
|
InstallPath("") |
|
|
|
|
{ |
|
|
|
|
#ifndef __SUPPORT_TEGRA3 |
|
|
|
|
#ifndef __SUPPORT_TEGRA3 |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
#endif |
|
|
|
|
#endif |
|
|
|
|
FullName = BasePackageName + "_v" + Version.substr(0, Version.size()-1); |
|
|
|
|
if (PLATFORM_UNKNOWN != Platform) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + JoinPlatform(platform); |
|
|
|
|
FullName += string("_") + JoinPlatform(platform); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (ARCH_UNKNOWN != CpuID) |
|
|
|
|
{ |
|
|
|
|
if (ARCH_X86 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch x86"); |
|
|
|
|
FullName += string("_") + ARCH_X86_NAME; |
|
|
|
|
#ifdef __SUPPORT_INTEL_FEATURES |
|
|
|
|
string features = JoinIntelFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_X64 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch x64"); |
|
|
|
|
#ifdef __SUPPORT_INTEL_x64 |
|
|
|
|
FullName += string("_") + ARCH_X64_NAME; |
|
|
|
|
#else |
|
|
|
|
FullName += string("_") + ARCH_X86_NAME; |
|
|
|
|
#endif |
|
|
|
|
#ifdef __SUPPORT_INTEL_FEATURES |
|
|
|
|
string features = JoinIntelFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv5 & CpuID) |
|
|
|
|
if (ARCH_UNKNOWN != CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch ARMv5"); |
|
|
|
|
FullName += string("_") + ARCH_ARMv5_NAME; |
|
|
|
|
#ifdef __SUPPORT_ARMEABI_FEATURES |
|
|
|
|
string features = JoinARMFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv6 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch ARMv6"); |
|
|
|
|
// NOTE: ARM v5 used instead ARM v6
|
|
|
|
|
//FullName += string("_") + ARCH_ARMv6_NAME;
|
|
|
|
|
FullName += string("_") + ARCH_ARMv5_NAME; |
|
|
|
|
#ifdef __SUPPORT_ARMEABI_FEATURES |
|
|
|
|
string features = JoinARMFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv7 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch ARMv7"); |
|
|
|
|
FullName += string("_") + ARCH_ARMv7_NAME; |
|
|
|
|
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES |
|
|
|
|
string features = JoinARMFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv8 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch ARMv8"); |
|
|
|
|
#ifdef __SUPPORT_ARMEABI_V8 |
|
|
|
|
FullName += string("_") + ARCH_ARMv8_NAME; |
|
|
|
|
#else |
|
|
|
|
FullName += string("_") + ARCH_ARMv7_NAME; |
|
|
|
|
#endif |
|
|
|
|
//string features = JoinARMFeatures(CpuID);
|
|
|
|
|
//if (!features.empty())
|
|
|
|
|
//{
|
|
|
|
|
// FullName += string("_") + features;
|
|
|
|
|
//}
|
|
|
|
|
if (ARCH_X86 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch x86"); |
|
|
|
|
FullName += string("_") + ARCH_X86_NAME; |
|
|
|
|
#ifdef __SUPPORT_INTEL_FEATURES |
|
|
|
|
string features = JoinIntelFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_X64 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch x64"); |
|
|
|
|
#ifdef __SUPPORT_INTEL_x64 |
|
|
|
|
FullName += string("_") + ARCH_X64_NAME; |
|
|
|
|
#else |
|
|
|
|
FullName += string("_") + ARCH_X86_NAME; |
|
|
|
|
#endif |
|
|
|
|
#ifdef __SUPPORT_INTEL_FEATURES |
|
|
|
|
string features = JoinIntelFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv5 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch ARMv5"); |
|
|
|
|
FullName += string("_") + ARCH_ARMv5_NAME; |
|
|
|
|
#ifdef __SUPPORT_ARMEABI_FEATURES |
|
|
|
|
string features = JoinARMFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv6 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch ARMv6"); |
|
|
|
|
// NOTE: ARM v5 used instead ARM v6
|
|
|
|
|
//FullName += string("_") + ARCH_ARMv6_NAME;
|
|
|
|
|
FullName += string("_") + ARCH_ARMv5_NAME; |
|
|
|
|
#ifdef __SUPPORT_ARMEABI_FEATURES |
|
|
|
|
string features = JoinARMFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv7 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch ARMv7"); |
|
|
|
|
FullName += string("_") + ARCH_ARMv7_NAME; |
|
|
|
|
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES |
|
|
|
|
string features = JoinARMFeatures(CpuID); |
|
|
|
|
if (!features.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + features; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv8 & CpuID) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch ARMv8"); |
|
|
|
|
#ifdef __SUPPORT_ARMEABI_V8 |
|
|
|
|
FullName += string("_") + ARCH_ARMv8_NAME; |
|
|
|
|
#else |
|
|
|
|
FullName += string("_") + ARCH_ARMv7_NAME; |
|
|
|
|
#endif |
|
|
|
|
//string features = JoinARMFeatures(CpuID);
|
|
|
|
|
//if (!features.empty())
|
|
|
|
|
//{
|
|
|
|
|
// FullName += string("_") + features;
|
|
|
|
|
//}
|
|
|
|
|
} |
|
|
|
|
#ifdef __SUPPORT_MIPS |
|
|
|
|
else if (ARCH_MIPS & CpuID) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + ARCH_MIPS_NAME; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch unknown"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#ifdef __SUPPORT_MIPS |
|
|
|
|
else if (ARCH_MIPS & CpuID) |
|
|
|
|
{ |
|
|
|
|
FullName += string("_") + ARCH_MIPS_NAME; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch unknown"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch unknown"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo: package arch unknown"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!FullName.empty()) |
|
|
|
|
{ |
|
|
|
|
InstallPath = install_path + FullName + "/lib"; |
|
|
|
|
InstallPath = install_path + FullName + "/lib"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PackageInfo::PackageInfo(const string& fullname, const string& install_path, string package_version): |
|
|
|
|
FullName(fullname), |
|
|
|
|
InstallPath(install_path) |
|
|
|
|
FullName(fullname), |
|
|
|
|
InstallPath(install_path) |
|
|
|
|
{ |
|
|
|
|
LOGD("PackageInfo::PackageInfo(\"%s\", \"%s\", \"%s\")", fullname.c_str(), install_path.c_str(), package_version.c_str()); |
|
|
|
|
|
|
|
|
@ -326,127 +326,127 @@ PackageInfo::PackageInfo(const string& fullname, const string& install_path, str |
|
|
|
|
|
|
|
|
|
if (OPENCV_ENGINE_PACKAGE == fullname) |
|
|
|
|
{ |
|
|
|
|
// Science version 1.7 OpenCV Manager has it's own version of OpenCV inside
|
|
|
|
|
// Load libopencv_info.so to understand OpenCV version, platform and other features
|
|
|
|
|
std::string tmp; |
|
|
|
|
if (install_path.empty()) |
|
|
|
|
{ |
|
|
|
|
tmp = std::string(DEFAULT_ENGINE_INSTALL_PATH) + "/" + LIB_OPENCV_INFO_NAME; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
tmp = install_path + "/" + LIB_OPENCV_INFO_NAME; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
LOGD("Trying to load info library \"%s\"", tmp.c_str()); |
|
|
|
|
|
|
|
|
|
void* handle; |
|
|
|
|
const char* (*name_func)(); |
|
|
|
|
const char* (*revision_func)(); |
|
|
|
|
|
|
|
|
|
handle = dlopen(tmp.c_str(), RTLD_LAZY); |
|
|
|
|
if (handle) |
|
|
|
|
{ |
|
|
|
|
const char* error; |
|
|
|
|
|
|
|
|
|
dlerror(); |
|
|
|
|
*(void **) (&name_func) = dlsym(handle, "GetPackageName"); |
|
|
|
|
*(void **) (&revision_func) = dlsym(handle, "GetRevision"); |
|
|
|
|
error = dlerror(); |
|
|
|
|
|
|
|
|
|
if (!error && revision_func && name_func) |
|
|
|
|
// Science version 1.7 OpenCV Manager has it's own version of OpenCV inside
|
|
|
|
|
// Load libopencv_info.so to understand OpenCV version, platform and other features
|
|
|
|
|
std::string tmp; |
|
|
|
|
if (install_path.empty()) |
|
|
|
|
{ |
|
|
|
|
FullName = std::string((*name_func)()); |
|
|
|
|
package_version = std::string((*revision_func)()); |
|
|
|
|
dlclose(handle); |
|
|
|
|
LOGI("OpenCV package \"%s\" revision \"%s\" found", FullName.c_str(), package_version.c_str()); |
|
|
|
|
tmp = std::string(DEFAULT_ENGINE_INSTALL_PATH) + "/" + LIB_OPENCV_INFO_NAME; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGE("Library loading error (%x, %x): \"%s\"", name_func, revision_func, error); |
|
|
|
|
tmp = install_path + "/" + LIB_OPENCV_INFO_NAME; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGI("Info library not found in package"); |
|
|
|
|
LOGI("OpenCV Manager package does not contain any verison of OpenCV library"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
LOGD("Trying to load info library \"%s\"", tmp.c_str()); |
|
|
|
|
|
|
|
|
|
void* handle; |
|
|
|
|
const char* (*name_func)(); |
|
|
|
|
const char* (*revision_func)(); |
|
|
|
|
|
|
|
|
|
handle = dlopen(tmp.c_str(), RTLD_LAZY); |
|
|
|
|
if (handle) |
|
|
|
|
{ |
|
|
|
|
const char* error; |
|
|
|
|
|
|
|
|
|
dlerror(); |
|
|
|
|
*(void **) (&name_func) = dlsym(handle, "GetPackageName"); |
|
|
|
|
*(void **) (&revision_func) = dlsym(handle, "GetRevision"); |
|
|
|
|
error = dlerror(); |
|
|
|
|
|
|
|
|
|
if (!error && revision_func && name_func) |
|
|
|
|
{ |
|
|
|
|
FullName = std::string((*name_func)()); |
|
|
|
|
package_version = std::string((*revision_func)()); |
|
|
|
|
dlclose(handle); |
|
|
|
|
LOGI("OpenCV package \"%s\" revision \"%s\" found", FullName.c_str(), package_version.c_str()); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGE("Library loading error (%x, %x): \"%s\"", name_func, revision_func, error); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGI("Info library not found in package"); |
|
|
|
|
LOGI("OpenCV Manager package does not contain any verison of OpenCV library"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vector<string> features = SplitStringVector(FullName, '_'); |
|
|
|
|
|
|
|
|
|
if (!features.empty() && (BasePackageName == features[0])) |
|
|
|
|
{ |
|
|
|
|
Version = SplitVersion(features, package_version); |
|
|
|
|
if (Version.empty()) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Platform = SplitPlatfrom(features); |
|
|
|
|
if (PLATFORM_UNKNOWN != Platform) |
|
|
|
|
{ |
|
|
|
|
CpuID = 0; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (features.size() < 3) |
|
|
|
|
{ |
|
|
|
|
LOGD("It is not OpenCV library package for this platform"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv5_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_ARMv5 | SplitARMFeatures(features); |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv6_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_ARMv6 | SplitARMFeatures(features); |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv7_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_ARMv7 | SplitARMFeatures(features); |
|
|
|
|
} |
|
|
|
|
else if (ARCH_X86_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_X86 | SplitIntelFeatures(features); |
|
|
|
|
} |
|
|
|
|
else if (ARCH_X64_NAME == features[2]) |
|
|
|
|
Version = SplitVersion(features, package_version); |
|
|
|
|
if (Version.empty()) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_X64 | SplitIntelFeatures(features); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
#ifdef __SUPPORT_MIPS |
|
|
|
|
else if (ARCH_MIPS_NAME == features[2]) |
|
|
|
|
|
|
|
|
|
Platform = SplitPlatfrom(features); |
|
|
|
|
if (PLATFORM_UNKNOWN != Platform) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_MIPS; |
|
|
|
|
CpuID = 0; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (features.size() < 3) |
|
|
|
|
{ |
|
|
|
|
LOGD("It is not OpenCV library package for this platform"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv5_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_ARMv5 | SplitARMFeatures(features); |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv6_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_ARMv6 | SplitARMFeatures(features); |
|
|
|
|
} |
|
|
|
|
else if (ARCH_ARMv7_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_ARMv7 | SplitARMFeatures(features); |
|
|
|
|
} |
|
|
|
|
else if (ARCH_X86_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_X86 | SplitIntelFeatures(features); |
|
|
|
|
} |
|
|
|
|
else if (ARCH_X64_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_X64 | SplitIntelFeatures(features); |
|
|
|
|
} |
|
|
|
|
#ifdef __SUPPORT_MIPS |
|
|
|
|
else if (ARCH_MIPS_NAME == features[2]) |
|
|
|
|
{ |
|
|
|
|
CpuID = ARCH_MIPS; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGD("It is not OpenCV library package for this platform"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGD("It is not OpenCV library package for this platform"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
LOGD("It is not OpenCV library package for this platform"); |
|
|
|
|
Version.clear(); |
|
|
|
|
CpuID = ARCH_UNKNOWN; |
|
|
|
|
Platform = PLATFORM_UNKNOWN; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|