Skip to content

Commit c211de1

Browse files
authored
Merge pull request #1412 from HungMingWu/FILE_SET
Use CMake's FILE_SET for better modeling project.
2 parents 2b91c3f + a676f30 commit c211de1

File tree

1 file changed

+49
-24
lines changed

1 file changed

+49
-24
lines changed

CMakeLists.txt

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,23 @@ set(stdexec_export_targets)
151151
# Define the main library
152152
add_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_BINARY_DIR}/include
168+
FILES
169+
${CMAKE_BINARY_DIR}/include/stdexec_version_config.hpp
170+
)
154171
list(APPEND stdexec_export_targets stdexec)
155172

156173
# Set library version
@@ -160,10 +177,6 @@ set_target_properties(stdexec PROPERTIES
160177

161178
# Declare the public include directories
162179
include(GNUInstallDirs)
163-
target_include_directories(stdexec INTERFACE
164-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
165-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
166-
)
167180

168181
target_link_libraries(stdexec INTERFACE Threads::Threads)
169182

@@ -269,9 +282,15 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC")
269282
endif()
270283

271284
if(STDEXEC_ENABLE_CUDA)
272-
273-
file(GLOB_RECURSE nvexec_sources include/nvexec/*.cuh)
274-
add_library(nvexec INTERFACE ${nvexec_sources})
285+
file(GLOB_RECURSE nvexec_headers CONFIGURE_DEPENDS include/nvexec/*.cuh)
286+
add_library(nvexec INTERFACE)
287+
target_sources(nvexec
288+
PUBLIC
289+
FILE_SET headers
290+
TYPE HEADERS
291+
BASE_DIRS include
292+
FILES ${nvexec_headers}
293+
)
275294
list(APPEND stdexec_export_targets nvexec)
276295
add_library(STDEXEC::nvexec ALIAS nvexec)
277296

@@ -283,6 +302,10 @@ if(STDEXEC_ENABLE_CUDA)
283302
target_link_options(nvexec INTERFACE
284303
$<$<AND:$<CXX_COMPILER_ID:NVHPC>,$<COMPILE_LANGUAGE:CXX>>:-stdpar -gpu=cc${CMAKE_CUDA_ARCHITECTURES}>)
285304

305+
install(TARGETS nvexec
306+
EXPORT stdexec-exports
307+
FILE_SET headers)
308+
286309
if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC"))
287310
include(rapids-cuda)
288311
# Needs to run before `enable_language(CUDA)`
@@ -330,16 +353,29 @@ if (STDEXEC_ENABLE_TBB)
330353
INSTALL_EXPORT_SET stdexec-exports
331354
)
332355

333-
file(GLOB_RECURSE tbbpool_sources include/execpools/tbb/*.hpp)
334-
add_library(tbbpool INTERFACE ${tbbpool_sources})
356+
# CONFIGURE_DEPENDS ensures that CMake reconfigures when a relevant hpp file is
357+
# added or removed.
358+
file(GLOB_RECURSE tbbpool_headers CONFIGURE_DEPENDS include/execpools/tbb/*.hpp)
359+
add_library(tbbpool INTERFACE)
335360
list(APPEND stdexec_export_targets tbbpool)
336361
add_library(STDEXEC::tbbpool ALIAS tbbpool)
362+
target_sources(tbbpool
363+
PUBLIC
364+
FILE_SET headers
365+
TYPE HEADERS
366+
BASE_DIRS include
367+
FILES ${tbbpool_headers}
368+
)
337369

338370
target_link_libraries(tbbpool
339371
INTERFACE
340372
STDEXEC::stdexec
341373
TBB::tbb
342374
)
375+
376+
install(TARGETS tbbpool
377+
EXPORT stdexec-exports
378+
FILE_SET headers)
343379
endif()
344380

345381
option(STDEXEC_ENABLE_TASKFLOW "Enable TaskFlow targets" OFF)
@@ -435,10 +471,6 @@ endif()
435471

436472
set(SYSTEM_CONTEXT_SOURCES src/system_context/system_context.cpp)
437473
add_library(system_context STATIC ${SYSTEM_CONTEXT_SOURCES})
438-
target_include_directories(system_context PRIVATE
439-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
440-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
441-
)
442474
target_compile_features(system_context PUBLIC cxx_std_20)
443475
set_target_properties(system_context PROPERTIES
444476
CXX_STANDARD 20
@@ -448,7 +480,7 @@ target_compile_options(system_context PUBLIC
448480
$<$<COMPILE_LANG_AND_ID:CXX,MSVC>:/Zc:__cplusplus /Zc:preprocessor>
449481
)
450482
add_library(STDEXEC::system_context ALIAS system_context)
451-
483+
target_link_libraries(system_context PUBLIC stdexec)
452484

453485

454486
if(CMAKE_CROSSCOMPILING)
@@ -499,16 +531,9 @@ endif()
499531
include(CPack)
500532

501533
install(TARGETS stdexec system_context
502-
DESTINATION ${CMAKE_INSTALL_LIBDIR}
503-
EXPORT stdexec-exports)
504-
505-
install(
506-
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
507-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
508-
509-
install(
510-
FILES ${CMAKE_CURRENT_BINARY_DIR}/include/stdexec_version_config.hpp
511-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
534+
EXPORT stdexec-exports
535+
FILE_SET headers
536+
FILE_SET version_config)
512537

513538
##############################################################################
514539
# Install exports ------------------------------------------------------------

0 commit comments

Comments
 (0)