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() | |