Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 70 additions & 25 deletions libkineto/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

cmake_minimum_required(VERSION 3.22 FATAL_ERROR)
cmake_minimum_required(VERSION 3.24 FATAL_ERROR)
project(kineto VERSION 0.1 LANGUAGES CXX C)

#install libraries into correct locations on all platforms
Expand Down Expand Up @@ -52,46 +52,91 @@ endif()
# Set LIBKINETO_NOCUPTI to explicitly disable CUPTI
# Otherwise, CUPTI is disabled if not found
option(LIBKINETO_NOCUPTI "Disable CUPTI" OFF)
option(USE_CUPTI_SO "Use CUPTI as a shared library" ON)

find_package(CUDAToolkit)
if(NOT LIBKINETO_NOCUPTI)
if(NOT CUPTI_INCLUDE_DIR)
find_path(CUPTI_INCLUDE_DIR cupti.h PATHS
"${CUDAToolkit_LIBRARY_ROOT}/extras/CUPTI/include"
"${CUDAToolkit_LIBRARY_ROOT}"
"${CUDAToolkit_LIBRARY_ROOT}/include"
NO_DEFAULT_PATH)
endif()

if(NOT CUDA_cupti_LIBRARY)
find_library(CUDA_cupti_LIBRARY cupti PATHS
if (CUDAToolkit_LIBRARY_ROOT)
set(CUDA_PATHS
"${CUDAToolkit_LIBRARY_ROOT}"
"${CUDAToolkit_LIBRARY_ROOT}/extras/CUPTI/include"
"${CUDAToolkit_LIBRARY_ROOT}/extras/CUPTI/lib64"
"${CUDAToolkit_LIBRARY_ROOT}/include"
"${CUDAToolkit_LIBRARY_ROOT}/lib"
"${CUDAToolkit_LIBRARY_ROOT}/lib64"
)
endif()
if(NOT LIBKINETO_NOCUPTI AND CUDAToolkit_LIBRARY_ROOT)
if(NOT CUPTI_INCLUDE_DIR)
find_path(CUPTI_INCLUDE_DIR cupti.h PATHS ${CUDA_PATHS}
NO_DEFAULT_PATH)
endif()

if(CUDA_cupti_LIBRARY AND CUPTI_INCLUDE_DIR)
if(NOT USE_CUPTI_SO AND NOT CUDA_cupti_static_LIBRARY)
set(cupti_static_libs "cupti_static")
if(WIN32)
list(APPEND cupti_static_libs "cupti")
find_library(CUDA_cupti_static_LIBRARY cupti_static cupti PATHS ${CUDA_PATHS}
NO_DEFAULT_PATH)
endif()
endif()
if(CUDA_cupti_static_LIBRARY)
set(cupti_LIBRARY ${CUDA_cupti_static_LIBRARY})
endif()

if(USE_CUPTI_SO AND NOT CUDA_cupti_LIBRARY)
find_library(CUDA_cupti_LIBRARY cupti PATHS ${CUDA_PATHS}
NO_DEFAULT_PATH)
endif()
if(CUDA_cupti_LIBRARY)
set(cupti_LIBRARY ${CUDA_cupti_LIBRARY})
endif()

if(cupti_LIBRARY AND CUPTI_INCLUDE_DIR)
message(STATUS " CUPTI_INCLUDE_DIR = ${CUPTI_INCLUDE_DIR}")
message(STATUS " CUDA_cupti_LIBRARY = ${CUDA_cupti_LIBRARY}")
message(STATUS " CUDA_cupti_static_LIBRARY = ${CUDA_cupti_static_LIBRARY}")
message(STATUS "Found CUPTI")
if(NOT TARGET CUDA::cupti)
add_library(CUDA::cupti INTERFACE IMPORTED)
target_link_libraries(CUDA::cupti INTERFACE "${CUDA_cupti_LIBRARY}")
if(USE_CUPTI_SO)
set(cupti_target CUDA::cupti)
else()
set(cupti_target CUDA::cupti_static)
endif()
if(NOT TARGET ${cupti_target})
add_library(${cupti_target} INTERFACE IMPORTED)
target_link_libraries(${cupti_target} INTERFACE "${cupti_LIBRARY}")
endif()
target_include_directories(CUDA::cupti INTERFACE "${CUPTI_INCLUDE_DIR}")
target_include_directories(${cupti_target} INTERFACE "${CUPTI_INCLUDE_DIR}")

if(NOT USE_CUPTI_SO)
include(CMakePushCheckState)
include(CheckSourceRuns)
cmake_push_check_state(RESET)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} $<LINK_LIBRARY:WHOLE_ARCHIVE,${cupti_LIBRARY}>)

check_source_runs(CXX "#include <stdexcept>
int main() {
try {
throw std::runtime_error(\"error\");
} catch (...) {
return 0;
}
return 1;
}" EXCEPTIONS_WORK)
if(NOT EXCEPTIONS_WORK)
message(FATAL_ERROR
"Detected that statically linking against CUPTI causes exceptions to stop working. "
"See https://github.com/pytorch/pytorch/issues/57744 for more details. ")
endif()
cmake_pop_check_state()
endif()

else()
set(LIBKINETO_NOCUPTI ON CACHE BOOL "" FORCE)
message(STATUS "Could not find CUPTI library")
endif()
endif()
if(NOT TARGET CUDA::nvperf_host)
find_library(CUDA_NVPERF_HOST_LIB_PATH nvperf_host PATHS
"${CUDAToolkit_LIBRARY_ROOT}"
"${CUDAToolkit_LIBRARY_ROOT}/extras/CUPTI/lib64"
"${CUDAToolkit_LIBRARY_ROOT}/lib"
"${CUDAToolkit_LIBRARY_ROOT}/lib64"
if(NOT TARGET CUDA::nvperf_host AND CUDAToolkit_LIBRARY_ROOT)
find_library(CUDA_NVPERF_HOST_LIB_PATH nvperf_host PATHS ${CUDA_PATHS}
NO_DEFAULT_PATH)
if(CUDA_NVPERF_HOST_LIB_PATH)
message(STATUS "Found NVPERF: ${CUDA_NVPERF_HOST_LIB_PATH}")
Expand Down Expand Up @@ -247,8 +292,8 @@ if(NOT LIBKINETO_NOROCTRACER)
endif()

if(NOT LIBKINETO_NOCUPTI)
target_link_libraries(kineto PUBLIC CUDA::cupti CUDA::cudart CUDA::cuda_driver)
target_link_libraries(kineto_base PUBLIC CUDA::cupti CUDA::cudart CUDA::cuda_driver)
target_link_libraries(kineto PUBLIC ${cupti_target} CUDA::cudart CUDA::cuda_driver)
target_link_libraries(kineto_base PUBLIC ${cupti_target} CUDA::cudart CUDA::cuda_driver)
endif()
if(TARGET CUDA::nvperf_host)
target_link_libraries(kineto_base PUBLIC CUDA::nvperf_host)
Expand Down