mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 02:33:24 -03:00
cmake: Build bitcoind
executable
This commit is contained in:
parent
97829ce2d5
commit
a9813df826
3 changed files with 264 additions and 0 deletions
|
@ -65,6 +65,8 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/module)
|
|||
# Configurable options
|
||||
#=============================
|
||||
# When adding a new option, end the <help_text> with a full stop for consistency.
|
||||
option(BUILD_DAEMON "Build bitcoind executable." ON)
|
||||
|
||||
option(WITH_CCACHE "Attempt to use ccache for compiling." ON)
|
||||
|
||||
set(configure_warnings)
|
||||
|
@ -188,6 +190,13 @@ target_link_libraries(core_interface INTERFACE
|
|||
Threads::Threads
|
||||
)
|
||||
|
||||
include(AddBoostIfNeeded)
|
||||
add_boost_if_needed()
|
||||
|
||||
if(BUILD_DAEMON)
|
||||
find_package(Libevent 2.1.8 MODULE REQUIRED)
|
||||
endif()
|
||||
|
||||
include(cmake/introspection.cmake)
|
||||
|
||||
include(cmake/ccache.cmake)
|
||||
|
@ -217,6 +226,9 @@ add_subdirectory(src)
|
|||
message("\n")
|
||||
message("Configure summary")
|
||||
message("=================")
|
||||
message("Executables:")
|
||||
message(" bitcoind ............................ ${BUILD_DAEMON}")
|
||||
message("")
|
||||
message("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}, ${CMAKE_CXX_COMPILER}")
|
||||
include(FlagsSummary)
|
||||
flags_summary()
|
||||
|
|
67
cmake/module/AddBoostIfNeeded.cmake
Normal file
67
cmake/module/AddBoostIfNeeded.cmake
Normal file
|
@ -0,0 +1,67 @@
|
|||
# Copyright (c) 2023-present The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or https://opensource.org/license/mit/.
|
||||
|
||||
function(add_boost_if_needed)
|
||||
#[=[
|
||||
TODO: Not all targets, which will be added in the future, require
|
||||
Boost. Therefore, a proper check will be appropriate here.
|
||||
|
||||
Implementation notes:
|
||||
Although only Boost headers are used to build Bitcoin Core,
|
||||
we still leverage a standard CMake's approach to handle
|
||||
dependencies, i.e., the Boost::headers "library".
|
||||
A command target_link_libraries(target PRIVATE Boost::headers)
|
||||
will propagate Boost::headers usage requirements to the target.
|
||||
For Boost::headers such usage requirements is an include
|
||||
directory and other added INTERFACE properties.
|
||||
]=]
|
||||
|
||||
# We cannot rely on find_package(Boost ...) to work properly without
|
||||
# Boost_NO_BOOST_CMAKE set until we require a more recent Boost because
|
||||
# upstream did not ship proper CMake files until 1.82.0.
|
||||
# Until then, we rely on CMake's FindBoost module.
|
||||
# See: https://cmake.org/cmake/help/latest/policy/CMP0167.html
|
||||
if(POLICY CMP0167)
|
||||
cmake_policy(SET CMP0167 OLD)
|
||||
endif()
|
||||
set(Boost_NO_BOOST_CMAKE ON)
|
||||
find_package(Boost 1.73.0 REQUIRED)
|
||||
mark_as_advanced(Boost_INCLUDE_DIR)
|
||||
set_target_properties(Boost::headers PROPERTIES IMPORTED_GLOBAL TRUE)
|
||||
target_compile_definitions(Boost::headers INTERFACE
|
||||
# We don't use multi_index serialization.
|
||||
BOOST_MULTI_INDEX_DISABLE_SERIALIZATION
|
||||
)
|
||||
if(DEFINED VCPKG_TARGET_TRIPLET)
|
||||
# Workaround for https://github.com/microsoft/vcpkg/issues/36955.
|
||||
target_compile_definitions(Boost::headers INTERFACE
|
||||
BOOST_NO_USER_CONFIG
|
||||
)
|
||||
endif()
|
||||
|
||||
# Prevent use of std::unary_function, which was removed in C++17,
|
||||
# and will generate warnings with newer compilers for Boost
|
||||
# older than 1.80.
|
||||
# See: https://github.com/boostorg/config/pull/430.
|
||||
set(CMAKE_REQUIRED_DEFINITIONS -DBOOST_NO_CXX98_FUNCTION_BASE)
|
||||
set(CMAKE_REQUIRED_INCLUDES ${Boost_INCLUDE_DIR})
|
||||
include(CMakePushCheckState)
|
||||
cmake_push_check_state()
|
||||
include(TryAppendCXXFlags)
|
||||
set(CMAKE_REQUIRED_FLAGS ${working_compiler_werror_flag})
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||
check_cxx_source_compiles("
|
||||
#include <boost/config.hpp>
|
||||
" NO_DIAGNOSTICS_BOOST_NO_CXX98_FUNCTION_BASE
|
||||
)
|
||||
cmake_pop_check_state()
|
||||
if(NO_DIAGNOSTICS_BOOST_NO_CXX98_FUNCTION_BASE)
|
||||
target_compile_definitions(Boost::headers INTERFACE
|
||||
BOOST_NO_CXX98_FUNCTION_BASE
|
||||
)
|
||||
else()
|
||||
set(CMAKE_REQUIRED_DEFINITIONS)
|
||||
endif()
|
||||
|
||||
endfunction()
|
|
@ -77,3 +77,188 @@ target_link_libraries(bitcoin_consensus
|
|||
bitcoin_crypto
|
||||
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
|
||||
addresstype.cpp
|
||||
base58.cpp
|
||||
bech32.cpp
|
||||
chainparams.cpp
|
||||
chainparamsbase.cpp
|
||||
coins.cpp
|
||||
common/args.cpp
|
||||
common/bloom.cpp
|
||||
common/config.cpp
|
||||
common/init.cpp
|
||||
common/interfaces.cpp
|
||||
common/messages.cpp
|
||||
common/run_command.cpp
|
||||
common/settings.cpp
|
||||
common/signmessage.cpp
|
||||
common/system.cpp
|
||||
common/url.cpp
|
||||
compressor.cpp
|
||||
core_read.cpp
|
||||
core_write.cpp
|
||||
deploymentinfo.cpp
|
||||
external_signer.cpp
|
||||
init/common.cpp
|
||||
kernel/chainparams.cpp
|
||||
key.cpp
|
||||
key_io.cpp
|
||||
merkleblock.cpp
|
||||
net_permissions.cpp
|
||||
net_types.cpp
|
||||
netaddress.cpp
|
||||
netbase.cpp
|
||||
outputtype.cpp
|
||||
policy/feerate.cpp
|
||||
policy/policy.cpp
|
||||
protocol.cpp
|
||||
psbt.cpp
|
||||
rpc/external_signer.cpp
|
||||
rpc/rawtransaction_util.cpp
|
||||
rpc/request.cpp
|
||||
rpc/util.cpp
|
||||
scheduler.cpp
|
||||
script/descriptor.cpp
|
||||
script/miniscript.cpp
|
||||
script/parsing.cpp
|
||||
script/sign.cpp
|
||||
script/signingprovider.cpp
|
||||
script/solver.cpp
|
||||
)
|
||||
target_link_libraries(bitcoin_common
|
||||
PRIVATE
|
||||
core_interface
|
||||
bitcoin_consensus
|
||||
bitcoin_util
|
||||
univalue
|
||||
secp256k1
|
||||
Boost::headers
|
||||
$<$<PLATFORM_ID:Windows>:ws2_32>
|
||||
)
|
||||
|
||||
|
||||
# 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
|
||||
bip324.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/disconnected_transactions.cpp
|
||||
kernel/mempool_removal_reason.cpp
|
||||
mapport.cpp
|
||||
net.cpp
|
||||
net_processing.cpp
|
||||
netgroup.cpp
|
||||
node/abort.cpp
|
||||
node/blockmanager_args.cpp
|
||||
node/blockstorage.cpp
|
||||
node/caches.cpp
|
||||
node/chainstate.cpp
|
||||
node/chainstatemanager_args.cpp
|
||||
node/coin.cpp
|
||||
node/coins_view_args.cpp
|
||||
node/connection_types.cpp
|
||||
node/context.cpp
|
||||
node/database_args.cpp
|
||||
node/eviction.cpp
|
||||
node/interface_ui.cpp
|
||||
node/interfaces.cpp
|
||||
node/kernel_notifications.cpp
|
||||
node/mempool_args.cpp
|
||||
node/mempool_persist.cpp
|
||||
node/mempool_persist_args.cpp
|
||||
node/miner.cpp
|
||||
node/mini_miner.cpp
|
||||
node/minisketchwrapper.cpp
|
||||
node/peerman_args.cpp
|
||||
node/psbt.cpp
|
||||
node/timeoffsets.cpp
|
||||
node/transaction.cpp
|
||||
node/txreconciliation.cpp
|
||||
node/utxo_snapshot.cpp
|
||||
node/warnings.cpp
|
||||
noui.cpp
|
||||
policy/fees.cpp
|
||||
policy/fees_args.cpp
|
||||
policy/packages.cpp
|
||||
policy/rbf.cpp
|
||||
policy/settings.cpp
|
||||
policy/truc_policy.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
|
||||
signet.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
|
||||
core_interface
|
||||
bitcoin_common
|
||||
bitcoin_util
|
||||
leveldb
|
||||
minisketch
|
||||
univalue
|
||||
Boost::headers
|
||||
$<TARGET_NAME_IF_EXISTS:libevent::libevent>
|
||||
$<TARGET_NAME_IF_EXISTS:libevent::pthreads>
|
||||
)
|
||||
|
||||
|
||||
# Bitcoin Core bitcoind.
|
||||
if(BUILD_DAEMON)
|
||||
add_executable(bitcoind
|
||||
bitcoind.cpp
|
||||
init/bitcoind.cpp
|
||||
)
|
||||
target_link_libraries(bitcoind
|
||||
core_interface
|
||||
bitcoin_node
|
||||
)
|
||||
endif()
|
||||
|
|
Loading…
Add table
Reference in a new issue