@@ -18,12 +18,12 @@ endif()
1818# - Download and initialize RAPIDS CMake helpers -----------------------------
1919
2020# Fetch rapids-cmake
21- if (NOT EXISTS ${CMAKE_BINARY_DIR } /RAPIDS.cmake)
21+ if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR } /RAPIDS.cmake)
2222 file (DOWNLOAD https://raw.githubusercontent.com/rapidsai/rapids-cmake/branch-24.02/RAPIDS.cmake
23- ${CMAKE_BINARY_DIR } /RAPIDS.cmake )
23+ ${CMAKE_CURRENT_BINARY_DIR } /RAPIDS.cmake )
2424endif ()
2525# Initialize rapids-cmake
26- include (${CMAKE_BINARY_DIR } /RAPIDS.cmake )
26+ include (${CMAKE_CURRENT_BINARY_DIR } /RAPIDS.cmake )
2727# utilities for generating export set package metadata
2828include (rapids-export )
2929# utilities for finding packages
@@ -37,11 +37,11 @@ include(rapids-cpm)
3737# - Project definition -------------------------------------------------------
3838
3939# Define the project and set the version and languages
40- if (NOT EXISTS ${CMAKE_BINARY_DIR } /execution.bs)
40+ if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR } /execution.bs)
4141 file (DOWNLOAD "https://raw.githubusercontent.com/cplusplus/sender-receiver/main/execution.bs"
42- ${CMAKE_BINARY_DIR } /execution.bs )
42+ ${CMAKE_CURRENT_BINARY_DIR } /execution.bs )
4343endif ()
44- file (STRINGS "${CMAKE_BINARY_DIR } /execution.bs" STD_EXECUTION_BS_REVISION_LINE REGEX "Revision: [0-9]+" )
44+ file (STRINGS "${CMAKE_CURRENT_BINARY_DIR } /execution.bs" STD_EXECUTION_BS_REVISION_LINE REGEX "Revision: [0-9]+" )
4545string (REGEX REPLACE "Revision: ([0-9]+)" "\\ 1" STD_EXECUTION_BS_REVISION ${STD_EXECUTION_BS_REVISION_LINE} )
4646
4747# nvc++ isn't supported by (s)ccache yet, so unset these before the `project()`
@@ -151,19 +151,38 @@ set(stdexec_export_targets)
151151# Define the main library
152152add_library (stdexec INTERFACE )
153153
154+ file (GLOB_RECURSE exec_headers CONFIGURE_DEPENDS include /exec/*.hpp )
155+ file (GLOB_RECURSE stdexec_headers CONFIGURE_DEPENDS include /stdexec/*.hpp )
156+ target_sources (stdexec
157+ PUBLIC
158+ FILE_SET headers
159+ TYPE HEADERS
160+ BASE_DIRS include
161+ FILES
162+ ${exec_headers}
163+ ${stdexec_headers}
164+ # stdexec_version_config.hpp is generated by rapids' script
165+ FILE_SET version_config
166+ TYPE HEADERS
167+ BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR} /include
168+ FILES
169+ ${CMAKE_CURRENT_BINARY_DIR} /include/stdexec_version_config.hpp
170+ )
154171list (APPEND stdexec_export_targets stdexec)
155172
156173# Set library version
157174set_target_properties (stdexec PROPERTIES
158175 VERSION "${STDEXEC_VERSION} "
159176 SOVERSION "${STDEXEC_VERSION_MAJOR} " )
160177
178+ if (BUILD_TESTING)
179+ # Test headers are self-contained
180+ set_target_properties (stdexec PROPERTIES
181+ VERIFY_INTERFACE_HEADER_SETS TRUE )
182+ endif ()
183+
161184# Declare the public include directories
162185include (GNUInstallDirs )
163- target_include_directories (stdexec INTERFACE
164- $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include />
165- $<INSTALL_INTERFACE :${CMAKE_INSTALL_INCLUDEDIR} >
166- )
167186
168187target_link_libraries (stdexec INTERFACE Threads::Threads )
169188
@@ -269,9 +288,15 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC")
269288endif ()
270289
271290if (STDEXEC_ENABLE_CUDA)
272-
273- file (GLOB_RECURSE nvexec_sources include /nvexec/*.cuh )
274- add_library (nvexec INTERFACE ${nvexec_sources} )
291+ file (GLOB_RECURSE nvexec_headers CONFIGURE_DEPENDS include /nvexec/*.cuh )
292+ add_library (nvexec INTERFACE )
293+ target_sources (nvexec
294+ PUBLIC
295+ FILE_SET headers
296+ TYPE HEADERS
297+ BASE_DIRS include
298+ FILES ${nvexec_headers}
299+ )
275300 list (APPEND stdexec_export_targets nvexec)
276301 add_library (STDEXEC::nvexec ALIAS nvexec )
277302
@@ -283,6 +308,10 @@ if(STDEXEC_ENABLE_CUDA)
283308 target_link_options (nvexec INTERFACE
284309 $<$<AND :$<CXX_COMPILER_ID :NVHPC >,$<COMPILE_LANGUAGE :CXX >>:-stdpar -gpu =cc ${CMAKE_CUDA_ARCHITECTURES} >)
285310
311+ install (TARGETS nvexec
312+ EXPORT stdexec-exports
313+ FILE_SET headers)
314+
286315 if (NOT (CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC" ))
287316 include (rapids-cuda )
288317 # Needs to run before `enable_language(CUDA)`
@@ -330,16 +359,29 @@ if (STDEXEC_ENABLE_TBB)
330359 INSTALL_EXPORT_SET stdexec-exports
331360 )
332361
333- file (GLOB_RECURSE tbbpool_sources include /execpools/tbb/*.hpp )
334- add_library (tbbpool INTERFACE ${tbbpool_sources} )
362+ # CONFIGURE_DEPENDS ensures that CMake reconfigures when a relevant hpp file is
363+ # added or removed.
364+ file (GLOB_RECURSE tbbpool_headers CONFIGURE_DEPENDS include /execpools/tbb/*.hpp )
365+ add_library (tbbpool INTERFACE )
335366 list (APPEND stdexec_export_targets tbbpool)
336367 add_library (STDEXEC::tbbpool ALIAS tbbpool )
368+ target_sources (tbbpool
369+ PUBLIC
370+ FILE_SET headers
371+ TYPE HEADERS
372+ BASE_DIRS include
373+ FILES ${tbbpool_headers}
374+ )
337375
338376 target_link_libraries (tbbpool
339377 INTERFACE
340378 STDEXEC::stdexec
341379 TBB::tbb
342380 )
381+
382+ install (TARGETS tbbpool
383+ EXPORT stdexec-exports
384+ FILE_SET headers)
343385endif ()
344386
345387option (STDEXEC_ENABLE_TASKFLOW "Enable TaskFlow targets" OFF )
@@ -436,10 +478,6 @@ endif()
436478
437479set (SYSTEM_CONTEXT_SOURCES src/system_context/system_context.cpp)
438480add_library (system_context STATIC ${SYSTEM_CONTEXT_SOURCES} )
439- target_include_directories (system_context PRIVATE
440- $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include />
441- $<INSTALL_INTERFACE :${CMAKE_INSTALL_INCLUDEDIR} >
442- )
443481target_compile_features (system_context PUBLIC cxx_std_20 )
444482set_target_properties (system_context PROPERTIES
445483 CXX_STANDARD 20
@@ -449,7 +487,7 @@ target_compile_options(system_context PUBLIC
449487 $<$<COMPILE_LANG_AND_ID :CXX ,MSVC >:/Zc :__cplusplus /Zc :preprocessor >
450488 )
451489add_library (STDEXEC::system_context ALIAS system_context )
452-
490+ target_link_libraries ( system_context PUBLIC stdexec )
453491
454492
455493if (CMAKE_CROSSCOMPILING )
@@ -500,16 +538,9 @@ endif()
500538include (CPack )
501539
502540install (TARGETS stdexec system_context
503- DESTINATION ${CMAKE_INSTALL_LIBDIR}
504- EXPORT stdexec-exports)
505-
506- install (
507- DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /include/
508- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
509-
510- install (
511- FILES ${CMAKE_CURRENT_BINARY_DIR} /include/stdexec_version_config.hpp
512- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
541+ EXPORT stdexec-exports
542+ FILE_SET headers
543+ FILE_SET version_config)
513544
514545##############################################################################
515546# Install exports ------------------------------------------------------------
0 commit comments