mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-01 20:00:51 -05:00
@@ -76,6 +76,23 @@ endmacro()
|
||||
|
||||
# Run IPO/LTO test
|
||||
macro(_ipo_run_language_check language)
|
||||
set(_C_ext "c")
|
||||
set(_CXX_ext "cpp")
|
||||
set(_Fortran_ext "f")
|
||||
string(COMPARE EQUAL "${language}" "CUDA" is_cuda)
|
||||
|
||||
set(ext ${_${language}_ext})
|
||||
if(NOT "${ext}" STREQUAL "")
|
||||
set(copy_sources foo.${ext} main.${ext})
|
||||
elseif(is_cuda)
|
||||
if(_CMAKE_CUDA_IPO_SUPPORTED_BY_CMAKE)
|
||||
set("${X_RESULT}" YES PARENT_SCOPE)
|
||||
endif()
|
||||
return()
|
||||
else()
|
||||
message(FATAL_ERROR "Language not supported")
|
||||
endif()
|
||||
|
||||
set(testdir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/_CMakeLTOTest-${language}")
|
||||
|
||||
file(REMOVE_RECURSE "${testdir}")
|
||||
@@ -91,17 +108,6 @@ macro(_ipo_run_language_check language)
|
||||
|
||||
set(try_compile_src "${CMAKE_ROOT}/Modules/CheckIPOSupported")
|
||||
|
||||
set(_C_ext "c")
|
||||
set(_CXX_ext "cpp")
|
||||
set(_Fortran_ext "f")
|
||||
|
||||
set(ext ${_${language}_ext})
|
||||
if(NOT "${ext}" STREQUAL "")
|
||||
set(copy_sources foo.${ext} main.${ext})
|
||||
else()
|
||||
message(FATAL_ERROR "Language not supported")
|
||||
endif()
|
||||
|
||||
# Use:
|
||||
# * TRY_COMPILE_PROJECT_NAME
|
||||
# * CMAKE_VERSION
|
||||
@@ -211,6 +217,11 @@ function(check_ipo_supported)
|
||||
list(APPEND languages "C")
|
||||
endif()
|
||||
|
||||
list(FIND enabled_languages "CUDA" result)
|
||||
if(NOT result EQUAL -1)
|
||||
list(APPEND languages "CUDA")
|
||||
endif()
|
||||
|
||||
list(FIND enabled_languages "Fortran" result)
|
||||
if(NOT result EQUAL -1)
|
||||
list(APPEND languages "Fortran")
|
||||
@@ -219,7 +230,7 @@ function(check_ipo_supported)
|
||||
string(COMPARE EQUAL "${languages}" "" no_languages)
|
||||
if(no_languages)
|
||||
_ipo_not_supported(
|
||||
"no C/CXX/Fortran languages found in ENABLED_LANGUAGES global property"
|
||||
"no C/CXX/CUDA/Fortran languages found in ENABLED_LANGUAGES global property"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
@@ -227,7 +238,7 @@ function(check_ipo_supported)
|
||||
set(languages "${X_LANGUAGES}")
|
||||
|
||||
set(unsupported_languages "${languages}")
|
||||
list(REMOVE_ITEM unsupported_languages "C" "CXX" "Fortran")
|
||||
list(REMOVE_ITEM unsupported_languages "C" "CXX" "CUDA" "Fortran")
|
||||
string(COMPARE NOTEQUAL "${unsupported_languages}" "" has_unsupported)
|
||||
if(has_unsupported)
|
||||
_ipo_not_supported(
|
||||
|
||||
@@ -35,6 +35,10 @@ set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "cudadevrt;cudart_static")
|
||||
set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED "cudadevrt;cudart")
|
||||
set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_NONE "")
|
||||
|
||||
# Clang doesn't support CUDA device LTO
|
||||
set(_CMAKE_CUDA_IPO_SUPPORTED_BY_CMAKE NO)
|
||||
set(_CMAKE_CUDA_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
|
||||
|
||||
if(UNIX)
|
||||
list(APPEND CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "rt" "pthread" "dl")
|
||||
endif()
|
||||
|
||||
@@ -48,6 +48,13 @@ if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
|
||||
set(CMAKE_CUDA_DEPENDS_USE_COMPILER TRUE)
|
||||
endif()
|
||||
|
||||
if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 11.2)
|
||||
set(_CMAKE_CUDA_IPO_SUPPORTED_BY_CMAKE YES)
|
||||
set(_CMAKE_CUDA_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
|
||||
|
||||
set(CMAKE_CUDA_DEVICE_LINK_OPTIONS_IPO " -dlto")
|
||||
endif()
|
||||
|
||||
if(NOT "x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||
set(CMAKE_CUDA_COMPILE_OPTIONS_PIE -Xcompiler=-fPIE)
|
||||
set(CMAKE_CUDA_COMPILE_OPTIONS_PIC -Xcompiler=-fPIC)
|
||||
@@ -61,6 +68,7 @@ if(NOT "x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||
string(APPEND CMAKE_CUDA_FLAGS_MINSIZEREL_INIT " -O1 -DNDEBUG")
|
||||
string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
|
||||
endif()
|
||||
|
||||
set(CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS -shared)
|
||||
set(CMAKE_INCLUDE_SYSTEM_FLAG_CUDA -isystem=)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user