Skip to content

Add support for staticly linking nvrtc starting CUDA 11.5 #3236

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 31, 2022
Merged
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
57 changes: 36 additions & 21 deletions src/backend/cuda/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,24 @@ set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};${cuda_architecture_flags})

find_cuda_helper_libs(nvrtc)
find_cuda_helper_libs(nvrtc-builtins)
list(APPEND nvrtc_libs ${CUDA_nvrtc_LIBRARY})

if(UNIX AND AF_WITH_STATIC_CUDA_NUMERIC_LIBS)
af_find_static_cuda_libs(culibos)
af_find_static_cuda_libs(cublas_static PRUNE)
af_find_static_cuda_libs(cublasLt_static PRUNE)
af_find_static_cuda_libs(cufft_static)
af_find_static_cuda_libs(cusparse_static PRUNE)

if(CUDA_VERSION VERSION_GREATER 11.4)
af_find_static_cuda_libs(nvrtc_static)
af_find_static_cuda_libs(nvrtc-builtins_static)
af_find_static_cuda_libs(nvptxcompiler_static)
set(nvrtc_libs ${AF_CUDA_nvrtc_static_LIBRARY}
${AF_CUDA_nvrtc-builtins_static_LIBRARY}
${AF_CUDA_nvptxcompiler_static_LIBRARY})
endif()

# FIXME When NVCC resolves this particular issue.
# NVCC doesn't like -l<full_path_static_lib>, hence we cannot
# use ${CMAKE_*_LIBRARY} variables in the following flags.
Expand Down Expand Up @@ -328,9 +339,10 @@ if(UNIX AND AF_WITH_STATIC_CUDA_NUMERIC_LIBS)
${START_GROUP}
${CUDA_culibos_LIBRARY} #also a static libary
${AF_CUDA_cublas_static_LIBRARY}
${AF_CUDA_cublasLt_static_LIBRARY}
${AF_CUDA_cufft_static_LIBRARY}
${AF_CUDA_cusparse_static_LIBRARY}
${AF_CUDA_cublasLt_static_LIBRARY}
${nvrtc_libs}
${cusolver_static_lib}
${END_GROUP}
)
Expand All @@ -340,6 +352,7 @@ if(UNIX AND AF_WITH_STATIC_CUDA_NUMERIC_LIBS)
PRIVATE
${AF_CUDA_cublasLt_static_LIBRARY})
endif()

if(CUDA_VERSION VERSION_GREATER 9.5)
target_link_libraries(af_cuda_static_cuda_library
PRIVATE
Expand All @@ -355,6 +368,7 @@ else()
${CUDA_CUFFT_LIBRARIES}
${CUDA_cusolver_LIBRARY}
${CUDA_cusparse_LIBRARY}
${nvrtc_libs}
)
endif()

Expand Down Expand Up @@ -712,7 +726,6 @@ target_link_libraries(afcuda
cpp_api_interface
afcommon_interface
${CMAKE_DL_LIBS}
${CUDA_nvrtc_LIBRARY}
af_cuda_static_cuda_library
)

Expand Down Expand Up @@ -860,26 +873,28 @@ if(AF_INSTALL_STANDALONE)
afcu_collect_libs(cusolver)
endif()

afcu_collect_libs(nvrtc FULL_VERSION)
if(CUDA_VERSION VERSION_GREATER 10.0)
afcu_collect_libs(nvrtc-builtins FULL_VERSION)
else()
if(APPLE)
afcu_collect_libs(cudart)

get_filename_component(nvrtc_outpath "${dlib_path_prefix}/${PX}nvrtc-builtins.${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR}${SX}" REALPATH)
install(FILES ${nvrtc_outpath}
DESTINATION ${AF_INSTALL_BIN_DIR}
RENAME "${PX}nvrtc-builtins${SX}"
COMPONENT cuda_dependencies)
elseif(UNIX)
get_filename_component(nvrtc_outpath "${dlib_path_prefix}/${PX}nvrtc-builtins${SX}" REALPATH)
install(FILES ${nvrtc_outpath}
DESTINATION ${AF_INSTALL_LIB_DIR}
RENAME "${PX}nvrtc-builtins${SX}"
COMPONENT cuda_dependencies)
if(WIN32 OR CUDA_VERSION VERSION_LESS 11.5 OR NOT AF_WITH_STATIC_CUDA_NUMERIC_LIBS)
afcu_collect_libs(nvrtc FULL_VERSION)
if(CUDA_VERSION VERSION_GREATER 10.0)
afcu_collect_libs(nvrtc-builtins FULL_VERSION)
else()
afcu_collect_libs(nvrtc-builtins)
if(APPLE)
afcu_collect_libs(cudart)

get_filename_component(nvrtc_outpath "${dlib_path_prefix}/${PX}nvrtc-builtins.${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR}${SX}" REALPATH)
install(FILES ${nvrtc_outpath}
DESTINATION ${AF_INSTALL_BIN_DIR}
RENAME "${PX}nvrtc-builtins${SX}"
COMPONENT cuda_dependencies)
elseif(UNIX)
get_filename_component(nvrtc_outpath "${dlib_path_prefix}/${PX}nvrtc-builtins${SX}" REALPATH)
install(FILES ${nvrtc_outpath}
DESTINATION ${AF_INSTALL_LIB_DIR}
RENAME "${PX}nvrtc-builtins${SX}"
COMPONENT cuda_dependencies)
else()
afcu_collect_libs(nvrtc-builtins)
endif()
endif()
endif()
endif()
Expand Down