/ src / kernel / CMakeLists.txt
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)