CMakeLists.txt raw

   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/exception.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/signalinterrupt.cpp
  73    ../util/syserror.cpp
  74    ../util/thread.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)
 138