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