CMakeLists.txt raw
1 # Copyright (c) 2023-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 add_library(limenkaconsensus
8 ../script/limenkaconsensus.cpp
9 ../util/strencodings.cpp
10 )
11 target_compile_definitions(limenkaconsensus
12 PRIVATE
13 BUILD_LIMENKA_INTERNAL
14 )
15 target_link_libraries(limenkaconsensus
16 PRIVATE
17 core_interface
18 external_lib_interface
19 limenka_consensus
20 limenka_crypto
21 secp256k1
22 )
23 set_target_properties(limenkaconsensus PROPERTIES
24 SOVERSION 0
25 VERSION 0.0.0
26 )
27
28 add_library(liblimenkaconsensus ALIAS limenkaconsensus)
29
30 # When building the static library, install all static libraries the
31 # liblimenkaconsensus depends on.
32 if(NOT BUILD_SHARED_LIBS)
33 # Recursively get all the static libraries a target depends on and put them in libs_out
34 function(get_liblimenkaconsensus_static_link_libs target libs_out)
35 get_target_property(linked_libraries ${target} LINK_LIBRARIES)
36 foreach(dep ${linked_libraries})
37 if(TARGET ${dep})
38 add_dependencies(limenkaconsensus ${dep})
39 get_target_property(dep_type ${dep} TYPE)
40 if(dep_type STREQUAL "STATIC_LIBRARY")
41 list(APPEND ${libs_out} ${dep})
42 get_liblimenkaconsensus_static_link_libs(${dep} ${libs_out})
43 endif()
44 endif()
45 endforeach()
46 set(${libs_out} ${${libs_out}} PARENT_SCOPE)
47 endfunction()
48
49 set(all_consensus_static_link_libs "")
50 get_liblimenkaconsensus_static_link_libs(limenkaconsensus all_consensus_static_link_libs)
51
52 install(TARGETS ${all_consensus_static_link_libs} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT liblimenkaconsensus)
53 list(TRANSFORM all_consensus_static_link_libs PREPEND "-l")
54 # LIBS_PRIVATE is substituted in the pkg-config file.
55 list(JOIN all_consensus_static_link_libs " " LIBS_PRIVATE)
56 target_compile_definitions(limenkaconsensus PRIVATE STATIC_LIBLIMENKACONSENSUS)
57 set(MAYBE_DEFINE_STATIC_LIBLIMENKACONSENSUS "-DSTATIC_LIBLIMENKACONSENSUS")
58 else()
59 set(MAYBE_DEFINE_STATIC_LIBLIMENKACONSENSUS )
60 endif()
61
62 configure_file(${PROJECT_SOURCE_DIR}/liblimenkaconsensus.pc.in ${PROJECT_BINARY_DIR}/liblimenkaconsensus.pc @ONLY)
63 install(FILES ${PROJECT_BINARY_DIR}/liblimenkaconsensus.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" COMPONENT limenkaconsensus)
64
65 install(TARGETS limenkaconsensus
66 RUNTIME
67 DESTINATION ${CMAKE_INSTALL_BINDIR}
68 COMPONENT limenkaconsensus
69 LIBRARY
70 DESTINATION ${CMAKE_INSTALL_LIBDIR}
71 COMPONENT limenkaconsensus
72 ARCHIVE
73 DESTINATION ${CMAKE_INSTALL_LIBDIR}
74 COMPONENT limenkaconsensus
75 )
76 install(FILES ../script/limenkaconsensus.h
77 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
78 )
79