Skip to content

Commit 90cec4d

Browse files
committed
cmake: Add MULTIPROCESS option
1 parent bb1a450 commit 90cec4d

File tree

5 files changed

+88
-0
lines changed

5 files changed

+88
-0
lines changed

CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,15 @@ if(WITH_QRENCODE)
155155
endif()
156156

157157
cmake_dependent_option(WITH_DBUS "Enable DBus support." ON "CMAKE_SYSTEM_NAME STREQUAL \"Linux\" AND BUILD_GUI" OFF)
158+
159+
option(WITH_MULTIPROCESS "Build multiprocess bitcoin-node and bitcoin-gui executables in addition to monolithic bitcoind and bitcoin-qt executables. Requires libmultiprocess library. Experimental." OFF)
160+
if(WITH_MULTIPROCESS)
161+
find_package(Libmultiprocess COMPONENTS Lib)
162+
find_package(LibmultiprocessNative COMPONENTS Bin
163+
NAMES Libmultiprocess
164+
)
165+
endif()
166+
158167
cmake_dependent_option(BUILD_GUI_TESTS "Build test_bitcoin-qt executable." ON "BUILD_GUI;BUILD_TESTS" OFF)
159168
if(BUILD_GUI)
160169
set(qt_components Core Gui Widgets LinguistTools)
@@ -495,7 +504,14 @@ message("Configure summary")
495504
message("=================")
496505
message("Executables:")
497506
message(" bitcoind ............................ ${BUILD_DAEMON}")
507+
message(" bitcoin-node (multiprocess) ......... ${WITH_MULTIPROCESS}")
498508
message(" bitcoin-qt (GUI) .................... ${BUILD_GUI}")
509+
if(BUILD_GUI AND WITH_MULTIPROCESS)
510+
set(bitcoin_gui_status ON)
511+
else()
512+
set(bitcoin_gui_status OFF)
513+
endif()
514+
message(" bitcoin-gui (GUI, multiprocess) ..... ${bitcoin_gui_status}")
499515
message(" bitcoin-cli ......................... ${BUILD_CLI}")
500516
message(" bitcoin-tx .......................... ${BUILD_TX}")
501517
message(" bitcoin-util ........................ ${BUILD_UTIL}")

src/CMakeLists.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ add_dependencies(bitcoin_clientversion generate_build_info)
3131
add_subdirectory(crypto)
3232
add_subdirectory(univalue)
3333
add_subdirectory(util)
34+
if(WITH_MULTIPROCESS)
35+
add_subdirectory(ipc)
36+
endif()
3437

3538
#=============================
3639
# secp256k1 subtree
@@ -297,6 +300,18 @@ if(BUILD_DAEMON)
297300
$<TARGET_NAME_IF_EXISTS:bitcoin_wallet>
298301
)
299302
endif()
303+
if(WITH_MULTIPROCESS)
304+
add_executable(bitcoin-node
305+
bitcoind.cpp
306+
init/bitcoin-node.cpp
307+
)
308+
target_link_libraries(bitcoin-node
309+
core_interface
310+
bitcoin_node
311+
bitcoin_ipc
312+
$<TARGET_NAME_IF_EXISTS:bitcoin_wallet>
313+
)
314+
endif()
300315

301316

302317
add_library(bitcoin_cli STATIC EXCLUDE_FROM_ALL

src/ipc/CMakeLists.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Copyright (c) 2023-present The Bitcoin Core developers
2+
# Distributed under the MIT software license, see the accompanying
3+
# file COPYING or https://opensource.org/license/mit/.
4+
5+
add_library(bitcoin_ipc STATIC EXCLUDE_FROM_ALL
6+
capnp/protocol.cpp
7+
interfaces.cpp
8+
process.cpp
9+
)
10+
11+
target_capnp_sources(bitcoin_ipc ${PROJECT_SOURCE_DIR}
12+
capnp/echo.capnp capnp/init.capnp
13+
)
14+
15+
target_link_libraries(bitcoin_ipc
16+
PRIVATE
17+
core_interface
18+
)

src/qt/CMakeLists.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,23 @@ if(WIN32)
243243
set_target_properties(bitcoin-qt PROPERTIES WIN32_EXECUTABLE TRUE)
244244
endif()
245245

246+
if(WITH_MULTIPROCESS)
247+
add_executable(bitcoin-gui
248+
main.cpp
249+
../init/bitcoin-gui.cpp
250+
)
251+
target_link_libraries(bitcoin-gui
252+
core_interface
253+
bitcoinqt
254+
bitcoin_node
255+
bitcoin_ipc
256+
)
257+
import_plugins(bitcoin-gui)
258+
if(WIN32)
259+
set_target_properties(bitcoin-gui PROPERTIES WIN32_EXECUTABLE TRUE)
260+
endif()
261+
endif()
262+
246263
if(BUILD_GUI_TESTS)
247264
add_subdirectory(test)
248265
endif()

src/test/CMakeLists.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,28 @@ if(ENABLE_WALLET)
158158
add_subdirectory(${PROJECT_SOURCE_DIR}/src/wallet/test wallet)
159159
endif()
160160

161+
if(WITH_MULTIPROCESS)
162+
add_library(bitcoin_ipc_test STATIC EXCLUDE_FROM_ALL
163+
ipc_test.cpp
164+
)
165+
166+
target_capnp_sources(bitcoin_ipc_test ${PROJECT_SOURCE_DIR}
167+
ipc_test.capnp
168+
)
169+
170+
target_link_libraries(bitcoin_ipc_test
171+
PRIVATE
172+
core_interface
173+
univalue
174+
)
175+
176+
target_sources(test_bitcoin
177+
PRIVATE
178+
ipc_tests.cpp
179+
)
180+
target_link_libraries(test_bitcoin bitcoin_ipc_test)
181+
endif()
182+
161183
function(add_boost_test source_file)
162184
if(NOT EXISTS ${source_file})
163185
return()

0 commit comments

Comments
 (0)