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")