Spaces:
Runtime error
Runtime error
# This example demonstrates / tests adding thrust via a CMake add_subdirectory | |
# call from a parent project. | |
# | |
# The variables THRUST_REQUIRED_SYSTEMS and THRUST_OPTIONAL_SYSTEMS must be | |
# set prior to add_subdirectory(thrust), and afterwards the thrust_create_target | |
# function may be used to create targets with the desired systems. See | |
# thrust/thrust/cmake/README.md for more details on thrust_create_target. | |
cmake_minimum_required(VERSION 3.15) | |
# Silence warnings about empty CUDA_ARCHITECTURES properties on example targets: | |
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.18) | |
cmake_policy(SET CMP0104 OLD) | |
endif() | |
project(ThrustAddSubDirExample CXX) | |
# Add required Thrust systems to THRUST_REQUIRED_SYSTEMS. | |
# Options are: CPP, CUDA, TBB or OMP. | |
# Multiple systems may be specified. | |
# An error is emitted if the system is not found. | |
set(THRUST_REQUIRED_SYSTEMS CPP) | |
# Add optional Thrust systems to THRUST_OPTIONAL_SYSTEMS. | |
# Options are: CPP, CUDA, TBB or OMP. | |
# Multiple systems may be specified. | |
# No error is emitted if not found. | |
set(THRUST_OPTIONAL_SYSTEMS CUDA) | |
# Use your project's checkout of Thrust here, for most cases | |
# `add_subdirectory(thrust)` will be sufficient. | |
add_subdirectory("${THRUST_DIR}" thrust) | |
# Create a thrust target that only uses the serial CPP backend. | |
# See thrust/thrust/cmake/README.md for details and additional options: | |
thrust_create_target(ThrustCPP HOST CPP DEVICE CPP) | |
# Create an executable that uses the CPP-only thrust target: | |
add_executable(ExecWithCPP dummy.cpp) | |
target_link_libraries(ExecWithCPP ThrustCPP) | |
# To test for optional systems, first call thrust_update_system_found_flags to | |
# set the THRUST_${system}_FOUND flags in current scope. | |
# Required due to CMake scoping rules. | |
thrust_update_system_found_flags() | |
# Create and use a Thrust target configured to use CUDA acceleration if CUDA | |
# is available: | |
if (THRUST_CUDA_FOUND) | |
enable_language(CUDA) | |
thrust_create_target(ThrustCUDA HOST CPP DEVICE CUDA) | |
add_executable(ExecWithCUDA dummy.cu) | |
target_link_libraries(ExecWithCUDA ThrustCUDA) | |
endif() | |
# | |
# Validation | |
# | |
function(assert_boolean var_name expect) | |
if (expect) | |
if (NOT ${var_name}) | |
message(FATAL_ERROR "'${var_name}' is false, expected true.") | |
endif() | |
else() | |
if (${var_name}) | |
message(FATAL_ERROR "'${var_name}' is true, expected false.") | |
endif() | |
endif() | |
endfunction() | |
function(assert_target target_name) | |
if (NOT TARGET "${target_name}") | |
message(FATAL_ERROR "Target '${target_name}' not defined.") | |
endif() | |
endfunction() | |
assert_boolean(THRUST_CPP_FOUND TRUE) | |
assert_boolean(THRUST_CUDA_FOUND TRUE) | |
assert_boolean(THRUST_OMP_FOUND FALSE) | |
assert_boolean(THRUST_TBB_FOUND FALSE) | |
assert_target(ThrustCPP) | |
assert_target(ThrustCUDA) | |
assert_target(ExecWithCPP) | |
assert_target(ExecWithCUDA) | |
thrust_debug_target(ThrustCPP "") | |
thrust_debug_target(ThrustCUDA "") | |
thrust_debug_target(ExecWithCPP "") | |
thrust_debug_target(ExecWithCUDA "") | |