|
|
@@ -106,6 +106,11 @@
|
|
|
# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME and
|
|
|
# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS should be called.
|
|
|
#
|
|
|
+# CUDA_USE_STATIC_CUDA_RUNTIME (Default ON)
|
|
|
+# -- When enabled the static version of the CUDA runtime library will be used
|
|
|
+# in CUDA_LIBRARIES. If the version of CUDA configured doesn't support
|
|
|
+# this option, then it will be silently disabled.
|
|
|
+#
|
|
|
# CUDA_VERBOSE_BUILD (Default OFF)
|
|
|
# -- Set to ON to see all the commands used when building the CUDA file. When
|
|
|
# using a Makefile generator the value defaults to VERBOSE (run make
|
|
|
@@ -272,6 +277,8 @@
|
|
|
# CUDA_CUBLAS_LIBRARIES -- Device or emulation library for the Cuda BLAS
|
|
|
# implementation (alterative to:
|
|
|
# CUDA_ADD_CUBLAS_TO_TARGET macro).
|
|
|
+# CUDA_cudart_static_LIBRARY -- Statically linkable cuda runtime library.
|
|
|
+# Only available for CUDA version 5.5+
|
|
|
# CUDA_cupti_LIBRARY -- CUDA Profiling Tools Interface library.
|
|
|
# Only available for CUDA version 4.0+.
|
|
|
# CUDA_curand_LIBRARY -- CUDA Random Number Generation library.
|
|
|
@@ -518,11 +525,12 @@ macro(cuda_unset_include_and_libraries)
|
|
|
# This only existed in the 3.0 version of the CUDA toolkit
|
|
|
unset(CUDA_CUDARTEMU_LIBRARY CACHE)
|
|
|
endif()
|
|
|
- unset(CUDA_cupti_LIBRARY CACHE)
|
|
|
+ unset(CUDA_cudart_static_LIBRARY CACHE)
|
|
|
unset(CUDA_cublas_LIBRARY CACHE)
|
|
|
unset(CUDA_cublasemu_LIBRARY CACHE)
|
|
|
unset(CUDA_cufft_LIBRARY CACHE)
|
|
|
unset(CUDA_cufftemu_LIBRARY CACHE)
|
|
|
+ unset(CUDA_cupti_LIBRARY CACHE)
|
|
|
unset(CUDA_curand_LIBRARY CACHE)
|
|
|
unset(CUDA_cusolver_LIBRARY CACHE)
|
|
|
unset(CUDA_cusparse_LIBRARY CACHE)
|
|
|
@@ -532,6 +540,8 @@ macro(cuda_unset_include_and_libraries)
|
|
|
unset(CUDA_npps_LIBRARY CACHE)
|
|
|
unset(CUDA_nvcuvenc_LIBRARY CACHE)
|
|
|
unset(CUDA_nvcuvid_LIBRARY CACHE)
|
|
|
+
|
|
|
+ unset(CUDA_USE_STATIC_CUDA_RUNTIME CACHE)
|
|
|
endmacro()
|
|
|
|
|
|
# Check to see if the CUDA_TOOLKIT_ROOT_DIR and CUDA_SDK_ROOT_DIR have changed,
|
|
|
@@ -539,8 +549,8 @@ endmacro()
|
|
|
if(NOT "${CUDA_TOOLKIT_ROOT_DIR}" STREQUAL "${CUDA_TOOLKIT_ROOT_DIR_INTERNAL}")
|
|
|
unset(CUDA_TOOLKIT_TARGET_DIR CACHE)
|
|
|
unset(CUDA_NVCC_EXECUTABLE CACHE)
|
|
|
- unset(CUDA_VERSION CACHE)
|
|
|
cuda_unset_include_and_libraries()
|
|
|
+ unset(CUDA_VERSION CACHE)
|
|
|
endif()
|
|
|
|
|
|
if(NOT "${CUDA_TOOLKIT_TARGET_DIR}" STREQUAL "${CUDA_TOOLKIT_TARGET_DIR_INTERNAL}")
|
|
|
@@ -696,6 +706,53 @@ if(CUDA_VERSION VERSION_EQUAL "3.0")
|
|
|
CUDA_CUDARTEMU_LIBRARY
|
|
|
)
|
|
|
endif()
|
|
|
+if(NOT CUDA_VERSION VERSION_LESS "5.5")
|
|
|
+ cuda_find_library_local_first(CUDA_cudart_static_LIBRARY cudart_static "static CUDA runtime library")
|
|
|
+ mark_as_advanced(CUDA_cudart_static_LIBRARY)
|
|
|
+endif()
|
|
|
+if(CUDA_cudart_static_LIBRARY)
|
|
|
+ # Set whether to use the static cuda runtime.
|
|
|
+ option(CUDA_USE_STATIC_CUDA_RUNTIME "Use the static version of the CUDA runtime library if available" ON)
|
|
|
+else()
|
|
|
+ option(CUDA_USE_STATIC_CUDA_RUNTIME "Use the static version of the CUDA runtime library if available" OFF)
|
|
|
+endif()
|
|
|
+
|
|
|
+if(CUDA_USE_STATIC_CUDA_RUNTIME)
|
|
|
+ if(UNIX)
|
|
|
+ # Check for the dependent libraries. Here we look for pthreads.
|
|
|
+ if (DEFINED CMAKE_THREAD_PREFER_PTHREAD)
|
|
|
+ set(_cuda_cmake_thread_prefer_pthread ${CMAKE_THREAD_PREFER_PTHREAD})
|
|
|
+ endif()
|
|
|
+ set(CMAKE_THREAD_PREFER_PTHREAD 1)
|
|
|
+
|
|
|
+ # Many of the FindXYZ CMake comes with makes use of try_compile with int main(){return 0;}
|
|
|
+ # as the source file. Unfortunately this causes a warning with -Wstrict-prototypes and
|
|
|
+ # -Werror causes the try_compile to fail. We will just temporarily disable other flags
|
|
|
+ # when doing the find_package command here.
|
|
|
+ set(_cuda_cmake_c_flags ${CMAKE_C_FLAGS})
|
|
|
+ set(CMAKE_C_FLAGS "-fPIC")
|
|
|
+ find_package(Threads REQUIRED)
|
|
|
+ set(CMAKE_C_FLAGS ${_cuda_cmake_c_flags})
|
|
|
+
|
|
|
+ if (DEFINED _cuda_cmake_thread_prefer_pthread)
|
|
|
+ set(CMAKE_THREAD_PREFER_PTHREAD ${_cuda_cmake_thread_prefer_pthread})
|
|
|
+ unset(_cuda_cmake_thread_prefer_pthread)
|
|
|
+ else()
|
|
|
+ unset(CMAKE_THREAD_PREFER_PTHREAD)
|
|
|
+ endif()
|
|
|
+ if (NOT APPLE)
|
|
|
+ # Here is librt that has things such as, clock_gettime, shm_open, and shm_unlink.
|
|
|
+ find_library(CUDA_rt_LIBRARY rt)
|
|
|
+ find_library(CUDA_dl_LIBRARY dl)
|
|
|
+ if (NOT CUDA_rt_LIBRARY)
|
|
|
+ message(WARNING "Expecting to find librt for libcudart_static, but didn't find it.")
|
|
|
+ endif()
|
|
|
+ if (NOT CUDA_dl_LIBRARY)
|
|
|
+ message(WARNING "Expecting to find libdl for libcudart_static, but didn't find it.")
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+endif()
|
|
|
|
|
|
# CUPTI library showed up in cuda toolkit 4.0
|
|
|
if(NOT CUDA_VERSION VERSION_LESS "4.0")
|
|
|
@@ -703,12 +760,32 @@ if(NOT CUDA_VERSION VERSION_LESS "4.0")
|
|
|
mark_as_advanced(CUDA_cupti_LIBRARY)
|
|
|
endif()
|
|
|
|
|
|
+# Set the CUDA_LIBRARIES variable. This is the set of stuff to link against if you are
|
|
|
+# using the CUDA runtime. For the dynamic version of the runtime, most of the
|
|
|
+# dependencies are brough in, but for the static version there are additional libraries
|
|
|
+# and linker commands needed.
|
|
|
+# Initialize to empty
|
|
|
+set(CUDA_LIBRARIES)
|
|
|
+
|
|
|
# If we are using emulation mode and we found the cudartemu library then use
|
|
|
# that one instead of cudart.
|
|
|
if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY)
|
|
|
- set(CUDA_LIBRARIES ${CUDA_CUDARTEMU_LIBRARY})
|
|
|
+ list(APPEND CUDA_LIBRARIES ${CUDA_CUDARTEMU_LIBRARY})
|
|
|
+elseif(CUDA_USE_STATIC_CUDA_RUNTIME AND CUDA_cudart_static_LIBRARY)
|
|
|
+ list(APPEND CUDA_LIBRARIES ${CUDA_cudart_static_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
|
|
|
+ if (CUDA_rt_LIBRARY)
|
|
|
+ list(APPEND CUDA_LIBRARIES ${CUDA_rt_LIBRARY})
|
|
|
+ endif()
|
|
|
+ if (CUDA_dl_LIBRARY)
|
|
|
+ list(APPEND CUDA_LIBRARIES ${CUDA_dl_LIBRARY})
|
|
|
+ endif()
|
|
|
+ if(APPLE)
|
|
|
+ # We need to add the default path to the driver (libcuda.dylib) as an rpath, so that
|
|
|
+ # the static cuda runtime can find it at runtime.
|
|
|
+ list(APPEND CUDA_LIBRARIES -Wl,-rpath,/usr/local/cuda/lib)
|
|
|
+ endif()
|
|
|
else()
|
|
|
- set(CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})
|
|
|
+ list(APPEND CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})
|
|
|
endif()
|
|
|
|
|
|
# 1.1 toolkit on linux doesn't appear to have a separate library on
|