| # Create meta targets that build all examples for a single configuration: | |
| foreach(cub_target IN LISTS CUB_TARGETS) | |
| cub_get_target_property(config_prefix ${cub_target} PREFIX) | |
| set(config_meta_target ${config_prefix}.examples) | |
| add_custom_target(${config_meta_target}) | |
| add_dependencies(${config_prefix}.all ${config_meta_target}) | |
| endforeach() | |
| # Update flags to reflect RDC options. See note in CubCudaConfig.cmake -- | |
| # these flag variables behave unintuitively: | |
| if (CUB_ENABLE_EXAMPLES_WITH_RDC) | |
| set(CMAKE_CUDA_FLAGS "${CUB_CUDA_FLAGS_BASE} ${CUB_CUDA_FLAGS_RDC}") | |
| else() | |
| set(CMAKE_CUDA_FLAGS "${CUB_CUDA_FLAGS_BASE} ${CUB_CUDA_FLAGS_NO_RDC}") | |
| endif() | |
| ## cub_add_example | |
| # | |
| # Add an example executable and register it with ctest. | |
| # | |
| # target_name_var: Variable name to overwrite with the name of the example | |
| # target. Useful for post-processing target information per-backend. | |
| # example_name: The name of the example minus "<config_prefix>.example." For | |
| # instance, examples/vector.cu will be "vector", and examples/cuda/copy.cu | |
| # would be "cuda.copy". | |
| # example_src: The source file that implements the example. | |
| # cub_target: The reference cub target with configuration information. | |
| # | |
| function(cub_add_example target_name_var example_name example_src cub_target) | |
| cub_get_target_property(config_prefix ${cub_target} PREFIX) | |
| # The actual name of the test's target: | |
| set(example_target ${config_prefix}.example.${example_name}) | |
| set(${target_name_var} ${example_target} PARENT_SCOPE) | |
| # Related target names: | |
| set(config_meta_target ${config_prefix}.examples) | |
| set(example_meta_target cub.all.example.${example_name}) | |
| add_executable(${example_target} "${example_src}") | |
| target_link_libraries(${example_target} ${cub_target}) | |
| cub_clone_target_properties(${example_target} ${cub_target}) | |
| target_include_directories(${example_target} PRIVATE "${CUB_SOURCE_DIR}/examples") | |
| if (CUB_IN_THRUST) | |
| thrust_fix_clang_nvcc_build_for(${example_target}) | |
| endif() | |
| # Add to the active configuration's meta target | |
| add_dependencies(${config_meta_target} ${example_target}) | |
| # Meta target that builds examples with this name for all configurations: | |
| if (NOT TARGET ${example_meta_target}) | |
| add_custom_target(${example_meta_target}) | |
| endif() | |
| add_dependencies(${example_meta_target} ${example_target}) | |
| if (CUB_ENABLE_EXAMPLES_WITH_RDC) | |
| cub_enable_rdc_for_cuda_target(${example_target}) | |
| endif() | |
| add_test(NAME ${example_target} | |
| COMMAND "$<TARGET_FILE:${example_target}>" | |
| ) | |
| endfunction() | |
| add_subdirectory(cmake) | |
| add_subdirectory(block) | |
| add_subdirectory(device) | |