CMakeLists.txt 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. cmake_minimum_required (VERSION 3.2)
  2. project (syncspirit)
  3. set(CMAKE_CXX_STANDARD 20)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. set(CMAKE_CXX_VISIBILITY_PRESET hidden)
  6. set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
  7. cmake_policy(SET CMP0063 NEW)
  8. cmake_policy(SET CMP0077 NEW)
  9. include(GenerateExportHeader)
  10. set(CMAKE_POSITION_INDEPENDENT_CODE True)
  11. find_package(
  12. Boost
  13. COMPONENTS
  14. iostreams
  15. filesystem
  16. program_options
  17. system
  18. REQUIRED
  19. )
  20. find_package(OpenSSL REQUIRED)
  21. find_package(Protobuf REQUIRED)
  22. find_package(ZLIB REQUIRED)
  23. find_package(rotor COMPONENTS asio thread REQUIRED)
  24. find_package(lz4 REQUIRED)
  25. find_package(fmt REQUIRED)
  26. find_package(spdlog REQUIRED)
  27. find_package(pugixml REQUIRED)
  28. find_package(uriparser REQUIRED)
  29. find_package(tomlplusplus REQUIRED)
  30. find_package(nlohmann_json REQUIRED)
  31. set(SYNCSPIRIT_VERSION "v0.3.1")
  32. configure_file(misc/syncspirit-config.h.in include/syncspirit-config.h @ONLY)
  33. set(Protobuf_IMPORT_DIRS ${syncspirit_SOURCE_DIR}/src/protobuf)
  34. protobuf_generate_cpp(
  35. PROTO_SRCS PROTO_HDRS
  36. EXPORT_MACRO SYNCSPIRIT_API
  37. src/protobuf/bep.proto
  38. src/protobuf/structs.proto
  39. )
  40. add_library(syncspirit_pb ${PROTO_SRCS})
  41. generate_export_header(syncspirit_pb
  42. EXPORT_MACRO_NAME SYNCSPIRIT_API
  43. EXPORT_FILE_NAME include/syncspirit-export.h
  44. )
  45. target_compile_options(syncspirit_pb PRIVATE
  46. -include ${CMAKE_CURRENT_BINARY_DIR}/include/syncspirit-export.h
  47. )
  48. target_include_directories(syncspirit_pb PUBLIC
  49. ${Protobuf_INCLUDE_DIRS}
  50. ${CMAKE_CURRENT_BINARY_DIR}
  51. ${CMAKE_CURRENT_BINARY_DIR}/include
  52. )
  53. target_link_libraries(syncspirit_pb protobuf::libprotobuf)
  54. add_library(syncspirit_lib
  55. src/constants.cpp
  56. src/config/utils.cpp
  57. src/db/cursor.cpp
  58. src/db/error_code.cpp
  59. src/db/prefix.cpp
  60. src/db/transaction.cpp
  61. src/db/utils.cpp
  62. src/fs/chunk_iterator.cpp
  63. src/fs/file.cpp
  64. src/fs/file_actor.cpp
  65. src/fs/fs_supervisor.cpp
  66. src/fs/new_chunk_iterator.cpp
  67. src/fs/scan_actor.cpp
  68. src/fs/scan_task.cpp
  69. src/fs/utils.cpp
  70. src/hasher/hasher_actor.cpp
  71. src/hasher/hasher_proxy_actor.cpp
  72. src/hasher/hasher_supervisor.cpp
  73. src/model/diff/aggregate.cpp
  74. src/model/diff/base_diff.cpp
  75. src/model/diff/block_diff.cpp
  76. src/model/diff/block_visitor.cpp
  77. src/model/diff/contact_diff.cpp
  78. src/model/diff/contact_visitor.cpp
  79. src/model/diff/cluster_diff.cpp
  80. src/model/diff/cluster_visitor.cpp
  81. src/model/diff/load/blocks.cpp
  82. src/model/diff/load/close_transaction.cpp
  83. src/model/diff/load/devices.cpp
  84. src/model/diff/load/file_infos.cpp
  85. src/model/diff/load/folder_infos.cpp
  86. src/model/diff/load/folders.cpp
  87. src/model/diff/load/ignored_devices.cpp
  88. src/model/diff/load/ignored_folders.cpp
  89. src/model/diff/load/load_cluster.cpp
  90. src/model/diff/load/unknown_folders.cpp
  91. src/model/diff/modify/append_block.cpp
  92. src/model/diff/modify/block_ack.cpp
  93. src/model/diff/modify/block_rej.cpp
  94. src/model/diff/modify/block_transaction.cpp
  95. src/model/diff/modify/blocks_availability.cpp
  96. src/model/diff/modify/clone_block.cpp
  97. src/model/diff/modify/clone_file.cpp
  98. src/model/diff/modify/connect_request.cpp
  99. src/model/diff/modify/create_folder.cpp
  100. src/model/diff/modify/file_availability.cpp
  101. src/model/diff/modify/finish_file.cpp
  102. src/model/diff/modify/finish_file_ack.cpp
  103. src/model/diff/modify/lock_file.cpp
  104. src/model/diff/modify/mark_reachable.cpp
  105. src/model/diff/modify/local_update.cpp
  106. src/model/diff/modify/relay_connect_request.cpp
  107. src/model/diff/modify/share_folder.cpp
  108. src/model/diff/modify/unshare_folder.cpp
  109. src/model/diff/modify/update_contact.cpp
  110. src/model/diff/modify/update_peer.cpp
  111. src/model/diff/peer/peer_state.cpp
  112. src/model/diff/peer/cluster_remove.cpp
  113. src/model/diff/peer/cluster_update.cpp
  114. src/model/diff/peer/update_folder.cpp
  115. src/model/misc/block_iterator.cpp
  116. src/model/misc/error_code.cpp
  117. src/model/misc/file_block.cpp
  118. src/model/misc/file_iterator.cpp
  119. src/model/misc/updates_streamer.cpp
  120. src/model/misc/uuid.cpp
  121. src/model/misc/version_utils.cpp
  122. src/model/block_info.cpp
  123. src/model/cluster.cpp
  124. src/model/device.cpp
  125. src/model/device_id.cpp
  126. src/model/file_info.cpp
  127. src/model/folder.cpp
  128. src/model/folder_data.cpp
  129. src/model/folder_info.cpp
  130. src/model/ignored_device.cpp
  131. src/model/ignored_folder.cpp
  132. src/model/remote_folder_info.cpp
  133. src/model/unknown_folder.cpp
  134. src/net/acceptor_actor.cpp
  135. src/net/cluster_supervisor.cpp
  136. src/net/controller_actor.cpp
  137. src/net/db_actor.cpp
  138. src/net/dialer_actor.cpp
  139. src/net/global_discovery_actor.cpp
  140. src/net/http_actor.cpp
  141. src/net/initiator_actor.cpp
  142. src/net/local_discovery_actor.cpp
  143. src/net/messages.cpp
  144. src/net/net_supervisor.cpp
  145. src/net/peer_actor.cpp
  146. src/net/peer_supervisor.cpp
  147. src/net/relay_actor.cpp
  148. src/net/resolver_actor.cpp
  149. src/net/names.cpp
  150. src/net/ssdp_actor.cpp
  151. src/net/upnp_actor.cpp
  152. src/proto/bep_support.cpp
  153. src/proto/discovery_support.cpp
  154. src/proto/luhn32.cpp
  155. src/proto/relay_support.cpp
  156. src/proto/upnp_support.cpp
  157. src/transport/stream.cpp
  158. src/transport/http.cpp
  159. src/utils/base32.cpp
  160. src/utils/beast_support.cpp
  161. src/utils/error_code.cpp
  162. src/utils/location.cpp
  163. src/utils/log.cpp
  164. src/utils/network_interface.cpp
  165. src/utils/platform.cpp
  166. src/utils/tls.cpp
  167. src/utils/uri.cpp
  168. )
  169. set(BUILD_SHARED_LIBS false CACHE BOOL "BUILD_SHARED_LIBS")
  170. set(MDBX_BUILD_TOOLS false CACHE BOOL "MDBX_BUILD_TOOLS")
  171. set(MDBX_ENABLE_TESTS false CACHE BOOL "MDBX_ENABLE_TESTS")
  172. set(MDBX_BUILD_CXX false CACHE BOOL "MDBX_BUILD_CXX")
  173. set(MDBX_BUILD_SHARED_LIBRARY true CACHE BOOL "MDBX_BUILD_SHARED_LIBRARY")
  174. add_subdirectory("lib/mbdx")
  175. target_include_directories(syncspirit_lib PUBLIC
  176. ${syncspirit_SOURCE_DIR}/lib/mbdx
  177. ${OPENSSL_INCLUDE_DIR}
  178. ${CMAKE_CURRENT_BINARY_DIR}
  179. ${CMAKE_CURRENT_SOURCE_DIR}/src
  180. )
  181. target_link_libraries(syncspirit_lib
  182. syncspirit_pb
  183. rotor::asio
  184. rotor::thread
  185. pugixml::pugixml
  186. Boost::iostreams
  187. Boost::filesystem
  188. Boost::program_options
  189. Boost::system
  190. OpenSSL::SSL
  191. fmt::fmt
  192. spdlog::spdlog
  193. uriparser::uriparser
  194. tomlplusplus::tomlplusplus
  195. nlohmann_json::nlohmann_json
  196. lz4::lz4
  197. $<IF:$<PLATFORM_ID:Windows>,mdbx,mdbx-static>
  198. $<$<PLATFORM_ID:Windows>:iphlpapi>
  199. $<$<PLATFORM_ID:Windows>:ws2_32>
  200. )
  201. enable_testing()
  202. add_subdirectory("tests")
  203. add_subdirectory("src/ui-daemon")