From 767647d88e7fd69839f4334f3b12a96806ebc269 Mon Sep 17 00:00:00 2001 From: DefTruth <31974251+DefTruth@users.noreply.github.com> Date: Mon, 6 Mar 2023 13:33:43 +0800 Subject: [PATCH] [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 --- CMakeLists.txt | 218 ++++------------ FastDeploy.cmake.in | 161 +++++------- cmake/android.cmake | 238 ++++++++++++++++++ cmake/fast_tokenizer.cmake | 7 - cmake/fastdeploy_jni.cmake | 4 +- cmake/flycv.cmake | 58 +---- cmake/opencv.cmake | 6 +- cmake/openmp.cmake | 37 +-- cmake/paddlelite.cmake | 12 +- cmake/summary.cmake | 31 ++- scripts/android/build_android_cpp.sh | 6 +- .../build_android_cpp_with_benchmark.sh | 6 +- .../build_android_cpp_with_runtime_only.sh | 114 +++++++++ .../build_android_cpp_with_static_deps.sh | 13 +- ...roid_cpp_with_static_deps_with_text_api.sh | 12 +- .../build_android_cpp_with_text_api.sh | 7 +- .../build_android_cpp_with_text_api_only.sh | 4 +- 17 files changed, 520 insertions(+), 414 deletions(-) create mode 100644 cmake/android.cmake create mode 100755 scripts/android/build_android_cpp_with_runtime_only.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index d4f704de3..44589cac1 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ # limitations under the License. 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") @@ -46,12 +46,6 @@ if(UNIX AND (NOT APPLE) AND (NOT ANDROID) AND (NOT WITH_TIMVX)) 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 ################################ 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) @@ -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_CAPI "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. 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(OPENVINO_DIRECTORY "" CACHE PATH "User can specify the installed openvino directory.") - # Whether to build fastdeploy on device Nvidia Jetson # Only support CPU Inference & GPU(TensorRT) Inference Now option(BUILD_ON_JETSON "Whether to build fastdeploy on Nvidia Jetson" OFF) @@ -151,6 +136,12 @@ if(WITH_IPU) add_definitions(-DWITH_IPU) endif() +if(ANDROID) + include(${PROJECT_SOURCE_DIR}/cmake/android.cmake) + check_android_options_policy() + set_android_cxx_complie_flags() +endif() + # Check for macOS 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_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_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_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_PYBIND_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/pybind/*.cc ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/*_pybind.cc) 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) list(APPEND DEPLOY_TEXT_SRCS ${DEPLOY_TEXT_CUDA_SRCS}) 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 "") @@ -196,6 +192,13 @@ if(WIN32) add_definitions(-DEIGEN_STRONG_INLINE=inline) 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 if(WITH_SW) add_definitions(-DEIGEN_AVOID_THREAD_LOCAL) @@ -211,9 +214,6 @@ endif() if(ENABLE_LITE_BACKEND) add_definitions(-DENABLE_LITE_BACKEND) - if(WITH_LITE_STATIC) - add_definitions(-DWITH_LITE_STATIC) - endif() include(${PROJECT_SOURCE_DIR}/cmake/paddlelite.cmake) list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_LITE_SRCS}) list(APPEND DEPEND_LIBS external_paddle_lite) @@ -454,17 +454,7 @@ string(STRIP "${FASTDEPLOY_VERSION}" FASTDEPLOY_VERSION) if (APPLE) set_target_properties(${LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden") elseif(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_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}) + set_android_library_cxx_link_flags() elseif(MSVC) else() if(WITH_GPU) @@ -486,41 +476,9 @@ if(MSVC) set_source_files_properties(${FD_FILES_REQUIRE_BIGOBJ} PROPERTIES COMPILE_FLAGS "/bigobj") 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}) - -################################ JNI & STATIC LIB: FastDeploy Android JNI & STATIC Lib ############################### -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) +if(ANDROID) + set_android_extra_libraries_target() endif() ##################################### Examples #################################### @@ -567,40 +525,13 @@ if(WIN32) RUNTIME DESTINATION lib ) elseif(ANDROID) - if(WITH_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_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() + set_android_libraries_installation() else() install( TARGETS ${LIBRARY_NAME} - LIBRARY DESTINATION lib - ) + LIBRARY DESTINATION lib) endif() + install( DIRECTORY ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy DESTINATION ${CMAKE_INSTALL_PREFIX}/include @@ -614,76 +545,12 @@ if(NOT ANDROID) DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs ) + install( + DIRECTORY ${PROJECT_SOURCE_DIR}/examples + DESTINATION ${CMAKE_INSTALL_PREFIX} + ) else() - # 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_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() + set_android_third_libs_installation() endif() install( @@ -695,17 +562,11 @@ install( ${PROJECT_SOURCE_DIR}/FastDeployCSharp.cmake ${PROJECT_SOURCE_DIR}/cmake/FastDeployConfig.cmake ${PROJECT_SOURCE_DIR}/cmake/utils.cmake + ${PROJECT_SOURCE_DIR}/cmake/summary.cmake ${PROJECT_SOURCE_DIR}/cmake/openmp.cmake DESTINATION ${CMAKE_INSTALL_PREFIX} ) -if(NOT ANDROID) - install( - DIRECTORY ${PROJECT_SOURCE_DIR}/examples - DESTINATION ${CMAKE_INSTALL_PREFIX} - ) -endif() - install( FILES ${PROJECT_SOURCE_DIR}/cmake/gflags.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/utils @@ -742,6 +603,19 @@ endif() 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 ############################# if(BUILD_FASTDEPLOY_PYTHON) add_definitions(-DBUILD_FASTDEPLOY_PYTHON) diff --git a/FastDeploy.cmake.in b/FastDeploy.cmake.in index f5c2dbe83..6c62ceb8c 100644 --- a/FastDeploy.cmake.in +++ b/FastDeploy.cmake.in @@ -1,6 +1,23 @@ 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_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_RKNPU2_BACKEND @ENABLE_RKNPU2_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_OPENVINO_BACKEND @ENABLE_OPENVINO_BACKEND@) set(ENABLE_POROS_BACKEND @ENABLE_POROS_BACKEND@) -set(POROS_VERSION @POROS_VERSION@) set(ENABLE_TRT_BACKEND @ENABLE_TRT_BACKEND@) set(ENABLE_PADDLE2ONNX @ENABLE_PADDLE2ONNX@) + set(ENABLE_VISION @ENABLE_VISION@) set(ENABLE_FLYCV @ENABLE_FLYCV@) set(ENABLE_CVCUDA @ENABLE_CVCUDA@) set(ENABLE_TEXT @ENABLE_TEXT@) 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(POROS_VERSION @POROS_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(OPENVINO_FILENAME @OPENVINO_FILENAME@) set(PADDLELITE_FILENAME @PADDLELITE_FILENAME@) -set(LIBRARY_NAME @LIBRARY_NAME@) set(OPENCV_DIRECTORY "@OPENCV_DIRECTORY@") set(ORT_DIRECTORY "@ORT_DIRECTORY@") set(OPENVINO_DIRECTORY "@OPENVINO_DIRECTORY@") -set(RKNN2_TARGET_SOC "@RKNN2_TARGET_SOC@") -set(WITH_KUNLUNXIN @WITH_KUNLUNXIN@) -set(WITH_CAPI @WITH_CAPI@) -# Whether to use FastDeploy static lib. The default -# value for this option is determined by the SDK -# build-time options. -set(WITH_STATIC_LIB @WITH_STATIC_LIB@) + +# Android: specific option for Android OS +set(WITH_ANDROID_STATIC_LIB @WITH_ANDROID_STATIC_LIB@) +set(WITH_ANDROID_LITE_STATIC @WITH_ANDROID_LITE_STATIC@) +set(WITH_ANDROID_OPENCV_STATIC @WITH_ANDROID_OPENCV_STATIC@) +set(WITH_ANDROID_FLYCV_STATIC @WITH_ANDROID_FLYCV_STATIC@) +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_INCS "") @@ -54,25 +70,27 @@ if(NOT MSVC) endif(NOT MSVC) # Set FastDeploy static lib definitions -if(WITH_LITE_STATIC) +if(WITH_ANDROID_LITE_STATIC) add_definitions(-DWITH_LITE_STATIC) + add_definitions(-DWITH_ANDROID_LITE_STATIC) endif() -if(WITH_STATIC_LIB) +if(WITH_ANDROID_STATIC_LIB) add_definitions(-DWITH_STATIC_LIB) + add_definitions(-DWITH_ANDROID_STATIC_LIB) # add_definitions(-DWITH_STATIC_WARNING) endif() # Still need omp while using FastDeploy static lib. # This is due to the use of openmp for Paddle Lite's # 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) endif() if(ANDROID) add_library(fastdeploy STATIC IMPORTED GLOBAL) - if(WITH_STATIC_LIB) + if(WITH_ANDROID_STATIC_LIB) set_property(TARGET fastdeploy PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/lib${LIBRARY_NAME}_static.a) else() @@ -80,7 +98,7 @@ if(ANDROID) ${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/lib${LIBRARY_NAME}.so) endif() 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) set_property(TARGET fastdeploy_omp PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/lib/${ANDROID_ABI}/libomp.so) list(APPEND FASTDEPLOY_LIBS fastdeploy_omp) @@ -144,8 +162,8 @@ endif() if(ENABLE_LITE_BACKEND) set(LITE_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${PADDLELITE_FILENAME}) if(ANDROID) - if(WITH_LITE_STATIC) - if(WITH_STATIC_LIB) + if(WITH_ANDROID_LITE_STATIC) + if(WITH_ANDROID_STATIC_LIB) list(APPEND FASTDEPLOY_INCS ${LITE_DIR}/include) endif() else() @@ -223,8 +241,8 @@ if(ENABLE_VISION) endif() message(STATUS "The path of OpenCV is ${OpenCV_DIR}.") if(ANDROID) - if(WITH_OPENCV_STATIC) - if(WITH_STATIC_LIB) + if(WITH_ANDROID_OPENCV_STATIC) + if(WITH_ANDROID_STATIC_LIB) # Only need the headers of opencv while using FastDeploy static lib. list(APPEND FASTDEPLOY_INCS ${OpenCV_DIR}/include) else() @@ -265,7 +283,7 @@ if(ENABLE_VISION) include_directories(${CMAKE_CURRENT_LIST_DIR}/third_libs/install/flycv/include) set(FLYCV_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/flycv/lib) if(ANDROID) - if(NOT WITH_FLYCV_STATIC) + if(NOT WITH_ANDROID_FLYCV_STATIC) add_library(flycv_shared STATIC IMPORTED GLOBAL) set_property(TARGET flycv_shared PROPERTY IMPORTED_LOCATION ${FLYCV_LIB_DIR}/${ANDROID_ABI}/libflycv_shared.so) list(APPEND FASTDEPLOY_LIBS flycv_shared) @@ -336,7 +354,7 @@ if(ANDROID) endif() # 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(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) @@ -344,74 +362,8 @@ endif() remove_duplicate_libraries(FASTDEPLOY_LIBS) -# Print compiler information -message(STATUS "") -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() +include(${CMAKE_CURRENT_LIST_DIR}/summary.cmake) +fastdeploy_summary() message(STATUS " DEPENDENCY_LIBS : ${FASTDEPLOY_LIBS}") if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") @@ -424,7 +376,7 @@ endif() function(install_fastdeploy_libraries DESTINATION_DIR) # No dynamic libs need to install while using # FastDeploy static lib. - if(WITH_STATIC_LIB) + if(ANDROID AND WITH_ANDROID_STATIC_LIB) return() endif() set(DYN_LIB_SUFFIX "*.so*") @@ -452,14 +404,14 @@ function(install_fastdeploy_libraries DESTINATION_DIR) endif() list(REMOVE_ITEM ALL_DEPS_DYN_LIBS ${ALL_OPENCV_DYN_LIBS}) - if(NOT WITH_OPENCV_STATIC) - if(WIN32) - file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/x64/vc15/bin/${DYN_LIB_SUFFIX}) - elseif(ANDROID) - file(GLOB OPENCV_DYN_LIBS ${OpenCV_NATIVE_DIR}/libs/${ANDROID_ABI}/${DYN_LIB_SUFFIX}) - else() # linux/mac - file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/lib/${DYN_LIB_SUFFIX}) - endif() + if(WIN32) + file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/x64/vc15/bin/${DYN_LIB_SUFFIX}) + file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR}) + elseif(ANDROID AND (NOT WITH_ANDROID_OPENCV_STATIC)) + file(GLOB OPENCV_DYN_LIBS ${OpenCV_NATIVE_DIR}/libs/${ANDROID_ABI}/${DYN_LIB_SUFFIX}) + file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR}) + else() # linux/mac + file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/lib/${DYN_LIB_SUFFIX}) file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR}) endif() @@ -467,11 +419,10 @@ function(install_fastdeploy_libraries DESTINATION_DIR) if(ENABLE_FLYCV) file(GLOB_RECURSE ALL_FLYCV_DYN_LIBS ${FLYCV_LIB_DIR}/${DYN_LIB_SUFFIX}) 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}) endif() endif() - endif() if(ENABLE_OPENVINO_BACKEND) diff --git a/cmake/android.cmake b/cmake/android.cmake new file mode 100644 index 000000000..73fb4fff7 --- /dev/null +++ b/cmake/android.cmake @@ -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() \ No newline at end of file diff --git a/cmake/fast_tokenizer.cmake b/cmake/fast_tokenizer.cmake index fb32f8ea1..3d42a8dda 100644 --- a/cmake/fast_tokenizer.cmake +++ b/cmake/fast_tokenizer.cmake @@ -76,13 +76,6 @@ elseif(APPLE) set(FASTTOKENIZER_FILE "fast_tokenizer-osx-x86_64-${FASTTOKENIZER_VERSION}.tgz") endif() 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-lite-android-${ANDROID_ABI}-${FASTTOKENIZER_VERSION}.tgz") else() diff --git a/cmake/fastdeploy_jni.cmake b/cmake/fastdeploy_jni.cmake index 36989506d..8b3fc2870 100644 --- a/cmake/fastdeploy_jni.cmake +++ b/cmake/fastdeploy_jni.cmake @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -if(WITH_JAVA) +if(WITH_ANDROID_JAVA) set(JNI_SRCS_FOUND OFF) if(NOT ANDROID) 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 # libraries (opencv, paddle lite, flycv) are ready. 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) add_library(fastdeploy_jni SHARED ${JNI_SRCS}) target_link_libraries(fastdeploy_jni fastdelpoy_jni_dummy ${DEPEND_LIBS} diff --git a/cmake/flycv.cmake b/cmake/flycv.cmake index d6937873f..592db438c 100755 --- a/cmake/flycv.cmake +++ b/cmake/flycv.cmake @@ -35,18 +35,6 @@ set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" 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) set(FLYCV_COMPILE_LIB "${FLYCV_INSTALL_DIR}/lib/flycv.lib" @@ -56,26 +44,20 @@ elseif(APPLE) "${FLYCV_INSTALL_DIR}/lib/libflycv.dylib" CACHE FILEPATH "flycv compile library." FORCE) elseif(ANDROID) - if(WITH_FLYCV_STATIC) + if(WITH_ANDROID_FLYCV_STATIC) set(FLYCV_COMPILE_LIB - "${FLYCV_INSTALL_DIR}/lib/${ANDROID_ABI}/libflycv_static.a" - CACHE FILEPATH "flycv compile library." FORCE) + "${FLYCV_INSTALL_DIR}/lib/${ANDROID_ABI}/libflycv_static.a" + CACHE FILEPATH "flycv compile library." FORCE) else() set(FLYCV_COMPILE_LIB - "${FLYCV_INSTALL_DIR}/lib/${ANDROID_ABI}/libflycv_shared.so" - CACHE FILEPATH "flycv compile library." FORCE) + "${FLYCV_INSTALL_DIR}/lib/${ANDROID_ABI}/libflycv_shared.so" + CACHE FILEPATH "flycv compile library." FORCE) endif() else() - if(WITH_FLYCV_STATIC) - set(FLYCV_COMPILE_LIB - "${FLYCV_INSTALL_DIR}/lib/libflycv_static.a" - CACHE FILEPATH "flycv compile library." FORCE) - else() - set(FLYCV_COMPILE_LIB + set(FLYCV_COMPILE_LIB "${FLYCV_INSTALL_DIR}/lib/libflycv_shared.so" CACHE FILEPATH "flycv compile library." FORCE) - endif() -endif(WIN32) +endif() set(FLYCV_URL_BASE "https://bj.bcebos.com/fastdeploy/third_libs/") set(FLYCV_VERSION "1.0.0") @@ -151,7 +133,7 @@ set_property(TARGET external_flycv PROPERTY IMPORTED_LOCATION add_dependencies(external_flycv ${FLYCV_PROJECT}) set(FLYCV_LIBRARIES external_flycv) -if(WITH_FLYCV_STATIC) +if(WITH_ANDROID_FLYCV_STATIC) if (ANDROID) add_library(external_flycv_png16 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_turbojpeg) list(APPEND FLYCV_LIBRARIES external_flycv_z) - elseif(APPLE OR WIN32) - message(FATAL_ERROR "Not support FlyCV static lib for APPLE/WIN32 now!") else() - if((CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") OR (CMAKE_SYSTEM_PROCESSOR MATCHES "arm")) - message(FATAL_ERROR "Not support FlyCV static lib for aarch64/arm linux now!") - 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() + message(FATAL_ERROR "Not support FlyCV static lib for APPLE/WIN32/Linux now!") + endif() endif() \ No newline at end of file diff --git a/cmake/opencv.cmake b/cmake/opencv.cmake index e4a63f42b..4d5b18c92 100755 --- a/cmake/opencv.cmake +++ b/cmake/opencv.cmake @@ -87,7 +87,7 @@ function(remove_redundant_opencv_android_abi_libraries OPENCV_JNI_DIR) # remove redundant content file(REMOVE_RECURSE ${OPENCV_ANDROID_ETC_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}) if(NOT ${_ocv_android_abi} MATCHES ${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: # -DOPENCV_DIRECTORY=your-path-to/OpenCV-android-sdk/sdk/native/jni if(ANDROID) - if(WITH_OPENCV_STATIC) + if(WITH_ANDROID_OPENCV_STATIC) set(OpenCV_DIR ${OPENCV_DIRECTORY}) find_package(OpenCV REQUIRED PATHS ${OpenCV_DIR}) include_directories(${OpenCV_INCLUDE_DIRS}) @@ -150,7 +150,7 @@ if(OPENCV_DIRECTORY) else() message(STATUS "Use the default OpenCV lib from: ${OPENCV_URL}") 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 download_and_decompress(${OPENCV_URL} ${CMAKE_CURRENT_BINARY_DIR}/${OPENCV_FILENAME}${COMPRESSED_SUFFIX} ${THIRD_PARTY_PATH}/install) if(EXISTS ${THIRD_PARTY_PATH}/install/opencv) diff --git a/cmake/openmp.cmake b/cmake/openmp.cmake index 115a0db0e..65b51a4bc 100644 --- a/cmake/openmp.cmake +++ b/cmake/openmp.cmake @@ -12,22 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -if(NOT WITH_OPENMP) - message(FATAL_ERROR "Please set WITH_OPENMP=ON before inclue openmp.cmake") -endif() - if(ANDROID) - - if(NOT ANDROID_TOOLCHAIN MATCHES "clang") - message(FATAL_ERROR "Currently, only support clang toolchain while cross compiling FastDeploy for Android with OpenMP support, but found ${ANDROID_TOOLCHAIN}.") - endif() - + if(NOT WITH_ANDROID_OPENMP) + message(FATAL_ERROR "Please set WITH_ANDROID_OPENMP=ON before inclue openmp.cmake") + endif() find_package(OpenMP REQUIRED) 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 if(OPENMP_FOUND OR OpenMP_CXX_FOUND) - add_definitions(-DWITH_OPENMP) + add_definitions(-DWITH_ANDROID_OPENMP) if(${ANDROID_NDK_MAJOR}) if(${ANDROID_NDK_MAJOR} GREATER 20) set(ENABLE_OPENMP_SHARED OFF CACHE BOOL "" FORCE) @@ -42,17 +36,17 @@ if(ANDROID) endif() else() if(OPENMP_FOUND OR OpenMP_CXX_FOUND) - add_definitions(-DWITH_OPENMP) - # Can only use shared omp lib if WITH_LITE_STATIC=OFF + add_definitions(-DWITH_ANDROID_OPENMP) + # Can only use shared omp lib if WITH_ANDROID_LITE_STATIC=OFF set(OPENMP_LINK_FLAGS "-fopenmp") else() message(FATAL_ERROR "Could not found OpenMP!") endif() endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENMP_LINK_FLAGS}") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OPENMP_LINK_FLAGS}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" PARENT_SCOPE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" PARENT_SCOPE) + 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}" PARENT_SCOPE) message(STATUS "Found OpenMP ${OpenMP_VERSION} ${OpenMP_CXX_VERSION}") message(STATUS "OpenMP C flags: ${OpenMP_C_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_LIBRARIES: ${OpenMP_CXX_LIBRARIES}") 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() - 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() diff --git a/cmake/paddlelite.cmake b/cmake/paddlelite.cmake index b255edc66..a945c8a13 100755 --- a/cmake/paddlelite.cmake +++ b/cmake/paddlelite.cmake @@ -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") -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(WIN32 OR APPLE OR IOS) 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) 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_REMOVE_LIB "${PADDLELITE_LIB_DIR}/libpaddle_full_api_shared.so") else() diff --git a/cmake/summary.cmake b/cmake/summary.cmake index d948029b1..e6c7ff01c 100755 --- a/cmake/summary.cmake +++ b/cmake/summary.cmake @@ -53,23 +53,7 @@ function(fastdeploy_summary) message(STATUS " WITH_TIMVX : ${WITH_TIMVX}") message(STATUS " WITH_KUNLUNXIN : ${WITH_KUNLUNXIN}") message(STATUS " WITH_CAPI : ${WITH_CAPI}") - 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() + message(STATUS " WITH_CSHARPAPI : ${WITH_CSHARPAPI}") if(ENABLE_ORT_BACKEND) message(STATUS " ONNXRuntime version : ${ONNXRUNTIME_VERSION}") endif() @@ -90,4 +74,17 @@ function(fastdeploy_summary) message(STATUS " Python executable : ${PYTHON_EXECUTABLE}") message(STATUS " Python includes : ${PYTHON_INCLUDE_DIR}") 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() diff --git a/scripts/android/build_android_cpp.sh b/scripts/android/build_android_cpp.sh index da00eacb7..bf54b87d0 100755 --- a/scripts/android/build_android_cpp.sh +++ b/scripts/android/build_android_cpp.sh @@ -93,9 +93,9 @@ __build_fastdeploy_android_shared() { -DENABLE_TEXT=OFF \ -DENABLE_VISION=ON \ -DBUILD_EXAMPLES=ON \ - -DWITH_OPENCV_STATIC=OFF \ - -DWITH_LITE_STATIC=OFF \ - -DWITH_OPENMP=OFF \ + -DWITH_ANDROID_OPENCV_STATIC=OFF \ + -DWITH_ANDROID_LITE_STATIC=OFF \ + -DWITH_ANDROID_OPENMP=OFF \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -Wno-dev ../../.. && make -j8 && make install diff --git a/scripts/android/build_android_cpp_with_benchmark.sh b/scripts/android/build_android_cpp_with_benchmark.sh index eb812aa64..e63b84bd3 100755 --- a/scripts/android/build_android_cpp_with_benchmark.sh +++ b/scripts/android/build_android_cpp_with_benchmark.sh @@ -94,9 +94,9 @@ __build_fastdeploy_android_shared() { -DENABLE_VISION=ON \ -DBUILD_EXAMPLES=OFF \ -DENABLE_BENCHMARK=ON \ - -DWITH_OPENCV_STATIC=OFF \ - -DWITH_LITE_STATIC=OFF \ - -DWITH_OPENMP=OFF \ + -DWITH_ANDROID_OPENCV_STATIC=OFF \ + -DWITH_ANDROID_LITE_STATIC=OFF \ + -DWITH_ANDROID_OPENMP=OFF \ -DWITH_TESTING=OFF \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -Wno-dev ../../.. && make -j8 && make install diff --git a/scripts/android/build_android_cpp_with_runtime_only.sh b/scripts/android/build_android_cpp_with_runtime_only.sh new file mode 100755 index 000000000..6beca3d4c --- /dev/null +++ b/scripts/android/build_android_cpp_with_runtime_only.sh @@ -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 diff --git a/scripts/android/build_android_cpp_with_static_deps.sh b/scripts/android/build_android_cpp_with_static_deps.sh index 9aec9c4e8..05f79577b 100755 --- a/scripts/android/build_android_cpp_with_static_deps.sh +++ b/scripts/android/build_android_cpp_with_static_deps.sh @@ -93,14 +93,13 @@ __build_fastdeploy_android_shared() { -DENABLE_TEXT=OFF \ -DENABLE_VISION=ON \ -DBUILD_EXAMPLES=OFF \ - -DWITH_OPENCV_STATIC=ON \ - -DWITH_FLYCV_STATIC=ON \ - -DWITH_LITE_STATIC=ON \ - -DWITH_STATIC_LIB=ON \ - -DWITH_OPENMP=ON \ - -DWITH_JAVA=ON \ + -DWITH_ANDROID_OPENCV_STATIC=ON \ + -DWITH_ANDROID_FLYCV_STATIC=ON \ + -DWITH_ANDROID_LITE_STATIC=ON \ + -DWITH_ANDROID_OPENMP=ON \ + -DWITH_ANDROID_JAVA=OFF \ -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]" } diff --git a/scripts/android/build_android_cpp_with_static_deps_with_text_api.sh b/scripts/android/build_android_cpp_with_static_deps_with_text_api.sh index 551e34a4a..84cb75a8d 100755 --- a/scripts/android/build_android_cpp_with_static_deps_with_text_api.sh +++ b/scripts/android/build_android_cpp_with_static_deps_with_text_api.sh @@ -93,12 +93,12 @@ __build_fastdeploy_android_shared() { -DENABLE_TEXT=ON \ -DENABLE_VISION=ON \ -DBUILD_EXAMPLES=OFF \ - -DWITH_OPENCV_STATIC=ON \ - -DWITH_FLYCV_STATIC=ON \ - -DWITH_LITE_STATIC=ON \ - -DWITH_STATIC_LIB=OFF \ - -DWITH_OPENMP=ON \ - -DWITH_JAVA=ON \ + -DWITH_ANDROID_OPENCV_STATIC=ON \ + -DWITH_ANDROID_FLYCV_STATIC=ON \ + -DWITH_ANDROID_LITE_STATIC=ON \ + -DWITH_ANDROID_STATIC_LIB=OFF \ + -DWITH_ANDROID_OPENMP=ON \ + -DWITH_ANDROID_JAVA=OFF \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -Wno-dev ../../.. && make -j8 && make install diff --git a/scripts/android/build_android_cpp_with_text_api.sh b/scripts/android/build_android_cpp_with_text_api.sh index 1a002bcee..81f571cfc 100755 --- a/scripts/android/build_android_cpp_with_text_api.sh +++ b/scripts/android/build_android_cpp_with_text_api.sh @@ -93,9 +93,10 @@ __build_fastdeploy_android_shared() { -DENABLE_TEXT=ON \ -DENABLE_VISION=ON \ -DBUILD_EXAMPLES=ON \ - -DWITH_OPENCV_STATIC=OFF \ - -DWITH_LITE_STATIC=OFF \ - -DWITH_OPENMP=OFF \ + -DWITH_ANDROID_OPENCV_STATIC=OFF \ + -DWITH_ANDROID_FLYCV_STATIC=OFF \ + -DWITH_ANDROID_LITE_STATIC=OFF \ + -DWITH_ANDROID_OPENMP=OFF \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -Wno-dev ../../.. && make -j8 && make install diff --git a/scripts/android/build_android_cpp_with_text_api_only.sh b/scripts/android/build_android_cpp_with_text_api_only.sh index 7881d8ed2..f547a00fa 100755 --- a/scripts/android/build_android_cpp_with_text_api_only.sh +++ b/scripts/android/build_android_cpp_with_text_api_only.sh @@ -93,8 +93,8 @@ __build_fastdeploy_android_shared() { -DENABLE_TEXT=ON \ -DENABLE_VISION=OFF \ -DBUILD_EXAMPLES=OFF \ - -DWITH_LITE_STATIC=ON \ - -DWITH_OPENMP=ON \ + -DWITH_ANDROID_LITE_STATIC=ON \ + -DWITH_ANDROID_OPENMP=ON \ -DCMAKE_INSTALL_PREFIX=${FASDEPLOY_INSTALL_DIR} \ -Wno-dev ../../.. && make -j8 && make install