CMakeLists.txt raw

   1  # Copyright (c) 2024-present The Limenka 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: liblimenkakernel 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(limenkakernel
  12    limenkakernel.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    ../common/system_ram.cpp
  25    ../compressor.cpp
  26    ../consensus/merkle.cpp
  27    ../consensus/tx_check.cpp
  28    ../consensus/tx_verify.cpp
  29    ../core_read.cpp
  30    ../dbwrapper.cpp
  31    ../deploymentinfo.cpp
  32    ../deploymentstatus.cpp
  33    ../flatfile.cpp
  34    ../hash.cpp
  35    ../logging.cpp
  36    ../node/blockstorage.cpp
  37    ../node/chainstate.cpp
  38    ../node/dbcache.cpp
  39    ../node/utxo_snapshot.cpp
  40    ../policy/coin_age_priority.cpp
  41    ../policy/ephemeral_policy.cpp
  42    ../policy/feerate.cpp
  43    ../policy/packages.cpp
  44    ../policy/policy.cpp
  45    ../policy/rbf.cpp
  46    ../policy/settings.cpp
  47    ../policy/truc_policy.cpp
  48    ../pow.cpp
  49    ../primitives/block.cpp
  50    ../primitives/transaction.cpp
  51    ../pubkey.cpp
  52    ../random.cpp
  53    ../randomenv.cpp
  54    ../script/interpreter.cpp
  55    ../script/script.cpp
  56    ../script/script_error.cpp
  57    ../script/sigcache.cpp
  58    ../script/solver.cpp
  59    ../signet.cpp
  60    ../stats/stats.cpp
  61    ../streams.cpp
  62    ../support/lockedpool.cpp
  63    ../sync.cpp
  64    ../txdb.cpp
  65    ../txmempool.cpp
  66    ../uint256.cpp
  67    ../util/chaintype.cpp
  68    ../util/check.cpp
  69    ../util/feefrac.cpp
  70    ../util/fs.cpp
  71    ../util/fs_helpers.cpp
  72    ../util/hasher.cpp
  73    ../util/ioprio.cpp
  74    ../util/mempressure.cpp
  75    ../util/moneystr.cpp
  76    ../util/rbf.cpp
  77    ../util/serfloat.cpp
  78    ../util/signalinterrupt.cpp
  79    ../util/strencodings.cpp
  80    ../util/string.cpp
  81    ../util/syserror.cpp
  82    ../util/threadnames.cpp
  83    ../util/time.cpp
  84    ../util/tokenpipe.cpp
  85    ../validation.cpp
  86    ../validationinterface.cpp
  87    ../versionbits.cpp
  88  )
  89  target_compile_definitions(limenkakernel
  90    PRIVATE
  91      BUILDING_FOR_LIBLIMENKAKERNEL
  92  )
  93  target_link_libraries(limenkakernel
  94    PRIVATE
  95      core_interface
  96      external_lib_interface
  97      limenka_clientversion
  98      limenka_crypto
  99      leveldb
 100      secp256k1
 101      $<TARGET_NAME_IF_EXISTS:USDT::headers>
 102    PUBLIC
 103      Boost::headers
 104  )
 105  
 106  # liblimenkakernel requires default symbol visibility, explicitly
 107  # specify that here so that things still work even when user
 108  # configures with -DREDUCE_EXPORTS=ON
 109  #
 110  # Note this is a quick hack that will be removed as we
 111  # incrementally define what to export from the library.
 112  set_target_properties(limenkakernel PROPERTIES
 113    CXX_VISIBILITY_PRESET default
 114  )
 115  
 116  # Add a convenience liblimenkakernel target as a synonym for limenkakernel.
 117  add_custom_target(liblimenkakernel)
 118  add_dependencies(liblimenkakernel limenkakernel)
 119  
 120  # When building the static library, install all static libraries the
 121  # limenkakernel depends on.
 122  if(NOT BUILD_SHARED_LIBS)
 123    # Recursively get all the static libraries a target depends on and put them in libs_out
 124    function(get_target_static_link_libs target libs_out)
 125      get_target_property(linked_libraries ${target} LINK_LIBRARIES)
 126      foreach(dep ${linked_libraries})
 127        if(TARGET ${dep})
 128          add_dependencies(liblimenkakernel ${dep})
 129          get_target_property(dep_type ${dep} TYPE)
 130          if(dep_type STREQUAL "STATIC_LIBRARY")
 131            list(APPEND ${libs_out} ${dep})
 132            get_target_static_link_libs(${dep} ${libs_out})
 133          endif()
 134        endif()
 135      endforeach()
 136      set(${libs_out} ${${libs_out}} PARENT_SCOPE)
 137    endfunction()
 138  
 139    set(all_kernel_static_link_libs "")
 140    get_target_static_link_libs(limenkakernel all_kernel_static_link_libs)
 141  
 142    install(TARGETS ${all_kernel_static_link_libs} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT liblimenkakernel)
 143    list(TRANSFORM all_kernel_static_link_libs PREPEND "-l")
 144    # LIBS_PRIVATE is substituted in the pkg-config file.
 145    list(JOIN all_kernel_static_link_libs " " LIBS_PRIVATE)
 146  endif()
 147  
 148  configure_file(${PROJECT_SOURCE_DIR}/liblimenkakernel.pc.in ${PROJECT_BINARY_DIR}/liblimenkakernel.pc @ONLY)
 149  install(FILES ${PROJECT_BINARY_DIR}/liblimenkakernel.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" COMPONENT liblimenkakernel)
 150  
 151  install(TARGETS limenkakernel
 152    RUNTIME
 153      DESTINATION ${CMAKE_INSTALL_BINDIR}
 154      COMPONENT liblimenkakernel
 155    LIBRARY
 156      DESTINATION ${CMAKE_INSTALL_LIBDIR}
 157      COMPONENT liblimenkakernel
 158    ARCHIVE
 159      DESTINATION ${CMAKE_INSTALL_LIBDIR}
 160      COMPONENT liblimenkakernel
 161  )
 162