Skip to content
Closed
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
15 changes: 9 additions & 6 deletions .github/workflows/ci_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ jobs:
"tests": [
{ "stdlibs": ["libstdc++"],
"tests": [
"Debug.Default", "Release.Default",
"Release.MaxSan", "Debug.Werror",
"Debug.Dynamic", "Debug.Coverage"
"Debug.Default", "Debug.Coverage",
"Debug.MaxSan", "Debug.Werror",
"Release.Default", "Release.Dynamic"
]
}
]
Expand All @@ -67,8 +67,8 @@ jobs:
"tests": [
{ "stdlibs": ["libc++"],
"tests": [
"Debug.Default", "Release.Default", "Release.MaxSan",
"Debug.Dynamic"
"Debug.Default", "Debug.MaxSan",
"Release.Default", "Release.Dynamic"
]
}
]
Expand Down Expand Up @@ -96,7 +96,10 @@ jobs:
{ "cxxversions": ["c++23"],
"tests": [
{ "stdlibs": ["stl"],
"tests": ["Debug.Default", "Release.Default", "Release.MaxSan"]
"tests": [
"Debug.Default", "Debug.MaxSan",
"Release.Default", "Release.Dynamic"
Copy link
Collaborator Author

@ClausKlein ClausKlein Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For Windows, static and dynamic must be build in Release and tested after install!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dietmarkuehl or may dynamic libraries now the problem?

]
}
]
}
Expand Down
43 changes: 27 additions & 16 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,40 +21,45 @@ set(TARGETS_EXPORT_NAME ${PROJECT_NAME}-targets) # NOTE: must be set, is importa

#===============================================================================
if(BEMAN_USE_MODULES)
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)

find_package(Threads REQUIRED)

# 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::execution ALIAS beman.execution)
add_library(${TARGET_PREFIX} STATIC)
add_library(beman::execution ALIAS ${TARGET_PREFIX})
target_compile_features(
beman.execution
${TARGET_PREFIX}
PUBLIC cxx_std_${CMAKE_CXX_STANDARD}
)

include(GenerateExportHeader)

generate_export_header(
beman.execution
BASE_NAME beman.execution
${TARGET_PREFIX}
BASE_NAME ${TARGET_PREFIX}
EXPORT_FILE_NAME beman/execution/modules_export.hpp
)
target_sources(
beman.execution
${TARGET_PREFIX}
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)
target_compile_definitions(${TARGET_PREFIX} PUBLIC BEMAN_HAS_MODULES)
target_link_libraries(${TARGET_PREFIX} PUBLIC Threads::Threads)
else()
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
endif()

if(BEMAN_USE_MODULES AND CMAKE_CXX_MODULE_STD)
target_compile_definitions(beman.execution PUBLIC BEMAN_HAS_IMPORT_STD)
else()
message(WARNING "Missing support for CMAKE_CXX_MODULE_STD!")
target_compile_definitions(${TARGET_PREFIX} PUBLIC BEMAN_HAS_IMPORT_STD)
elseif(BEMAN_USE_MODULES)
message(WARNING "Missing or disabled support for CMAKE_CXX_MODULE_STD!")
endif()
#===============================================================================

Expand All @@ -72,13 +77,19 @@ option(

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)
include(./cmake/beman-install-library.cmake)
beman_install_library(${TARGET_PREFIX} TARGETS ${TARGET_NAME} ${TARGET_PREFIX}
# FIXME: DEPENDENCIES [===[beman.inplace_vector 1.0.0]===] [===[beman.scope 0.0.1 EXACT]===] fmt
# TODO(CK): XXX OR XXX DEPENDENCIES "beman.inplace_vector 1.0.0;beman.scope 0.0.1 EXACT"
DEPENDENCIES Threads
)
#===============================================================================

if(BEMAN_EXECUTION_ENABLE_TESTING)
enable_testing()
enable_testing()

if(BEMAN_EXECUTION_ENABLE_TESTING)
add_subdirectory(tests/beman/execution)
endif()

Expand Down
25 changes: 22 additions & 3 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"BEMAN_USE_MODULES": true,
"CMAKE_CXX_STANDARD": "23",
"CMAKE_CXX_EXTENSIONS": true,
"CMAKE_CXX_SCAN_FOR_MODULES": true,
"CMAKE_CXX_STANDARD_REQUIRED": true,
"CMAKE_EXPORT_COMPILE_COMMANDS": true,
"CMAKE_SKIP_TEST_ALL_DEPENDENCY": false,
Expand All @@ -19,6 +19,17 @@
{
"name": "_debug-base",
"hidden": true,
"warnings": {
"dev": true,
"deprecated": true,
"uninitialized": true,
"unusedCli": true,
"systemVars": false
},
"errors": {
"dev": false,
"deprecated": false
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"BEMAN_BUILDSYS_SANITIZER": "MaxSan"
Expand Down Expand Up @@ -62,6 +73,10 @@
],
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "infra/cmake/llvm-libc++-toolchain.cmake"
},
"environment": {
"CXX": "clang++",
"CMAKE_CXX_FLAGS": "-stdlib=libc++"
}
},
{
Expand All @@ -73,6 +88,10 @@
],
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "infra/cmake/llvm-libc++-toolchain.cmake"
},
"environment": {
"CXX": "clang++",
"CMAKE_CXX_FLAGS": "-stdlib=libc++"
}
},
{
Expand All @@ -83,7 +102,7 @@
"_debug-base"
],
"cacheVariables": {
"CMAKE_CXX_SCAN_FOR_MODULES": false,
"BEMAN_USE_MODULES": false,
"CMAKE_TOOLCHAIN_FILE": "infra/cmake/appleclang-toolchain.cmake"
}
},
Expand All @@ -95,7 +114,7 @@
"_release-base"
],
"cacheVariables": {
"CMAKE_CXX_SCAN_FOR_MODULES": false,
"BEMAN_USE_MODULES": false,
"CMAKE_TOOLCHAIN_FILE": "infra/cmake/appleclang-toolchain.cmake"
}
},
Expand Down
28 changes: 18 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ SANITIZERS := run
# SANITIZERS += asan # TODO: tsan msan
# endif

.PHONY: default release debug doc run update check ce todo distclean clean codespell clang-tidy build test install all format unstage $(SANITIZERS) module build-module test-module
.PHONY: default release debug doc run update check ce todo distclean clean codespell clang-tidy build test install all format unstage $(SANITIZERS) module build-module test-module build-interface

SYSROOT ?=
TOOLCHAIN ?=
Expand All @@ -28,6 +28,9 @@ ifeq ($(CXX_BASE),clang++)
COMPILER=clang++
endif

# NOTE default gmake use this flags!
# COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
LDFLAGS ?=
SAN_FLAGS ?=
CXX_FLAGS ?= -g
Expand Down Expand Up @@ -56,7 +59,8 @@ ifeq (${hostSystemName},Darwin)
# export GCC_DIR:=$(shell realpath ${GCC_PREFIX})

# XXX export CMAKE_CXX_STDLIB_MODULES_JSON=${GCC_DIR}/lib/gcc/current/libstdc++.modules.json
ifeq ($(CXX),)
ifeq ($(origin CXX),default)
$(info CXX is using the built-in default: $(CXX))
export CXX=g++-15
export CXXFLAGS=-stdlib=libstdc++
endif
Expand Down Expand Up @@ -99,7 +103,7 @@ endif
# TODO: beman.execution.examples.modules
# FIXME: beman.execution.execution-module.test beman.execution.stop-token-module.test

default: release
default: module

all: $(SANITIZERS)

Expand All @@ -116,19 +120,21 @@ doc:
# ==========================================================
# NOTE: cmake configure to only test without modules! CK
# ==========================================================
build:
build build-interface:
cmake -G Ninja -S $(SOURCEDIR) -B $(BUILD) $(TOOLCHAIN) $(SYSROOT) \
-D CMAKE_EXPORT_COMPILE_COMMANDS=ON \
-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=OFF \
-D BEMAN_USE_MODULES=OFF \
-D BEMAN_USE_STD_MODULE=OFF \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_CXX_COMPILER=$(CXX) --log-level=VERBOSE
cmake --build $(BUILD)
# XXX --fresh -D CMAKE_CXX_FLAGS="$(CXX_FLAGS) $(SAN_FLAGS)"
-D CMAKE_SKIP_TEST_ALL_DEPENDENCY=OFF \
-D CMAKE_CXX_COMPILER=$(CXX) --log-level=VERBOSE --fresh
# XXX -D CMAKE_CXX_FLAGS="$(CXX_FLAGS) $(SAN_FLAGS)"
cmake --build $(BUILD) --target all_verify_interface_header_sets
cmake --build $(BUILD) --target all

# NOTE: without install, see CMAKE_SKIP_INSTALL_RULES! CK
test: build
Expand All @@ -137,12 +143,14 @@ test: build
module build-module:
cmake -G Ninja -S $(SOURCEDIR) -B $(BUILD) $(TOOLCHAIN) $(SYSROOT) \
-D CMAKE_EXPORT_COMPILE_COMMANDS=ON \
-D CMAKE_SKIP_INSTALL_RULES=ON \
-D CMAKE_SKIP_INSTALL_RULES=OFF \
-D CMAKE_CXX_STANDARD=23 \
-D CMAKE_CXX_EXTENSIONS=ON \
-D CMAKE_CXX_STANDARD_REQUIRED=ON \
-D CMAKE_CXX_SCAN_FOR_MODULES=ON \
-D BEMAN_USE_MODULES=ON \
-D BEMAN_USE_STD_MODULE=ON \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_MESSAGE=LAZY \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_CXX_COMPILER=$(CXX) --log-level=VERBOSE
cmake --build $(BUILD)
Expand Down
12 changes: 12 additions & 0 deletions cmake/Config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# cmake/Config.cmake.in -*-makefile-*-
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

include(CMakeFindDependencyMacro)

@BEMAN_FIND_DEPENDENCIES@

@PACKAGE_INIT@

include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake)

check_required_components(@PROJECT_NAME@)
Loading
Loading