diff --git a/CMakeLists.txt b/CMakeLists.txt
index a7d2b3f62..b9ccde2e0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -204,7 +204,6 @@ if(ENABLE_OPENVINO_BACKEND)
add_definitions(-DENABLE_OPENVINO_BACKEND)
list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_OPENVINO_SRCS})
include(${PROJECT_SOURCE_DIR}/cmake/openvino.cmake)
- list(APPEND DEPEND_LIBS external_openvino)
endif()
if(WITH_GPU)
@@ -414,6 +413,7 @@ install(
${PROJECT_SOURCE_DIR}/ThirdPartyNotices.txt
${PROJECT_SOURCE_DIR}/VERSION_NUMBER
${PROJECT_SOURCE_DIR}/FastDeploy.cmake
+ ${PROJECT_SOURCE_DIR}/cmake/utils.cmake
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
install(
diff --git a/FastDeploy.cmake.in b/FastDeploy.cmake.in
index 9a4dbb923..c41fc7ffe 100644
--- a/FastDeploy.cmake.in
+++ b/FastDeploy.cmake.in
@@ -20,6 +20,9 @@ set(FASTDEPLOY_LIBS "")
set(FASTDEPLOY_INCS "")
list(APPEND FASTDEPLOY_INCS ${CMAKE_CURRENT_LIST_DIR}/include)
+# Note(zhoushunjie): include some useful utils function
+include(${CMAKE_CURRENT_LIST_DIR}/utils.cmake)
+
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 11)
endif()
@@ -57,8 +60,10 @@ if(ENABLE_PADDLE_BACKEND)
endif()
if(ENABLE_OPENVINO_BACKEND)
- find_library(OPENVINO_LIB openvino ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/openvino/lib/ NO_DEFAULT_PATH)
- list(APPEND FASTDEPLOY_LIBS ${OPENVINO_LIB})
+ set(OPENVINO_FILENAME @OPENVINO_FILENAME@)
+ get_openvino_libs(${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${OPENVINO_FILENAME}/runtime)
+ message(STATUS "OPENVINO_LIBS = ${OPENVINO_LIBS}")
+ list(APPEND FASTDEPLOY_LIBS ${OPENVINO_LIBS})
endif()
if(WITH_GPU)
@@ -100,8 +105,6 @@ if (ENABLE_TEXT)
find_library(FASTER_TOKENIZER_LIB core_tokenizers ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/faster_tokenizer/lib NO_DEFAULT_PATH)
list(APPEND FASTDEPLOY_LIBS ${FASTER_TOKENIZER_LIB})
list(APPEND FASTDEPLOY_INCS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/faster_tokenizer/include)
- # TODO (zhoushunjie): Will remove it later.
- list(APPEND FASTDEPLOY_INCS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/faster_tokenizer/include/faster_tokenizer)
list(APPEND FASTDEPLOY_INCS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/faster_tokenizer/third_party/include)
endif()
@@ -110,6 +113,9 @@ if(ENABLE_PADDLE_FRONTEND)
list(APPEND FASTDEPLOY_LIBS ${PADDLE2ONNX_LIB})
endif()
+message("FASTDEPLOY_LIBS = ${FASTDEPLOY_LIBS}")
+remove_duplicate_libraries(FASTDEPLOY_LIBS)
+
# Print compiler information
message(STATUS "")
message(STATUS "*************FastDeploy Building Summary**********")
@@ -132,6 +138,7 @@ endif()
message(STATUS " ENABLE_TRT_BACKEND : ${ENABLE_TRT_BACKEND}")
message(STATUS " ENABLE_VISION : ${ENABLE_VISION}")
message(STATUS " ENABLE_TEXT : ${ENABLE_TEXT}")
+message(STATUS " DEPENDENCY_LIBS : ${FASTDEPLOY_LIBS}")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.4.0")
diff --git a/README_CN.md b/README_CN.md
index 85f3fa643..662e63cb0 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -285,7 +285,7 @@ int main(int argc, char* argv[]) {
- **加入社区👬:** 微信扫描二维码,进入**FastDeploy技术交流群**
-

+
## Acknowledge
diff --git a/README_EN.md b/README_EN.md
index 23c3fa6e6..4b6de076a 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -299,7 +299,7 @@ Notes:
- **Join Us👬:** Scan the QR code via WeChat to join our **FastDeploy technology communication group**
-

+
## Acknowledge
diff --git a/cmake/eigen.cmake b/cmake/eigen.cmake
index d688adf43..d1a9332b2 100644
--- a/cmake/eigen.cmake
+++ b/cmake/eigen.cmake
@@ -17,8 +17,8 @@ include(ExternalProject)
# update eigen to the commit id f612df27 on 03/16/2021
set(EIGEN_PREFIX_DIR ${THIRD_PARTY_PATH}/eigen3)
set(EIGEN_SOURCE_DIR ${THIRD_PARTY_PATH}/eigen3/src/extern_eigen3)
-#set(EIGEN_REPOSITORY https://gitlab.com/libeigen/eigen.git)
-set(EIGEN_REPOSITORY https://gitee.com/jiangjiajun/eigen.git)
+set(EIGEN_REPOSITORY https://gitlab.com/libeigen/eigen.git)
+#set(EIGEN_REPOSITORY https://gitee.com/jiangjiajun/eigen.git)
set(EIGEN_TAG f612df273689a19d25b45ca4f8269463207c4fee)
if(WIN32)
@@ -64,4 +64,4 @@ add_dependencies(eigen3 extern_eigen3)
# sw not support thread_local semantic
if(WITH_SW)
add_definitions(-DEIGEN_AVOID_THREAD_LOCAL)
-endif()
\ No newline at end of file
+endif()
diff --git a/cmake/openvino.cmake b/cmake/openvino.cmake
index e5e276c91..e07259965 100644
--- a/cmake/openvino.cmake
+++ b/cmake/openvino.cmake
@@ -15,118 +15,75 @@
include(ExternalProject)
set(OPENVINO_PROJECT "extern_openvino")
-set(OPENVINO_PREFIX_DIR ${THIRD_PARTY_PATH}/openvino)
-set(OPENVINO_INSTALL_DIR ${THIRD_PARTY_PATH}/install/openvino)
-set(OPENVINO_INSTALL_INC_DIR
- "${OPENVINO_INSTALL_DIR}/include"
- CACHE PATH "openvino install include directory." FORCE)
-if (WIN32)
- set(OPENVINO_SOURCE_DIR
- ${THIRD_PARTY_PATH}/openvino/src/${OPENVINO_PROJECT}/openvino-win-x64-2022.1.0)
- set(OPENVINO_INC_DIR
- "${OPENVINO_INSTALL_DIR}/include"
- "${OPENVINO_INSTALL_DIR}/include/ie"
- CACHE PATH "openvino include directory." FORCE)
- set(OPENVINO_LIB_DIR
- "${OPENVINO_INSTALL_DIR}/lib/"
- CACHE PATH "openvino lib directory." FORCE)
-else()
- set(OPENVINO_SOURCE_DIR
- ${THIRD_PARTY_PATH}/openvino/src/${OPENVINO_PROJECT})
- set(OPENVINO_INC_DIR
- "${OPENVINO_INSTALL_DIR}/include"
- CACHE PATH "openvino include directory." FORCE)
- set(OPENVINO_LIB_DIR
- "${OPENVINO_INSTALL_DIR}/lib/"
- CACHE PATH "openvino lib directory." FORCE)
-endif()
-
-
-set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" "${OPENVINO_LIB_DIR}")
-
-set(OPENVINO_VERSION "2022.3.0")
+set(OPENVINO_VERSION "2022.2.0.dev20220829")
set(OPENVINO_URL_PREFIX "https://bj.bcebos.com/fastdeploy/third_libs/")
+set(COMPRESSED_SUFFIX ".tgz")
if(WIN32)
- set(OPENVINO_FILENAME "openvino-win-x64-${OPENVINO_VERSION}.zip")
+ set(OPENVINO_FILENAME "w_openvino_toolkit_windows_${OPENVINO_VERSION}")
+ set(COMPRESSED_SUFFIX ".zip")
if(NOT CMAKE_CL_64)
message(FATAL_ERROR "FastDeploy cannot ENABLE_OPENVINO_BACKEND in win32 now.")
endif()
elseif(APPLE)
- message(FATAL_ERROR "FastDeploy cannot ENABLE_OPENVINO_BACKEND in Mac OSX now.")
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64")
- set(OPENVINO_FILENAME "openvino-osx-arm64-${OPENVINO_VERSION}.tgz")
+ message("Cannot compile with openvino while in osx arm64 platform right now")
else()
- set(OPENVINO_FILENAME "openvino-osx-x86_64-${OPENVINO_VERSION}.tgz")
+ set(OPENVINO_FILENAME "m_openvino_toolkit_osx_${OPENVINO_VERSION}")
endif()
else()
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
message("Cannot compile with openvino while in linux-aarch64 platform")
else()
- set(OPENVINO_FILENAME "openvino-linux-x64-${OPENVINO_VERSION}.tgz")
+ set(OPENVINO_FILENAME "l_openvino_toolkit_centos7_${OPENVINO_VERSION}")
endif()
endif()
-set(OPENVINO_URL "${OPENVINO_URL_PREFIX}${OPENVINO_FILENAME}")
+set(OPENVINO_URL "${OPENVINO_URL_PREFIX}${OPENVINO_FILENAME}${COMPRESSED_SUFFIX}")
-include_directories(${OPENVINO_INC_DIR}
-)# For OPENVINO code to include internal headers.
+set(OPENVINO_INSTALL_DIR ${THIRD_PARTY_PATH}/install/${OPENVINO_FILENAME}/runtime)
+set(OPENVINO_INSTALL_INC_DIR
+ "${OPENVINO_INSTALL_DIR}/include"
+ "${OPENVINO_INSTALL_DIR}/include/ie"
+ CACHE PATH "openvino install include directory." FORCE)
+
+set(OPENVINO_LIB_DIR
+ "${OPENVINO_INSTALL_DIR}/lib/"
+ "${OPENVINO_INSTALL_DIR}/3rdparty/tbb/lib/"
+ CACHE PATH "openvino lib directory." FORCE)
+set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" "${OPENVINO_LIB_DIR}")
+
+# For OPENVINO code to include internal headers.
+include_directories(${OPENVINO_INSTALL_INC_DIR})
+
+download_and_decompress(${OPENVINO_URL}
+ ${CMAKE_CURRENT_BINARY_DIR}/${OPENVINO_FILENAME}${COMPRESSED_SUFFIX}
+ ${THIRD_PARTY_PATH}/install)
if(WIN32)
- set(OPENVINO_LIB
- "${OPENVINO_INSTALL_DIR}/lib/openvino.lib"
- CACHE FILEPATH "OPENVINO static library." FORCE)
+ file(GLOB_RECURSE OPENVINO_LIB_FILES ${OPENVINO_INSTALL_DIR}/lib/intel64/Release/*)
+ file(COPY ${OPENVINO_LIB_FILES} DESTINATION ${OPENVINO_INSTALL_DIR}/lib/)
+ file(REMOVE_RECURSE ${OPENVINO_INSTALL_DIR}/lib/intel64)
+
+ file(GLOB_RECURSE OPENVINO_BIN_FILES ${OPENVINO_INSTALL_DIR}/bin/intel64/Release/*)
+ file(COPY ${OPENVINO_BIN_FILES} DESTINATION ${OPENVINO_INSTALL_DIR}/bin/)
+ file(REMOVE_RECURSE ${OPENVINO_INSTALL_DIR}/bin/intel64)
elseif(APPLE)
- set(OPENVINO_LIB
- "${OPENVINO_INSTALL_DIR}/lib/libopenvino.dylib"
- CACHE FILEPATH "OPENVINO static library." FORCE)
+ file(GLOB_RECURSE OPENVINO_LIB_FILES ${OPENVINO_INSTALL_DIR}/lib/intel64/Release/*)
+ file(COPY ${OPENVINO_LIB_FILES} DESTINATION ${OPENVINO_INSTALL_DIR}/lib/)
+ file(REMOVE_RECURSE ${OPENVINO_INSTALL_DIR}/lib/intel64)
else()
- set(OPENVINO_LIB
- "${OPENVINO_INSTALL_DIR}/lib/libopenvino.so"
- CACHE FILEPATH "OPENVINO static library." FORCE)
+ file(GLOB_RECURSE OPENVINO_LIB_FILES ${OPENVINO_INSTALL_DIR}/lib/intel64/*)
+ file(COPY ${OPENVINO_LIB_FILES} DESTINATION ${OPENVINO_INSTALL_DIR}/lib/)
+ file(REMOVE_RECURSE ${OPENVINO_INSTALL_DIR}/lib/intel64)
endif()
-if (WIN32)
- ExternalProject_Add(
- ${OPENVINO_PROJECT}
- ${EXTERNAL_PROJECT_LOG_ARGS}
- URL ${OPENVINO_URL}
- PREFIX ${OPENVINO_PREFIX_DIR}
- DOWNLOAD_NO_PROGRESS 1
- CONFIGURE_COMMAND ""
- BUILD_COMMAND ""
- UPDATE_COMMAND ""
- INSTALL_COMMAND
- ${CMAKE_COMMAND} -E remove_directory ${OPENVINO_INSTALL_DIR} &&
- ${CMAKE_COMMAND} -E make_directory ${OPENVINO_INSTALL_DIR} &&
- ${CMAKE_COMMAND} -E copy_directory ${OPENVINO_SOURCE_DIR}/lib/intel64/Release ${OPENVINO_INSTALL_DIR}/lib &&
- ${CMAKE_COMMAND} -E copy_directory ${OPENVINO_SOURCE_DIR}/bin/intel64/Release ${OPENVINO_INSTALL_DIR}/bin &&
- ${CMAKE_COMMAND} -E copy_directory ${OPENVINO_SOURCE_DIR}/include ${OPENVINO_INSTALL_INC_DIR} &&
- ${CMAKE_COMMAND} -E copy_directory ${OPENVINO_SOURCE_DIR}/3rdparty ${OPENVINO_INSTALL_DIR}/3rdparty
- BUILD_BYPRODUCTS ${OPENVINO_LIB})
-else()
- ExternalProject_Add(
- ${OPENVINO_PROJECT}
- ${EXTERNAL_PROJECT_LOG_ARGS}
- URL ${OPENVINO_URL}
- PREFIX ${OPENVINO_PREFIX_DIR}
- DOWNLOAD_NO_PROGRESS 1
- CONFIGURE_COMMAND ""
- BUILD_COMMAND ""
- UPDATE_COMMAND ""
- INSTALL_COMMAND
- ${CMAKE_COMMAND} -E remove_directory ${OPENVINO_INSTALL_DIR} &&
- ${CMAKE_COMMAND} -E make_directory ${OPENVINO_INSTALL_DIR} &&
- ${CMAKE_COMMAND} -E rename ${OPENVINO_SOURCE_DIR}/lib/intel64 ${OPENVINO_INSTALL_DIR}/lib &&
- ${CMAKE_COMMAND} -E copy_directory ${OPENVINO_SOURCE_DIR}/include
- ${OPENVINO_INSTALL_INC_DIR}
- BUILD_BYPRODUCTS ${OPENVINO_LIB})
-endif()
+file(REMOVE_RECURSE ${THIRD_PARTY_PATH}/install/${OPENVINO_FILENAME}/docs)
+file(REMOVE_RECURSE ${THIRD_PARTY_PATH}/install/${OPENVINO_FILENAME}/install_dependencies)
+file(REMOVE_RECURSE ${THIRD_PARTY_PATH}/install/${OPENVINO_FILENAME}/samples)
+file(REMOVE_RECURSE ${THIRD_PARTY_PATH}/install/${OPENVINO_FILENAME}/setupvars.sh)
+file(REMOVE_RECURSE ${THIRD_PARTY_PATH}/install/${OPENVINO_FILENAME}/tools)
-if(UNIX)
- add_custom_target(patchelf_openvino ALL COMMAND bash -c "sh ${PROJECT_SOURCE_DIR}/scripts/patch_lib.sh ${OPENVINO_INSTALL_DIR}/lib" DEPENDS ${LIBRARY_NAME})
-endif()
-
-add_library(external_openvino STATIC IMPORTED GLOBAL)
-set_property(TARGET external_openvino PROPERTY IMPORTED_LOCATION ${OPENVINO_LIB})
-add_dependencies(external_openvino ${OPENVINO_PROJECT})
+get_openvino_libs(${OPENVINO_INSTALL_DIR})
+message("OPENVINO_LIBS = ${OPENVINO_LIBS}")
+list(APPEND DEPEND_LIBS ${OPENVINO_LIBS})
\ No newline at end of file
diff --git a/cmake/utils.cmake b/cmake/utils.cmake
index 1a203ee96..3c5833f77 100644
--- a/cmake/utils.cmake
+++ b/cmake/utils.cmake
@@ -26,3 +26,36 @@ function(download_and_decompress url filename decompress_dir)
message("Decompress file ${filename} ...")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar -xf ${filename} WORKING_DIRECTORY ${decompress_dir})
endfunction()
+
+function(get_openvino_libs OPENVINO_RUNTIME_DIR)
+ set(LIB_LIST "")
+ find_library(OPENVINO_LIB openvino ${OPENVINO_RUNTIME_DIR}/lib/ NO_DEFAULT_PATH)
+ list(APPEND LIB_LIST ${OPENVINO_LIB})
+
+ find_package(TBB PATHS "${OPENVINO_RUNTIME_DIR}/3rdparty/tbb")
+ if (TBB_FOUND)
+ list(APPEND LIB_LIST ${TBB_IMPORTED_TARGETS})
+ else()
+ # TODO(zhoushunjie): Use openvino with tbb on linux in future.
+ set(OMP_LIB "${OPENVINO_RUNTIME_DIR}/3rdparty/omp/lib/libiomp5.so")
+ list(APPEND LIB_LIST ${OMP_LIB})
+ endif()
+ set(OPENVINO_LIBS ${LIB_LIST} PARENT_SCOPE)
+endfunction()
+
+function(remove_duplicate_libraries libraries)
+ list(LENGTH ${libraries} lib_length)
+ set(libraries_temp "")
+ set(full_libraries "")
+ foreach(lib_path ${${libraries}})
+ get_filename_component(lib_name ${lib_path} NAME)
+ list(FIND libraries_temp ${lib_name} lib_idx)
+ if (${lib_idx} EQUAL -1)
+ list(APPEND libraries_temp ${lib_name})
+ list(APPEND full_libraries ${lib_path})
+ endif()
+ endforeach()
+ set(${libraries} ${full_libraries} PARENT_SCOPE)
+ list(LENGTH full_libraries lib_length)
+endfunction()
+
diff --git a/python/scripts/process_libraries.py.in b/python/scripts/process_libraries.py.in
index 223308711..d568c7884 100644
--- a/python/scripts/process_libraries.py.in
+++ b/python/scripts/process_libraries.py.in
@@ -39,7 +39,7 @@ def process_on_linux(current_dir):
if d not in ["lib", "lib64"]:
continue
rel_path = os.path.relpath(os.path.join(root, d), libs_path)
- if path in user_specified_dirs:
+ if path in user_specified_dirs:
# Note(zhoushunjie): Use the absolute path for user_specified_dirs
rpath = os.path.join(root, d)
else:
@@ -78,14 +78,18 @@ def process_on_mac(current_dir):
for d in dirs:
if d not in ["lib", "lib64"]:
continue
- rel_path = rel_path = os.path.relpath(os.path.join(root, d), libs_path)
- rpath = "$loader_path/" + rel_path
- for lib in fd_libs:
- pre_commands.append(
- "install_name_tool -delete_rpath '@loader_path/{}' {}".format(
- rpath, lib))
- commands.append("install_name_tool -add_rpath 'loader_path/{}' {}".
- format(rpath, lib))
+ rel_path = os.path.relpath(os.path.join(root, d), libs_path)
+ if path in user_specified_dirs:
+ # Note(zhoushunjie): Use the absolute path for user_specified_dirs
+ rpath = os.path.join(root, d)
+ else:
+ rpath = "$loader_path/" + rel_path
+ for lib in fd_libs:
+ pre_commands.append(
+ "install_name_tool -delete_rpath '@loader_path/{}' {}".format(
+ rpath, lib))
+ commands.append("install_name_tool -add_rpath 'loader_path/{}' {}".
+ format(rpath, lib))
for cmd in pre_commands:
try:
@@ -97,7 +101,6 @@ def process_on_mac(current_dir):
assert subprocess.Popen(
cmd, shell=True) != 0, "Execute command failed: {}".format(cmd)
-
def process_on_windows(current_dir):
libs_path = os.path.join(current_dir, "fastdeploy", "libs")
third_libs_path = os.path.join(libs_path, "third_libs")