[Android] Add WITH_TENSOR_FUNCS option -> Android (#1512)

* [Android] Add WITH_TENSOR_FUNCS option -> Android

* [Android] move android cmake codes -> android.cmake

* [Android] move android cmake codes -> android.cmake
This commit is contained in:
DefTruth
2023-03-06 13:33:43 +08:00
committed by GitHub
parent e796658e54
commit 767647d88e
17 changed files with 520 additions and 414 deletions

View File

@@ -13,7 +13,7 @@
# limitations under the License. # limitations under the License.
PROJECT(fastdeploy C CXX) PROJECT(fastdeploy C CXX)
CMAKE_MINIMUM_REQUIRED (VERSION 3.10) CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
option(CSRCS_DIR_NAME "Name of source code directory") option(CSRCS_DIR_NAME "Name of source code directory")
@@ -46,12 +46,6 @@ if(UNIX AND (NOT APPLE) AND (NOT ANDROID) AND (NOT WITH_TIMVX))
endif() endif()
if(ANDROID)
# To reduce the volume of the library
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g0 -Ofast -ffast-math -ffunction-sections -fdata-sections")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g0 -Ofast -ffast-math -ffunction-sections -fdata-sections")
endif()
############################# Basic Options for FastDeploy ################################ ############################# Basic Options for FastDeploy ################################
option(WITH_GPU "Whether WITH_GPU=ON, will enable onnxruntime-gpu/paddle-infernce-gpu/poros-gpu" OFF) option(WITH_GPU "Whether WITH_GPU=ON, will enable onnxruntime-gpu/paddle-infernce-gpu/poros-gpu" OFF)
option(WITH_IPU "Whether WITH_IPU=ON, will enable paddle-infernce-ipu" OFF) option(WITH_IPU "Whether WITH_IPU=ON, will enable paddle-infernce-ipu" OFF)
@@ -76,14 +70,6 @@ option(WITH_KUNLUNXIN "Whether to compile for KunlunXin XPU deploy." OFF)
option(WITH_TESTING "Whether to compile with unittest." OFF) option(WITH_TESTING "Whether to compile with unittest." OFF)
option(WITH_CAPI "Whether to compile with c api." OFF) option(WITH_CAPI "Whether to compile with c api." OFF)
option(WITH_CSHARPAPI "Whether to compile with c# api" OFF) option(WITH_CSHARPAPI "Whether to compile with c# api" OFF)
############################# Options for Android cross compiling #########################
if(ANDROID)
option(WITH_OPENCV_STATIC "Whether to use OpenCV static lib for Android." OFF)
option(WITH_LITE_STATIC "Whether to use Paddle Lite static lib for Android." OFF)
option(WITH_OPENMP "Whether to use OpenMP support for Android." OFF)
option(WITH_JAVA "Whether to build JNI lib for Android." OFF)
option(WITH_STATIC_LIB "Whether to build FastDeploy static lib." OFF)
endif()
# Whether to build fastdeploy with vision/text/... examples, only for testings. # Whether to build fastdeploy with vision/text/... examples, only for testings.
option(BUILD_EXAMPLES "Whether to build fastdeploy with vision examples" OFF) option(BUILD_EXAMPLES "Whether to build fastdeploy with vision examples" OFF)
@@ -95,7 +81,6 @@ set(ORT_DIRECTORY "" CACHE PATH "User can specify the installed onnxruntime dire
set(OPENCV_DIRECTORY "" CACHE PATH "User can specify the installed opencv directory.") set(OPENCV_DIRECTORY "" CACHE PATH "User can specify the installed opencv directory.")
set(OPENVINO_DIRECTORY "" CACHE PATH "User can specify the installed openvino directory.") set(OPENVINO_DIRECTORY "" CACHE PATH "User can specify the installed openvino directory.")
# Whether to build fastdeploy on device Nvidia Jetson # Whether to build fastdeploy on device Nvidia Jetson
# Only support CPU Inference & GPU(TensorRT) Inference Now # Only support CPU Inference & GPU(TensorRT) Inference Now
option(BUILD_ON_JETSON "Whether to build fastdeploy on Nvidia Jetson" OFF) option(BUILD_ON_JETSON "Whether to build fastdeploy on Nvidia Jetson" OFF)
@@ -151,6 +136,12 @@ if(WITH_IPU)
add_definitions(-DWITH_IPU) add_definitions(-DWITH_IPU)
endif() endif()
if(ANDROID)
include(${PROJECT_SOURCE_DIR}/cmake/android.cmake)
check_android_options_policy()
set_android_cxx_complie_flags()
endif()
# Check for macOS architecture # Check for macOS architecture
get_osx_architecture() get_osx_architecture()
@@ -170,9 +161,9 @@ file(GLOB_RECURSE DEPLOY_OPENVINO_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/f
file(GLOB_RECURSE DEPLOY_RKNPU2_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/runtime/backends/rknpu2/*.cc) file(GLOB_RECURSE DEPLOY_RKNPU2_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/runtime/backends/rknpu2/*.cc)
file(GLOB_RECURSE DEPLOY_SOPHGO_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/runtime/backends/sophgo/*.cc) file(GLOB_RECURSE DEPLOY_SOPHGO_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/runtime/backends/sophgo/*.cc)
file(GLOB_RECURSE DEPLOY_LITE_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/runtime/backends/lite/*.cc) file(GLOB_RECURSE DEPLOY_LITE_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/runtime/backends/lite/*.cc)
file(GLOB_RECURSE DEPLOY_VISION_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/vision/*.cc)
file(GLOB_RECURSE DEPLOY_ENCRYPTION_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/encryption/*.cc) file(GLOB_RECURSE DEPLOY_ENCRYPTION_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/encryption/*.cc)
file(GLOB_RECURSE DEPLOY_PIPELINE_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/pipeline/*.cc) file(GLOB_RECURSE DEPLOY_PIPELINE_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/pipeline/*.cc)
file(GLOB_RECURSE DEPLOY_VISION_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/vision/*.cc)
file(GLOB_RECURSE DEPLOY_TEXT_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/text/*.cc) file(GLOB_RECURSE DEPLOY_TEXT_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/text/*.cc)
file(GLOB_RECURSE DEPLOY_PYBIND_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/pybind/*.cc ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/*_pybind.cc) file(GLOB_RECURSE DEPLOY_PYBIND_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/pybind/*.cc ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/*_pybind.cc)
if(WITH_GPU) if(WITH_GPU)
@@ -183,7 +174,12 @@ if(WITH_GPU)
file(GLOB_RECURSE DEPLOY_TEXT_CUDA_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/text/*.cu) file(GLOB_RECURSE DEPLOY_TEXT_CUDA_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/text/*.cu)
list(APPEND DEPLOY_TEXT_SRCS ${DEPLOY_TEXT_CUDA_SRCS}) list(APPEND DEPLOY_TEXT_SRCS ${DEPLOY_TEXT_CUDA_SRCS})
endif() endif()
list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_ORT_SRCS} ${DEPLOY_PADDLE_SRCS} ${DEPLOY_POROS_SRCS} ${DEPLOY_TRT_SRCS} ${DEPLOY_OPENVINO_SRCS} ${DEPLOY_LITE_SRCS} ${DEPLOY_VISION_SRCS} ${DEPLOY_TEXT_SRCS} ${DEPLOY_PIPELINE_SRCS} ${DEPLOY_RKNPU2_SRCS} ${DEPLOY_SOPHGO_SRCS} ${DEPLOY_ENCRYPTION_SRCS}) list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_ORT_SRCS} ${DEPLOY_PADDLE_SRCS}
${DEPLOY_POROS_SRCS} ${DEPLOY_TRT_SRCS}
${DEPLOY_OPENVINO_SRCS} ${DEPLOY_LITE_SRCS}
${DEPLOY_VISION_SRCS} ${DEPLOY_TEXT_SRCS}
${DEPLOY_PIPELINE_SRCS} ${DEPLOY_RKNPU2_SRCS}
${DEPLOY_SOPHGO_SRCS} ${DEPLOY_ENCRYPTION_SRCS})
set(DEPEND_LIBS "") set(DEPEND_LIBS "")
@@ -196,6 +192,13 @@ if(WIN32)
add_definitions(-DEIGEN_STRONG_INLINE=inline) add_definitions(-DEIGEN_STRONG_INLINE=inline)
endif() endif()
if(ANDROID)
# Set tensor function/openmp compile policy after
# ALL_DEPLOY_SRCS/DEPEND_LIBS defined
set_android_tensor_funcs_compile_policy()
set_android_openmp_compile_policy()
endif()
# sw(sunway) not support thread_local semantic # sw(sunway) not support thread_local semantic
if(WITH_SW) if(WITH_SW)
add_definitions(-DEIGEN_AVOID_THREAD_LOCAL) add_definitions(-DEIGEN_AVOID_THREAD_LOCAL)
@@ -211,9 +214,6 @@ endif()
if(ENABLE_LITE_BACKEND) if(ENABLE_LITE_BACKEND)
add_definitions(-DENABLE_LITE_BACKEND) add_definitions(-DENABLE_LITE_BACKEND)
if(WITH_LITE_STATIC)
add_definitions(-DWITH_LITE_STATIC)
endif()
include(${PROJECT_SOURCE_DIR}/cmake/paddlelite.cmake) include(${PROJECT_SOURCE_DIR}/cmake/paddlelite.cmake)
list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_LITE_SRCS}) list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_LITE_SRCS})
list(APPEND DEPEND_LIBS external_paddle_lite) list(APPEND DEPEND_LIBS external_paddle_lite)
@@ -454,17 +454,7 @@ string(STRIP "${FASTDEPLOY_VERSION}" FASTDEPLOY_VERSION)
if (APPLE) if (APPLE)
set_target_properties(${LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden") set_target_properties(${LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden")
elseif(ANDROID) elseif(ANDROID)
set_target_properties(${LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden") set_android_library_cxx_link_flags()
# strip debug C++ symbol table
set(COMMON_LINK_FLAGS "-Wl,-exclude-libs,ALL")
set(COMMON_LINK_FLAGS_REL "-Wl,-s,--gc-sections,-exclude-libs,ALL")
if(WITH_OPENCV_STATIC OR WITH_LITE_STATIC)
set(COMMON_LINK_FLAGS "${COMMON_LINK_FLAGS},--allow-multiple-definition")
set(COMMON_LINK_FLAGS_REL "${COMMON_LINK_FLAGS_REL},--allow-multiple-definition")
endif()
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS ${COMMON_LINK_FLAGS})
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS_RELEASE ${COMMON_LINK_FLAGS_REL})
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS_MINSIZEREL ${COMMON_LINK_FLAGS_REL})
elseif(MSVC) elseif(MSVC)
else() else()
if(WITH_GPU) if(WITH_GPU)
@@ -486,41 +476,9 @@ if(MSVC)
set_source_files_properties(${FD_FILES_REQUIRE_BIGOBJ} PROPERTIES COMPILE_FLAGS "/bigobj") set_source_files_properties(${FD_FILES_REQUIRE_BIGOBJ} PROPERTIES COMPILE_FLAGS "/bigobj")
endif() endif()
# extra depend libs for android
if(ANDROID)
find_library(log-lib log)
list(APPEND DEPEND_LIBS ${log-lib})
if(WITH_LITE_STATIC)
# need omp for static Paddle Lite lib
set(WITH_OPENMP ON CACHE BOOL "Force WITH_OPENMP=ON while WITH_LITE_STATIC=ON" FORCE)
message(STATUS "Force WITH_OPENMP=${WITH_OPENMP} while WITH_LITE_STATIC=ON")
endif()
if(WITH_OPENMP)
include(${PROJECT_SOURCE_DIR}/cmake/openmp.cmake)
endif()
endif()
target_link_libraries(${LIBRARY_NAME} ${DEPEND_LIBS}) target_link_libraries(${LIBRARY_NAME} ${DEPEND_LIBS})
if(ANDROID)
################################ JNI & STATIC LIB: FastDeploy Android JNI & STATIC Lib ############################### set_android_extra_libraries_target()
if(ANDROID AND WITH_JAVA)
include(${PROJECT_SOURCE_DIR}/cmake/fastdeploy_jni.cmake)
endif()
if(ANDROID AND WITH_STATIC_LIB)
# Here, we use a dummy target (fastdelpoy_dummy)
# to form a build dependency tree for fastdeploy_static lib.
add_library(fastdelpoy_dummy STATIC ${ALL_DEPLOY_SRCS})
# Still add ${DEPEND_LIBS} for cmake to form link_libraries
# property tree for a static library.
target_link_libraries(fastdelpoy_dummy ${DEPEND_LIBS})
# Build fastdelpoy_dummy when the third-party
# libraries (opencv, paddle lite, flycv) are ready.
add_dependencies(fastdelpoy_dummy ${LIBRARY_NAME})
# Add WITH_STATIC_LIB compile definitions, see lite_backend.cc.
target_compile_definitions(fastdelpoy_dummy PRIVATE WITH_STATIC_LIB)
target_compile_definitions(fastdelpoy_dummy PRIVATE WITH_STATIC_LIB_AT_COMPILING)
bundle_static_library(fastdelpoy_dummy fastdeploy_static bundle_fastdeploy)
endif() endif()
##################################### Examples #################################### ##################################### Examples ####################################
@@ -567,40 +525,13 @@ if(WIN32)
RUNTIME DESTINATION lib RUNTIME DESTINATION lib
) )
elseif(ANDROID) elseif(ANDROID)
if(WITH_STATIC_LIB) set_android_libraries_installation()
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/libfastdeploy_static.a
DESTINATION lib/${ANDROID_ABI}
)
else()
install(
TARGETS ${LIBRARY_NAME}
LIBRARY DESTINATION lib/${ANDROID_ABI}
)
endif()
# Install omp into fastdeploy lib dir if WITH_OPENMP=ON
# and WITH_LITE_STATIC=OFF.
if(WITH_OPENMP AND (NOT WITH_LITE_STATIC) AND OpenMP_CXX_FOUND AND ENABLE_OPENMP_SHARED)
install(
FILES
${OpenMP_CXX_LIBRARIES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${ANDROID_ABI}
)
endif()
# install Android JNI lib
if(WITH_JAVA)
install(
TARGETS fastdeploy_jni
LIBRARY DESTINATION jni/${ANDROID_ABI}
)
endif()
else() else()
install( install(
TARGETS ${LIBRARY_NAME} TARGETS ${LIBRARY_NAME}
LIBRARY DESTINATION lib LIBRARY DESTINATION lib)
)
endif() endif()
install( install(
DIRECTORY ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy DIRECTORY ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy
DESTINATION ${CMAKE_INSTALL_PREFIX}/include DESTINATION ${CMAKE_INSTALL_PREFIX}/include
@@ -614,76 +545,12 @@ if(NOT ANDROID)
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs
) )
install(
DIRECTORY ${PROJECT_SOURCE_DIR}/examples
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
else() else()
# opencv/flycv always needs to be provided to users because our api set_android_third_libs_installation()
# explicitly depends on opencv's and flycv's api in headers.
# The headers and libs of opencv must be install.
if(ENABLE_VISION)
if(WITH_OPENCV_STATIC AND WITH_STATIC_LIB)
# Only need to install headers while building
# FastDeploy static lib. (TODO:qiuyanjun)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/opencv/sdk/native/jni/include
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install/opencv/sdk/native/jni
)
else()
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/opencv
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install
)
endif()
# only need flycv's headers (may also install libs? TODO:qiuyanjun)
if(ENABLE_FLYCV)
if(WITH_FLYCV_STATIC)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/flycv/include
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install/flycv
)
else()
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/flycv
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install
)
endif()
endif()
endif(ENABLE_VISION)
# fast_tokenizer's static lib is not avaliable now!
# may support some days later(TODO:qiuyanjun)
if(ENABLE_TEXT)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/fast_tokenizer
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install
)
endif()
# some libs may not to install while in static mode
if(ENABLE_LITE_BACKEND)
if(WITH_LITE_STATIC)
if(WITH_STATIC_LIB)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/paddlelite/include
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install/paddlelite
)
endif()
else()
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/paddlelite
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install
)
endif()
endif()
endif()
if(WIN32 AND BUILD_EXAMPLES)
get_windows_path(_tmp_install_dir ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install)
get_windows_path(_publish_exe_dir ${EXECUTABLE_OUTPUT_PATH}/Release)
list(GET CMAKE_CONFIGURATION_TYPES 0 _CONFIG_TYPE)
if((${CMAKE_BUILD_TYPE} MATCHES "Release") OR (${_CONFIG_TYPE} MATCHES "Release"))
install(TARGETS ${LIBRARY_NAME} RUNTIME DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Release)
add_custom_target(
copy_fd_third_dlls_examples ALL COMMAND
cmd /C ${PROJECT_SOURCE_DIR}/scripts/fastdeploy_init.bat install ${_tmp_install_dir} ${_publish_exe_dir} noconfirm)
add_dependencies(copy_fd_third_dlls_examples ${LIBRARY_NAME} copy_yaml_library)
endif()
endif() endif()
install( install(
@@ -695,17 +562,11 @@ install(
${PROJECT_SOURCE_DIR}/FastDeployCSharp.cmake ${PROJECT_SOURCE_DIR}/FastDeployCSharp.cmake
${PROJECT_SOURCE_DIR}/cmake/FastDeployConfig.cmake ${PROJECT_SOURCE_DIR}/cmake/FastDeployConfig.cmake
${PROJECT_SOURCE_DIR}/cmake/utils.cmake ${PROJECT_SOURCE_DIR}/cmake/utils.cmake
${PROJECT_SOURCE_DIR}/cmake/summary.cmake
${PROJECT_SOURCE_DIR}/cmake/openmp.cmake ${PROJECT_SOURCE_DIR}/cmake/openmp.cmake
DESTINATION ${CMAKE_INSTALL_PREFIX} DESTINATION ${CMAKE_INSTALL_PREFIX}
) )
if(NOT ANDROID)
install(
DIRECTORY ${PROJECT_SOURCE_DIR}/examples
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
endif()
install( install(
FILES ${PROJECT_SOURCE_DIR}/cmake/gflags.cmake FILES ${PROJECT_SOURCE_DIR}/cmake/gflags.cmake
DESTINATION ${CMAKE_INSTALL_PREFIX}/utils DESTINATION ${CMAKE_INSTALL_PREFIX}/utils
@@ -742,6 +603,19 @@ endif()
include(${PROJECT_SOURCE_DIR}/cmake/config_cpack.cmake) include(${PROJECT_SOURCE_DIR}/cmake/config_cpack.cmake)
if(WIN32 AND BUILD_EXAMPLES)
get_windows_path(_tmp_install_dir ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install)
get_windows_path(_publish_exe_dir ${EXECUTABLE_OUTPUT_PATH}/Release)
list(GET CMAKE_CONFIGURATION_TYPES 0 _CONFIG_TYPE)
if((${CMAKE_BUILD_TYPE} MATCHES "Release") OR (${_CONFIG_TYPE} MATCHES "Release"))
install(TARGETS ${LIBRARY_NAME} RUNTIME DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Release)
add_custom_target(
copy_fd_third_dlls_examples ALL COMMAND
cmd /C ${PROJECT_SOURCE_DIR}/scripts/fastdeploy_init.bat install ${_tmp_install_dir} ${_publish_exe_dir} noconfirm)
add_dependencies(copy_fd_third_dlls_examples ${LIBRARY_NAME} copy_yaml_library)
endif()
endif()
############################### Building: FastDeploy Python Wheel ############################# ############################### Building: FastDeploy Python Wheel #############################
if(BUILD_FASTDEPLOY_PYTHON) if(BUILD_FASTDEPLOY_PYTHON)
add_definitions(-DBUILD_FASTDEPLOY_PYTHON) add_definitions(-DBUILD_FASTDEPLOY_PYTHON)

View File

@@ -1,6 +1,23 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.8) CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
# FastDeploy basic infos
set(FASTDEPLOY_VERSION @FASTDEPLOY_VERSION@)
set(LIBRARY_NAME @LIBRARY_NAME@)
# Hardware and Language API
set(WITH_GPU @WITH_GPU@) set(WITH_GPU @WITH_GPU@)
set(WITH_IPU @WITH_IPU@)
set(WITH_ASCEND @WITH_ASCEND@)
set(WITH_DIRECTML @WITH_DIRECTML@)
set(WITH_TIMVX @WITH_TIMVX@)
set(WITH_KUNLUNXIN @WITH_KUNLUNXIN@)
set(WITH_CAPI @WITH_CAPI@)
set(WITH_CSHARPAPI @WITH_CSHARPAPI@)
set(WITH_TESTING @WITH_TESTING@)
set(BUILD_ON_JETSON @BUILD_ON_JETSON@)
set(RKNN2_TARGET_SOC "@RKNN2_TARGET_SOC@")
# Inference backend and FastDeploy Moudle
set(ENABLE_ORT_BACKEND @ENABLE_ORT_BACKEND@) set(ENABLE_ORT_BACKEND @ENABLE_ORT_BACKEND@)
set(ENABLE_RKNPU2_BACKEND @ENABLE_RKNPU2_BACKEND@) set(ENABLE_RKNPU2_BACKEND @ENABLE_RKNPU2_BACKEND@)
set(ENABLE_SOPHGO_BACKEND @ENABLE_SOPHGO_BACKEND@) set(ENABLE_SOPHGO_BACKEND @ENABLE_SOPHGO_BACKEND@)
@@ -8,36 +25,35 @@ set(ENABLE_LITE_BACKEND @ENABLE_LITE_BACKEND@)
set(ENABLE_PADDLE_BACKEND @ENABLE_PADDLE_BACKEND@) set(ENABLE_PADDLE_BACKEND @ENABLE_PADDLE_BACKEND@)
set(ENABLE_OPENVINO_BACKEND @ENABLE_OPENVINO_BACKEND@) set(ENABLE_OPENVINO_BACKEND @ENABLE_OPENVINO_BACKEND@)
set(ENABLE_POROS_BACKEND @ENABLE_POROS_BACKEND@) set(ENABLE_POROS_BACKEND @ENABLE_POROS_BACKEND@)
set(POROS_VERSION @POROS_VERSION@)
set(ENABLE_TRT_BACKEND @ENABLE_TRT_BACKEND@) set(ENABLE_TRT_BACKEND @ENABLE_TRT_BACKEND@)
set(ENABLE_PADDLE2ONNX @ENABLE_PADDLE2ONNX@) set(ENABLE_PADDLE2ONNX @ENABLE_PADDLE2ONNX@)
set(ENABLE_VISION @ENABLE_VISION@) set(ENABLE_VISION @ENABLE_VISION@)
set(ENABLE_FLYCV @ENABLE_FLYCV@) set(ENABLE_FLYCV @ENABLE_FLYCV@)
set(ENABLE_CVCUDA @ENABLE_CVCUDA@) set(ENABLE_CVCUDA @ENABLE_CVCUDA@)
set(ENABLE_TEXT @ENABLE_TEXT@) set(ENABLE_TEXT @ENABLE_TEXT@)
set(ENABLE_ENCRYPTION @ENABLE_ENCRYPTION@) set(ENABLE_ENCRYPTION @ENABLE_ENCRYPTION@)
set(BUILD_ON_JETSON @BUILD_ON_JETSON@) set(ENABLE_BENCHMARK @ENABLE_BENCHMARK@)
# Version infos and custom settings for third libs
set(PADDLEINFERENCE_VERSION @PADDLEINFERENCE_VERSION@) set(PADDLEINFERENCE_VERSION @PADDLEINFERENCE_VERSION@)
set(POROS_VERSION @POROS_VERSION@)
set(OPENVINO_VERSION @OPENVINO_VERSION@) set(OPENVINO_VERSION @OPENVINO_VERSION@)
set(WITH_LITE_STATIC @WITH_LITE_STATIC@)
set(WITH_OPENCV_STATIC @WITH_OPENCV_STATIC@)
set(WITH_FLYCV_STATIC @WITH_FLYCV_STATIC@)
set(WITH_OPENMP @WITH_OPENMP@)
set(WITH_JAVA @WITH_JAVA@)
set(OPENCV_FILENAME @OPENCV_FILENAME@) set(OPENCV_FILENAME @OPENCV_FILENAME@)
set(OPENVINO_FILENAME @OPENVINO_FILENAME@) set(OPENVINO_FILENAME @OPENVINO_FILENAME@)
set(PADDLELITE_FILENAME @PADDLELITE_FILENAME@) set(PADDLELITE_FILENAME @PADDLELITE_FILENAME@)
set(LIBRARY_NAME @LIBRARY_NAME@)
set(OPENCV_DIRECTORY "@OPENCV_DIRECTORY@") set(OPENCV_DIRECTORY "@OPENCV_DIRECTORY@")
set(ORT_DIRECTORY "@ORT_DIRECTORY@") set(ORT_DIRECTORY "@ORT_DIRECTORY@")
set(OPENVINO_DIRECTORY "@OPENVINO_DIRECTORY@") set(OPENVINO_DIRECTORY "@OPENVINO_DIRECTORY@")
set(RKNN2_TARGET_SOC "@RKNN2_TARGET_SOC@")
set(WITH_KUNLUNXIN @WITH_KUNLUNXIN@) # Android: specific option for Android OS
set(WITH_CAPI @WITH_CAPI@) set(WITH_ANDROID_STATIC_LIB @WITH_ANDROID_STATIC_LIB@)
# Whether to use FastDeploy static lib. The default set(WITH_ANDROID_LITE_STATIC @WITH_ANDROID_LITE_STATIC@)
# value for this option is determined by the SDK set(WITH_ANDROID_OPENCV_STATIC @WITH_ANDROID_OPENCV_STATIC@)
# build-time options. set(WITH_ANDROID_FLYCV_STATIC @WITH_ANDROID_FLYCV_STATIC@)
set(WITH_STATIC_LIB @WITH_STATIC_LIB@) set(WITH_ANDROID_OPENMP @WITH_ANDROID_OPENMP@)
set(WITH_ANDROID_JAVA @WITH_ANDROID_JAVA@)
set(WITH_ANDROID_TENSOR_FUNCS @WITH_ANDROID_TENSOR_FUNCS@)
set(FASTDEPLOY_LIBS "") set(FASTDEPLOY_LIBS "")
set(FASTDEPLOY_INCS "") set(FASTDEPLOY_INCS "")
@@ -54,25 +70,27 @@ if(NOT MSVC)
endif(NOT MSVC) endif(NOT MSVC)
# Set FastDeploy static lib definitions # Set FastDeploy static lib definitions
if(WITH_LITE_STATIC) if(WITH_ANDROID_LITE_STATIC)
add_definitions(-DWITH_LITE_STATIC) add_definitions(-DWITH_LITE_STATIC)
add_definitions(-DWITH_ANDROID_LITE_STATIC)
endif() endif()
if(WITH_STATIC_LIB) if(WITH_ANDROID_STATIC_LIB)
add_definitions(-DWITH_STATIC_LIB) add_definitions(-DWITH_STATIC_LIB)
add_definitions(-DWITH_ANDROID_STATIC_LIB)
# add_definitions(-DWITH_STATIC_WARNING) # add_definitions(-DWITH_STATIC_WARNING)
endif() endif()
# Still need omp while using FastDeploy static lib. # Still need omp while using FastDeploy static lib.
# This is due to the use of openmp for Paddle Lite's # This is due to the use of openmp for Paddle Lite's
# static library. # static library.
if(ANDROID AND WITH_STATIC_LIB AND WITH_LITE_STATIC) if(ANDROID AND WITH_ANDROID_STATIC_LIB AND WITH_ANDROID_LITE_STATIC)
include(${CMAKE_CURRENT_LIST_DIR}/openmp.cmake) include(${CMAKE_CURRENT_LIST_DIR}/openmp.cmake)
endif() endif()
if(ANDROID) if(ANDROID)
add_library(fastdeploy STATIC IMPORTED GLOBAL) add_library(fastdeploy STATIC IMPORTED GLOBAL)
if(WITH_STATIC_LIB) if(WITH_ANDROID_STATIC_LIB)
set_property(TARGET fastdeploy PROPERTY IMPORTED_LOCATION set_property(TARGET fastdeploy PROPERTY IMPORTED_LOCATION
${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/lib${LIBRARY_NAME}_static.a) ${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/lib${LIBRARY_NAME}_static.a)
else() else()
@@ -80,7 +98,7 @@ if(ANDROID)
${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/lib${LIBRARY_NAME}.so) ${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/lib${LIBRARY_NAME}.so)
endif() endif()
list(APPEND FASTDEPLOY_LIBS fastdeploy) list(APPEND FASTDEPLOY_LIBS fastdeploy)
if(WITH_OPENMP AND (NOT WITH_LITE_STATIC)) if(WITH_ANDROID_OPENMP AND (NOT WITH_ANDROID_LITE_STATIC))
add_library(fastdeploy_omp STATIC IMPORTED GLOBAL) add_library(fastdeploy_omp STATIC IMPORTED GLOBAL)
set_property(TARGET fastdeploy_omp PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/libomp.so) set_property(TARGET fastdeploy_omp PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/libomp.so)
list(APPEND FASTDEPLOY_LIBS fastdeploy_omp) list(APPEND FASTDEPLOY_LIBS fastdeploy_omp)
@@ -144,8 +162,8 @@ endif()
if(ENABLE_LITE_BACKEND) if(ENABLE_LITE_BACKEND)
set(LITE_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${PADDLELITE_FILENAME}) set(LITE_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${PADDLELITE_FILENAME})
if(ANDROID) if(ANDROID)
if(WITH_LITE_STATIC) if(WITH_ANDROID_LITE_STATIC)
if(WITH_STATIC_LIB) if(WITH_ANDROID_STATIC_LIB)
list(APPEND FASTDEPLOY_INCS ${LITE_DIR}/include) list(APPEND FASTDEPLOY_INCS ${LITE_DIR}/include)
endif() endif()
else() else()
@@ -223,8 +241,8 @@ if(ENABLE_VISION)
endif() endif()
message(STATUS "The path of OpenCV is ${OpenCV_DIR}.") message(STATUS "The path of OpenCV is ${OpenCV_DIR}.")
if(ANDROID) if(ANDROID)
if(WITH_OPENCV_STATIC) if(WITH_ANDROID_OPENCV_STATIC)
if(WITH_STATIC_LIB) if(WITH_ANDROID_STATIC_LIB)
# Only need the headers of opencv while using FastDeploy static lib. # Only need the headers of opencv while using FastDeploy static lib.
list(APPEND FASTDEPLOY_INCS ${OpenCV_DIR}/include) list(APPEND FASTDEPLOY_INCS ${OpenCV_DIR}/include)
else() else()
@@ -265,7 +283,7 @@ if(ENABLE_VISION)
include_directories(${CMAKE_CURRENT_LIST_DIR}/third_libs/install/flycv/include) include_directories(${CMAKE_CURRENT_LIST_DIR}/third_libs/install/flycv/include)
set(FLYCV_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/flycv/lib) set(FLYCV_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/flycv/lib)
if(ANDROID) if(ANDROID)
if(NOT WITH_FLYCV_STATIC) if(NOT WITH_ANDROID_FLYCV_STATIC)
add_library(flycv_shared STATIC IMPORTED GLOBAL) add_library(flycv_shared STATIC IMPORTED GLOBAL)
set_property(TARGET flycv_shared PROPERTY IMPORTED_LOCATION ${FLYCV_LIB_DIR}/${ANDROID_ABI}/libflycv_shared.so) set_property(TARGET flycv_shared PROPERTY IMPORTED_LOCATION ${FLYCV_LIB_DIR}/${ANDROID_ABI}/libflycv_shared.so)
list(APPEND FASTDEPLOY_LIBS flycv_shared) list(APPEND FASTDEPLOY_LIBS flycv_shared)
@@ -336,7 +354,7 @@ if(ANDROID)
endif() endif()
# Update CXX LINKER's FLAGS, reference: https://zhuanlan.zhihu.com/p/595527528 # Update CXX LINKER's FLAGS, reference: https://zhuanlan.zhihu.com/p/595527528
if(ANDROID AND (WITH_OPENCV_STATIC OR WITH_LITE_STATIC)) if(ANDROID AND (WITH_ANDROID_OPENCV_STATIC OR WITH_ANDROID_LITE_STATIC))
set(COMMON_LINK_FLAGS_REL "-Wl,-s,--gc-sections,-exclude-libs,ALL") set(COMMON_LINK_FLAGS_REL "-Wl,-s,--gc-sections,-exclude-libs,ALL")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${COMMON_LINK_FLAGS_REL} -Wl,-allow-multiple-definition" CACHE INTERNAL "" FORCE) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${COMMON_LINK_FLAGS_REL} -Wl,-allow-multiple-definition" CACHE INTERNAL "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${COMMON_LINK_FLAGS_REL} -Wl,-allow-multiple-definition" CACHE INTERNAL "" FORCE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${COMMON_LINK_FLAGS_REL} -Wl,-allow-multiple-definition" CACHE INTERNAL "" FORCE)
@@ -344,74 +362,8 @@ endif()
remove_duplicate_libraries(FASTDEPLOY_LIBS) remove_duplicate_libraries(FASTDEPLOY_LIBS)
# Print compiler information include(${CMAKE_CURRENT_LIST_DIR}/summary.cmake)
message(STATUS "") fastdeploy_summary()
message(STATUS "*************FastDeploy Building Summary**********")
message(STATUS " CMake version : ${CMAKE_VERSION}")
message(STATUS " CMake command : ${CMAKE_COMMAND}")
message(STATUS " System : ${CMAKE_SYSTEM_NAME}")
message(STATUS " C++ compiler : ${CMAKE_CXX_COMPILER}")
message(STATUS " C++ compiler version : ${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS " CXX flags : ${CMAKE_CXX_FLAGS}")
message(STATUS " EXE linker flags : ${CMAKE_EXE_LINKER_FLAGS}")
message(STATUS " Shared linker flags : ${CMAKE_SHARED_LINKER_FLAGS}")
get_directory_property(tmp DIRECTORY ${PROJECT_SOURCE_DIR} COMPILE_DEFINITIONS)
message(STATUS " Compile definitions : ${tmp}")
message(STATUS " CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}")
message(STATUS " CMAKE_INSTALL_PREFIX : ${CMAKE_INSTALL_PREFIX}")
message(STATUS " CMAKE_MODULE_PATH : ${CMAKE_MODULE_PATH}")
message(STATUS "")
message(STATUS " WITH_GPU : ${WITH_GPU}")
message(STATUS " WITH_CAPI : ${WITH_CAPI}")
message(STATUS " ENABLE_ORT_BACKEND : ${ENABLE_ORT_BACKEND}")
message(STATUS " ENABLE_RKNPU2_BACKEND : ${ENABLE_RKNPU2_BACKEND}")
message(STATUS " ENABLE_SOPHGO_BACKEND : ${ENABLE_SOPHGO_BACKEND}")
message(STATUS " ENABLE_PADDLE_BACKEND : ${ENABLE_PADDLE_BACKEND}")
message(STATUS " ENABLE_POROS_BACKEND : ${ENABLE_POROS_BACKEND}")
message(STATUS " ENABLE_OPENVINO_BACKEND : ${ENABLE_OPENVINO_BACKEND}")
message(STATUS " ENABLE_TRT_BACKEND : ${ENABLE_TRT_BACKEND}")
message(STATUS " ENABLE_LITE_BACKEND : ${ENABLE_LITE_BACKEND}")
if(ENABLE_PADDLE_BACKEND)
message(STATUS " Paddle Inference version : ${PADDLEINFERENCE_VERSION}")
endif()
if(ENABLE_POROS_BACKEND)
message(STATUS " Poros version : ${POROS_VERSION}")
endif()
if(ENABLE_OPENVINO_BACKEND)
message(STATUS " OpenVINO version : ${OPENVINO_VERSION}")
endif()
message(STATUS " ENABLE_TRT_BACKEND : ${ENABLE_TRT_BACKEND}")
message(STATUS " ENABLE_VISION : ${ENABLE_VISION}")
message(STATUS " ENABLE_CVCUDA : ${ENABLE_CVCUDA}")
message(STATUS " ENABLE_TEXT : ${ENABLE_TEXT}")
message(STATUS " ENABLE_ENCRYPTION : ${ENABLE_ENCRYPTION}")
if(WITH_GPU)
message(STATUS " CUDA_DIRECTORY : ${CUDA_DIRECTORY}")
endif()
if(OPENCV_DIRECTORY)
message(STATUS " OPENCV_DIRECTORY : ${OPENCV_DIRECTORY}")
endif()
if(ORT_DIRECTORY)
message(STATUS " ORT_DIRECTORY : ${ORT_DIRECTORY}")
endif()
if(OPENVINO_DIRECTORY)
message(STATUS " OPENVINO_DIRECTORY : ${OPENVINO_DIRECTORY}")
endif()
if(ANDROID)
message(STATUS " ANDROID_ABI : ${ANDROID_ABI}")
message(STATUS " ANDROID_PLATFORM : ${ANDROID_PLATFORM}")
message(STATUS " ANDROID_NDK : ${ANDROID_NDK}")
message(STATUS " ANDROID_NDK_MAJOR : ${ANDROID_NDK_MAJOR}")
message(STATUS " WITH_STATIC_LIB: : ${WITH_STATIC_LIB}")
message(STATUS " WITH_OPENCV_STATIC: : ${WITH_OPENCV_STATIC}")
message(STATUS " WITH_FLYCV_STATIC: : ${WITH_FLYCV_STATIC}")
if(ENABLE_LITE_BACKEND)
message(STATUS " WITH_LITE_STATIC : ${WITH_LITE_STATIC}")
endif()
message(STATUS " WITH_OPENMP: : ${WITH_OPENMP}")
message(STATUS " WITH_JAVA: : ${WITH_JAVA}")
endif()
message(STATUS " DEPENDENCY_LIBS : ${FASTDEPLOY_LIBS}") message(STATUS " DEPENDENCY_LIBS : ${FASTDEPLOY_LIBS}")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
@@ -424,7 +376,7 @@ endif()
function(install_fastdeploy_libraries DESTINATION_DIR) function(install_fastdeploy_libraries DESTINATION_DIR)
# No dynamic libs need to install while using # No dynamic libs need to install while using
# FastDeploy static lib. # FastDeploy static lib.
if(WITH_STATIC_LIB) if(ANDROID AND WITH_ANDROID_STATIC_LIB)
return() return()
endif() endif()
set(DYN_LIB_SUFFIX "*.so*") set(DYN_LIB_SUFFIX "*.so*")
@@ -452,14 +404,14 @@ function(install_fastdeploy_libraries DESTINATION_DIR)
endif() endif()
list(REMOVE_ITEM ALL_DEPS_DYN_LIBS ${ALL_OPENCV_DYN_LIBS}) list(REMOVE_ITEM ALL_DEPS_DYN_LIBS ${ALL_OPENCV_DYN_LIBS})
if(NOT WITH_OPENCV_STATIC) if(WIN32)
if(WIN32) file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/x64/vc15/bin/${DYN_LIB_SUFFIX})
file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/x64/vc15/bin/${DYN_LIB_SUFFIX}) file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR})
elseif(ANDROID) elseif(ANDROID AND (NOT WITH_ANDROID_OPENCV_STATIC))
file(GLOB OPENCV_DYN_LIBS ${OpenCV_NATIVE_DIR}/libs/${ANDROID_ABI}/${DYN_LIB_SUFFIX}) file(GLOB OPENCV_DYN_LIBS ${OpenCV_NATIVE_DIR}/libs/${ANDROID_ABI}/${DYN_LIB_SUFFIX})
else() # linux/mac file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR})
file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/lib/${DYN_LIB_SUFFIX}) else() # linux/mac
endif() file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/lib/${DYN_LIB_SUFFIX})
file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR}) file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR})
endif() endif()
@@ -467,11 +419,10 @@ function(install_fastdeploy_libraries DESTINATION_DIR)
if(ENABLE_FLYCV) if(ENABLE_FLYCV)
file(GLOB_RECURSE ALL_FLYCV_DYN_LIBS ${FLYCV_LIB_DIR}/${DYN_LIB_SUFFIX}) file(GLOB_RECURSE ALL_FLYCV_DYN_LIBS ${FLYCV_LIB_DIR}/${DYN_LIB_SUFFIX})
list(REMOVE_ITEM ALL_DEPS_DYN_LIBS ${ALL_FLYCV_DYN_LIBS}) list(REMOVE_ITEM ALL_DEPS_DYN_LIBS ${ALL_FLYCV_DYN_LIBS})
if(NOT WITH_FLYCV_STATIC) if(ANDROID AND (NOT WITH_ANDROID_FLYCV_STATIC))
file(INSTALL ${ALL_FLYCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR}) file(INSTALL ${ALL_FLYCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR})
endif() endif()
endif() endif()
endif() endif()
if(ENABLE_OPENVINO_BACKEND) if(ENABLE_OPENVINO_BACKEND)

238
cmake/android.cmake Normal file
View File

@@ -0,0 +1,238 @@
# Copyright (c) 2023 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
############################# Options for Android cross compiling #########################
# Options only for FastDeploy Android lib.
if(ANDROID)
# These options are only support for Android now. Some options, such as
# WITH_OPENMP/WITH_JAVA/WITH_STATIC_LIB may export to main CMakeLists.txt
# to support IOS/NON Android JAVA API/..., etc.
option(WITH_ANDROID_OPENCV_STATIC "Whether to use OpenCV static lib for Android." OFF)
option(WITH_ANDROID_FLYCV_STATIC "Whether to use FlyCV static lib for Android." OFF)
option(WITH_ANDROID_LITE_STATIC "Whether to use Paddle Lite static lib for Android." OFF)
option(WITH_ANDROID_OPENMP "Whether to use OpenMP support for Android." OFF)
option(WITH_ANDROID_JAVA "Whether to build JNI lib for Android." OFF)
option(WITH_ANDROID_STATIC_LIB "Whether to build FastDeploy static lib." OFF)
option(WITH_ANDROID_TENSOR_FUNCS "Whether to build FastDeploy tensor function." ON)
else()
message(FATAL_ERROR "WITH_ANDROID_xxx options only support for Android!")
endif()
# Check Android ABI policy.
function(check_android_options_policy)
if((NOT ANDROID_ABI MATCHES "armeabi-v7a") AND (NOT ANDROID_ABI MATCHES "arm64-v8a"))
message(FATAL_ERROR "FastDeploy with FlyCV only support armeabi-v7a, arm64-v8a now.")
endif()
if(ENABLE_FLYCV OR ENABLE_TEXT OR ENABLE_LITE_BACKEND OR WITH_ANDROID_OPENMP)
if(NOT ANDROID_TOOLCHAIN MATCHES "clang")
message(FATAL_ERROR "Currently, only support clang toolchain while cross compiling FastDeploy for Android with Paddle Lite/FlyCV/FastTokenizer/OpenMP, but found ${ANDROID_TOOLCHAIN}.")
endif()
endif()
if(WITH_ANDROID_STATIC_LIB)
message(STATUS "Found WITH_ANDROID_STATIC_LIB=ON:")
if(ENABLE_LITE_BACKEND AND (NOT WITH_ANDROID_LITE_STATIC))
set(WITH_ANDROID_LITE_STATIC ON CACHE BOOL "\tForce WITH_ANDROID_LITE_STATIC=ON" FORCE)
endif()
if(ENABLE_VISION AND (NOT WITH_ANDROID_OPENCV_STATIC))
set(WITH_ANDROID_OPENCV_STATIC ON CACHE BOOL "\tForce WITH_ANDROID_LITE_STATIC=ON" FORCE)
endif()
if(ENABLE_FLYCV AND (NOT WITH_ANDROID_FLYCV_STATIC))
set(WITH_ANDROID_FLYCV_STATIC ON CACHE BOOL "\tForce WITH_ANDROID_LITE_STATIC=ON" FORCE)
endif()
if(ENABLE_TEXT)
message(FATAL_ERROR "Not support to build FastDeploy static lib with Text API now!")
endif()
endif()
# Add WITH_LITE_STATIC/WITH_ANDROID_LITE_STATIC compile definitions, see lite_backend.cc.
if(WITH_ANDROID_LITE_STATIC)
add_definitions(-DWITH_LITE_STATIC)
add_definitions(-DWITH_ANDROID_LITE_STATIC)
endif()
endfunction()
# Compile flags for FastDeploy Android lib.
function(set_android_cxx_complie_flags)
if(ANDROID)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g0 -Os -Ofast -ffast-math -ffunction-sections -fdata-sections" PARENT_SCOPE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g0 -Os -Ofast -ffast-math -ffunction-sections -fdata-sections" PARENT_SCOPE)
endif()
endfunction()
# Extra depend libs for FastDeploy Android lib (OMP&log lib).
function(set_android_openmp_compile_policy)
if(ANDROID)
find_library(log-lib log)
list(APPEND DEPEND_LIBS ${log-lib})
set(DEPEND_LIBS ${DEPEND_LIBS} PARENT_SCOPE)
if(WITH_ANDROID_LITE_STATIC)
# Need omp for static Paddle Lite lib
set(WITH_ANDROID_OPENMP ON CACHE BOOL "Force WITH_ANDROID_OPENMP=ON while WITH_ANDROID_LITE_STATIC=ON" FORCE)
message(STATUS "Force WITH_ANDROID_OPENMP=${WITH_ANDROID_OPENMP} while WITH_ANDROID_LITE_STATIC=ON")
endif()
if(WITH_ANDROID_OPENMP)
include(${PROJECT_SOURCE_DIR}/cmake/openmp.cmake)
endif()
endif()
endfunction()
# Processing tensor function source for Android.
function(set_android_tensor_funcs_compile_policy)
if(ANDROID AND (NOT WITH_ANDROID_TENSOR_FUNCS))
if(ENABLE_VISION OR ENABLE_TEXT OR ENABLE_TRT_BACKEND)
message(FATAL_ERROR "WITH_ANDROID_TENSOR_FUNCS must be set as ON, while ENABLE_VISION/ENABLE_TEXT/ENABLE_TRT_BACKEND is ON.")
endif()
file(GLOB_RECURSE DEPLOY_FUNCS_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/function/*.cc)
list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_FUNCS_SRCS})
set(ALL_DEPLOY_SRCS ${ALL_DEPLOY_SRCS} PARENT_SCOPE)
endif()
endfunction()
# Link flags for FastDeploy Android lib.
function(set_android_library_cxx_link_flags)
if(ANDROID)
set_target_properties(${LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden")
# Strip debug C++ symbol table
set(COMMON_LINK_FLAGS "-Wl,-exclude-libs,ALL")
set(COMMON_LINK_FLAGS_REL "-Wl,-s,--gc-sections,-exclude-libs,ALL")
if(WITH_ANDROID_OPENCV_STATIC OR WITH_ANDROID_LITE_STATIC)
set(COMMON_LINK_FLAGS "${COMMON_LINK_FLAGS},--allow-multiple-definition" CACHE INTERNAL "" FORCE)
set(COMMON_LINK_FLAGS_REL "${COMMON_LINK_FLAGS_REL},--allow-multiple-definition" CACHE INTERNAL "" FORCE)
endif()
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS ${COMMON_LINK_FLAGS})
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS_RELEASE ${COMMON_LINK_FLAGS_REL})
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS_MINSIZEREL ${COMMON_LINK_FLAGS_REL})
endif()
endfunction()
# FastDeploy Android JNI lib & FastDeploy static lib.
function(set_android_extra_libraries_target)
if(ANDROID AND WITH_ANDROID_JAVA)
include(${PROJECT_SOURCE_DIR}/cmake/fastdeploy_jni.cmake)
endif()
if(ANDROID AND WITH_ANDROID_STATIC_LIB)
# Here, we use a dummy target (fastdelpoy_dummy)
# to form a build dependency tree for fastdeploy_static lib.
add_library(fastdelpoy_dummy STATIC ${ALL_DEPLOY_SRCS})
# Still add ${DEPEND_LIBS} for cmake to form link_libraries
# property tree for a static library.
target_link_libraries(fastdelpoy_dummy ${DEPEND_LIBS})
# Build fastdelpoy_dummy when the third-party
# libraries (opencv, paddle lite, flycv) are ready.
add_dependencies(fastdelpoy_dummy ${LIBRARY_NAME})
# Add WITH_STATIC_LIB/WITH_ANDROID_STATIC_LIB compile definitions, see lite_backend.cc.
target_compile_definitions(fastdelpoy_dummy PRIVATE WITH_STATIC_LIB WITH_ANDROID_STATIC_LIB)
target_compile_definitions(fastdelpoy_dummy PRIVATE WITH_STATIC_LIB_AT_COMPILING
WITH_ANDROID_STATIC_LIB_AT_COMPILING)
bundle_static_library(fastdelpoy_dummy fastdeploy_static bundle_fastdeploy)
endif()
endfunction()
# Install FastDepploy Android lib.
function(set_android_libraries_installation)
if(ANDROID)
if(WITH_ANDROID_STATIC_LIB)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/libfastdeploy_static.a
DESTINATION lib/${ANDROID_ABI}
)
else()
install(
TARGETS ${LIBRARY_NAME}
LIBRARY DESTINATION lib/${ANDROID_ABI}
)
endif()
# Install omp into fastdeploy lib dir if WITH_OPENMP=ON
# and WITH_LITE_STATIC=OFF.
if(WITH_ANDROID_OPENMP AND (NOT WITH_ANDROID_LITE_STATIC)
AND OpenMP_CXX_FOUND AND ENABLE_OPENMP_SHARED)
install(
FILES
${OpenMP_CXX_LIBRARIES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${ANDROID_ABI}
)
endif()
# install Android JNI lib
if(WITH_ANDROID_JAVA)
install(
TARGETS fastdeploy_jni
LIBRARY DESTINATION jni/${ANDROID_ABI}
)
endif()
endif()
endfunction()
# Install third_libs
function(set_android_third_libs_installation)
if(ANDROID)
# opencv/flycv always needs to be provided to users because our api
# explicitly depends on opencv's and flycv's api in headers.
# The headers and libs of opencv must be install.
if(ENABLE_VISION)
if(WITH_ANDROID_OPENCV_STATIC AND WITH_ANDROID_STATIC_LIB)
# Only need to install headers while building
# FastDeploy static lib. (TODO:qiuyanjun)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/opencv/sdk/native/jni/include
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install/opencv/sdk/native/jni
)
else()
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/opencv
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install
)
endif()
# Only need flycv's headers (may also install libs? TODO:qiuyanjun)
if(ENABLE_FLYCV)
if(WITH_ANDROID_FLYCV_STATIC)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/flycv/include
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install/flycv
)
else()
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/flycv
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install
)
endif()
endif()
endif(ENABLE_VISION)
# fast_tokenizer's static lib is not avaliable now!
# may support some days later(TODO:qiuyanjun)
if(ENABLE_TEXT)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/fast_tokenizer
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install
)
endif()
# Some libs may not to install while in static mode
if(ENABLE_LITE_BACKEND)
if(WITH_ANDROID_LITE_STATIC)
if(WITH_ANDROID_STATIC_LIB)
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/paddlelite/include
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install/paddlelite
)
endif()
else()
install(
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/paddlelite
DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs/install
)
endif()
endif()
endif()
endfunction()

View File

@@ -76,13 +76,6 @@ elseif(APPLE)
set(FASTTOKENIZER_FILE "fast_tokenizer-osx-x86_64-${FASTTOKENIZER_VERSION}.tgz") set(FASTTOKENIZER_FILE "fast_tokenizer-osx-x86_64-${FASTTOKENIZER_VERSION}.tgz")
endif() endif()
elseif(ANDROID) elseif(ANDROID)
# check ABI, toolchain
if((NOT ANDROID_ABI MATCHES "armeabi-v7a") AND (NOT ANDROID_ABI MATCHES "arm64-v8a"))
message(FATAL_ERROR "FastDeploy with FastTokenizer on Android only support armeabi-v7a, arm64-v8a now.")
endif()
if(NOT ANDROID_TOOLCHAIN MATCHES "clang")
message(FATAL_ERROR "Currently, only support clang toolchain while cross compiling FastDeploy for Android with FastTokenizer, but found ${ANDROID_TOOLCHAIN}.")
endif()
# set(FASTTOKENIZER_FILE "fast_tokenizer-android-${ANDROID_ABI}-${FASTTOKENIZER_VERSION}.tgz") # set(FASTTOKENIZER_FILE "fast_tokenizer-android-${ANDROID_ABI}-${FASTTOKENIZER_VERSION}.tgz")
set(FASTTOKENIZER_FILE "fast_tokenizer-lite-android-${ANDROID_ABI}-${FASTTOKENIZER_VERSION}.tgz") set(FASTTOKENIZER_FILE "fast_tokenizer-lite-android-${ANDROID_ABI}-${FASTTOKENIZER_VERSION}.tgz")
else() else()

View File

@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
if(WITH_JAVA) if(WITH_ANDROID_JAVA)
set(JNI_SRCS_FOUND OFF) set(JNI_SRCS_FOUND OFF)
if(NOT ANDROID) if(NOT ANDROID)
message(FATAL_ERROR "Only support jni lib for Android now!") message(FATAL_ERROR "Only support jni lib for Android now!")
@@ -33,7 +33,7 @@ if(WITH_JAVA)
# Build fastdelpoy_jni_dummy when the third-party # Build fastdelpoy_jni_dummy when the third-party
# libraries (opencv, paddle lite, flycv) are ready. # libraries (opencv, paddle lite, flycv) are ready.
add_dependencies(fastdelpoy_jni_dummy ${LIBRARY_NAME}) add_dependencies(fastdelpoy_jni_dummy ${LIBRARY_NAME})
target_compile_definitions(fastdelpoy_jni_dummy PRIVATE WITH_JAVA) target_compile_definitions(fastdelpoy_jni_dummy PRIVATE WITH_ANDROID_JAVA)
if(TARGET fastdelpoy_jni_dummy) if(TARGET fastdelpoy_jni_dummy)
add_library(fastdeploy_jni SHARED ${JNI_SRCS}) add_library(fastdeploy_jni SHARED ${JNI_SRCS})
target_link_libraries(fastdeploy_jni fastdelpoy_jni_dummy ${DEPEND_LIBS} target_link_libraries(fastdeploy_jni fastdelpoy_jni_dummy ${DEPEND_LIBS}

View File

@@ -35,18 +35,6 @@ set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}"
include_directories(${FLYCV_INC_DIR}) include_directories(${FLYCV_INC_DIR})
option(WITH_FLYCV_STATIC "Whether to use FlyCV static lib for Android/Linux." OFF)
# ABI check
if(ANDROID)
if((NOT ANDROID_ABI MATCHES "armeabi-v7a") AND (NOT ANDROID_ABI MATCHES "arm64-v8a"))
message(FATAL_ERROR "FastDeploy with FlyCV only support armeabi-v7a, arm64-v8a now.")
endif()
if(NOT ANDROID_TOOLCHAIN MATCHES "clang")
message(FATAL_ERROR "Currently, only support clang toolchain while cross compiling FastDeploy for Android with FlyCV, but found ${ANDROID_TOOLCHAIN}.")
endif()
endif()
if(WIN32) if(WIN32)
set(FLYCV_COMPILE_LIB set(FLYCV_COMPILE_LIB
"${FLYCV_INSTALL_DIR}/lib/flycv.lib" "${FLYCV_INSTALL_DIR}/lib/flycv.lib"
@@ -56,26 +44,20 @@ elseif(APPLE)
"${FLYCV_INSTALL_DIR}/lib/libflycv.dylib" "${FLYCV_INSTALL_DIR}/lib/libflycv.dylib"
CACHE FILEPATH "flycv compile library." FORCE) CACHE FILEPATH "flycv compile library." FORCE)
elseif(ANDROID) elseif(ANDROID)
if(WITH_FLYCV_STATIC) if(WITH_ANDROID_FLYCV_STATIC)
set(FLYCV_COMPILE_LIB set(FLYCV_COMPILE_LIB
"${FLYCV_INSTALL_DIR}/lib/${ANDROID_ABI}/libflycv_static.a" "${FLYCV_INSTALL_DIR}/lib/${ANDROID_ABI}/libflycv_static.a"
CACHE FILEPATH "flycv compile library." FORCE) CACHE FILEPATH "flycv compile library." FORCE)
else() else()
set(FLYCV_COMPILE_LIB set(FLYCV_COMPILE_LIB
"${FLYCV_INSTALL_DIR}/lib/${ANDROID_ABI}/libflycv_shared.so" "${FLYCV_INSTALL_DIR}/lib/${ANDROID_ABI}/libflycv_shared.so"
CACHE FILEPATH "flycv compile library." FORCE) CACHE FILEPATH "flycv compile library." FORCE)
endif() endif()
else() else()
if(WITH_FLYCV_STATIC) set(FLYCV_COMPILE_LIB
set(FLYCV_COMPILE_LIB
"${FLYCV_INSTALL_DIR}/lib/libflycv_static.a"
CACHE FILEPATH "flycv compile library." FORCE)
else()
set(FLYCV_COMPILE_LIB
"${FLYCV_INSTALL_DIR}/lib/libflycv_shared.so" "${FLYCV_INSTALL_DIR}/lib/libflycv_shared.so"
CACHE FILEPATH "flycv compile library." FORCE) CACHE FILEPATH "flycv compile library." FORCE)
endif() endif()
endif(WIN32)
set(FLYCV_URL_BASE "https://bj.bcebos.com/fastdeploy/third_libs/") set(FLYCV_URL_BASE "https://bj.bcebos.com/fastdeploy/third_libs/")
set(FLYCV_VERSION "1.0.0") set(FLYCV_VERSION "1.0.0")
@@ -151,7 +133,7 @@ set_property(TARGET external_flycv PROPERTY IMPORTED_LOCATION
add_dependencies(external_flycv ${FLYCV_PROJECT}) add_dependencies(external_flycv ${FLYCV_PROJECT})
set(FLYCV_LIBRARIES external_flycv) set(FLYCV_LIBRARIES external_flycv)
if(WITH_FLYCV_STATIC) if(WITH_ANDROID_FLYCV_STATIC)
if (ANDROID) if (ANDROID)
add_library(external_flycv_png16 STATIC IMPORTED GLOBAL) add_library(external_flycv_png16 STATIC IMPORTED GLOBAL)
add_library(external_flycv_turbojpeg STATIC IMPORTED GLOBAL) add_library(external_flycv_turbojpeg STATIC IMPORTED GLOBAL)
@@ -168,27 +150,7 @@ if(WITH_FLYCV_STATIC)
list(APPEND FLYCV_LIBRARIES external_flycv_png16) list(APPEND FLYCV_LIBRARIES external_flycv_png16)
list(APPEND FLYCV_LIBRARIES external_flycv_turbojpeg) list(APPEND FLYCV_LIBRARIES external_flycv_turbojpeg)
list(APPEND FLYCV_LIBRARIES external_flycv_z) list(APPEND FLYCV_LIBRARIES external_flycv_z)
elseif(APPLE OR WIN32)
message(FATAL_ERROR "Not support FlyCV static lib for APPLE/WIN32 now!")
else() else()
if((CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") OR (CMAKE_SYSTEM_PROCESSOR MATCHES "arm")) message(FATAL_ERROR "Not support FlyCV static lib for APPLE/WIN32/Linux now!")
message(FATAL_ERROR "Not support FlyCV static lib for aarch64/arm linux now!") endif()
else()
add_library(external_flycv_png16 STATIC IMPORTED GLOBAL)
add_library(external_flycv_turbojpeg STATIC IMPORTED GLOBAL)
add_library(external_flycv_z STATIC IMPORTED GLOBAL)
set_property(TARGET external_flycv_png16 PROPERTY IMPORTED_LOCATION
"${FLYCV_INSTALL_DIR}/lib/libpng16.a")
set_property(TARGET external_flycv_turbojpeg PROPERTY IMPORTED_LOCATION
"${FLYCV_INSTALL_DIR}/lib/libturbojpeg.a")
set_property(TARGET external_flycv_z PROPERTY IMPORTED_LOCATION
"${FLYCV_INSTALL_DIR}/lib/libz.a")
add_dependencies(external_flycv_png16 ${FLYCV_PROJECT})
add_dependencies(external_flycv_turbojpeg ${FLYCV_PROJECT})
add_dependencies(external_flycv_z ${FLYCV_PROJECT})
list(APPEND FLYCV_LIBRARIES external_flycv_png16)
list(APPEND FLYCV_LIBRARIES external_flycv_turbojpeg)
list(APPEND FLYCV_LIBRARIES external_flycv_z)
endif()
endif()
endif() endif()

View File

@@ -87,7 +87,7 @@ function(remove_redundant_opencv_android_abi_libraries OPENCV_JNI_DIR)
# remove redundant content # remove redundant content
file(REMOVE_RECURSE ${OPENCV_ANDROID_ETC_DIR}) file(REMOVE_RECURSE ${OPENCV_ANDROID_ETC_DIR})
file(REMOVE_RECURSE ${OPENCV_ANDROID_JAVA_DIR}) file(REMOVE_RECURSE ${OPENCV_ANDROID_JAVA_DIR})
if(WITH_OPENCV_STATIC) if(WITH_ANDROID_OPENCV_STATIC)
foreach(_ocv_android_abi ${ALL_OPENCV_ANDROID_ABI}) foreach(_ocv_android_abi ${ALL_OPENCV_ANDROID_ABI})
if(NOT ${_ocv_android_abi} MATCHES ${ANDROID_ABI}) if(NOT ${_ocv_android_abi} MATCHES ${ANDROID_ABI})
set(_curr_abi_libs_dir ${OPENCV_ANDROID_LIBS_DIR}/${_ocv_android_abi}) set(_curr_abi_libs_dir ${OPENCV_ANDROID_LIBS_DIR}/${_ocv_android_abi})
@@ -124,7 +124,7 @@ if(OPENCV_DIRECTORY)
# For Android, the custom path to OpenCV with JNI should look like: # For Android, the custom path to OpenCV with JNI should look like:
# -DOPENCV_DIRECTORY=your-path-to/OpenCV-android-sdk/sdk/native/jni # -DOPENCV_DIRECTORY=your-path-to/OpenCV-android-sdk/sdk/native/jni
if(ANDROID) if(ANDROID)
if(WITH_OPENCV_STATIC) if(WITH_ANDROID_OPENCV_STATIC)
set(OpenCV_DIR ${OPENCV_DIRECTORY}) set(OpenCV_DIR ${OPENCV_DIRECTORY})
find_package(OpenCV REQUIRED PATHS ${OpenCV_DIR}) find_package(OpenCV REQUIRED PATHS ${OpenCV_DIR})
include_directories(${OpenCV_INCLUDE_DIRS}) include_directories(${OpenCV_INCLUDE_DIRS})
@@ -150,7 +150,7 @@ if(OPENCV_DIRECTORY)
else() else()
message(STATUS "Use the default OpenCV lib from: ${OPENCV_URL}") message(STATUS "Use the default OpenCV lib from: ${OPENCV_URL}")
if(ANDROID) if(ANDROID)
if(WITH_OPENCV_STATIC) if(WITH_ANDROID_OPENCV_STATIC)
# When FastDeploy uses the OpenCV static library, there is no need to install OpenCV to FastDeploy thirds_libs # When FastDeploy uses the OpenCV static library, there is no need to install OpenCV to FastDeploy thirds_libs
download_and_decompress(${OPENCV_URL} ${CMAKE_CURRENT_BINARY_DIR}/${OPENCV_FILENAME}${COMPRESSED_SUFFIX} ${THIRD_PARTY_PATH}/install) download_and_decompress(${OPENCV_URL} ${CMAKE_CURRENT_BINARY_DIR}/${OPENCV_FILENAME}${COMPRESSED_SUFFIX} ${THIRD_PARTY_PATH}/install)
if(EXISTS ${THIRD_PARTY_PATH}/install/opencv) if(EXISTS ${THIRD_PARTY_PATH}/install/opencv)

View File

@@ -12,22 +12,16 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
if(NOT WITH_OPENMP)
message(FATAL_ERROR "Please set WITH_OPENMP=ON before inclue openmp.cmake")
endif()
if(ANDROID) if(ANDROID)
if(NOT WITH_ANDROID_OPENMP)
if(NOT ANDROID_TOOLCHAIN MATCHES "clang") message(FATAL_ERROR "Please set WITH_ANDROID_OPENMP=ON before inclue openmp.cmake")
message(FATAL_ERROR "Currently, only support clang toolchain while cross compiling FastDeploy for Android with OpenMP support, but found ${ANDROID_TOOLCHAIN}.") endif()
endif()
find_package(OpenMP REQUIRED) find_package(OpenMP REQUIRED)
set(ENABLE_OPENMP_SHARED ON CACHE BOOL "" FORCE) set(ENABLE_OPENMP_SHARED ON CACHE BOOL "" FORCE)
if(WITH_LITE_STATIC) if(WITH_ANDROID_LITE_STATIC)
# Can use static/shared omp lib if WITH_LITE_STATIC=ON # Can use static/shared omp lib if WITH_LITE_STATIC=ON
if(OPENMP_FOUND OR OpenMP_CXX_FOUND) if(OPENMP_FOUND OR OpenMP_CXX_FOUND)
add_definitions(-DWITH_OPENMP) add_definitions(-DWITH_ANDROID_OPENMP)
if(${ANDROID_NDK_MAJOR}) if(${ANDROID_NDK_MAJOR})
if(${ANDROID_NDK_MAJOR} GREATER 20) if(${ANDROID_NDK_MAJOR} GREATER 20)
set(ENABLE_OPENMP_SHARED OFF CACHE BOOL "" FORCE) set(ENABLE_OPENMP_SHARED OFF CACHE BOOL "" FORCE)
@@ -42,17 +36,17 @@ if(ANDROID)
endif() endif()
else() else()
if(OPENMP_FOUND OR OpenMP_CXX_FOUND) if(OPENMP_FOUND OR OpenMP_CXX_FOUND)
add_definitions(-DWITH_OPENMP) add_definitions(-DWITH_ANDROID_OPENMP)
# Can only use shared omp lib if WITH_LITE_STATIC=OFF # Can only use shared omp lib if WITH_ANDROID_LITE_STATIC=OFF
set(OPENMP_LINK_FLAGS "-fopenmp") set(OPENMP_LINK_FLAGS "-fopenmp")
else() else()
message(FATAL_ERROR "Could not found OpenMP!") message(FATAL_ERROR "Could not found OpenMP!")
endif() endif()
endif() endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" PARENT_SCOPE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" PARENT_SCOPE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENMP_LINK_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENMP_LINK_FLAGS}" PARENT_SCOPE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OPENMP_LINK_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OPENMP_LINK_FLAGS}" PARENT_SCOPE)
message(STATUS "Found OpenMP ${OpenMP_VERSION} ${OpenMP_CXX_VERSION}") message(STATUS "Found OpenMP ${OpenMP_VERSION} ${OpenMP_CXX_VERSION}")
message(STATUS "OpenMP C flags: ${OpenMP_C_FLAGS}") message(STATUS "OpenMP C flags: ${OpenMP_C_FLAGS}")
message(STATUS "OpenMP CXX flags: ${OpenMP_CXX_FLAGS}") message(STATUS "OpenMP CXX flags: ${OpenMP_CXX_FLAGS}")
@@ -60,13 +54,6 @@ if(ANDROID)
message(STATUS "OpenMP OpenMP_CXX_LIB_NAMES: ${OpenMP_CXX_LIB_NAMES}") message(STATUS "OpenMP OpenMP_CXX_LIB_NAMES: ${OpenMP_CXX_LIB_NAMES}")
message(STATUS "OpenMP OpenMP_CXX_LIBRARIES: ${OpenMP_CXX_LIBRARIES}") message(STATUS "OpenMP OpenMP_CXX_LIBRARIES: ${OpenMP_CXX_LIBRARIES}")
message(STATUS "ENABLE_OPENMP_SHARED: ${ENABLE_OPENMP_SHARED}") message(STATUS "ENABLE_OPENMP_SHARED: ${ENABLE_OPENMP_SHARED}")
elseif(WIN32)
message(FATAL_ERROR "WITH_OPENMP=ON option is not support for WIN32 now!")
elseif(APPLE)
message(FATAL_ERROR "WITH_OPENMP=ON option is not support for APPLE now!")
elseif(IOS)
message(FATAL_ERROR "WITH_OPENMP=ON option is not support for IOS now!")
else() else()
message(FATAL_ERROR "WITH_OPENMP=ON option is not support for Linux now!") message(FATAL_ERROR "WITH_ANDOIRD_OPENMP=ON option is not support for WIN32/APPLE/IOS/Linux!")
endif() endif()

View File

@@ -36,16 +36,6 @@ set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" "${PADDLELITE_LIB_DIR}")
set(PADDLELITE_URL_PREFIX "https://bj.bcebos.com/fastdeploy/third_libs") set(PADDLELITE_URL_PREFIX "https://bj.bcebos.com/fastdeploy/third_libs")
if(ANDROID)
# check ABI, toolchain
if((NOT ANDROID_ABI MATCHES "armeabi-v7a") AND (NOT ANDROID_ABI MATCHES "arm64-v8a"))
message(FATAL_ERROR "FastDeploy with Paddle Lite only support armeabi-v7a, arm64-v8a now.")
endif()
if(NOT ANDROID_TOOLCHAIN MATCHES "clang")
message(FATAL_ERROR "Currently, only support clang toolchain while cross compiling FastDeploy for Android with Paddle Lite backend, but found ${ANDROID_TOOLCHAIN}.")
endif()
endif()
if(NOT PADDLELITE_URL) if(NOT PADDLELITE_URL)
if(WIN32 OR APPLE OR IOS) if(WIN32 OR APPLE OR IOS)
message(FATAL_ERROR "Doesn't support windows/mac/ios platform with backend Paddle Lite now.") message(FATAL_ERROR "Doesn't support windows/mac/ios platform with backend Paddle Lite now.")
@@ -65,7 +55,7 @@ endif()
if(WIN32 OR APPLE OR IOS) if(WIN32 OR APPLE OR IOS)
message(FATAL_ERROR "Doesn't support windows/mac/ios platform with backend Paddle Lite now.") message(FATAL_ERROR "Doesn't support windows/mac/ios platform with backend Paddle Lite now.")
elseif(ANDROID AND WITH_LITE_STATIC) elseif(ANDROID AND WITH_ANDROID_LITE_STATIC)
set(PADDLELITE_LIB "${PADDLELITE_LIB_DIR}/libpaddle_api_full_bundled.a") set(PADDLELITE_LIB "${PADDLELITE_LIB_DIR}/libpaddle_api_full_bundled.a")
set(PADDLELITE_REMOVE_LIB "${PADDLELITE_LIB_DIR}/libpaddle_full_api_shared.so") set(PADDLELITE_REMOVE_LIB "${PADDLELITE_LIB_DIR}/libpaddle_full_api_shared.so")
else() else()

View File

@@ -53,23 +53,7 @@ function(fastdeploy_summary)
message(STATUS " WITH_TIMVX : ${WITH_TIMVX}") message(STATUS " WITH_TIMVX : ${WITH_TIMVX}")
message(STATUS " WITH_KUNLUNXIN : ${WITH_KUNLUNXIN}") message(STATUS " WITH_KUNLUNXIN : ${WITH_KUNLUNXIN}")
message(STATUS " WITH_CAPI : ${WITH_CAPI}") message(STATUS " WITH_CAPI : ${WITH_CAPI}")
message(STATUS " WITH_CSHARPAPI : ${WITH_CSHARPAPI}") message(STATUS " WITH_CSHARPAPI : ${WITH_CSHARPAPI}")
if(ENABLE_FLYCV)
message(STATUS " WITH_FLYCV_STATIC: : ${WITH_FLYCV_STATIC}")
endif()
if(ANDROID)
message(STATUS " WITH_STATIC_LIB: : ${WITH_STATIC_LIB}")
message(STATUS " WITH_OPENCV_STATIC: : ${WITH_OPENCV_STATIC}")
if(ENABLE_LITE_BACKEND)
message(STATUS " WITH_LITE_STATIC : ${WITH_LITE_STATIC}")
endif()
message(STATUS " WITH_OPENMP: : ${WITH_OPENMP}")
message(STATUS " WITH_JAVA: : ${WITH_JAVA}")
message(STATUS " ANDROID_ABI : ${ANDROID_ABI}")
message(STATUS " ANDROID_PLATFORM : ${ANDROID_PLATFORM}")
message(STATUS " ANDROID_NDK : ${ANDROID_NDK}")
message(STATUS " ANDROID_NDK_MAJOR : ${ANDROID_NDK_MAJOR}")
endif()
if(ENABLE_ORT_BACKEND) if(ENABLE_ORT_BACKEND)
message(STATUS " ONNXRuntime version : ${ONNXRUNTIME_VERSION}") message(STATUS " ONNXRuntime version : ${ONNXRUNTIME_VERSION}")
endif() endif()
@@ -90,4 +74,17 @@ function(fastdeploy_summary)
message(STATUS " Python executable : ${PYTHON_EXECUTABLE}") message(STATUS " Python executable : ${PYTHON_EXECUTABLE}")
message(STATUS " Python includes : ${PYTHON_INCLUDE_DIR}") message(STATUS " Python includes : ${PYTHON_INCLUDE_DIR}")
endif() endif()
if(ANDROID)
message(STATUS " ANDROID_STATIC_LIB: : ${WITH_ANDROID_STATIC_LIB}")
message(STATUS " ANDROID_OPENCV_STATIC: : ${WITH_ANDROID_OPENCV_STATIC}")
message(STATUS " ANDROID_FLYCV_STATIC: : ${WITH_ANDROID_FLYCV_STATIC}")
message(STATUS " ANDROID_LITE_STATIC : ${WITH_ANDROID_LITE_STATIC}")
message(STATUS " ANDROID_OPENMP: : ${WITH_ANDROID_OPENMP}")
message(STATUS " ANDROID_JAVA: : ${WITH_ANDROID_JAVA}")
message(STATUS " ANDROID_TENSOR_FUNCS: : ${WITH_ANDROID_TENSOR_FUNCS}")
message(STATUS " ANDROID_ABI : ${ANDROID_ABI}")
message(STATUS " ANDROID_PLATFORM : ${ANDROID_PLATFORM}")
message(STATUS " ANDROID_NDK : ${ANDROID_NDK}")
message(STATUS " ANDROID_NDK_MAJOR : ${ANDROID_NDK_MAJOR}")
endif()
endfunction() endfunction()

View File

@@ -93,9 +93,9 @@ __build_fastdeploy_android_shared() {
-DENABLE_TEXT=OFF \ -DENABLE_TEXT=OFF \
-DENABLE_VISION=ON \ -DENABLE_VISION=ON \
-DBUILD_EXAMPLES=ON \ -DBUILD_EXAMPLES=ON \
-DWITH_OPENCV_STATIC=OFF \ -DWITH_ANDROID_OPENCV_STATIC=OFF \
-DWITH_LITE_STATIC=OFF \ -DWITH_ANDROID_LITE_STATIC=OFF \
-DWITH_OPENMP=OFF \ -DWITH_ANDROID_OPENMP=OFF \
-DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \
-Wno-dev ../../.. && make -j8 && make install -Wno-dev ../../.. && make -j8 && make install

View File

@@ -94,9 +94,9 @@ __build_fastdeploy_android_shared() {
-DENABLE_VISION=ON \ -DENABLE_VISION=ON \
-DBUILD_EXAMPLES=OFF \ -DBUILD_EXAMPLES=OFF \
-DENABLE_BENCHMARK=ON \ -DENABLE_BENCHMARK=ON \
-DWITH_OPENCV_STATIC=OFF \ -DWITH_ANDROID_OPENCV_STATIC=OFF \
-DWITH_LITE_STATIC=OFF \ -DWITH_ANDROID_LITE_STATIC=OFF \
-DWITH_OPENMP=OFF \ -DWITH_ANDROID_OPENMP=OFF \
-DWITH_TESTING=OFF \ -DWITH_TESTING=OFF \
-DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \
-Wno-dev ../../.. && make -j8 && make install -Wno-dev ../../.. && make -j8 && make install

View File

@@ -0,0 +1,114 @@
#!/bin/bash
set -e
set +x
# -------------------------------------------------------------------------------
# mutable global variables
# -------------------------------------------------------------------------------
TOOLCHAIN=clang # gcc/clang toolchain
# -------------------------------------------------------------------------------
# readonly global variables
# -------------------------------------------------------------------------------
readonly ROOT_PATH=$(pwd)
readonly ANDROID_ABI=$1
readonly ANDROID_PLATFORM="android-$2"
readonly BUILD_ROOT=build/Android
readonly BUILD_DIR=${BUILD_ROOT}/${ANDROID_ABI}-api-$2
# -------------------------------------------------------------------------------
# tasks
# -------------------------------------------------------------------------------
__make_build_dir() {
if [ ! -d "${BUILD_DIR}" ]; then
echo "-- [INFO] BUILD_DIR: ${BUILD_DIR} not exists, setup manually ..."
if [ ! -d "${BUILD_ROOT}" ]; then
mkdir -p "${BUILD_ROOT}" && echo "-- [INFO] Created ${BUILD_ROOT} !"
fi
mkdir -p "${BUILD_DIR}" && echo "-- [INFO] Created ${BUILD_DIR} !"
else
echo "-- [INFO] Found BUILD_DIR: ${BUILD_DIR}"
fi
}
__check_cxx_envs() {
if [ $LDFLAGS ]; then
echo "-- [INFO] Found LDFLAGS: ${LDFLAGS}, \c"
echo "unset it before crossing compiling ${ANDROID_ABI}"
unset LDFLAGS
fi
if [ $CPPFLAGS ]; then
echo "-- [INFO] Found CPPFLAGS: ${CPPFLAGS}, \c"
echo "unset it before crossing compiling ${ANDROID_ABI}"
unset CPPFLAGS
fi
if [ $CPLUS_INCLUDE_PATH ]; then
echo "-- [INFO] Found CPLUS_INCLUDE_PATH: ${CPLUS_INCLUDE_PATH}, \c"
echo "unset it before crossing compiling ${ANDROID_ABI}"
unset CPLUS_INCLUDE_PATH
fi
if [ $C_INCLUDE_PATH ]; then
echo "-- [INFO] Found C_INCLUDE_PATH: ${C_INCLUDE_PATH}, \c"
echo "unset it before crossing compiling ${ANDROID_ABI}"
unset C_INCLUDE_PATH
fi
}
__set_android_ndk() {
if [ -z $ANDROID_NDK ]; then
echo "-- [INFO] ANDROID_NDK not exists, please setup manually ..."
exit 0
else
echo "-- [INFO] Found ANDROID_NDK: ${ANDROID_NDK}"
fi
if [ "$ANDROID_NDK" ]; then
NDK_VERSION=$(echo $ANDROID_NDK | egrep -o "[0-9]{2}" | head -n 1)
if [ "$NDK_VERSION" -gt 17 ]; then
TOOLCHAIN=clang
fi
echo "-- [INFO] Checked ndk version: ${NDK_VERSION}"
echo "-- [INFO] Selected toolchain: ${TOOLCHAIN}"
fi
}
__build_fastdeploy_android_shared() {
local ANDROID_STL=c++_shared # c++_static
local ANDROID_TOOLCHAIN=${TOOLCHAIN}
local TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
local FASDEPLOY_INSTALL_DIR="${ROOT_PATH}/${BUILD_DIR}/install"
cd "${BUILD_DIR}" && echo "-- [INFO] Working Dir: ${PWD}"
cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
-DCMAKE_BUILD_TYPE=MinSizeRel \
-DANDROID_ABI=${ANDROID_ABI} \
-DANDROID_NDK=${ANDROID_NDK} \
-DANDROID_PLATFORM=${ANDROID_PLATFORM} \
-DANDROID_STL=${ANDROID_STL} \
-DANDROID_TOOLCHAIN=${ANDROID_TOOLCHAIN} \
-DENABLE_LITE_BACKEND=ON \
-DENABLE_FLYCV=OFF \
-DENABLE_TEXT=OFF \
-DENABLE_VISION=OFF \
-DWITH_ANDROID_LITE_STATIC=ON \
-DWITH_ANDROID_TENSOR_FUNCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \
-Wno-dev ../../.. && make -j8 && make install
echo "-- [INFO][built][${ANDROID_ABI}][${BUILD_DIR}/install]"
}
main() {
__make_build_dir
__check_cxx_envs
__set_android_ndk
__build_fastdeploy_android_shared
exit 0
}
main
# Usage:
# ./scripts/android/build_android_cpp_with_runtime_only.sh arm64-v8a 21
# ./scripts/android/build_android_cpp_with_runtime_only.sh armeabi-v7a 21

View File

@@ -93,14 +93,13 @@ __build_fastdeploy_android_shared() {
-DENABLE_TEXT=OFF \ -DENABLE_TEXT=OFF \
-DENABLE_VISION=ON \ -DENABLE_VISION=ON \
-DBUILD_EXAMPLES=OFF \ -DBUILD_EXAMPLES=OFF \
-DWITH_OPENCV_STATIC=ON \ -DWITH_ANDROID_OPENCV_STATIC=ON \
-DWITH_FLYCV_STATIC=ON \ -DWITH_ANDROID_FLYCV_STATIC=ON \
-DWITH_LITE_STATIC=ON \ -DWITH_ANDROID_LITE_STATIC=ON \
-DWITH_STATIC_LIB=ON \ -DWITH_ANDROID_OPENMP=ON \
-DWITH_OPENMP=ON \ -DWITH_ANDROID_JAVA=OFF \
-DWITH_JAVA=ON \
-DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \
-Wno-dev ../../.. && make -j8 && make install -Wno-dev ../../.. && make -j8 && make install
echo "-- [INFO][built][${ANDROID_ABI}][${BUILD_DIR}/install]" echo "-- [INFO][built][${ANDROID_ABI}][${BUILD_DIR}/install]"
} }

View File

@@ -93,12 +93,12 @@ __build_fastdeploy_android_shared() {
-DENABLE_TEXT=ON \ -DENABLE_TEXT=ON \
-DENABLE_VISION=ON \ -DENABLE_VISION=ON \
-DBUILD_EXAMPLES=OFF \ -DBUILD_EXAMPLES=OFF \
-DWITH_OPENCV_STATIC=ON \ -DWITH_ANDROID_OPENCV_STATIC=ON \
-DWITH_FLYCV_STATIC=ON \ -DWITH_ANDROID_FLYCV_STATIC=ON \
-DWITH_LITE_STATIC=ON \ -DWITH_ANDROID_LITE_STATIC=ON \
-DWITH_STATIC_LIB=OFF \ -DWITH_ANDROID_STATIC_LIB=OFF \
-DWITH_OPENMP=ON \ -DWITH_ANDROID_OPENMP=ON \
-DWITH_JAVA=ON \ -DWITH_ANDROID_JAVA=OFF \
-DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \
-Wno-dev ../../.. && make -j8 && make install -Wno-dev ../../.. && make -j8 && make install

View File

@@ -93,9 +93,10 @@ __build_fastdeploy_android_shared() {
-DENABLE_TEXT=ON \ -DENABLE_TEXT=ON \
-DENABLE_VISION=ON \ -DENABLE_VISION=ON \
-DBUILD_EXAMPLES=ON \ -DBUILD_EXAMPLES=ON \
-DWITH_OPENCV_STATIC=OFF \ -DWITH_ANDROID_OPENCV_STATIC=OFF \
-DWITH_LITE_STATIC=OFF \ -DWITH_ANDROID_FLYCV_STATIC=OFF \
-DWITH_OPENMP=OFF \ -DWITH_ANDROID_LITE_STATIC=OFF \
-DWITH_ANDROID_OPENMP=OFF \
-DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \
-Wno-dev ../../.. && make -j8 && make install -Wno-dev ../../.. && make -j8 && make install

View File

@@ -93,8 +93,8 @@ __build_fastdeploy_android_shared() {
-DENABLE_TEXT=ON \ -DENABLE_TEXT=ON \
-DENABLE_VISION=OFF \ -DENABLE_VISION=OFF \
-DBUILD_EXAMPLES=OFF \ -DBUILD_EXAMPLES=OFF \
-DWITH_LITE_STATIC=ON \ -DWITH_ANDROID_LITE_STATIC=ON \
-DWITH_OPENMP=ON \ -DWITH_ANDROID_OPENMP=ON \
-DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \
-Wno-dev ../../.. && make -j8 && make install -Wno-dev ../../.. && make -j8 && make install