xref: /aosp_15_r20/external/pytorch/cmake/Modules/FindCUSPARSELT.cmake (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1# Find the CUSPARSELT library
2#
3# The following variables are optionally searched for defaults
4#  CUSPARSELT_ROOT: Base directory where CUSPARSELT is found
5#  CUSPARSELT_INCLUDE_DIR: Directory where CUSPARSELT header is searched for
6#  CUSPARSELT_LIBRARY: Directory where CUSPARSELT library is searched for
7#
8# The following are set after configuration is done:
9#  CUSPARSELT_FOUND
10#  CUSPARSELT_INCLUDE_PATH
11#  CUSPARSELT_LIBRARY_PATH
12
13include(FindPackageHandleStandardArgs)
14
15set(CUSPARSELT_ROOT $ENV{CUSPARSELT_ROOT_DIR} CACHE PATH "Folder containing NVIDIA cuSPARSELt")
16if (DEFINED $ENV{CUSPARSELT_ROOT_DIR})
17  message(WARNING "CUSPARSELT_ROOT_DIR is deprecated. Please set CUSPARSELT_ROOT instead.")
18endif()
19list(APPEND CUSPARSELT_ROOT $ENV{CUSPARSELT_ROOT_DIR} ${CUDA_TOOLKIT_ROOT_DIR})
20
21# Compatible layer for CMake <3.12. CUSPARSELT_ROOT will be accounted in for searching paths and libraries for CMake >=3.12.
22list(APPEND CMAKE_PREFIX_PATH ${CUSPARSELT_ROOT})
23
24set(CUSPARSELT_INCLUDE_DIR $ENV{CUSPARSELT_INCLUDE_DIR} CACHE PATH "Folder containing NVIDIA cuSPARSELt header files")
25
26find_path(CUSPARSELT_INCLUDE_PATH cusparseLt.h
27  HINTS ${CUSPARSELT_INCLUDE_DIR}
28  PATH_SUFFIXES cuda/include cuda include)
29
30set(CUSPARSELT_LIBRARY $ENV{CUSPARSELT_LIBRARY} CACHE PATH "Path to the cusparselt library file (e.g., libcusparseLt.so)")
31
32set(CUSPARSELT_LIBRARY_NAME "libcusparseLt.so")
33if(MSVC)
34  set(CUSPARSELT_LIBRARY_NAME "cusparseLt.lib")
35endif()
36
37find_library(CUSPARSELT_LIBRARY_PATH ${CUSPARSELT_LIBRARY_NAME}
38  PATHS ${CUSPARSELT_LIBRARY}
39  PATH_SUFFIXES lib lib64 cuda/lib cuda/lib64 lib/x64)
40
41find_package_handle_standard_args(CUSPARSELT DEFAULT_MSG CUSPARSELT_LIBRARY_PATH CUSPARSELT_INCLUDE_PATH)
42
43if(CUSPARSELT_FOUND)
44  # Get cuSPARSELt version
45  file(READ ${CUSPARSELT_INCLUDE_PATH}/cusparseLt.h CUSPARSELT_HEADER_CONTENTS)
46  string(REGEX MATCH "define CUSPARSELT_VER_MAJOR * +([0-9]+)"
47               CUSPARSELT_VERSION_MAJOR "${CUSPARSELT_HEADER_CONTENTS}")
48  string(REGEX REPLACE "define CUSPARSELT_VER_MAJOR * +([0-9]+)" "\\1"
49               CUSPARSELT_VERSION_MAJOR "${CUSPARSELT_VERSION_MAJOR}")
50  string(REGEX MATCH "define CUSPARSELT_VER_MINOR * +([0-9]+)"
51               CUSPARSELT_VERSION_MINOR "${CUSPARSELT_HEADER_CONTENTS}")
52  string(REGEX REPLACE "define CUSPARSELT_VER_MINOR * +([0-9]+)" "\\1"
53               CUSPARSELT_VERSION_MINOR "${CUSPARSELT_VERSION_MINOR}")
54  string(REGEX MATCH "define CUSPARSELT_VER_PATCH * +([0-9]+)"
55               CUSPARSELT_VERSION_PATCH "${CUSPARSELT_HEADER_CONTENTS}")
56  string(REGEX REPLACE "define CUSPARSELT_VER_PATCH * +([0-9]+)" "\\1"
57               CUSPARSELT_VERSION_PATCH "${CUSPARSELT_VERSION_PATCH}")
58  # Assemble cuSPARSELt version. Use minor version since current major version is 0.
59  if(NOT CUSPARSELT_VERSION_MINOR)
60    set(CUSPARSELT_VERSION "?")
61  else()
62    set(CUSPARSELT_VERSION
63        "${CUSPARSELT_VERSION_MAJOR}.${CUSPARSELT_VERSION_MINOR}.${CUSPARSELT_VERSION_PATCH}")
64  endif()
65endif()
66
67mark_as_advanced(CUSPARSELT_ROOT CUSPARSELT_INCLUDE_DIR CUSPARSELT_LIBRARY CUSPARSELT_VERSION)
68