CMakeLists.txt
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 include(AddWindowsResources) 6 7 configure_file(${PROJECT_SOURCE_DIR}/cmake/bitcoin-build-config.h.in bitcoin-build-config.h USE_SOURCE_PERMISSIONS @ONLY) 8 include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) 9 10 #============================= 11 # Subprojects 12 #============================= 13 # Subprojects include subdirectories that do or could have tests 14 # and/or benchmark binaries, such as all subtrees and univalue. 15 # These need to be included before CMAKE_*_OUTPUT_DIRECTORY variables 16 # are set, so output locations of subproject tests and libraries are 17 # not overridden. 18 include(../cmake/crc32c.cmake) 19 include(../cmake/leveldb.cmake) 20 include(../cmake/minisketch.cmake) 21 add_subdirectory(univalue) 22 if (ENABLE_IPC AND NOT WITH_EXTERNAL_LIBMULTIPROCESS) 23 include(../cmake/libmultiprocess.cmake) 24 add_libmultiprocess(ipc/libmultiprocess) 25 endif() 26 include(../cmake/secp256k1.cmake) 27 add_secp256k1(secp256k1) 28 29 # Set top-level target output locations. 30 if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) 31 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) 32 endif() 33 if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) 34 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) 35 endif() 36 if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) 37 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) 38 endif() 39 40 add_custom_target(generate_build_info 41 BYPRODUCTS ${PROJECT_BINARY_DIR}/src/bitcoin-build-info.h 42 COMMAND ${CMAKE_COMMAND} -DBUILD_INFO_HEADER_PATH=${PROJECT_BINARY_DIR}/src/bitcoin-build-info.h -DSOURCE_DIR=${PROJECT_SOURCE_DIR} -P ${PROJECT_SOURCE_DIR}/cmake/script/GenerateBuildInfo.cmake 43 COMMENT "Generating bitcoin-build-info.h" 44 VERBATIM 45 ) 46 add_library(bitcoin_clientversion STATIC 47 clientversion.cpp 48 ) 49 target_link_libraries(bitcoin_clientversion 50 PRIVATE 51 core_interface 52 ) 53 add_dependencies(bitcoin_clientversion generate_build_info) 54 55 add_subdirectory(crypto) 56 add_subdirectory(util) 57 if(ENABLE_IPC) 58 add_subdirectory(ipc) 59 endif() 60 61 add_library(bitcoin_consensus STATIC EXCLUDE_FROM_ALL 62 arith_uint256.cpp 63 consensus/merkle.cpp 64 consensus/tx_check.cpp 65 hash.cpp 66 primitives/block.cpp 67 primitives/transaction.cpp 68 pubkey.cpp 69 script/interpreter.cpp 70 script/script.cpp 71 script/script_error.cpp 72 uint256.cpp 73 ) 74 target_link_libraries(bitcoin_consensus 75 PRIVATE 76 core_interface 77 bitcoin_crypto 78 secp256k1 79 ) 80 81 if(WITH_ZMQ) 82 add_subdirectory(zmq) 83 endif() 84 85 # Home for common functionality shared by different executables and libraries. 86 # Similar to `bitcoin_util` library, but higher-level. 87 add_library(bitcoin_common STATIC EXCLUDE_FROM_ALL 88 addresstype.cpp 89 base58.cpp 90 bech32.cpp 91 chain.cpp 92 chainparams.cpp 93 chainparamsbase.cpp 94 coins.cpp 95 common/args.cpp 96 common/bloom.cpp 97 common/config.cpp 98 common/init.cpp 99 common/interfaces.cpp 100 common/messages.cpp 101 common/netif.cpp 102 common/pcp.cpp 103 common/run_command.cpp 104 common/settings.cpp 105 common/signmessage.cpp 106 common/system.cpp 107 common/url.cpp 108 compressor.cpp 109 core_io.cpp 110 deploymentinfo.cpp 111 external_signer.cpp 112 init/common.cpp 113 kernel/chainparams.cpp 114 key.cpp 115 key_io.cpp 116 merkleblock.cpp 117 musig.cpp 118 net_permissions.cpp 119 net_types.cpp 120 netaddress.cpp 121 netbase.cpp 122 outputtype.cpp 123 policy/feerate.cpp 124 policy/policy.cpp 125 pow.cpp 126 protocol.cpp 127 psbt.cpp 128 rpc/rawtransaction_util.cpp 129 rpc/request.cpp 130 rpc/util.cpp 131 scheduler.cpp 132 script/descriptor.cpp 133 script/miniscript.cpp 134 script/parsing.cpp 135 script/sign.cpp 136 script/signingprovider.cpp 137 script/solver.cpp 138 ) 139 target_link_libraries(bitcoin_common 140 PRIVATE 141 core_interface 142 bitcoin_consensus 143 bitcoin_util 144 univalue 145 secp256k1 146 Boost::headers 147 $<TARGET_NAME_IF_EXISTS:USDT::headers> 148 $<$<PLATFORM_ID:Windows>:ws2_32> 149 ) 150 151 include(InstallBinaryComponent) 152 153 if(ENABLE_WALLET) 154 add_subdirectory(wallet) 155 156 if(BUILD_WALLET_TOOL) 157 add_executable(bitcoin-wallet 158 bitcoin-wallet.cpp 159 init/bitcoin-wallet.cpp 160 wallet/wallettool.cpp 161 ) 162 add_windows_resources(bitcoin-wallet bitcoin-wallet-res.rc) 163 add_windows_application_manifest(bitcoin-wallet) 164 target_link_libraries(bitcoin-wallet 165 core_interface 166 bitcoin_wallet 167 bitcoin_common 168 bitcoin_util 169 Boost::headers 170 ) 171 install_binary_component(bitcoin-wallet HAS_MANPAGE) 172 endif() 173 endif() 174 175 176 # P2P and RPC server functionality used by `bitcoind` and `bitcoin-qt` executables. 177 add_library(bitcoin_node STATIC EXCLUDE_FROM_ALL 178 addrdb.cpp 179 addrman.cpp 180 banman.cpp 181 bip324.cpp 182 blockencodings.cpp 183 blockfilter.cpp 184 consensus/tx_verify.cpp 185 dbwrapper.cpp 186 deploymentstatus.cpp 187 flatfile.cpp 188 headerssync.cpp 189 httprpc.cpp 190 httpserver.cpp 191 i2p.cpp 192 index/base.cpp 193 index/blockfilterindex.cpp 194 index/coinstatsindex.cpp 195 index/txindex.cpp 196 index/txospenderindex.cpp 197 init.cpp 198 kernel/chain.cpp 199 kernel/checks.cpp 200 kernel/coinstats.cpp 201 kernel/context.cpp 202 kernel/cs_main.cpp 203 kernel/disconnected_transactions.cpp 204 kernel/mempool_removal_reason.cpp 205 mapport.cpp 206 net.cpp 207 net_processing.cpp 208 netgroup.cpp 209 node/abort.cpp 210 node/blockmanager_args.cpp 211 node/blockstorage.cpp 212 node/caches.cpp 213 node/chainstate.cpp 214 node/chainstatemanager_args.cpp 215 node/coin.cpp 216 node/coins_view_args.cpp 217 node/connection_types.cpp 218 node/context.cpp 219 node/database_args.cpp 220 node/eviction.cpp 221 node/interface_ui.cpp 222 node/interfaces.cpp 223 node/kernel_notifications.cpp 224 node/mempool_args.cpp 225 node/mempool_persist.cpp 226 node/mempool_persist_args.cpp 227 node/miner.cpp 228 node/mini_miner.cpp 229 node/minisketchwrapper.cpp 230 node/peerman_args.cpp 231 node/psbt.cpp 232 node/timeoffsets.cpp 233 node/transaction.cpp 234 node/txdownloadman_impl.cpp 235 node/txorphanage.cpp 236 node/txreconciliation.cpp 237 node/utxo_snapshot.cpp 238 node/warnings.cpp 239 noui.cpp 240 policy/ephemeral_policy.cpp 241 policy/fees/block_policy_estimator.cpp 242 policy/fees/block_policy_estimator_args.cpp 243 policy/packages.cpp 244 policy/rbf.cpp 245 policy/settings.cpp 246 policy/truc_policy.cpp 247 private_broadcast.cpp 248 rest.cpp 249 rpc/blockchain.cpp 250 rpc/external_signer.cpp 251 rpc/fees.cpp 252 rpc/mempool.cpp 253 rpc/mining.cpp 254 rpc/net.cpp 255 rpc/node.cpp 256 rpc/output_script.cpp 257 rpc/rawtransaction.cpp 258 rpc/server.cpp 259 rpc/server_util.cpp 260 rpc/signmessage.cpp 261 rpc/txoutproof.cpp 262 script/sigcache.cpp 263 signet.cpp 264 torcontrol.cpp 265 txdb.cpp 266 txgraph.cpp 267 txmempool.cpp 268 txrequest.cpp 269 validation.cpp 270 validationinterface.cpp 271 versionbits.cpp 272 $<$<TARGET_EXISTS:bitcoin_wallet>:wallet/init.cpp> 273 $<$<NOT:$<TARGET_EXISTS:bitcoin_wallet>>:dummywallet.cpp> 274 ) 275 target_link_libraries(bitcoin_node 276 PRIVATE 277 core_interface 278 bitcoin_common 279 bitcoin_util 280 $<TARGET_NAME_IF_EXISTS:bitcoin_zmq> 281 leveldb 282 minisketch 283 univalue 284 Boost::headers 285 $<TARGET_NAME_IF_EXISTS:libevent::core> 286 $<TARGET_NAME_IF_EXISTS:libevent::extra> 287 $<TARGET_NAME_IF_EXISTS:libevent::pthreads> 288 $<TARGET_NAME_IF_EXISTS:USDT::headers> 289 ) 290 if(WITH_EMBEDDED_ASMAP) 291 target_compile_definitions(bitcoin_node PRIVATE ENABLE_EMBEDDED_ASMAP=1) 292 include(TargetDataSources) 293 target_raw_data_sources(bitcoin_node NAMESPACE node::data 294 node/data/ip_asn.dat 295 ) 296 endif() 297 298 # Bitcoin wrapper executable that can call other executables. 299 if(BUILD_BITCOIN_BIN) 300 add_executable(bitcoin bitcoin.cpp) 301 add_windows_resources(bitcoin bitcoin-res.rc) 302 add_windows_application_manifest(bitcoin) 303 target_link_libraries(bitcoin core_interface bitcoin_common bitcoin_util) 304 install_binary_component(bitcoin HAS_MANPAGE) 305 endif() 306 307 # Bitcoin Core bitcoind. 308 if(BUILD_DAEMON) 309 add_executable(bitcoind 310 bitcoind.cpp 311 init/bitcoind.cpp 312 ) 313 add_windows_resources(bitcoind bitcoind-res.rc) 314 add_windows_application_manifest(bitcoind) 315 target_link_libraries(bitcoind 316 core_interface 317 bitcoin_node 318 $<TARGET_NAME_IF_EXISTS:bitcoin_wallet> 319 ) 320 install_binary_component(bitcoind HAS_MANPAGE) 321 endif() 322 if(ENABLE_IPC AND BUILD_DAEMON) 323 add_executable(bitcoin-node 324 bitcoind.cpp 325 init/bitcoin-node.cpp 326 ) 327 target_link_libraries(bitcoin-node 328 core_interface 329 bitcoin_node 330 bitcoin_ipc 331 $<TARGET_NAME_IF_EXISTS:bitcoin_wallet> 332 ) 333 install_binary_component(bitcoin-node INTERNAL) 334 endif() 335 336 337 add_library(bitcoin_cli STATIC EXCLUDE_FROM_ALL 338 compat/stdin.cpp 339 rpc/client.cpp 340 ) 341 target_link_libraries(bitcoin_cli 342 PUBLIC 343 core_interface 344 univalue 345 ) 346 347 348 # Bitcoin Core RPC client 349 if(BUILD_CLI) 350 add_executable(bitcoin-cli bitcoin-cli.cpp) 351 add_windows_resources(bitcoin-cli bitcoin-cli-res.rc) 352 add_windows_application_manifest(bitcoin-cli) 353 target_link_libraries(bitcoin-cli 354 core_interface 355 bitcoin_cli 356 bitcoin_common 357 bitcoin_util 358 libevent::core 359 libevent::extra 360 ) 361 install_binary_component(bitcoin-cli HAS_MANPAGE) 362 endif() 363 364 365 if(BUILD_TX) 366 add_executable(bitcoin-tx bitcoin-tx.cpp) 367 add_windows_resources(bitcoin-tx bitcoin-tx-res.rc) 368 add_windows_application_manifest(bitcoin-tx) 369 target_link_libraries(bitcoin-tx 370 core_interface 371 bitcoin_common 372 bitcoin_util 373 univalue 374 ) 375 install_binary_component(bitcoin-tx HAS_MANPAGE) 376 endif() 377 378 379 if(BUILD_UTIL) 380 add_executable(bitcoin-util bitcoin-util.cpp) 381 add_windows_resources(bitcoin-util bitcoin-util-res.rc) 382 add_windows_application_manifest(bitcoin-util) 383 target_link_libraries(bitcoin-util 384 core_interface 385 bitcoin_common 386 bitcoin_util 387 ) 388 install_binary_component(bitcoin-util HAS_MANPAGE) 389 endif() 390 391 392 if(BUILD_GUI) 393 add_subdirectory(qt) 394 endif() 395 396 397 if(BUILD_KERNEL_LIB) 398 add_subdirectory(kernel) 399 if (BUILD_KERNEL_TEST) 400 add_subdirectory(test/kernel) 401 endif() 402 if(BUILD_UTIL_CHAINSTATE) 403 add_executable(bitcoin-chainstate 404 bitcoin-chainstate.cpp 405 ) 406 add_windows_application_manifest(bitcoin-chainstate) 407 target_link_libraries(bitcoin-chainstate 408 PRIVATE 409 core_interface 410 bitcoinkernel 411 ) 412 install_binary_component(bitcoin-chainstate INTERNAL) 413 endif() 414 endif() 415 416 417 add_subdirectory(test/util) 418 if(BUILD_BENCH) 419 add_subdirectory(bench) 420 endif() 421 422 if(BUILD_TESTS) 423 add_subdirectory(test) 424 endif() 425 426 if(BUILD_FUZZ_BINARY) 427 add_subdirectory(test/fuzz) 428 endif()