camenduru's picture
thanks to nvidia ❤
8ae5fc5
# Test that an installation of the project can be located by find_package() call
# with appropriate prefix settings.
#
# Expects THRUST_BINARY_DIR to be set to an existing thrust build directory.
cmake_minimum_required(VERSION 3.15)
project(ThrustTestInstall CXX CUDA)
# This will eventually get deleted recursively -- keep that in mind if modifying
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/install_prefix/")
function(do_manual_install)
# Inspired by the VTK-m install tests, we can just glob up all of the
# cmake_install.cmake, include (ie. run) them, and they'll effectively
# install the project into the current value of CMAKE_INSTALL_PREFIX.
# Gather all of the install files from Thrust's root:
file(GLOB_RECURSE install_files
LIST_DIRECTORIES False
"${THRUST_BINARY_DIR}/cmake_install.cmake"
)
message(STATUS "Locating install files...")
foreach (install_file IN LISTS install_files)
message(STATUS " * ${install_file}")
endforeach()
message(STATUS "Building install tree...")
foreach(install_file IN LISTS install_files)
include("${install_file}")
endforeach()
endfunction()
function(do_cleanup)
message(STATUS "Removing ${CMAKE_INSTALL_PREFIX}")
file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}")
endfunction()
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()
function(find_installed_project)
set(CMAKE_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}")
find_package(Thrust CONFIG COMPONENTS CPP CUDA)
if (NOT Thrust_FOUND)
message(FATAL_ERROR
"find_package(Thrust) failed. "
"CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
)
endif()
# Test some internal config vars to check that this is the expected install:
# TODO The cmake_path (3.19) command will provide more robust ways to do this
# Escape regex special characters in the install prefix, see
# https://gitlab.kitware.com/cmake/cmake/-/issues/18580
string(REGEX REPLACE "([][+.*()^])" "\\\\\\1"
prefix_regex
"${CMAKE_INSTALL_PREFIX}"
)
if (NOT _THRUST_INCLUDE_DIR MATCHES "^${prefix_regex}")
message(FATAL_ERROR
"Found Thrust in unexpected location: "
" * _THRUST_INCLUDE_DIR=${_THRUST_INCLUDE_DIR} "
" * ExpectedPrefix=${CMAKE_INSTALL_DIR}"
)
endif()
if (NOT _CUB_INCLUDE_DIR MATCHES "^${prefix_regex}")
message(FATAL_ERROR
"Found CUB in unexpected location: "
" * _CUB_INCLUDE_DIR=${_CUB_INCLUDE_DIR} "
" * ExpectedPrefix=${CMAKE_INSTALL_DIR}"
)
endif()
thrust_create_target(Thrust)
assert_target(Thrust)
assert_target(CUB::CUB)
assert_target(Thrust::CPP::Host)
assert_target(Thrust::CUDA::Device)
thrust_update_system_found_flags()
assert_boolean(THRUST_CPP_FOUND TRUE)
assert_boolean(THRUST_CUDA_FOUND TRUE)
assert_boolean(THRUST_OMP_FOUND FALSE)
assert_boolean(THRUST_TBB_FOUND FALSE)
endfunction()
do_cleanup() # Prepare for new installation
do_manual_install()
find_installed_project()
do_cleanup() # Clean up if successful