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

185 lines
8.2 KiB
CMake
Raw Normal View History

2024-05-15 18:06:07 +08:00
# 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 ()