@@ -7,7 +7,18 @@ cmake_minimum_required(VERSION 3.8...4.20)
77
88project (boost_stacktrace VERSION "${BOOST_SUPERPROJECT_VERSION} " LANGUAGES CXX )
99
10- function (stacktrace_add_library suffix opt public_libs libs defs )
10+ function (stacktrace_add_module name )
11+ target_sources (${name}
12+ PUBLIC
13+ FILE_SET CXX_MODULES
14+ BASE_DIRS "${CMAKE_CURRENT_LIST_DIR} /modules"
15+ FILES "${CMAKE_CURRENT_LIST_DIR} /modules/${name} .cppm"
16+ )
17+ target_compile_features (${name} PUBLIC cxx_std_20 )
18+ target_compile_definitions (${name} PUBLIC BOOST_USE_MODULES )
19+ endfunction ()
20+
21+ function (stacktrace_add_library suffix opt public_libs libs defs add_module )
1122
1223 if (NOT opt)
1324 return ()
@@ -38,10 +49,14 @@ function(stacktrace_add_library suffix opt public_libs libs defs)
3849 ${defs}
3950 )
4051
41- target_sources (boost_stacktrace_${suffix}
42- PRIVATE
43- ${CMAKE_CURRENT_LIST_DIR} /src/${suffix}.cpp
44- )
52+ if (add_module)
53+ stacktrace_add_module (boost_stacktrace_${suffix} )
54+ else ()
55+ target_sources (boost_stacktrace_${suffix}
56+ PRIVATE
57+ "${CMAKE_CURRENT_LIST_DIR} /src/${suffix} .cpp"
58+ )
59+ endif ()
4560
4661 if (BUILD_SHARED_LIBS )
4762 target_compile_definitions (boost_stacktrace_${suffix} PUBLIC BOOST_STACKTRACE_DYN_LINK )
@@ -110,24 +125,40 @@ if(BOOST_STACKTRACE_ENABLE_BACKTRACE OR
110125 BOOST_STACKTRACE_ENABLE_WINDBG_CACHED
111126 )
112127 set (_enable_non_noop_backend TRUE )
128+ else ()
129+ set (_enable_non_noop_backend FALSE )
113130endif ()
114131
115- if (_enable_non_noop_backend )
116- stacktrace_add_library ( dump ON "" "" "" )
132+ if (NOT BOOST_USE_MODULES )
133+ set (BOOST_USE_MODULES OFF )
117134endif ()
118- stacktrace_add_library (noop ${BOOST_STACKTRACE_ENABLE_NOOP} "" "" "" )
119- stacktrace_add_library (backtrace ${BOOST_STACKTRACE_ENABLE_BACKTRACE} Boost::stacktrace_dump "backtrace;${CMAKE_DL_LIBS} " "" )
120- stacktrace_add_library (addr2line ${BOOST_STACKTRACE_ENABLE_ADDR2LINE} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" )
121- stacktrace_add_library (basic ${BOOST_STACKTRACE_ENABLE_BASIC} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" )
122- stacktrace_add_library (windbg ${BOOST_STACKTRACE_ENABLE_WINDBG} Boost::stacktrace_dump "dbgeng;ole32" "_GNU_SOURCE=1" )
123- stacktrace_add_library (windbg_cached ${BOOST_STACKTRACE_ENABLE_WINDBG_CACHED} Boost::stacktrace_dump "dbgeng;ole32" "_GNU_SOURCE=1" )
135+
136+ stacktrace_add_library (dump ${_enable_non_noop_backend} "" "" "" ${BOOST_USE_MODULES} )
137+ stacktrace_add_library (noop ${BOOST_STACKTRACE_ENABLE_NOOP} "" "" "" ${BOOST_USE_MODULES} )
138+ stacktrace_add_library (backtrace ${BOOST_STACKTRACE_ENABLE_BACKTRACE} Boost::stacktrace_dump "backtrace;${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} )
139+ stacktrace_add_library (addr2line ${BOOST_STACKTRACE_ENABLE_ADDR2LINE} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} )
140+ stacktrace_add_library (basic ${BOOST_STACKTRACE_ENABLE_BASIC} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} )
141+ stacktrace_add_library (windbg ${BOOST_STACKTRACE_ENABLE_WINDBG} Boost::stacktrace_dump "dbgeng;ole32" "_GNU_SOURCE=1" ${BOOST_USE_MODULES} )
142+ stacktrace_add_library (windbg_cached ${BOOST_STACKTRACE_ENABLE_WINDBG_CACHED} Boost::stacktrace_dump "dbgeng;ole32" "_GNU_SOURCE=1" ${BOOST_USE_MODULES} )
124143
125144# boost_stacktrace, default library
126145
127- add_library (boost_stacktrace INTERFACE )
146+ if (BOOST_USE_MODULES)
147+ add_library (boost_stacktrace )
148+ stacktrace_add_module (boost_stacktrace boost_stacktrace )
149+ set (__scope PUBLIC)
128150
129- target_include_directories (boost_stacktrace INTERFACE include )
151+ foreach (backend noop backtrace addr2line basic windbg windbg_cached)
152+ if (TARGET boost_stacktrace_${backend} )
153+ target_compile_definitions (boost_stacktrace_${backend} INTERFACE BOOST_STACKTRACE_BACKEND_MODULE=${backend} )
154+ endif ()
155+ endforeach ()
156+ else ()
157+ add_library (boost_stacktrace INTERFACE )
158+ set (__scope INTERFACE)
159+ endif ()
130160
161+ target_include_directories (boost_stacktrace ${__scope} "${CMAKE_CURRENT_LIST_DIR} /include" )
131162add_library (Boost::stacktrace ALIAS boost_stacktrace )
132163
133164if (BOOST_STACKTRACE_ENABLE_WINDBG)
@@ -147,13 +178,13 @@ else()
147178endif ()
148179
149180message (STATUS "Boost.stacktrace default backend: ${__default_stacktrace_backend} " )
150- target_link_libraries (boost_stacktrace INTERFACE Boost::stacktrace_${__default_stacktrace_backend} )
181+ target_link_libraries (boost_stacktrace ${__scope} Boost::stacktrace_${__default_stacktrace_backend} )
151182
152183# Boost::stacktrace_from_exception is never the default
153184if (_enable_non_noop_backend)
154- stacktrace_add_library (from_exception ${BOOST_STACKTRACE_ENABLE_FROM_EXCEPTION} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" )
155- unset (_enable_non_noop_backend)
185+ stacktrace_add_library (from_exception ${BOOST_STACKTRACE_ENABLE_FROM_EXCEPTION} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" FALSE )
156186endif ()
187+ unset (_enable_non_noop_backend)
157188
158189if (BUILD_TESTING)
159190 add_subdirectory (test )
0 commit comments