Skip to content

Commit

Permalink
Merge pull request #610 from elbeno/use-file-sets
Browse files Browse the repository at this point in the history
Use `target_sources` instead of `target_include_directories`
  • Loading branch information
elbeno authored Sep 6, 2024
2 parents bc30926 + 1220284 commit 59de52e
Show file tree
Hide file tree
Showing 2 changed files with 213 additions and 25 deletions.
221 changes: 196 additions & 25 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,181 @@ add_versioned_package("gh:intel/cpp-baremetal-senders-and-receivers#113eeff")

add_library(cib INTERFACE)
target_compile_features(cib INTERFACE cxx_std_20)
target_include_directories(cib INTERFACE include)
target_link_libraries_system(cib INTERFACE async concurrency
fmt::fmt-header-only stdx)

target_sources(
cib
INTERFACE FILE_SET
cib
TYPE
HEADERS
BASE_DIRS
include
FILES
include/cib/builder_meta.hpp
include/cib/built.hpp
include/cib/callback.hpp
include/cib/cib.hpp
include/cib/config.hpp
include/cib/detail/components.hpp
include/cib/detail/conditional.hpp
include/cib/detail/config_details.hpp
include/cib/detail/config_item.hpp
include/cib/detail/exports.hpp
include/cib/detail/extend.hpp
include/cib/detail/nexus_details.hpp
include/cib/func_decl.hpp
include/cib/nexus.hpp
include/cib/top.hpp)

target_sources(
cib
INTERFACE FILE_SET
flow
TYPE
HEADERS
BASE_DIRS
include
FILES
include/flow/builder.hpp
include/flow/common.hpp
include/flow/detail/par.hpp
include/flow/detail/seq.hpp
include/flow/detail/walk.hpp
include/flow/flow.hpp
include/flow/graph_builder.hpp
include/flow/graphviz_builder.hpp
include/flow/impl.hpp
include/flow/run.hpp
include/flow/step.hpp)

target_sources(
cib
INTERFACE FILE_SET
interrupt
TYPE
HEADERS
BASE_DIRS
include
FILES
include/interrupt/concepts.hpp
include/interrupt/config.hpp
include/interrupt/dynamic_controller.hpp
include/interrupt/fwd.hpp
include/interrupt/hal.hpp
include/interrupt/impl.hpp
include/interrupt/manager.hpp
include/interrupt/policies.hpp)

target_sources(
cib
INTERFACE FILE_SET
log
TYPE
HEADERS
BASE_DIRS
include
FILES
include/log/catalog/catalog.hpp
include/log/catalog/mipi_encoder.hpp
include/log/fmt/logger.hpp
include/log/level.hpp
include/log/log.hpp)

target_sources(
cib
INTERFACE FILE_SET
lookup
TYPE
HEADERS
BASE_DIRS
include
FILES
include/lookup/detail/select.hpp
include/lookup/entry.hpp
include/lookup/input.hpp
include/lookup/linear_search_lookup.hpp
include/lookup/lookup.hpp
include/lookup/pseudo_pext_lookup.hpp
include/lookup/strategies.hpp
include/lookup/strategy_failed.hpp)

target_sources(
cib
INTERFACE FILE_SET
match
TYPE
HEADERS
BASE_DIRS
include
FILES
include/match/and.hpp
include/match/bin_op.hpp
include/match/concepts.hpp
include/match/constant.hpp
include/match/cost.hpp
include/match/implies.hpp
include/match/negate.hpp
include/match/not.hpp
include/match/ops.hpp
include/match/or.hpp
include/match/predicate.hpp
include/match/simplify.hpp
include/match/sum_of_products.hpp)

target_sources(
cib
INTERFACE FILE_SET
msg
TYPE
HEADERS
BASE_DIRS
include
FILES
include/msg/callback.hpp
include/msg/detail/indexed_builder_common.hpp
include/msg/detail/indexed_handler_common.hpp
include/msg/detail/separate_sum_terms.hpp
include/msg/field.hpp
include/msg/field_matchers.hpp
include/msg/handler_builder.hpp
include/msg/handler.hpp
include/msg/handler_interface.hpp
include/msg/indexed_builder.hpp
include/msg/indexed_handler.hpp
include/msg/indexed_service.hpp
include/msg/message.hpp
include/msg/send.hpp
include/msg/service.hpp)

target_sources(
cib
INTERFACE FILE_SET
sc
TYPE
HEADERS
BASE_DIRS
include
FILES
include/sc/format.hpp
include/sc/fwd.hpp
include/sc/lazy_string_format.hpp
include/sc/string_constant.hpp)

target_sources(
cib
INTERFACE FILE_SET
seq
TYPE
HEADERS
BASE_DIRS
include
FILES
include/seq/builder.hpp
include/seq/impl.hpp
include/seq/step.hpp)

target_compile_options(
cib
INTERFACE
Expand All @@ -50,32 +221,32 @@ if(PROJECT_IS_TOP_LEVEL)
add_subdirectory(tools)

# Build single-header release.
file(GLOB_RECURSE include_files
"${CMAKE_CURRENT_SOURCE_DIR}/include/cib/*.hpp")
add_custom_command(
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/gen_release_header.py
${include_files}
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_CURRENT_BINARY_DIR}/include/cib
COMMAND
${Python3_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/tools/gen_release_header.py
${CMAKE_CURRENT_SOURCE_DIR}/include/cib/cib.hpp >
${CMAKE_CURRENT_BINARY_DIR}/include/cib/cib.hpp
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/cib/cib.hpp)

add_custom_target(release_header
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/include/cib/cib.hpp)
endif()
include(cmake/single_header.cmake)
gen_single_header(
TARGET
release_header
GEN_HEADER
${CMAKE_SOURCE_DIR}/tools/gen_release_header.py
SOURCE_TARGET
cib
SOURCE_FILESET
cib
INPUT_HEADER
${CMAKE_SOURCE_DIR}/include/cib/cib.hpp
OUTPUT_HEADER
${CMAKE_BINARY_DIR}/include/cib/cib.hpp)

if(DEFINED ENV{SINGLE_HEADER})
add_dependencies(cib release_header)
if(DEFINED ENV{SINGLE_HEADER})
add_dependencies(cib release_header)

target_include_directories(
cib INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/>
target_include_directories(
cib
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/>)
else()
target_include_directories(
cib INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
else()
target_include_directories(
cib
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/>)
endif()
endif()
17 changes: 17 additions & 0 deletions cmake/single_header.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
function(gen_single_header)
set(oneValueArgs TARGET GEN_HEADER SOURCE_TARGET SOURCE_FILESET
INPUT_HEADER OUTPUT_HEADER)
cmake_parse_arguments(SH "" "${oneValueArgs}" "" ${ARGN})

get_target_property(HEADERS ${SH_SOURCE_TARGET}
HEADER_SET_${SH_SOURCE_FILESET})
get_filename_component(OUTPUT_DIR ${SH_OUTPUT_HEADER} DIRECTORY)
add_custom_command(
DEPENDS ${SH_GEN_HEADER} ${HEADERS}
COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
COMMAND ${Python3_EXECUTABLE} ${SH_GEN_HEADER} ${SH_INPUT_HEADER} >
${SH_OUTPUT_HEADER}
OUTPUT ${SH_OUTPUT_HEADER})

add_custom_target(${SH_TARGET} DEPENDS ${SH_OUTPUT_HEADER})
endfunction()

0 comments on commit 59de52e

Please sign in to comment.