diff --git a/CMakeLists.txt b/CMakeLists.txt index 6814b5ff5907b..8163392de87d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,7 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/module) # Configurable options. # When adding a new option, end the with a full stop for consistency. include(CMakeDependentOption) +option(BUILD_DAEMON "Build bitcoind executable." ON) option(ASM "Use assembly routines." ON) cmake_dependent_option(CXX20 "Enable compilation in C++20 mode." OFF "NOT MSVC" ON) @@ -72,11 +73,45 @@ include(cmake/secp256k1.cmake) include(CheckStdFilesystem) check_std_filesystem() +find_package(PkgConfig) +if(BUILD_DAEMON) + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) + + if(APPLE) + execute_process( + COMMAND brew --prefix boost + OUTPUT_VARIABLE BOOST_ROOT + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endif() + set(Boost_NO_BOOST_CMAKE ON) + # Find Boost headers only. + find_package(Boost 1.64.0 REQUIRED) + mark_as_advanced(Boost_INCLUDE_DIR) + target_compile_definitions(Boost::boost INTERFACE + $<$:BOOST_MULTI_INDEX_ENABLE_SAFE_MODE> + ) + + pkg_check_modules(libevent REQUIRED libevent>=2.1.8 IMPORTED_TARGET) + target_link_libraries(PkgConfig::libevent INTERFACE + $<$:iphlpapi;ws2_32> + ) +endif() + +if(NOT WIN32 AND BUILD_DAEMON) + pkg_check_modules(libevent_pthreads REQUIRED libevent_pthreads>=2.1.8 IMPORTED_TARGET) +endif() + add_subdirectory(src) message("\n") message("Configure summary") message("=================") +message("Executables:") +message(" bitcoind ............................ ${BUILD_DAEMON}") +message("") get_directory_property(definitions COMPILE_DEFINITIONS) string(REPLACE ";" " " definitions "${definitions}") message("Preprocessor defined macros ........... ${definitions}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8a77ed465e110..1945af5015a5f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,6 +8,7 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) add_subdirectory(crypto) add_subdirectory(univalue) +add_subdirectory(util) # Stable, backwards-compatible consensus functionality @@ -27,3 +28,165 @@ add_library(bitcoin_consensus OBJECT EXCLUDE_FROM_ALL util/strencodings.cpp ) target_link_libraries(bitcoin_consensus PRIVATE secp256k1) + + +# Home for common functionality shared by different executables and libraries. +# Similar to `bitcoin_util` library, but higher-level. +add_library(bitcoin_common STATIC EXCLUDE_FROM_ALL + base58.cpp + bech32.cpp + chainparams.cpp + coins.cpp + common/bloom.cpp + common/interfaces.cpp + common/run_command.cpp + $<$:common/url.cpp> + compressor.cpp + core_read.cpp + core_write.cpp + deploymentinfo.cpp + external_signer.cpp + init/common.cpp + key.cpp + key_io.cpp + merkleblock.cpp + net_types.cpp + netaddress.cpp + netbase.cpp + net_permissions.cpp + outputtype.cpp + policy/feerate.cpp + policy/policy.cpp + protocol.cpp + psbt.cpp + rpc/rawtransaction_util.cpp + rpc/request.cpp + rpc/external_signer.cpp + rpc/util.cpp + scheduler.cpp + script/descriptor.cpp + script/miniscript.cpp + script/sign.cpp + script/signingprovider.cpp + script/standard.cpp + warnings.cpp +) +target_link_libraries(bitcoin_common + PRIVATE + bitcoin_consensus + bitcoin_util + univalue + secp256k1 + Boost::boost + $ +) + + +# P2P and RPC server functionality used by `bitcoind` and `bitcoin-qt` executables. +add_library(bitcoin_node STATIC EXCLUDE_FROM_ALL + addrdb.cpp + addrman.cpp + banman.cpp + blockencodings.cpp + blockfilter.cpp + chain.cpp + consensus/tx_verify.cpp + dbwrapper.cpp + deploymentstatus.cpp + flatfile.cpp + headerssync.cpp + httprpc.cpp + httpserver.cpp + i2p.cpp + index/base.cpp + index/blockfilterindex.cpp + index/coinstatsindex.cpp + index/txindex.cpp + init.cpp + kernel/chain.cpp + kernel/checks.cpp + kernel/coinstats.cpp + kernel/context.cpp + kernel/cs_main.cpp + kernel/mempool_persist.cpp + mapport.cpp + net.cpp + netgroup.cpp + net_processing.cpp + node/blockstorage.cpp + node/caches.cpp + node/chainstate.cpp + node/chainstatemanager_args.cpp + node/coin.cpp + node/connection_types.cpp + node/context.cpp + node/eviction.cpp + node/interface_ui.cpp + node/interfaces.cpp + node/mempool_args.cpp + node/mempool_persist_args.cpp + node/miner.cpp + node/minisketchwrapper.cpp + node/psbt.cpp + node/transaction.cpp + node/txreconciliation.cpp + node/utxo_snapshot.cpp + node/validation_cache_args.cpp + noui.cpp + policy/fees.cpp + policy/fees_args.cpp + policy/packages.cpp + policy/rbf.cpp + policy/settings.cpp + pow.cpp + rest.cpp + rpc/blockchain.cpp + rpc/fees.cpp + rpc/mempool.cpp + rpc/mining.cpp + rpc/net.cpp + rpc/node.cpp + rpc/output_script.cpp + rpc/rawtransaction.cpp + rpc/server.cpp + rpc/server_util.cpp + rpc/signmessage.cpp + rpc/txoutproof.cpp + script/sigcache.cpp + shutdown.cpp + signet.cpp + timedata.cpp + torcontrol.cpp + txdb.cpp + txmempool.cpp + txorphanage.cpp + txrequest.cpp + validation.cpp + validationinterface.cpp + versionbits.cpp + + dummywallet.cpp +) +target_link_libraries(bitcoin_node + PRIVATE + bitcoin_common + bitcoin_util + leveldb + minisketch + univalue + Boost::boost + $<$>:PkgConfig::libevent_pthreads> +) + + +# Bitcoin Core bitcoind. +if(BUILD_DAEMON) + add_executable(bitcoind + bitcoind.cpp + init/bitcoind.cpp + ) + target_link_libraries(bitcoind + PRIVATE + bitcoin_node + ) +endif() diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt new file mode 100644 index 0000000000000..b95cef138c7e2 --- /dev/null +++ b/src/util/CMakeLists.txt @@ -0,0 +1,54 @@ +# Copyright (c) 2023 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +add_library(bitcoin_util STATIC EXCLUDE_FROM_ALL + asmap.cpp + bip32.cpp + bytevectorhash.cpp + check.cpp + error.cpp + fees.cpp + getuniquepath.cpp + hasher.cpp + message.cpp + moneystr.cpp + rbf.cpp + readwritefile.cpp + settings.cpp + serfloat.cpp + sock.cpp + spanparsing.cpp + strencodings.cpp + string.cpp + syscall_sandbox.cpp + syserror.cpp + system.cpp + thread.cpp + threadinterrupt.cpp + threadnames.cpp + time.cpp + tokenpipe.cpp + ../chainparamsbase.cpp + ../clientversion.cpp + ../fs.cpp + ../logging.cpp + ../random.cpp + ../randomenv.cpp + ../support/cleanse.cpp + ../support/lockedpool.cpp + ../sync.cpp +) + +target_compile_definitions(bitcoin_util + PRIVATE + $<$:_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING> +) + +target_link_libraries(bitcoin_util + PRIVATE + bitcoin_crypto + univalue + Threads::Threads + $ +)