Skip to content
Merged
Show file tree
Hide file tree
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
16 changes: 4 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -175,21 +175,12 @@ endif()
# components under separate prefixes.
find_package(CUDAToolkit REQUIRED)
find_package(CUTENSOR REQUIRED)
find_package(CUFFT REQUIRED)

set(CUDECOMP_CUDART_TARGET CUDA::cudart)
set(CUDECOMP_CUTENSOR_TARGET CUTENSOR::CUTENSOR)
set(CUDECOMP_CUFFT_TARGET CUDA::cufft)
get_target_property(CUDECOMP_CUFFT_LIBRARY ${CUDECOMP_CUFFT_TARGET} IMPORTED_LOCATION)
get_filename_component(CUDECOMP_CUFFT_LIBRARY_DIR "${CUDECOMP_CUFFT_LIBRARY}" DIRECTORY)
get_filename_component(CUDECOMP_CUFFT_ROOT "${CUDECOMP_CUFFT_LIBRARY_DIR}" DIRECTORY)
find_path(CUDECOMP_CUFFT_INCLUDE_DIR
NAMES cufft.h
HINTS ${CUDAToolkit_INCLUDE_DIRS} "${CUDECOMP_CUFFT_ROOT}/include"
PATHS ENV CPATH
REQUIRED
)
unset(CUDECOMP_CUFFT_LIBRARY_DIR)
unset(CUDECOMP_CUFFT_ROOT)
set(CUDECOMP_CUFFT_TARGET CUFFT::CUFFT)
set(CUDECOMP_CUFFT_INCLUDE_DIR "${CUFFT_INCLUDE_DIR}")
set(CUDECOMP_CUDA_VERSION "${CUDAToolkit_VERSION_MAJOR}.${CUDAToolkit_VERSION_MINOR}")
set(CUDECOMP_CUDA_INCLUDE_DIR "${CUDAToolkit_INCLUDE_DIRS}")
foreach(CUDECOMP_CUDA_INCLUDE_ROOT IN LISTS CUDAToolkit_INCLUDE_DIRS)
Expand Down Expand Up @@ -315,6 +306,7 @@ endif()
message(STATUS " CUDA Toolkit: ${CUDAToolkit_LIBRARY_ROOT} (${CUDAToolkit_VERSION})")
message(STATUS " CUDA compute capabilities: ${CUDECOMP_CUDA_CC_LIST}")
message(STATUS " CUTENSOR: ${CUTENSOR_LIBRARY} (${CUTENSOR_VERSION})")
message(STATUS " cuFFT: ${CUFFT_LIBRARY}")
message(STATUS " NCCL: ${NCCL_LIBRARY} (${NCCL_VERSION})")
if (CUDECOMP_ENABLE_NVSHMEM)
message(STATUS " NVSHMEM host library: ${NVSHMEM_HOST_LIBRARY}")
Expand Down
59 changes: 59 additions & 0 deletions cmake/FindCUFFT.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0

include(FindPackageHandleStandardArgs)

# Older FindCUDAToolkit versions can find the CUDA runtime in NVHPC without
# finding cuFFT in the separate, versioned math_libs directory.
if (TARGET CUDA::cufft)
get_target_property(CUFFT_LIBRARY CUDA::cufft IMPORTED_LOCATION)
# Older FindCUDAToolkit versions use an interface target without a location.
if (NOT CUFFT_LIBRARY)
set(CUFFT_LIBRARY "${CUDA_cufft_LIBRARY}")
endif()
else()
set(_CUFFT_NVHPC_ROOT
"${CUDECOMP_NVHPC_SDK_ROOT}/math_libs/${CUDAToolkit_VERSION_MAJOR}.${CUDAToolkit_VERSION_MINOR}")
if (CUDECOMP_NVHPC_SDK_ROOT AND IS_DIRECTORY "${_CUFFT_NVHPC_ROOT}")
list(APPEND _CUFFT_PATHS "${_CUFFT_NVHPC_ROOT}")
endif()
find_library(CUFFT_LIBRARY
NAMES cufft
HINTS ${CUDAToolkit_LIBRARY_DIR}
PATHS ${_CUFFT_PATHS} ENV NVCOMPILER_MATH_LIBS_HOME ENV LIBRARY_PATH ENV LD_LIBRARY_PATH
PATH_SUFFIXES lib64 lib
)
endif()

if (CUFFT_LIBRARY)
get_filename_component(_CUFFT_LIBRARY_DIR "${CUFFT_LIBRARY}" DIRECTORY)
get_filename_component(_CUFFT_ROOT "${_CUFFT_LIBRARY_DIR}" DIRECTORY)
endif()
find_path(CUFFT_INCLUDE_DIR
NAMES cufft.h
HINTS "${_CUFFT_ROOT}/include" ${CUDAToolkit_INCLUDE_DIRS}
PATHS ${_CUFFT_PATHS} ENV NVCOMPILER_MATH_LIBS_HOME ENV CPATH
PATH_SUFFIXES include
)

find_package_handle_standard_args(CUFFT REQUIRED_VARS CUFFT_LIBRARY CUFFT_INCLUDE_DIR)

if (CUFFT_FOUND AND NOT TARGET CUFFT::CUFFT)
if (TARGET CUDA::cufft)
add_library(CUFFT::CUFFT INTERFACE IMPORTED)
set_target_properties(CUFFT::CUFFT PROPERTIES INTERFACE_LINK_LIBRARIES CUDA::cufft)
else()
add_library(CUFFT::CUFFT UNKNOWN IMPORTED)
set_target_properties(CUFFT::CUFFT PROPERTIES IMPORTED_LOCATION "${CUFFT_LIBRARY}")
endif()
set_target_properties(CUFFT::CUFFT PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${CUFFT_INCLUDE_DIR};${CUDAToolkit_INCLUDE_DIRS}"
)
endif()

mark_as_advanced(CUFFT_LIBRARY CUFFT_INCLUDE_DIR)
unset(_CUFFT_NVHPC_ROOT)
unset(_CUFFT_PATHS)
unset(_CUFFT_LIBRARY_DIR)
unset(_CUFFT_ROOT)
Loading