From aab1f6e984e81f732ec2dd5c33ff8f7bf604a0f2 Mon Sep 17 00:00:00 2001 From: Stephen Sorley Date: Thu, 11 Aug 2016 15:20:17 -0400 Subject: [PATCH 1/2] FindCUDA: Restore default behavior of CUDA_USE_STATIC_CUDA_RUNTIME Fix bug introduced by commit 7229ae72 (FindCUDA: Refactor Android(Tegra) support, 2016-04-19). `CUDA_USE_STATIC_CUDA_RUNTIME` should be enabled by default if `cudart_static` is available, and silently disabled if it is not. --- Modules/FindCUDA.cmake | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake index d7c9d8a9e..972068b08 100644 --- a/Modules/FindCUDA.cmake +++ b/Modules/FindCUDA.cmake @@ -779,18 +779,19 @@ if(CUDA_VERSION VERSION_EQUAL "3.0") ) endif() -if(CUDA_USE_STATIC_CUDA_RUNTIME AND NOT CUDA_VERSION VERSION_LESS "5.5") +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. + # If static cudart available, use it by default, but provide a user-visible option to disable it. option(CUDA_USE_STATIC_CUDA_RUNTIME "Use the static version of the CUDA runtime library if available" ON) set(CUDA_CUDART_LIBRARY_VAR CUDA_cudart_static_LIBRARY) else() - option(CUDA_USE_STATIC_CUDA_RUNTIME "Use the static version of the CUDA runtime library if available" OFF) + # If not available, silently disable the option. + set(CUDA_USE_STATIC_CUDA_RUNTIME OFF CACHE INTERNAL "") set(CUDA_CUDART_LIBRARY_VAR CUDA_CUDART_LIBRARY) endif() From 1aa5c1bec82537ccbff8e05ae989b8befbdd286e Mon Sep 17 00:00:00 2001 From: Stephen Sorley Date: Thu, 11 Aug 2016 15:54:28 -0400 Subject: [PATCH 2/2] FindCUDA: Fix missing librt on Linux when using static cuda runtime. Commit 7229ae72 (FindCUDA: Refactor Android(Tegra) support, 2016-04-19) changed the logic to only add librt to the link line for CUDA versions 6.5 and older. However, newer versions of CUDA still require librt. --- Modules/FindCUDA.cmake | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake index 972068b08..78b716d35 100644 --- a/Modules/FindCUDA.cmake +++ b/Modules/FindCUDA.cmake @@ -818,12 +818,13 @@ if(CUDA_USE_STATIC_CUDA_RUNTIME) else() unset(CMAKE_THREAD_PREFER_PTHREAD) endif() - endif() - if (UNIX AND NOT APPLE AND CUDA_VERSION VERSION_LESS "7.0") - # Before CUDA 7.0, there was librt that has things such as, clock_gettime, shm_open, and shm_unlink. - find_library(CUDA_rt_LIBRARY rt) - if (NOT CUDA_rt_LIBRARY) - message(WARNING "Expecting to find librt for libcudart_static, but didn't find it.") + + if(NOT APPLE) + #On Linux, you must link against librt when using the static cuda runtime. + find_library(CUDA_rt_LIBRARY rt) + if (NOT CUDA_rt_LIBRARY) + message(WARNING "Expecting to find librt for libcudart_static, but didn't find it.") + endif() endif() endif() endif()