Jiale/test2_ort/cmake/lite.ai.toolkit-cmd.cmake

185 lines
8.2 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# config lite.ai shared lib.
function(add_lite_ai_toolkit_shared_library version soversion)
configure_file (
"${CMAKE_SOURCE_DIR}/lite/config.h.in"
"${CMAKE_SOURCE_DIR}/lite/config.h"
)
# 2. glob headers files 这里是项目系统的头文件
file(GLOB LITE_HEAD ${CMAKE_SOURCE_DIR}/lite/*.h)
# 3. glob sources files
file(GLOB LITE_SRCS ${CMAKE_SOURCE_DIR}/lite/*.cpp)
set(LITE_DEPENDENCIES ${OpenCV_LIBS})
if (ENABLE_ONNXRUNTIME)
include(cmake/lite.ai.toolkit-onnxruntime.cmake)
set(LITE_SRCS ${LITE_SRCS} ${ORT_SRCS})
set(LITE_DEPENDENCIES ${LITE_DEPENDENCIES} onnxruntime)
endif()
if (ENABLE_MNN)
include(cmake/lite.ai.toolkit-mnn.cmake)
set(LITE_SRCS ${LITE_SRCS} ${MNN_SRCS})
set(LITE_DEPENDENCIES ${LITE_DEPENDENCIES} MNN)
endif()
if (ENABLE_NCNN)
include(cmake/lite.ai.toolkit-ncnn.cmake)
set(LITE_SRCS ${LITE_SRCS} ${NCNN_SRCS})
set(LITE_DEPENDENCIES ${LITE_DEPENDENCIES} ncnn)
endif()
if (ENABLE_TNN)
include(cmake/lite.ai.toolkit-tnn.cmake)
set(LITE_SRCS ${LITE_SRCS} ${TNN_SRCS})
set(LITE_DEPENDENCIES ${LITE_DEPENDENCIES} TNN)
endif()
# 4. shared library
add_library(lite.ai.toolkit SHARED ${LITE_SRCS})
target_link_libraries(lite.ai.toolkit ${LITE_DEPENDENCIES}) # default: onnxruntime.dll or onnxruntime.lib ???
set_target_properties(lite.ai.toolkit PROPERTIES VERSION ${version} SOVERSION ${soversion})
message("Installing Lite.AI.ToolKit Headers ...")
file(INSTALL ${LITE_HEAD} DESTINATION ${BUILD_LITE_AI_DIR}/include/lite)
message(">>>> Added Shared Library: lite.ai.toolkit !")
endfunction()
# add custom command for lite.ai shared lib.
function(add_lite_ai_toolkit_engines_headers_command)
message(STATUS "come in the move function...")
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_OUTPUT_PATH} # ${CMAKE_COMMAND}是CMake的路径-E使CMake运行命令而不是构建
COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBRARY_OUTPUT_PATH}
COMMAND ${CMAKE_COMMAND} -E echo "Preparing ${LIBRARY_OUTPUT_PATH} ... done!"
COMMAND ${CMAKE_COMMAND} -E echo "Preparing ${EXECUTABLE_OUTPUT_PATH} ... done!"
)
message(STATUS "the first ADD_CUSTOM_COMMAND finished.")
# copy opencv2 headers
if (INCLUDE_OPENCV)
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_LITE_AI_DIR}/include/opencv2 # 构建include目录加入opencv2的include
)
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LITE_AI_ROOT_DIR}/third_party/include/opencv2 ${BUILD_LITE_AI_DIR}/include/opencv2
COMMAND ${CMAKE_COMMAND} -E echo "Installing opencv2 headers to ${BUILD_LITE_AI_DIR}/opencv2 ... done!"
)
endif()
if (ENABLE_ONNXRUNTIME)
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_LITE_AI_DIR}/include/onnxruntime # 构建include目录加入onnxruntime的include
)
# copy onnxruntime headers # `copy_directory` 复制一个目录及其内容到另一个目录
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LITE_AI_ROOT_DIR}/third_party/include/onnxruntime ${BUILD_LITE_AI_DIR}/include/onnxruntime
COMMAND ${CMAKE_COMMAND} -E echo "Installing onnxruntime headers to ${BUILD_LITE_AI_DIR}/include/onnxruntime ... done!"
)
endif()
if (ENABLE_MNN)
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_LITE_AI_DIR}/include/MNN
)
# copy MNN headers
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LITE_AI_ROOT_DIR}/third_party/include/MNN ${BUILD_LITE_AI_DIR}/include/MNN
COMMAND ${CMAKE_COMMAND} -E echo "Installing MNN headers to ${BUILD_LITE_AI_DIR}/include/MNN ... done!"
)
endif()
if (ENABLE_NCNN)
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_LITE_AI_DIR}/include/ncnn
)
# copy ncnn headers
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LITE_AI_ROOT_DIR}/third_party/include/ncnn ${BUILD_LITE_AI_DIR}/include/ncnn
COMMAND ${CMAKE_COMMAND} -E echo "Installing NCNN headers to ${BUILD_LITE_AI_DIR}/include/ncnn ... done!"
)
endif()
if (ENABLE_TNN)
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_LITE_AI_DIR}/include/tnn
)
# copy TNN headers
add_custom_command(TARGET lite.ai.toolkit
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LITE_AI_ROOT_DIR}/third_party/include/tnn ${BUILD_LITE_AI_DIR}/include/tnn
COMMAND ${CMAKE_COMMAND} -E echo "Installing TNN headers to ${BUILD_LITE_AI_DIR}/include/tnn ... done!"
)
endif()
endfunction()
function(add_lite_ai_toolkit_engines_libs_command)
# copy opencv libs
if (INCLUDE_OPENCV)
message("Installing OpenCV libs -> INCLUDE_OPENCV: ${INCLUDE_OPENCV} ...")
file(GLOB ALL_OpenCV_LIBS ${LITE_AI_ROOT_DIR}/lib/${PLATFORM_NAME}/*opencv*)
file(GLOB FFMPEG_AV_LIBS ${LITE_AI_ROOT_DIR}/lib/${PLATFORM_NAME}/*av*)
file(GLOB FFMPEG_SW_LIBS ${LITE_AI_ROOT_DIR}/lib/${PLATFORM_NAME}/*sw*)
file(INSTALL ${ALL_OpenCV_LIBS} DESTINATION ${LIBRARY_OUTPUT_PATH})
file(INSTALL ${FFMPEG_AV_LIBS} DESTINATION ${LIBRARY_OUTPUT_PATH})
file(INSTALL ${FFMPEG_SW_LIBS} DESTINATION ${LIBRARY_OUTPUT_PATH})
endif()
# copy onnxruntime libs
if (ENABLE_ONNXRUNTIME)
message("Installing ONNXRuntime libs -> ENABLE_ONNXRUNTIME: ${ENABLE_ONNXRUNTIME} ...")
file(GLOB ALL_ONNXRUNTIME_LIBS ${LITE_AI_ROOT_DIR}/lib/${PLATFORM_NAME}/*onnxruntime*)
file(INSTALL ${ALL_ONNXRUNTIME_LIBS} DESTINATION ${LIBRARY_OUTPUT_PATH})
endif()
# copy MNN libs
if (ENABLE_MNN)
message("Installing MNN libs -> ENABLE_MNN: ${ENABLE_MNN} ...")
file(GLOB ALL_MNN_LIBS ${LITE_AI_ROOT_DIR}/lib/${PLATFORM_NAME}/*MNN*)
file(INSTALL ${ALL_MNN_LIBS} DESTINATION ${LIBRARY_OUTPUT_PATH})
endif()
# copy NCNN libs
if (ENABLE_NCNN)
message("Installing NCNN libs -> ENABLE_NCNN: ${ENABLE_NCNN} ...")
file(GLOB ALL_NCNN_LIBS ${LITE_AI_ROOT_DIR}/lib/${PLATFORM_NAME}/*ncnn*)
file(INSTALL ${ALL_NCNN_LIBS} DESTINATION ${LIBRARY_OUTPUT_PATH})
endif()
# copy TNN libs
if (ENABLE_TNN)
message("Installing TNN libs -> ENABLE_TNN: ${ENABLE_TNN} ...")
file(GLOB ALL_TNN_LIBS ${LITE_AI_ROOT_DIR}/lib/${PLATFORM_NAME}/*TNN*)
file(INSTALL ${ALL_TNN_LIBS} DESTINATION ${LIBRARY_OUTPUT_PATH})
endif()
endfunction()
function(add_lite_ai_toolkit_test_custom_command)
if (LITE_AI_BUILD_TEST)
# copy opencv & lite.ai.toolkit & engines libs to bin directory
add_custom_command(TARGET lite.ai.toolkit
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBRARY_OUTPUT_PATH} ${EXECUTABLE_OUTPUT_PATH}
COMMAND ${CMAKE_COMMAND} -E echo "Installing all lite.ai.toolkit libs to ${EXECUTABLE_OUTPUT_PATH} ... done!"
)
endif()
endfunction()
function(add_lite_executable executable_name field)
add_executable(${executable_name} ${field}/test_${executable_name}.cpp)
target_link_libraries(${executable_name} lite.ai.toolkit) # link lite.ai.toolkit
message(">>>> Added Lite Executable: ${executable_name} !")
endfunction ()