mirror of
https://github.com/NVIDIA/nvbench.git
synced 2026-03-14 20:27:24 +00:00
72 lines
2.6 KiB
CMake
72 lines
2.6 KiB
CMake
# Since this file is installed, we need to make sure that the CUDAToolkit has
|
|
# been found by consumers:
|
|
if (NOT TARGET CUDA::toolkit)
|
|
find_package(CUDAToolkit REQUIRED)
|
|
endif()
|
|
|
|
set(nvbench_cupti_root "${CUDAToolkit_LIBRARY_ROOT}/extras/CUPTI")
|
|
|
|
# The CUPTI targets in FindCUDAToolkit are broken:
|
|
# - The dll locations are not specified
|
|
# - Dependent libraries nvperf_* are not linked.
|
|
# So we create our own targets:
|
|
function(nvbench_add_cupti_dep dep_name)
|
|
string(TOLOWER ${dep_name} dep_name_lower)
|
|
string(TOUPPER ${dep_name} dep_name_upper)
|
|
|
|
add_library(nvbench::${dep_name_lower} SHARED IMPORTED)
|
|
|
|
if (WIN32)
|
|
# Attempt to locate the dll in the expected location. This is necessary
|
|
# because the CUPTI dll has a versioned suffix, so we can't directly search
|
|
# for it with find_file.
|
|
file(GLOB dep_dll_path "${nvbench_cupti_root}/lib64/${dep_name_lower}*dll")
|
|
cmake_path(GET dep_dll_path FILENAME dep_dll_filename)
|
|
|
|
# If the dll was not found in the expected location, use a default filename as a user hint.
|
|
if (NOT dep_dll_filename)
|
|
set(dep_dll_filename ${dep_name_lower}.dll)
|
|
endif()
|
|
|
|
# Use find_file to create a cache variable and mark the file as REQUIRED.
|
|
find_file(NVBench_${dep_name_upper}_DLL ${dep_dll_filename} REQUIRED
|
|
DOC "The full path to ${dep_name_lower}.dll from the CUDA Toolkit."
|
|
HINTS "${nvbench_cupti_root}/lib64/"
|
|
)
|
|
mark_as_advanced(NVBench_${dep_name_upper}_DLL)
|
|
|
|
# The .libs don't have suffixes, so we can just directly search for them.
|
|
find_library(NVBench_${dep_name_upper}_LIBRARY ${dep_name_lower}.lib REQUIRED
|
|
DOC "The full path to ${dep_name_lower}.lib from the CUDA Toolkit."
|
|
HINTS "${nvbench_cupti_root}/lib64/"
|
|
)
|
|
mark_as_advanced(NVBench_${dep_name_upper}_LIBRARY)
|
|
|
|
set_target_properties(nvbench::${dep_name_lower} PROPERTIES
|
|
IMPORTED_LOCATION "${NVBench_${dep_name_upper}_DLL}"
|
|
IMPORTED_IMPLIB "${NVBench_${dep_name_upper}_LIBRARY}"
|
|
)
|
|
else()
|
|
find_library(NVBench_${dep_name_upper}_LIBRARY ${dep_name_lower} REQUIRED
|
|
DOC "The full path to lib${dep_name_lower}.so from the CUDA Toolkit."
|
|
HINTS "${nvbench_cupti_root}/lib64"
|
|
)
|
|
mark_as_advanced(NVBench_${dep_name_upper}_LIBRARY)
|
|
|
|
set_target_properties(nvbench::${dep_name_lower} PROPERTIES
|
|
IMPORTED_LOCATION "${NVBench_${dep_name_upper}_LIBRARY}"
|
|
)
|
|
endif()
|
|
endfunction()
|
|
|
|
nvbench_add_cupti_dep(nvperf_target)
|
|
nvbench_add_cupti_dep(nvperf_host)
|
|
nvbench_add_cupti_dep(cupti)
|
|
target_link_libraries(nvbench::cupti INTERFACE
|
|
nvbench::nvperf_target
|
|
nvbench::nvperf_host
|
|
)
|
|
target_include_directories(nvbench::cupti INTERFACE
|
|
"${nvbench_cupti_root}/include"
|
|
)
|