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 ../sync.cpp 58 ../txdb.cpp 59 ../txgraph.cpp 60 ../txmempool.cpp 61 ../uint256.cpp 62 ../util/chaintype.cpp 63 ../util/check.cpp 64 ../util/expected.cpp 65 ../util/feefrac.cpp 66 ../util/fs.cpp 67 ../util/fs_helpers.cpp 68 ../util/hasher.cpp 69 ../util/moneystr.cpp 70 ../util/rbf.cpp 71 ../util/signalinterrupt.cpp 72 ../util/syserror.cpp 73 ../util/threadnames.cpp 74 ../util/time.cpp 75 ../util/tokenpipe.cpp 76 ../validation.cpp 77 ../validationinterface.cpp 78 ../versionbits.cpp 79 $<TARGET_OBJECTS:bitcoin_clientversion> 80 $<TARGET_OBJECTS:bitcoin_crypto> 81 $<TARGET_OBJECTS:leveldb> 82 $<TARGET_OBJECTS:crc32c> 83 ) 84 85 # Compiler warnings that apply only to the kernel and its dependencies. 86 # These can be more strict and/or warnings that only apply to shared 87 # libs. 88 add_library(kernel_warn_interface INTERFACE) 89 if(NOT MSVC) 90 try_append_cxx_flags("-Wunique-object-duplication" TARGET kernel_warn_interface SKIP_LINK) 91 endif() 92 93 # Also manually apply the warnings to the kernel's internal dependencies 94 target_link_libraries(bitcoin_clientversion PRIVATE kernel_warn_interface) 95 target_link_libraries(bitcoin_crypto PRIVATE kernel_warn_interface) 96 target_link_libraries(leveldb PRIVATE kernel_warn_interface) 97 target_link_libraries(crc32c PRIVATE kernel_warn_interface) 98 99 target_link_libraries(bitcoinkernel 100 PRIVATE 101 core_interface 102 kernel_warn_interface 103 secp256k1_objs 104 $<$<PLATFORM_ID:Windows>:bcrypt> 105 $<TARGET_NAME_IF_EXISTS:USDT::headers> 106 Boost::headers 107 ) 108 109 target_include_directories(bitcoinkernel PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb/include>) 110 111 # Add a convenience libbitcoinkernel target as a synonym for bitcoinkernel. 112 add_custom_target(libbitcoinkernel) 113 add_dependencies(libbitcoinkernel bitcoinkernel) 114 115 get_target_property(bitcoinkernel_type bitcoinkernel TYPE) 116 if(bitcoinkernel_type STREQUAL "STATIC_LIBRARY") 117 target_compile_definitions(bitcoinkernel PUBLIC BITCOINKERNEL_STATIC) 118 endif() 119 120 configure_file(${PROJECT_SOURCE_DIR}/libbitcoinkernel.pc.in ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc @ONLY) 121 install(FILES ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" COMPONENT libbitcoinkernel) 122 123 install(TARGETS bitcoinkernel 124 RUNTIME 125 DESTINATION ${CMAKE_INSTALL_BINDIR} 126 COMPONENT libbitcoinkernel 127 LIBRARY 128 DESTINATION ${CMAKE_INSTALL_LIBDIR} 129 COMPONENT libbitcoinkernel 130 ARCHIVE 131 DESTINATION ${CMAKE_INSTALL_LIBDIR} 132 COMPONENT libbitcoinkernel 133 ) 134 135 install(FILES bitcoinkernel.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT libbitcoinkernel)