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