# 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() ## 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 ".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") # 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) set_target_properties(${example_target} PROPERTIES CUDA_SEPARABLE_COMPILATION ON ) endif() add_test(NAME ${example_target} COMMAND "$" ) endfunction() add_subdirectory(block) add_subdirectory(device)