mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 03:03:22 -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
|
# Configurable options
|
||||||
#=============================
|
#=============================
|
||||||
# When adding a new option, end the <help_text> with a full stop for consistency.
|
# 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)
|
option(WITH_CCACHE "Attempt to use ccache for compiling." ON)
|
||||||
|
|
||||||
set(configure_warnings)
|
set(configure_warnings)
|
||||||
|
@ -188,6 +190,13 @@ target_link_libraries(core_interface INTERFACE
|
||||||
Threads::Threads
|
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/introspection.cmake)
|
||||||
|
|
||||||
include(cmake/ccache.cmake)
|
include(cmake/ccache.cmake)
|
||||||
|
@ -217,6 +226,9 @@ add_subdirectory(src)
|
||||||
message("\n")
|
message("\n")
|
||||||
message("Configure summary")
|
message("Configure summary")
|
||||||
message("=================")
|
message("=================")
|
||||||
|
message("Executables:")
|
||||||
|
message(" bitcoind ............................ ${BUILD_DAEMON}")
|
||||||
|
message("")
|
||||||
message("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}, ${CMAKE_CXX_COMPILER}")
|
message("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}, ${CMAKE_CXX_COMPILER}")
|
||||||
include(FlagsSummary)
|
include(FlagsSummary)
|
||||||
flags_summary()
|
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
|
bitcoin_crypto
|
||||||
secp256k1
|
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