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