Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 19 additions & 57 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,19 @@

cmake_minimum_required(VERSION 3.30...4.2)

include(cmake/prelude.cmake)
include(./cmake/prelude.cmake)

#===================================================
project(beman_execution VERSION 0.1.0 LANGUAGES CXX)
project(beman.execution VERSION 0.2.0 LANGUAGES CXX)
#===================================================

# Modules opt in only on compilers that support it: msvc, g++-15 and clang-20+
include(cxx-modules-rules)
include(./cmake/cxx-modules-rules.cmake)

set(TARGET_NAME beman_execution_headers) # used in src, and docs
set(TARGET_NAMESPACE beman) # NOTE: only still used in docs?
set(TARGET_PREFIX ${PROJECT_NAME}) # NOTE: only still used in docs?
set(TARGET_PACKAGE_NAME ${PROJECT_NAME}-config)
set(TARGETS_EXPORT_NAME ${PROJECT_NAME}-config-targets)
set(TARGET_NAME beman.execution_headers) # used in src, and docs
set(TARGET_NAMESPACE beman) # TODO(CK): still used in docs, is this really needed?
set(TARGET_PREFIX ${PROJECT_NAME}) # NOTE: used in src, and docs?
set(TARGETS_EXPORT_NAME ${PROJECT_NAME}-targets) # NOTE: must be set, is important for installation! CK

#===============================================================================
if(BEMAN_USE_MODULES)
Expand All @@ -27,33 +26,33 @@ if(BEMAN_USE_MODULES)

# CMake requires the language standard to be specified as compile feature
# when a target provides C++23 modules and the target will be installed
add_library(beman_execution STATIC)
add_library(beman::beman_execution ALIAS beman_execution)
add_library(beman.execution STATIC)
add_library(beman::execution ALIAS beman.execution)
target_compile_features(
beman_execution
beman.execution
PUBLIC cxx_std_${CMAKE_CXX_STANDARD}
)

include(GenerateExportHeader)

generate_export_header(
beman_execution
BASE_NAME beman_execution
beman.execution
BASE_NAME beman.execution
EXPORT_FILE_NAME beman/execution/modules_export.hpp
)
target_sources(
beman_execution
beman.execution
PUBLIC
FILE_SET HEADERS
BASE_DIRS include ${CMAKE_CURRENT_BINARY_DIR}
FILES
${CMAKE_CURRENT_BINARY_DIR}/beman/execution/modules_export.hpp
)
# FIXME: target_compile_definitions(beman_execution PUBLIC BEMAN_HAS_MODULES)
# FIXME: target_compile_definitions(beman.execution PUBLIC BEMAN_HAS_MODULES)
endif()

if(BEMAN_USE_MODULES AND CMAKE_CXX_MODULE_STD)
target_compile_definitions(beman_execution PUBLIC BEMAN_HAS_IMPORT_STD)
target_compile_definitions(beman.execution PUBLIC BEMAN_HAS_IMPORT_STD)
else()
message(WARNING "Missing support for CMAKE_CXX_MODULE_STD!")
endif()
Expand All @@ -71,17 +70,12 @@ option(
${PROJECT_IS_TOP_LEVEL}
)

option(
BEMAN_EXECUTION_ENABLE_INSTALL
"Install the project components. Values: { ON, OFF }."
${PROJECT_IS_TOP_LEVEL}
)

include(GNUInstallDirs)
set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})

add_subdirectory(src/beman/execution)

# NOTE: this must be done before tests! CK
include(./cmake/beman-install-library-config.cmake)
beman_install_library(${TARGET_PREFIX} headers)

if(BEMAN_EXECUTION_ENABLE_TESTING)
enable_testing()

Expand All @@ -92,35 +86,3 @@ if(BEMAN_EXECUTION_BUILD_EXAMPLES)
add_subdirectory(examples)
add_subdirectory(docs/code)
endif()

if(NOT BEMAN_EXECUTION_ENABLE_INSTALL OR CMAKE_SKIP_INSTALL_RULES)
return()
endif()

include(infra/cmake/beman-install-library-config.cmake)
# FIXME: install TARGETS target beman.execution is exported but not all of its interface file sets are installed
# TODO: beman_install_library(beman_execution beman_execution_headers)

include(CMakePackageConfigHelpers)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}-version.cmake
VERSION ${CMAKE_PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)

configure_package_config_file(
"cmake/Config.cmake.in"
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}.cmake
INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
)

install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}.cmake
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}-version.cmake
DESTINATION ${INSTALL_CONFIGDIR}
)

set(CPACK_GENERATOR TGZ)
include(CPack)
16 changes: 12 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ endif
# TODO: beman.execution.examples.modules
# FIXME: beman.execution.execution-module.test beman.execution.stop-token-module.test

default: test
default: release

all: $(SANITIZERS)

Expand All @@ -113,16 +113,20 @@ doc:
# $(SANITIZERS):
# $(MAKE) SANITIZER=$@

# ==========================================================
# NOTE: cmake configure to only test without modules! CK
# ==========================================================
build:
cmake -G Ninja -S $(SOURCEDIR) -B $(BUILD) $(TOOLCHAIN) $(SYSROOT) \
-D CMAKE_EXPORT_COMPILE_COMMANDS=ON \
-D CMAKE_SKIP_INSTALL_RULES=OFF \
-D CMAKE_SKIP_INSTALL_RULES=ON \
-D CMAKE_CXX_STANDARD=23 \
-D CMAKE_CXX_EXTENSIONS=ON \
-D CMAKE_CXX_STANDARD_REQUIRED=ON \
-D CMAKE_CXX_SCAN_FOR_MODULES=ON \
-D CMAKE_CXX_SCAN_FOR_MODULES=OFF \
-D BEMAN_USE_MODULES=OFF \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_CXX_COMPILER=$(CXX)
-D CMAKE_CXX_COMPILER=$(CXX) --log-level=VERBOSE
cmake --build $(BUILD)
# XXX --fresh -D CMAKE_CXX_FLAGS="$(CXX_FLAGS) $(SAN_FLAGS)"

Expand All @@ -136,11 +140,13 @@ install: test
CMakeUserPresets.json:: cmake/CMakeUserPresets.json
ln -s $< $@

# ==========================================================
release: CMakeUserPresets.json
cmake --preset $@ --log-level=TRACE # XXX --fresh
ln -fs $(BUILDROOT)/$@/compile_commands.json .
cmake --workflow --preset $@

# ==========================================================
debug: CMakeUserPresets.json
cmake --preset $@ --log-level=TRACE # XXX --fresh
ln -fs $(BUILDROOT)build/$@/compile_commands.json .
Expand Down Expand Up @@ -170,9 +176,11 @@ clang-tidy: $(BUILD)/compile_commands.json
codespell:
pre-commit run $@

# ==========================================================
format:
pre-commit autoupdate
pre-commit run --all
# ==========================================================

cmake-format:
pre-commit run gersemi
Expand Down
Loading