@@ -55,21 +55,38 @@ Result Variables
55
55
function (rapids_cpm_thrust NAMESPACE namespaces_name)
56
56
list (APPEND CMAKE_MESSAGE_CONTEXT "rapids.cpm.thrust" )
57
57
58
+ set (options )
59
+ set (one_value BUILD_EXPORT_SET INSTALL_EXPORT_SET)
60
+ set (multi_value)
61
+ cmake_parse_arguments (_RAPIDS "${options} " "${one_value} " "${multi_value} " ${ARGN} )
62
+
63
+ set (enable_install OFF )
64
+ if (_RAPIDS_INSTALL_EXPORT_SET)
65
+ set (enable_install ON )
66
+ # Make sure we install thrust into the `include/rapids` subdirectory instead of the default
67
+ include (GNUInstallDirs)
68
+ set (CMAKE_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR} /rapids" )
69
+ endif ()
70
+
58
71
include ("${rapids-cmake-dir}/cpm/detail/package_details.cmake" )
59
72
rapids_cpm_package_details(Thrust version repository tag shallow exclude )
60
73
61
74
include ("${rapids-cmake-dir}/cpm/find.cmake" )
62
- rapids_cpm_find(Thrust ${version} ${ARGN }
75
+ rapids_cpm_find(Thrust ${version} ${_RAPIDS_UNPARSED_ARGUMENTS }
63
76
GLOBAL_TARGETS ${namespaces_name} ::Thrust
64
77
CPM_ARGS FIND_PACKAGE_ARGUMENTS EXACT
65
78
GIT_REPOSITORY ${repository}
66
79
GIT_TAG ${tag}
67
80
GIT_SHALLOW ${shallow}
68
81
EXCLUDE_FROM_ALL ${exclude}
69
- OPTIONS "THRUST_ENABLE_INSTALL_RULES OFF " )
82
+ OPTIONS "THRUST_ENABLE_INSTALL_RULES ${enable_install} " )
70
83
71
84
if (NOT TARGET ${namespaces_name} ::Thrust)
72
85
thrust_create_target(${namespaces_name} ::Thrust FROM_OPTIONS)
86
+ set_target_properties (${namespaces_name} ::Thrust PROPERTIES IMPORTED_NO_SYSTEM ON )
87
+ if (TARGET _Thrust_Thrust)
88
+ set_target_properties (_Thrust_Thrust PROPERTIES IMPORTED_NO_SYSTEM ON )
89
+ endif ()
73
90
endif ()
74
91
75
92
# Since `GLOBAL_TARGET ${namespaces_name}::Thrust` will list the target to be promoted to global
@@ -78,11 +95,6 @@ function(rapids_cpm_thrust NAMESPACE namespaces_name)
78
95
#
79
96
# So determine what `BUILD_EXPORT_SET` and `INSTALL_EXPORT_SET` this was added to and remove
80
97
# ${namespaces_name}::Thrust
81
- set (options CPM_ARGS)
82
- set (one_value BUILD_EXPORT_SET INSTALL_EXPORT_SET)
83
- set (multi_value)
84
- cmake_parse_arguments (_RAPIDS "${options} " "${one_value} " "${multi_value} " ${ARGN} )
85
-
86
98
if (_RAPIDS_BUILD_EXPORT_SET)
87
99
set (target_name rapids_export_build_${_RAPIDS_BUILD_EXPORT_SET} )
88
100
get_target_property (global_targets ${target_name} GLOBAL_TARGETS)
@@ -97,70 +109,6 @@ function(rapids_cpm_thrust NAMESPACE namespaces_name)
97
109
set_target_properties (${target_name} PROPERTIES GLOBAL_TARGETS "${global_targets} " )
98
110
endif ()
99
111
100
- # only install thrust when we have an in-source version
101
- if (Thrust_SOURCE_DIR AND _RAPIDS_INSTALL_EXPORT_SET AND NOT exclude )
102
- #[==[
103
- Projects such as cudf, and rmm require a newer versions of thrust than can be found in the oldest supported CUDA toolkit.
104
- This requires these components to install/packaged so that consumers use the same version. To make sure that the custom
105
- version of thrust is used over the CUDA toolkit version we need to ensure we always use an user include and not a system.
106
-
107
- By default if we allow thrust to install into `CMAKE_INSTALL_INCLUDEDIR` alongside rmm (or other pacakges)
108
- we will get a install tree that looks like this:
109
-
110
- install/include/rmm
111
- install/include/cub
112
- install/include/thrust
113
-
114
- This is a problem for CMake+NVCC due to the rules around import targets, and user/system includes. In this case both
115
- rmm and thrust will specify an include path of `install/include`, while thrust tries to mark it as an user include,
116
- since rmm uses CMake's default of system include. Compilers when provided the same include as both user and system
117
- always goes with system.
118
-
119
- Now while rmm could also mark `install/include` as system this just pushes the issue to another dependency which
120
- isn't built by RAPIDS and comes by and marks `install/include` as system.
121
-
122
- Instead the more reliable option is to make sure that we get thrust to be placed in an unique include path that
123
- to other project will use. In the case of rapids-cmake we install the headers to `include/rapids/thrust`
124
- #]==]
125
- include (GNUInstallDirs)
126
- install (DIRECTORY "${Thrust_SOURCE_DIR} /thrust"
127
- DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} /rapids/thrust/" FILES_MATCHING
128
- REGEX "\\ .(h|inl)$" )
129
- install (DIRECTORY "${Thrust_SOURCE_DIR} /dependencies/cub/cub"
130
- DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} /rapids/thrust/dependencies/" FILES_MATCHING
131
- PATTERN "*.cuh" )
132
-
133
- install (DIRECTORY "${Thrust_SOURCE_DIR} /thrust/cmake"
134
- DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} /rapids/thrust/thrust/" )
135
- install (DIRECTORY "${Thrust_SOURCE_DIR} /dependencies/cub/cub/cmake"
136
- DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} /rapids/thrust/dependencies/cub/" )
137
-
138
- include ("${rapids-cmake-dir}/cmake/install_lib_dir.cmake" )
139
- rapids_cmake_install_lib_dir(install_location) # Use the correct conda aware path
140
-
141
- # We need to install the forwarders in `lib/cmake/thrust` and `lib/cmake/cub`
142
- set (scratch_dir
143
- "${CMAKE_BINARY_DIR} /rapids-cmake/${_RAPIDS_INSTALL_EXPORT_SET} /install/scratch/" )
144
-
145
- file (WRITE "${scratch_dir} /thrust-config.cmake"
146
- [=[include("${CMAKE_CURRENT_LIST_DIR}/../../../include/rapids/thrust/thrust/cmake/thrust-config.cmake")]=]
147
- )
148
- file (WRITE "${scratch_dir} /thrust-config-version.cmake"
149
- [=[include("${CMAKE_CURRENT_LIST_DIR}/../../../include/rapids/thrust/thrust/cmake/thrust-config-version.cmake")]=]
150
- )
151
- install (FILES "${scratch_dir} /thrust-config.cmake" "${scratch_dir} /thrust-config-version.cmake"
152
- DESTINATION "${install_location} /cmake/thrust" )
153
-
154
- file (WRITE "${scratch_dir} /cub-config.cmake"
155
- [=[include("${CMAKE_CURRENT_LIST_DIR}/../../../include/rapids/thrust/dependencies/cub/cub-config.cmake")]=]
156
- )
157
- file (WRITE "${scratch_dir} /cub-config-version.cmake"
158
- [=[include("${CMAKE_CURRENT_LIST_DIR}/../../../include/rapids/thrust/dependencies/cub/cub-config-version.cmake")]=]
159
- )
160
- install (FILES "${scratch_dir} /cub-config.cmake" "${scratch_dir} /cub-config-version.cmake"
161
- DESTINATION "${install_location} /cmake/cub" )
162
- endif ()
163
-
164
112
# Propagate up variables that CPMFindPackage provide
165
113
set (Thrust_SOURCE_DIR "${Thrust_SOURCE_DIR} " PARENT_SCOPE)
166
114
set (Thrust_BINARY_DIR "${Thrust_BINARY_DIR} " PARENT_SCOPE)
0 commit comments