112 строки
4.3 KiB
CMake
112 строки
4.3 KiB
CMake
include(FindModuleHelpers)
|
|
|
|
set(RELATIVE_WIN_LIB_DIR "sdk/windows-desktop/amd64/release/lib")
|
|
set(RELATIVE_WIN_BIN_DIR "sdk/windows-desktop/amd64/release/bin")
|
|
|
|
set(RELATIVE_WIN_K4ABT_LIB_PATH "${RELATIVE_WIN_LIB_DIR}/k4abt.lib")
|
|
|
|
set(RELATIVE_WIN_K4ABT_DLL_PATH "${RELATIVE_WIN_BIN_DIR}/k4abt.dll")
|
|
set(RELATIVE_WIN_DNN_MODEL_PATH "${RELATIVE_WIN_BIN_DIR}/dnn_model_2_0.onnx")
|
|
set(RELATIVE_WIN_ONNX_RUNTIME_DLL_PATH "${RELATIVE_WIN_BIN_DIR}/onnxruntime.dll")
|
|
|
|
# K4A BT versions have exactly 3 components: major.minor.rev
|
|
if (NOT (FIND_VERSION_COUNT EQUAL 3))
|
|
message(FATAL_ERROR "Error: Azure Kinect Body Tracking SDK Version numbers contain exactly 3 components (major.minor.rev). Requested number of components: ${FIND_VERSION_COUNT}")
|
|
endif()
|
|
|
|
# On Linux, we should find k4abt installed to the system path
|
|
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
|
|
|
|
set(_exact_arg )
|
|
if (FIND_VERSION_EXACT)
|
|
set(_exact_arg EXACT)
|
|
endif()
|
|
|
|
set(_quiet_arg )
|
|
if (FIND_QUIETLY)
|
|
set(_quiet_arg QUIET)
|
|
endif()
|
|
|
|
set(_required_arg )
|
|
if (FIND_REQUIRED)
|
|
set(_required_arg REQUIRED)
|
|
endif()
|
|
|
|
find_package(k4abt ${FIND_VERSION} ${_exact_arg} ${_quiet_arg} ${_required_arg} NO_MODULE)
|
|
|
|
# On Windows, we will have to find K4A Body Tracking installed in Program Files.
|
|
# We also cannot do any version checking on Windows
|
|
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
|
|
|
# Windows always needs installation
|
|
set(K4A_INSTALL_NEEDED TRUE)
|
|
|
|
set(_sdk_dir "C:/Program Files/Azure Kinect Body Tracking SDK")
|
|
|
|
# Get a list of SDK's installed in Program Files
|
|
if(EXISTS ${_sdk_dir})
|
|
set(_k4abt_lib_path "${_sdk_dir}/${RELATIVE_WIN_K4ABT_LIB_PATH}")
|
|
if(NOT EXISTS "${_k4abt_lib_path}")
|
|
quiet_message(WARNING "Rejecting SDK located at ${_sdk_dir}: Could not find k4abt.lib at ${_k4abt_lib_path}")
|
|
return()
|
|
endif()
|
|
|
|
set(_k4abt_bin_path "${_sdk_dir}/${RELATIVE_WIN_K4ABT_DLL_PATH}")
|
|
if(NOT EXISTS "${_k4abt_bin_path}")
|
|
quiet_message(WARNING "Rejecting SDK located at ${_sdk_dir}: Could not find k4abt.dll at ${_k4abt_bin_path}")
|
|
return()
|
|
endif()
|
|
|
|
set(_dnn_model_path "${_sdk_dir}/${RELATIVE_WIN_DNN_MODEL_PATH}")
|
|
if(NOT EXISTS "${_dnn_model_path}")
|
|
quiet_message(WARNING "Rejecting SDK located at ${_sdk_dir}: Could not find dnn_model_2_0.onnx at ${_dnn_model_path}")
|
|
return()
|
|
endif()
|
|
|
|
set(_onnx_runtime_bin_path "${_sdk_dir}/${RELATIVE_WIN_ONNX_RUNTIME_DLL_PATH}")
|
|
if(NOT EXISTS "${_onnx_runtime_bin_path}")
|
|
quiet_message(WARNING "Rejecting SDK located at ${_sdk_dir}: Could not find onnxruntime.dll at ${_onnx_runtime_bin_path}")
|
|
return()
|
|
endif()
|
|
|
|
if (FIND_EXACT)
|
|
message(FATAL_ERROR "Cannot find EXACT versions of the Azure Kinect Body Tracking SDK on Windows as no version information is available.")
|
|
endif()
|
|
|
|
add_library(k4abt::k4abt SHARED IMPORTED GLOBAL)
|
|
|
|
target_include_directories(
|
|
k4abt::k4abt
|
|
INTERFACE
|
|
${_sdk_dir}/sdk/include
|
|
)
|
|
|
|
set_property(TARGET k4abt::k4abt PROPERTY IMPORTED_CONFIGURATIONS "")
|
|
set_property(TARGET k4abt::k4abt PROPERTY IMPORTED_LOCATION "${_k4abt_bin_path}")
|
|
set_property(TARGET k4abt::k4abt PROPERTY IMPORTED_IMPLIB "${_k4abt_lib_path}")
|
|
|
|
# Mark the depthengine as a requirement for running k4a.dll
|
|
set_property(TARGET k4abt::k4abt PROPERTY IMPORTED_LINK_DEPENDENT_LIBRARIES "${_dnn_model_path};${_onnx_runtime_bin_path}")
|
|
|
|
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND TRUE)
|
|
set(${CMAKE_FIND_PACKAGE_NAME}_VERSION ${FIND_VERSION})
|
|
else()
|
|
|
|
set(_message_type WARNING)
|
|
if (FIND_REQUIRED)
|
|
set(_message_type FATAL_ERROR)
|
|
endif()
|
|
|
|
# Print this message if FIND_REQURIED since it is mandatory to produce a fatal error, or
|
|
# print a warning if we weren't asked to be quiet
|
|
if(FIND_REQUIRED OR (NOT FIND_QUIETLY))
|
|
message(${_message_type} "Could not find a compatible Azure Kinect Body Tracking SDK installed in Program Files")
|
|
endif()
|
|
|
|
return()
|
|
endif()
|
|
|
|
else()
|
|
message(FATAL_ERROR "Unknown host system: ${CMAKE_HOST_SYSTEM_NAME}")
|
|
endif()
|