This repository has been archived by the owner on Mar 21, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 757
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix and add test for cmake config install rules.
- Loading branch information
1 parent
f6ca15c
commit dfbbd4f
Showing
7 changed files
with
149 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Submodule cub
updated
6 files
+8 −1 | cmake/CubInstallRules.cmake | |
+9 −2 | cub/cmake/cub-config-version.cmake | |
+5 −2 | cub/cmake/cub-config.cmake | |
+2 −0 | test/CMakeLists.txt | |
+15 −0 | test/cmake/CMakeLists.txt | |
+93 −0 | test/cmake/test_install/CMakeLists.txt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
thrust_update_system_found_flags() | ||
|
||
if (THRUST_CPP_FOUND AND THRUST_CUDA_FOUND) | ||
# Test that we can use `find_package` on an installed Thrust: | ||
add_test( | ||
NAME thrust.test.cmake.test_install | ||
COMMAND "${CMAKE_COMMAND}" | ||
--log-level=VERBOSE | ||
-G "${CMAKE_GENERATOR}" | ||
-S "${CMAKE_CURRENT_SOURCE_DIR}/test_install" | ||
-B "${CMAKE_CURRENT_BINARY_DIR}/test_install" | ||
-D "THRUST_BINARY_DIR=${Thrust_BINARY_DIR}" | ||
-D "CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" | ||
-D "CMAKE_CUDA_COMPILER=${CMAKE_CUDA_COMPILER}" | ||
-D "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" | ||
) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
# 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters