Spaces:
Runtime error
Runtime error
File size: 6,710 Bytes
be11144 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# 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() |