mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-29 20:14:01 +00:00
Use CMake's find package for CUDA libs (#19673)
### Description Answers issue #19640 More details are in the issue, basically I am changing all the include directory and link directory usage to CMake's `CUDA::*` targets
This commit is contained in:
parent
3cb81cdde2
commit
c20ced4132
8 changed files with 25 additions and 29 deletions
|
|
@ -1412,6 +1412,10 @@ endif()
|
|||
if (onnxruntime_USE_CUDA)
|
||||
set(CMAKE_CUDA_RUNTIME_LIBRARY Shared)
|
||||
set(CMAKE_CUDA_STANDARD 17)
|
||||
if(onnxruntime_CUDA_HOME)
|
||||
file(TO_CMAKE_PATH CUDAToolkit_ROOT ${onnxruntime_CUDA_HOME})
|
||||
endif()
|
||||
find_package(CUDAToolkit REQUIRED)
|
||||
if(onnxruntime_CUDNN_HOME)
|
||||
file(TO_CMAKE_PATH ${onnxruntime_CUDNN_HOME} onnxruntime_CUDNN_HOME)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ endif()
|
|||
|
||||
|
||||
macro(check_nvcc_compiler_flag _FLAG _RESULT)
|
||||
execute_process(COMMAND ${onnxruntime_CUDA_HOME}/bin/nvcc "${_FLAG}" RESULT_VARIABLE NVCC_OUT ERROR_VARIABLE NVCC_ERROR)
|
||||
execute_process(COMMAND ${CUDAToolkit_BIN_DIR}/nvcc "${_FLAG}" RESULT_VARIABLE NVCC_OUT ERROR_VARIABLE NVCC_ERROR)
|
||||
message("NVCC_ERROR = ${NVCC_ERROR}")
|
||||
message("NVCC_OUT = ${NVCC_OUT}")
|
||||
if ("${NVCC_OUT}" MATCHES "0")
|
||||
|
|
|
|||
|
|
@ -556,16 +556,15 @@ message("Finished fetching external dependencies")
|
|||
set(onnxruntime_LINK_DIRS )
|
||||
if (onnxruntime_USE_CUDA)
|
||||
#TODO: combine onnxruntime_CUDNN_HOME and onnxruntime_CUDA_HOME, assume they are the same
|
||||
find_package(CUDAToolkit REQUIRED)
|
||||
if (WIN32)
|
||||
if(onnxruntime_CUDNN_HOME)
|
||||
list(APPEND onnxruntime_LINK_DIRS ${onnxruntime_CUDNN_HOME}/lib ${onnxruntime_CUDNN_HOME}/lib/x64)
|
||||
endif()
|
||||
list(APPEND onnxruntime_LINK_DIRS ${onnxruntime_CUDA_HOME}/x64/lib64)
|
||||
else()
|
||||
if(onnxruntime_CUDNN_HOME)
|
||||
list(APPEND onnxruntime_LINK_DIRS ${onnxruntime_CUDNN_HOME}/lib ${onnxruntime_CUDNN_HOME}/lib64)
|
||||
endif()
|
||||
list(APPEND onnxruntime_LINK_DIRS ${onnxruntime_CUDA_HOME}/lib64)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
|
|
|||
|
|
@ -178,15 +178,16 @@
|
|||
add_dependencies(${target} onnxruntime_providers_shared ${onnxruntime_EXTERNAL_DEPENDENCIES})
|
||||
if(onnxruntime_CUDA_MINIMAL)
|
||||
target_compile_definitions(${target} PRIVATE USE_CUDA_MINIMAL)
|
||||
target_link_libraries(${target} PRIVATE ${ABSEIL_LIBS} ${ONNXRUNTIME_PROVIDERS_SHARED} Boost::mp11 safeint_interface)
|
||||
target_link_libraries(${target} PRIVATE ${ABSEIL_LIBS} ${ONNXRUNTIME_PROVIDERS_SHARED} Boost::mp11 safeint_interface CUDA::cudart)
|
||||
else()
|
||||
target_link_libraries(${target} PRIVATE cublasLt cublas cudnn curand cufft ${ABSEIL_LIBS} ${ONNXRUNTIME_PROVIDERS_SHARED} Boost::mp11 safeint_interface)
|
||||
target_link_libraries(${target} PRIVATE CUDA::cublasLt CUDA::cublas cudnn CUDA::curand CUDA::cufft CUDA::cudart
|
||||
${ABSEIL_LIBS} ${ONNXRUNTIME_PROVIDERS_SHARED} Boost::mp11 safeint_interface)
|
||||
if(onnxruntime_CUDNN_HOME)
|
||||
target_include_directories(${target} PRIVATE ${onnxruntime_CUDNN_HOME}/include)
|
||||
target_link_directories(${target} PRIVATE ${onnxruntime_CUDNN_HOME}/lib)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
if (onnxruntime_USE_TRITON_KERNEL)
|
||||
# compile triton kernel, generate .a and .h files
|
||||
include(onnxruntime_compile_triton_kernel.cmake)
|
||||
|
|
@ -196,25 +197,24 @@
|
|||
target_include_directories(${target} PRIVATE ${triton_kernel_header_dir})
|
||||
target_link_libraries(${target} PUBLIC -Wl,--whole-archive ${triton_kernel_obj_file} -Wl,--no-whole-archive)
|
||||
# lib cuda needed by cuLaunchKernel
|
||||
target_link_libraries(${target} PRIVATE cuda)
|
||||
target_link_libraries(${target} PRIVATE CUDA::cuda_driver)
|
||||
endif()
|
||||
|
||||
include(cutlass)
|
||||
target_include_directories(${target} PRIVATE ${cutlass_SOURCE_DIR}/include ${cutlass_SOURCE_DIR}/examples)
|
||||
|
||||
target_include_directories(${target} PRIVATE ${ONNXRUNTIME_ROOT} ${CMAKE_CURRENT_BINARY_DIR} ${eigen_INCLUDE_DIRS} ${TVM_INCLUDES} PUBLIC ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
|
||||
target_include_directories(${target} PRIVATE ${ONNXRUNTIME_ROOT} ${CMAKE_CURRENT_BINARY_DIR} ${eigen_INCLUDE_DIRS} ${TVM_INCLUDES}
|
||||
PUBLIC ${CUDAToolkit_INCLUDE_DIRS})
|
||||
# ${CMAKE_CURRENT_BINARY_DIR} is so that #include "onnxruntime_config.h" inside tensor_shape.h is found
|
||||
set_target_properties(${target} PROPERTIES LINKER_LANGUAGE CUDA)
|
||||
set_target_properties(${target} PROPERTIES FOLDER "ONNXRuntime")
|
||||
|
||||
if (onnxruntime_ENABLE_CUDA_PROFILING) # configure cupti for cuda profiling
|
||||
target_include_directories(${target} PRIVATE ${onnxruntime_CUDA_HOME}/extras/CUPTI/include)
|
||||
target_link_directories(${target} PRIVATE ${onnxruntime_CUDA_HOME}/extras/CUPTI/lib64)
|
||||
target_link_libraries(${target} PRIVATE cupti)
|
||||
target_link_libraries(${target} PRIVATE CUDA::cupti)
|
||||
endif()
|
||||
|
||||
if (onnxruntime_ENABLE_NVTX_PROFILE AND NOT WIN32)
|
||||
target_link_libraries(${target} PRIVATE nvToolsExt)
|
||||
if (onnxruntime_ENABLE_NVTX_PROFILE)
|
||||
target_link_libraries(${target} PRIVATE CUDA::nvtx3)
|
||||
endif()
|
||||
|
||||
if (onnxruntime_ENABLE_TRAINING_OPS)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
set(BUILD_LIBRARY_ONLY 1)
|
||||
add_definitions("-DONNX_ML=1")
|
||||
add_definitions("-DONNX_NAMESPACE=onnx")
|
||||
set(CUDA_INCLUDE_DIRS ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
|
||||
set(CUDA_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIRS})
|
||||
set(TENSORRT_ROOT ${onnxruntime_TENSORRT_HOME})
|
||||
set(OLD_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
set(PROTOBUF_LIBRARY ${PROTOBUF_LIB})
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
URL_HASH SHA1=${DEP_SHA1_onnx_tensorrt}
|
||||
)
|
||||
if (NOT CUDA_INCLUDE_DIR)
|
||||
set(CUDA_INCLUDE_DIR ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) # onnx-tensorrt repo needs this variable to build
|
||||
set(CUDA_INCLUDE_DIR ${CUDAToolkit_INCLUDE_DIRS}) # onnx-tensorrt repo needs this variable to build
|
||||
endif()
|
||||
# The onnx_tensorrt repo contains a test program, getSupportedAPITest, which doesn't support Windows. It uses
|
||||
# unistd.h. So we must exclude it from our build. onnxruntime_fetchcontent_makeavailable is for the purpose.
|
||||
|
|
@ -102,11 +102,12 @@
|
|||
onnxruntime_add_include_to_target(onnxruntime_providers_tensorrt onnxruntime_common onnx flatbuffers::flatbuffers Boost::mp11 safeint_interface)
|
||||
add_dependencies(onnxruntime_providers_tensorrt onnxruntime_providers_shared ${onnxruntime_EXTERNAL_DEPENDENCIES})
|
||||
if (onnxruntime_USE_TENSORRT_BUILTIN_PARSER)
|
||||
target_link_libraries(onnxruntime_providers_tensorrt PRIVATE ${trt_link_libs} cudart ${ONNXRUNTIME_PROVIDERS_SHARED} ${PROTOBUF_LIB} flatbuffers::flatbuffers Boost::mp11 safeint_interface ${ABSEIL_LIBS})
|
||||
target_link_libraries(onnxruntime_providers_tensorrt PRIVATE ${trt_link_libs} ${ONNXRUNTIME_PROVIDERS_SHARED} ${PROTOBUF_LIB} flatbuffers::flatbuffers Boost::mp11 safeint_interface ${ABSEIL_LIBS} PUBLIC CUDA::cudart)
|
||||
else()
|
||||
target_link_libraries(onnxruntime_providers_tensorrt PRIVATE ${onnxparser_link_libs} ${trt_link_libs} cudart ${ONNXRUNTIME_PROVIDERS_SHARED} ${PROTOBUF_LIB} flatbuffers::flatbuffers ${ABSEIL_LIBS})
|
||||
target_link_libraries(onnxruntime_providers_tensorrt PRIVATE ${onnxparser_link_libs} ${trt_link_libs} ${ONNXRUNTIME_PROVIDERS_SHARED} ${PROTOBUF_LIB} flatbuffers::flatbuffers ${ABSEIL_LIBS} PUBLIC CUDA::cudart)
|
||||
endif()
|
||||
target_include_directories(onnxruntime_providers_tensorrt PRIVATE ${ONNXRUNTIME_ROOT} ${CMAKE_CURRENT_BINARY_DIR} ${eigen_INCLUDE_DIRS} PUBLIC ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
|
||||
target_include_directories(onnxruntime_providers_tensorrt PRIVATE ${ONNXRUNTIME_ROOT} ${CMAKE_CURRENT_BINARY_DIR} ${eigen_INCLUDE_DIRS}
|
||||
PUBLIC ${CUDAToolkit_INCLUDE_DIRS})
|
||||
if(onnxruntime_CUDNN_HOME)
|
||||
target_include_directories(onnxruntime_providers_tensorrt PRIVATE ${onnxruntime_CUDNN_HOME}/include)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -282,10 +282,7 @@ if (WIN32)
|
|||
get_filename_component(CUDNN_DLL_NAME ${CUDNN_DLL_PATH} NAME_WE)
|
||||
string(REPLACE "cudnn64_" "" CUDNN_VERSION "${CUDNN_DLL_NAME}")
|
||||
if(NOT onnxruntime_CUDA_VERSION)
|
||||
message("Reading json file ${onnxruntime_CUDA_HOME}/version.json")
|
||||
set(CUDA_SDK_JSON_FILE_PATH "${onnxruntime_CUDA_HOME}/version.json")
|
||||
file(READ ${CUDA_SDK_JSON_FILE_PATH} CUDA_SDK_JSON_CONTENT)
|
||||
string(JSON onnxruntime_CUDA_VERSION GET ${CUDA_SDK_JSON_CONTENT} "cuda" "version")
|
||||
set(onnxruntime_CUDA_VERSION ${CUDAToolkit_VERSION})
|
||||
message("onnxruntime_CUDA_VERSION=${onnxruntime_CUDA_VERSION}")
|
||||
endif()
|
||||
file(APPEND "${VERSION_INFO_FILE}"
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ function(AddTest)
|
|||
if(onnxruntime_USE_CUDA)
|
||||
#XXX: we should not need to do this. onnxruntime_test_all.exe should not have direct dependency on CUDA DLLs,
|
||||
# otherwise it will impact when CUDA DLLs can be unloaded.
|
||||
target_link_libraries(${_UT_TARGET} PRIVATE cudart)
|
||||
target_link_libraries(${_UT_TARGET} PRIVATE CUDA::cudart)
|
||||
endif()
|
||||
target_link_libraries(${_UT_TARGET} PRIVATE ${_UT_LIBS} GTest::gtest GTest::gmock ${onnxruntime_EXTERNAL_LIBRARIES})
|
||||
endif()
|
||||
|
|
@ -1268,7 +1268,7 @@ if (NOT onnxruntime_ENABLE_TRAINING_TORCH_INTEROP)
|
|||
list(APPEND onnxruntime_shared_lib_test_LIBS cpuinfo)
|
||||
endif()
|
||||
if (onnxruntime_USE_CUDA)
|
||||
list(APPEND onnxruntime_shared_lib_test_LIBS cudart)
|
||||
list(APPEND onnxruntime_shared_lib_test_LIBS CUDA::cudart)
|
||||
endif()
|
||||
if (onnxruntime_USE_ROCM)
|
||||
list(APPEND onnxruntime_shared_lib_test_LIBS hip::host)
|
||||
|
|
|
|||
|
|
@ -4,13 +4,8 @@
|
|||
#ifdef ENABLE_NVTX_PROFILE
|
||||
#include "nvtx_profile.h"
|
||||
#include "core/common/common.h"
|
||||
#if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__)
|
||||
#include <nvtx3/nvToolsExt.h>
|
||||
#include <nvtx3/nvToolsExtCuda.h>
|
||||
#else
|
||||
#include <nvToolsExt.h>
|
||||
#include <nvToolsExtCuda.h>
|
||||
#endif
|
||||
|
||||
namespace onnxruntime {
|
||||
namespace profile {
|
||||
|
|
|
|||
Loading…
Reference in a new issue