Skip to content

Commit

Permalink
Add support for modular build structure. (#192)
Browse files Browse the repository at this point in the history
* Make the library modular usable.

* Switch to library requirements instead of source. As source puts extra source in install targets.

* fix promise & generator operator=

* added fno-exceptions support.

* added experimental context support.

* support for asio::yield_context

* Add missing NO_LIB usage requirements.

* added noop utility

closes #3

* added support for __cpp_sized_deallocation in custom coroutine allocations.

(non-apple) clang is weird, as it allowed sized deallocations on coroutine promises even when not enabled otherwise.
Since apple does not, this should fix using cobalt on apple.

* Add missing import-search for cconfig/predef checks.

* Add requires-b2 check to top-level build file.

* Update dependencies.

* Fix -Wreorder flagging

If using -Werror=reorder via some cmake build or otherwise, this gets flagged.

* added move support for channels

Closes #183

* fixed ctor so any works.

Closes #182

* added noinline ot channel functions when compiling for windows.

* removed move_only template inst from channel.cpp

* Declared test targets with EXCLUDE_FROM_ALL

Closes #181.

* added generate-diagram option & cache

* Cleaned up CML.

Closes #135.

* Bump B2 require to 5.2

* Move inter-lib dependencies to a project variable and into the build targets.

* Move custom features to importable jam.

---------

Co-authored-by: Klemens Morgenstern <[email protected]>
Co-authored-by: Jonathan Stein <[email protected]>
  • Loading branch information
3 people authored Aug 26, 2024
1 parent b74d61e commit a0e31a2
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 31 deletions.
19 changes: 19 additions & 0 deletions boost-cobalt.jam
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright (c) 2023 Klemens D. Morgenstern
#
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)


import feature ;


feature.feature boost.cobalt.pmr : std boost-container custom no : propagated composite ;
feature.compose <boost.cobalt.pmr>std : <define>BOOST_COBALT_USE_STD_PMR=1 ;
feature.compose <boost.cobalt.pmr>boost-container : <define>BOOST_COBALT_USE_BOOST_CONTAINER_PMR=1 ;
feature.compose <boost.cobalt.pmr>custom : <define>BOOST_COBALT_USE_CUSTOM_PMR=1 ;
feature.compose <boost.cobalt.pmr>no : <define>BOOST_COBALT_NO_PMR=1 ;

feature.feature boost.cobalt.executor : any_io_executor use_io_context custom : propagated composite ;
feature.compose <boost.cobalt.executor>any_io_executor : ;
feature.compose <boost.cobalt.executor>use_io_context : <define>BOOST_COBALT_USE_IO_CONTEXT=1 ;
feature.compose <boost.cobalt.executor>custom_executor : <define>BOOST_COBALT_CUSTOM_EXECUTOR=1 ;
37 changes: 37 additions & 0 deletions build.jam
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Copyright René Ferdinand Rivera Morell 2024
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

require-b2 5.2 ;

constant boost_dependencies :
/boost/asio//boost_asio
/boost/callable_traits//boost_callable_traits
/boost/circular_buffer//boost_circular_buffer
/boost/config//boost_config
/boost/container//boost_container
/boost/context//boost_context
/boost/core//boost_core
/boost/intrusive//boost_intrusive
/boost/leaf//boost_leaf
/boost/mp11//boost_mp11
/boost/preprocessor//boost_preprocessor
/boost/smart_ptr//boost_smart_ptr
/boost/system//boost_system
/boost/throw_exception//boost_throw_exception
/boost/variant2//boost_variant2 ;

project /boost/cobalt
: common-requirements
<include>include
;

explicit
[ alias boost_cobalt : build//boost_cobalt ]
[ alias all : boost_cobalt test example ]
;

call-if : boost-library cobalt
;

28 changes: 9 additions & 19 deletions build/Jamfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@


import os ;
import feature ;
import ../../config/checks/config : requires ;
import-search /boost/config/checks ;
import config : requires ;
import-search /boost/cobalt ;
import boost-cobalt ;


project : requirements
Expand All @@ -17,20 +19,10 @@ project : requirements
<target-os>windows:<define>WIN32_LEAN_AND_MEAN
<target-os>linux:<linkflags>-lpthread
: source-location ../src
: common-requirements <library>$(boost_dependencies)
;


feature.feature boost.cobalt.pmr : std boost-container custom no : propagated composite ;
feature.compose <boost.cobalt.pmr>std : <define>BOOST_COBALT_USE_STD_PMR=1 ;
feature.compose <boost.cobalt.pmr>boost-container : <define>BOOST_COBALT_USE_BOOST_CONTAINER_PMR=1 ;
feature.compose <boost.cobalt.pmr>custom : <define>BOOST_COBALT_USE_CUSTOM_PMR=1 ;
feature.compose <boost.cobalt.pmr>no : <define>BOOST_COBALT_NO_PMR=1 ;

feature.feature boost.cobalt.executor : any_io_executor use_io_context custom : propagated composite ;
feature.compose <boost.cobalt.executor>any_io_executor : ;
feature.compose <boost.cobalt.executor>use_io_context : <define>BOOST_COBALT_USE_IO_CONTEXT=1 ;
feature.compose <boost.cobalt.executor>custom_executor : <define>BOOST_COBALT_CUSTOM_EXECUTOR=1 ;

local config-binding = [ modules.binding config ] ;
config-binding ?= "" ;

Expand All @@ -50,10 +42,10 @@ lib boost_cobalt
: cobalt_sources
: requirements <define>BOOST_COBALT_SOURCE=1
<link>shared:<define>BOOST_COBALT_DYN_LINK=1
[ requires
[ requires
cxx20_hdr_concepts
]
<boost.cobalt.pmr>boost-container:<library>/boost//container
<boost.cobalt.pmr>boost-container:<library>/boost/container//boost_container
[ check-target-builds
$(config-binding:D)//cpp_lib_memory_resource
cpp_lib_memory_resource
Expand All @@ -62,8 +54,9 @@ lib boost_cobalt
]

: usage-requirements
<boost.cobalt.pmr>boost-container:<library>/boost//container
<boost.cobalt.pmr>boost-container:<library>/boost/container//boost_container
<link>shared:<define>BOOST_COBALT_DYN_LINK=1
<define>BOOST_COBALT_NO_LINK=1
[ check-target-builds
$(config-binding:D)//cpp_lib_memory_resource
cpp_lib_memory_resource
Expand Down Expand Up @@ -97,6 +90,3 @@ rule set-pmr-std ( props * )
return <boost.cobalt.pmr>std ;
}
}

boost-install boost_cobalt ;

19 changes: 10 additions & 9 deletions example/Jamfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@


import os ;
import-search /boost/cobalt ;
import boost-cobalt ;


project : requirements
Expand All @@ -18,12 +20,11 @@ project : requirements
<toolset>clang-14:<boost.cobalt.pmr>boost-container
;

exe channel : channel.cpp /boost//cobalt ;
exe delay : delay.cpp /boost//cobalt ;
exe delay_op : delay_op.cpp /boost//cobalt ;
exe echo_server : echo_server.cpp /boost//cobalt ;
exe outcome : outcome.cpp /boost//cobalt ;
exe thread : thread.cpp /boost//cobalt ;
exe thread_pool : thread_pool.cpp /boost//cobalt ;
# exe ticker : ticker.cpp /boost//json /boost//cobalt ;

exe channel : channel.cpp /boost/cobalt//boost_cobalt ;
exe delay : delay.cpp /boost/cobalt//boost_cobalt ;
exe delay_op : delay_op.cpp /boost/cobalt//boost_cobalt ;
exe echo_server : echo_server.cpp /boost/cobalt//boost_cobalt ;
exe outcome : outcome.cpp /boost/cobalt//boost_cobalt /boost/outcome//boost_outcome ;
exe thread : thread.cpp /boost/cobalt//boost_cobalt ;
exe thread_pool : thread_pool.cpp /boost/cobalt//boost_cobalt ;
# exe ticker : ticker.cpp /boost/cobalt//boost_cobalt /boost/json//boost_json ;
8 changes: 5 additions & 3 deletions test/Jamfile.jam
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@


import os ;
import-search /boost/cobalt ;
import boost-cobalt ;


project : requirements
Expand All @@ -20,12 +22,12 @@ project : requirements

import testing ;

lib test_impl : test_main.cpp /boost//cobalt /boost//unit_test_framework :
lib test_impl : test_main.cpp /boost/cobalt//boost_cobalt /boost/test//boost_unit_test_framework :
<link>static
;

run main.cpp /boost//cobalt ;
run main_compile.cpp /boost//cobalt util.cpp concepts.cpp ;
run main.cpp /boost/cobalt//boost_cobalt ;
run main_compile.cpp /boost/cobalt//boost_cobalt util.cpp concepts.cpp ;

for local src in [ glob *.cpp : main.cpp main_compile.cpp test_main.cpp concepts.cpp util.cpp ]
{
Expand Down

0 comments on commit a0e31a2

Please sign in to comment.