bitcoin/src/kernel/CMakeLists.txt
Hennadii Stepanov 3b42e05aa9
cmake: Make implicit libbitcoinkernel dependencies explicit
This change fixes a regression introduced by enabling the
`OPTIMIZE_DEPENDENCIES` property.
2025-02-18 12:30:41 +00:00

150 lines
4.3 KiB
CMake

# Copyright (c) 2024-present The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://opensource.org/license/mit/.
include(GNUInstallDirs)
# TODO: libbitcoinkernel is a work in progress consensus engine
# library, as more and more modules are decoupled from the
# consensus engine, this list will shrink to only those
# which are absolutely necessary.
add_library(bitcoinkernel
bitcoinkernel.cpp
chain.cpp
checks.cpp
chainparams.cpp
coinstats.cpp
context.cpp
cs_main.cpp
disconnected_transactions.cpp
mempool_removal_reason.cpp
../arith_uint256.cpp
../chain.cpp
../coins.cpp
../compressor.cpp
../consensus/merkle.cpp
../consensus/tx_check.cpp
../consensus/tx_verify.cpp
../core_read.cpp
../dbwrapper.cpp
../deploymentinfo.cpp
../deploymentstatus.cpp
../flatfile.cpp
../hash.cpp
../logging.cpp
../node/blockstorage.cpp
../node/chainstate.cpp
../node/utxo_snapshot.cpp
../policy/ephemeral_policy.cpp
../policy/feerate.cpp
../policy/packages.cpp
../policy/policy.cpp
../policy/rbf.cpp
../policy/settings.cpp
../policy/truc_policy.cpp
../pow.cpp
../primitives/block.cpp
../primitives/transaction.cpp
../pubkey.cpp
../random.cpp
../randomenv.cpp
../script/interpreter.cpp
../script/script.cpp
../script/script_error.cpp
../script/sigcache.cpp
../script/solver.cpp
../signet.cpp
../streams.cpp
../support/lockedpool.cpp
../sync.cpp
../txdb.cpp
../txmempool.cpp
../uint256.cpp
../util/chaintype.cpp
../util/check.cpp
../util/feefrac.cpp
../util/fs.cpp
../util/fs_helpers.cpp
../util/hasher.cpp
../util/moneystr.cpp
../util/rbf.cpp
../util/serfloat.cpp
../util/signalinterrupt.cpp
../util/strencodings.cpp
../util/string.cpp
../util/syserror.cpp
../util/threadnames.cpp
../util/time.cpp
../util/tokenpipe.cpp
../validation.cpp
../validationinterface.cpp
../versionbits.cpp
)
target_link_libraries(bitcoinkernel
PRIVATE
core_interface
bitcoin_clientversion
bitcoin_crypto
leveldb
secp256k1
$<TARGET_NAME_IF_EXISTS:USDT::headers>
PUBLIC
Boost::headers
)
# libbitcoinkernel requires default symbol visibility, explicitly
# specify that here so that things still work even when user
# configures with -DREDUCE_EXPORTS=ON
#
# Note this is a quick hack that will be removed as we
# incrementally define what to export from the library.
set_target_properties(bitcoinkernel PROPERTIES
CXX_VISIBILITY_PRESET default
)
# Add a convenience libbitcoinkernel target as a synonym for bitcoinkernel.
add_custom_target(libbitcoinkernel)
add_dependencies(libbitcoinkernel bitcoinkernel)
# When building the static library, install all static libraries the
# bitcoinkernel depends on.
if(NOT BUILD_SHARED_LIBS)
# Recursively get all the static libraries a target depends on and put them in libs_out
function(get_target_static_link_libs target libs_out)
get_target_property(linked_libraries ${target} LINK_LIBRARIES)
foreach(dep ${linked_libraries})
if(TARGET ${dep})
add_dependencies(libbitcoinkernel ${dep})
get_target_property(dep_type ${dep} TYPE)
if(dep_type STREQUAL "STATIC_LIBRARY")
list(APPEND ${libs_out} ${dep})
get_target_static_link_libs(${dep} ${libs_out})
endif()
endif()
endforeach()
set(${libs_out} ${${libs_out}} PARENT_SCOPE)
endfunction()
set(all_kernel_static_link_libs "")
get_target_static_link_libs(bitcoinkernel all_kernel_static_link_libs)
install(TARGETS ${all_kernel_static_link_libs} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libbitcoinkernel)
list(TRANSFORM all_kernel_static_link_libs PREPEND "-l")
# LIBS_PRIVATE is substituted in the pkg-config file.
list(JOIN all_kernel_static_link_libs " " LIBS_PRIVATE)
endif()
configure_file(${PROJECT_SOURCE_DIR}/libbitcoinkernel.pc.in ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc @ONLY)
install(FILES ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" COMPONENT libbitcoinkernel)
install(TARGETS bitcoinkernel
RUNTIME
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT libbitcoinkernel
LIBRARY
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT libbitcoinkernel
ARCHIVE
DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT libbitcoinkernel
)