CMakeLists.txt
1 # Copyright (c) 2024-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(GNUInstallDirs) 6 7 # TODO: libbitcoinkernel is a work in progress consensus engine 8 # library, as more and more modules are decoupled from the 9 # consensus engine, this list will shrink to only those 10 # which are absolutely necessary. 11 add_library(bitcoinkernel 12 bitcoinkernel.cpp 13 chain.cpp 14 checks.cpp 15 chainparams.cpp 16 coinstats.cpp 17 context.cpp 18 cs_main.cpp 19 disconnected_transactions.cpp 20 mempool_removal_reason.cpp 21 ../arith_uint256.cpp 22 ../chain.cpp 23 ../coins.cpp 24 ../compressor.cpp 25 ../consensus/merkle.cpp 26 ../consensus/tx_check.cpp 27 ../consensus/tx_verify.cpp 28 ../dbwrapper.cpp 29 ../deploymentinfo.cpp 30 ../deploymentstatus.cpp 31 ../flatfile.cpp 32 ../hash.cpp 33 ../logging.cpp 34 ../node/blockstorage.cpp 35 ../node/chainstate.cpp 36 ../node/utxo_snapshot.cpp 37 ../policy/ephemeral_policy.cpp 38 ../policy/feerate.cpp 39 ../policy/packages.cpp 40 ../policy/policy.cpp 41 ../policy/rbf.cpp 42 ../policy/settings.cpp 43 ../policy/truc_policy.cpp 44 ../pow.cpp 45 ../primitives/block.cpp 46 ../primitives/transaction.cpp 47 ../pubkey.cpp 48 ../random.cpp 49 ../randomenv.cpp 50 ../script/interpreter.cpp 51 ../script/script.cpp 52 ../script/script_error.cpp 53 ../script/sigcache.cpp 54 ../script/solver.cpp 55 ../signet.cpp 56 ../streams.cpp 57 ../support/lockedpool.cpp 58 ../sync.cpp 59 ../txdb.cpp 60 ../txgraph.cpp 61 ../txmempool.cpp 62 ../uint256.cpp 63 ../util/chaintype.cpp 64 ../util/check.cpp 65 ../util/expected.cpp 66 ../util/feefrac.cpp 67 ../util/fs.cpp 68 ../util/fs_helpers.cpp 69 ../util/hasher.cpp 70 ../util/moneystr.cpp 71 ../util/rbf.cpp 72 ../util/serfloat.cpp 73 ../util/signalinterrupt.cpp 74 ../util/syserror.cpp 75 ../util/threadnames.cpp 76 ../util/time.cpp 77 ../util/tokenpipe.cpp 78 ../validation.cpp 79 ../validationinterface.cpp 80 ../versionbits.cpp 81 $<TARGET_OBJECTS:bitcoin_clientversion> 82 $<TARGET_OBJECTS:bitcoin_crypto> 83 $<TARGET_OBJECTS:leveldb> 84 $<TARGET_OBJECTS:crc32c> 85 ) 86 87 # Compiler warnings that apply only to the kernel and its dependencies. 88 # These can be more strict and/or warnings that only apply to shared 89 # libs. 90 add_library(kernel_warn_interface INTERFACE) 91 if(NOT MSVC) 92 try_append_cxx_flags("-Wunique-object-duplication" TARGET kernel_warn_interface SKIP_LINK) 93 endif() 94 95 # Also manually apply the warnings to the kernel's internal dependencies 96 target_link_libraries(bitcoin_clientversion PRIVATE kernel_warn_interface) 97 target_link_libraries(bitcoin_crypto PRIVATE kernel_warn_interface) 98 target_link_libraries(leveldb PRIVATE kernel_warn_interface) 99 target_link_libraries(crc32c PRIVATE kernel_warn_interface) 100 101 target_link_libraries(bitcoinkernel 102 PRIVATE 103 core_interface 104 kernel_warn_interface 105 secp256k1_objs 106 $<$<PLATFORM_ID:Windows>:bcrypt> 107 $<TARGET_NAME_IF_EXISTS:USDT::headers> 108 Boost::headers 109 ) 110 111 target_include_directories(bitcoinkernel PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb/include>) 112 113 # Add a convenience libbitcoinkernel target as a synonym for bitcoinkernel. 114 add_custom_target(libbitcoinkernel) 115 add_dependencies(libbitcoinkernel bitcoinkernel) 116 117 get_target_property(bitcoinkernel_type bitcoinkernel TYPE) 118 if(bitcoinkernel_type STREQUAL "STATIC_LIBRARY") 119 target_compile_definitions(bitcoinkernel PUBLIC BITCOINKERNEL_STATIC) 120 endif() 121 122 configure_file(${PROJECT_SOURCE_DIR}/libbitcoinkernel.pc.in ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc @ONLY) 123 install(FILES ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" COMPONENT libbitcoinkernel) 124 125 install(TARGETS bitcoinkernel 126 RUNTIME 127 DESTINATION ${CMAKE_INSTALL_BINDIR} 128 COMPONENT libbitcoinkernel 129 LIBRARY 130 DESTINATION ${CMAKE_INSTALL_LIBDIR} 131 COMPONENT libbitcoinkernel 132 ARCHIVE 133 DESTINATION ${CMAKE_INSTALL_LIBDIR} 134 COMPONENT libbitcoinkernel 135 ) 136 137 install(FILES bitcoinkernel.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT libbitcoinkernel)