Spaces:
Runtime error
Runtime error
# Support adding Thrust to a parent project via add_subdirectory. | |
# See examples/cmake/add_subdir/CMakeLists.txt for details. | |
if (NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_LIST_DIR}") | |
include(cmake/ThrustAddSubdir.cmake) | |
return() | |
endif() | |
# 3.15 is the minimum. | |
# 3.17 for nvc++/Feta | |
# 3.18 for C++17 + CUDA | |
cmake_minimum_required(VERSION 3.15) | |
# Remove this when we use the new CUDA_ARCHITECTURES properties with both | |
# nvcc and nvc++. | |
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.18) | |
cmake_policy(SET CMP0104 OLD) | |
endif() | |
project(Thrust NONE) | |
include(cmake/AppendOptionIfAvailable.cmake) | |
include(cmake/ThrustBuildCompilerTargets.cmake) | |
include(cmake/ThrustBuildTargetList.cmake) | |
include(cmake/ThrustMultiConfig.cmake) | |
include(cmake/ThrustInstallRules.cmake) | |
include(cmake/ThrustUtilities.cmake) | |
option(THRUST_ENABLE_HEADER_TESTING "Test that all public headers compile." "ON") | |
option(THRUST_ENABLE_TESTING "Build Thrust testing suite." "ON") | |
option(THRUST_ENABLE_EXAMPLES "Build Thrust examples." "ON") | |
option(THRUST_INCLUDE_CUB_CMAKE "Build CUB tests and examples. (Requires CUDA)." "OFF") | |
# Check if we're actually building anything before continuing. If not, no need | |
# to search for deps, etc. This is a common approach for packagers that just | |
# need the install rules. See GH issue thrust/thrust#1211. | |
if (NOT (THRUST_ENABLE_HEADER_TESTING OR | |
THRUST_ENABLE_TESTING OR | |
THRUST_ENABLE_EXAMPLES OR | |
THRUST_INCLUDE_CUB_CMAKE)) | |
return() | |
endif() | |
# Add cache string options for CMAKE_BUILD_TYPE and default to RelWithDebInfo. | |
if ("" STREQUAL "${CMAKE_BUILD_TYPE}") | |
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE) | |
set_property( | |
CACHE CMAKE_BUILD_TYPE | |
PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel | |
) | |
endif () | |
# Disable compiler extensions: | |
set(CMAKE_CXX_EXTENSIONS OFF) | |
# Where to put build outputs. Use CMAKE_BINARY_DIR so they'll show up in the | |
# top-level project's dir when building Thrust via add_subdirectory. | |
set(THRUST_LIBRARY_OUTPUT_DIR "${CMAKE_BINARY_DIR}/lib") | |
set(THRUST_EXECUTABLE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/bin") | |
# Temporary hacks to make Feta work; this requires you to define | |
# `CMAKE_CUDA_COMPILER_ID=Feta` and `CMAKE_CUDA_COMPILER_FORCED`. | |
if ("Feta" STREQUAL "${CMAKE_CUDA_COMPILER_ID}") | |
# If using Feta, don't set CXX compiler | |
if (NOT "${CMAKE_CXX_COMPILER}" STREQUAL "") | |
unset(CMAKE_CXX_COMPILER CACHE) | |
message(FATAL_ERROR "You are using Feta as your CUDA C++ compiler, but have" | |
" specified a different ISO C++ compiler; Feta acts as both, so please" | |
" unset the CMAKE_CXX_COMPILER variable.") | |
endif () | |
# We don't set CMAKE_CUDA_HOST_COMPILER for Feta; if we do, CMake tries to | |
# pass `-ccbin ${CMAKE_CUDA_HOST_COMPILER}` to Feta, which it doesn't | |
# understand. | |
if (NOT "${CMAKE_CUDA_HOST_COMPILER}" STREQUAL "") | |
unset(CMAKE_CUDA_HOST_COMPILER CACHE) | |
message(FATAL_ERROR "You are using Feta as your CUDA C++ compiler, but have" | |
" specified a different host ISO C++ compiler; Feta acts as both, so" | |
" please unset the CMAKE_CUDA_HOST_COMPILER variable.") | |
endif () | |
set(CMAKE_CXX_COMPILER "${CMAKE_CUDA_COMPILER}") | |
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -stdpar") | |
set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${CMAKE_CUDA_COMPILER}") | |
set(CMAKE_CUDA_LINK_EXECUTABLE | |
"<CMAKE_CUDA_HOST_LINK_LAUNCHER> ${CMAKE_CUDA_FLAGS} <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>") | |
endif () | |
# This must appear after any changes to CMAKE_CXX_COMPILER or else CMake will | |
# delete the cache and reconfigure from scratch. | |
enable_language(CXX) | |
# We don't set CMAKE_CUDA_HOST_COMPILER for Feta; if we do, CMake tries to | |
# pass `-ccbin ${CMAKE_CUDA_HOST_COMPILER}` to Feta, which it doesn't | |
# understand. | |
if (NOT "Feta" STREQUAL "${CMAKE_CUDA_COMPILER_ID}") | |
if (NOT ("${CMAKE_CUDA_HOST_COMPILER}" STREQUAL "" OR | |
"${CMAKE_CUDA_HOST_COMPILER}" STREQUAL "${CMAKE_CXX_COMPILER}")) | |
unset(CMAKE_CUDA_HOST_COMPILER CACHE) | |
message(FATAL_ERROR "Thrust tests and examples require the C++ compiler" | |
" and the CUDA host compiler to be the same; to set this compiler, please" | |
" use the CMAKE_CXX_COMPILER variable, not the CMAKE_CUDA_HOST_COMPILER" | |
" variable.") | |
endif () | |
set(CMAKE_CUDA_HOST_COMPILER "${CMAKE_CXX_COMPILER}") | |
endif () | |
# Temporary hacks to make Feta work; this requires you to define | |
# `CMAKE_CUDA_COMPILER_ID=Feta` and `CMAKE_CUDA_COMPILER_FORCED`. | |
if ("Feta" STREQUAL "${CMAKE_CUDA_COMPILER_ID}") | |
# Need 3.17 for the properties used below. | |
cmake_minimum_required(VERSION 3.17) | |
set(CMAKE_CUDA_STANDARD_DEFAULT 03) | |
set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "-std=c++03") | |
set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "-std=c++03") | |
set(CMAKE_CUDA03_STANDARD__HAS_FULL_SUPPORT TRUE) | |
set_property(GLOBAL PROPERTY CMAKE_CUDA03_KNOWN_FEATURES) | |
set(CMAKE_CUDA11_STANDARD_COMPILE_OPTION "-std=c++11") | |
set(CMAKE_CUDA11_EXTENSION_COMPILE_OPTION "-std=c++11") | |
set(CMAKE_CUDA11_STANDARD__HAS_FULL_SUPPORT TRUE) | |
set_property(GLOBAL PROPERTY CMAKE_CUDA11_KNOWN_FEATURES) | |
set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "-std=c++14") | |
set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "-std=c++14") | |
set(CMAKE_CUDA14_STANDARD__HAS_FULL_SUPPORT TRUE) | |
set_property(GLOBAL PROPERTY CMAKE_CUDA14_KNOWN_FEATURES) | |
set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "-std=c++17") | |
set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "-std=c++17") | |
set(CMAKE_CUDA17_STANDARD__HAS_FULL_SUPPORT TRUE) | |
set_property(GLOBAL PROPERTY CMAKE_CUDA17_KNOWN_FEATURES) | |
cmake_record_cuda_compile_features() | |
set(CMAKE_CUDA_COMPILE_FEATURES | |
${CMAKE_CUDA03_COMPILE_FEATURES} | |
${CMAKE_CUDA11_COMPILE_FEATURES} | |
${CMAKE_CUDA14_COMPILE_FEATURES} | |
${CMAKE_CUDA17_COMPILE_FEATURES} | |
${CMAKE_CUDA20_COMPILE_FEATURES} | |
) | |
endif () | |
thrust_configure_multiconfig() | |
thrust_build_target_list() | |
thrust_update_system_found_flags() | |
message(STATUS "CPP system found? ${THRUST_CPP_FOUND}") | |
message(STATUS "CUDA system found? ${THRUST_CUDA_FOUND}") | |
message(STATUS "TBB system found? ${THRUST_TBB_FOUND}") | |
message(STATUS "OMP system found? ${THRUST_OMP_FOUND}") | |
if (THRUST_CUDA_FOUND) | |
include(cmake/ThrustCudaConfig.cmake) | |
endif() | |
if (THRUST_ENABLE_HEADER_TESTING) | |
include(cmake/ThrustHeaderTesting.cmake) | |
endif() | |
# Both testing and examples use ctest | |
if (THRUST_ENABLE_TESTING OR THRUST_ENABLE_EXAMPLES) | |
include(CTest) | |
enable_testing() | |
endif() | |
if (THRUST_ENABLE_TESTING) | |
add_subdirectory(testing) | |
endif() | |
if (THRUST_ENABLE_EXAMPLES) | |
add_subdirectory(examples) | |
endif() | |
if (THRUST_INCLUDE_CUB_CMAKE AND THRUST_CUDA_FOUND) | |
set(CUB_IN_THRUST ON) | |
add_subdirectory(dependencies/cub) | |
endif() | |