set(LIBONNXRUNTIME_VERSION 1.19.2) option(ONNXRUNTIME_ROOTDIR "onnxruntime root dir") set(ONNXRUNTIME_DIR_NAME "onnxruntime-${LIBONNXRUNTIME_VERSION}-${ANIRA_OPERATING_SYSTEM}-${CMAKE_SYSTEM_PROCESSOR}") set(ONNXRUNTIME_ROOTDIR ${CMAKE_CURRENT_SOURCE_DIR}/modules/${ONNXRUNTIME_DIR_NAME}) if(EXISTS ${ONNXRUNTIME_ROOTDIR}/) message(STATUS "ONNX-Runtime library found at ${ONNXRUNTIME_ROOTDIR}") else() file(MAKE_DIRECTORY ${ONNXRUNTIME_ROOTDIR}/) message(STATUS "ONNX-Runtime library not found - downloading pre-built library.") if(WIN32) set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME "onnxruntime-win-x64-${LIBONNXRUNTIME_VERSION}") set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_TYPE "zip") endif() if(UNIX AND NOT APPLE) if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME "onnxruntime-linux-aarch64-${LIBONNXRUNTIME_VERSION}") set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_TYPE "tgz") elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME "onnxruntime-linux-x64-${LIBONNXRUNTIME_VERSION}") set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_TYPE "tgz") elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME "onnxruntime-${LIBONNXRUNTIME_VERSION}-Linux-armv7l") set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_TYPE "tar.gz") endif() endif() if(UNIX AND APPLE) set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME "onnxruntime-osx-universal2-${LIBONNXRUNTIME_VERSION}") set(LIB_ONNXRUNTIME_PRE_BUILD_LIB_TYPE "tgz") endif() if(UNIX AND NOT APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") set(LIBONNXRUNTIME_URL https://github.com/faressc/onnxruntime-cpp-lib/releases/download/v${LIBONNXRUNTIME_VERSION}/${LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME}.${LIB_ONNXRUNTIME_PRE_BUILD_LIB_TYPE}) else() set(LIBONNXRUNTIME_URL https://github.com/microsoft/onnxruntime/releases/download/v${LIBONNXRUNTIME_VERSION}/${LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME}.${LIB_ONNXRUNTIME_PRE_BUILD_LIB_TYPE}) endif() message(STATUS "Downloading: ${LIBONNXRUNTIME_URL}") set(LIBONNXRUNTIME_PATH ${CMAKE_BINARY_DIR}/import/${LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME}.${LIB_ONNXRUNTIME_PRE_BUILD_LIB_TYPE}) file(DOWNLOAD ${LIBONNXRUNTIME_URL} ${LIBONNXRUNTIME_PATH} STATUS LIBONNXRUNTIME_DOWNLOAD_STATUS SHOW_PROGRESS) list(GET LIBONNXRUNTIME_DOWNLOAD_STATUS 0 LIBONNXRUNTIME_DOWNLOAD_STATUS_NO) if(UNIX AND NOT APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") execute_process( COMMAND tar -xzf ${LIBONNXRUNTIME_PATH} -C ${ONNXRUNTIME_ROOTDIR}/ WORKING_DIRECTORY ${ONNXRUNTIME_ROOTDIR}/) else() file(ARCHIVE_EXTRACT INPUT ${LIBONNXRUNTIME_PATH} DESTINATION ${ONNXRUNTIME_ROOTDIR}/) endif() if(EXISTS ${ONNXRUNTIME_ROOTDIR}/${LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME}/) file(COPY ${ONNXRUNTIME_ROOTDIR}/${LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME}/ DESTINATION ${ONNXRUNTIME_ROOTDIR}/) file(REMOVE_RECURSE ${ONNXRUNTIME_ROOTDIR}/${LIB_ONNXRUNTIME_PRE_BUILD_LIB_NAME}) endif() if(LIBONNXRUNTIME_DOWNLOAD_STATUS_NO) message(STATUS "Pre-built library not downloaded. Error occurred, try again and check cmake/SetupOnnxRuntime.cmake") file(REMOVE_RECURSE ${ONNXRUNTIME_ROOTDIR}) file(REMOVE ${LIBONNXRUNTIME_PATH}) else() message(STATUS "Linking downloaded ONNX-Runtime pre-built library.") endif() endif() set(ANIRA_ONNXRUNTIME_SHARED_LIB_PATH "${ONNXRUNTIME_ROOTDIR}") # Set the variable in the parent scope as well get_directory_property(hasParent PARENT_DIRECTORY) if(hasParent) set(ANIRA_ONNXRUNTIME_SHARED_LIB_PATH "${ANIRA_ONNXRUNTIME_SHARED_LIB_PATH}" PARENT_SCOPE) endif() if(UNIX AND NOT APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") list(APPEND BACKEND_BUILD_HEADER_DIRS "${ONNXRUNTIME_ROOTDIR}/include/onnxruntime") else() list(APPEND BACKEND_BUILD_HEADER_DIRS "${ONNXRUNTIME_ROOTDIR}/include") endif() list(APPEND BACKEND_BUILD_LIBRARY_DIRS "${ONNXRUNTIME_ROOTDIR}/lib")