blob: 64c1b6d3bae478cc8548b2b3a5ea16e60a5a67c1 [file] [log] [blame]
Adrien Béraud53bc4452023-07-12 11:15:13 -04001cmake_minimum_required(VERSION 3.16)
Adrien Béraudd50178b2023-07-09 21:41:12 -04002project(dhtnet
3 VERSION 0.0.1
4 LANGUAGES CXX
5 DESCRIPTION "A C++ library for NAT traversal and secure communication")
Adrien Béraud612b55b2023-05-29 10:42:04 -04006
7set(CMAKE_CXX_STANDARD 17)
8set(CMAKE_CXX_STANDARD_REQUIRED ON)
Adrien Béraudefe27372023-05-27 18:56:29 -04009include(CTest)
Adrien Béraud665d1112023-06-01 19:03:57 -040010include(GNUInstallDirs)
Amna366382f2023-10-02 16:37:02 -040011include(CheckIncludeFileCXX)
Adrien Bérauda4030cd2023-06-21 09:35:40 -040012set (prefix ${CMAKE_INSTALL_PREFIX})
13set (exec_prefix "\${prefix}")
14set (libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
15set (includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
Amnaf38fa102024-02-01 16:39:30 -050016set (bindir "${CMAKE_INSTALL_FULL_BINDIR}")
17set (sysconfdir "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
Louis Maillard88389182024-07-23 14:36:38 -040018set (docdir "${CMAKE_INSTALL_FULL_DOCDIR}")
Amnaf38fa102024-02-01 16:39:30 -050019set (top_srcdir "${CMAKE_CURRENT_SOURCE_DIR}")
Adrien Béraudd50178b2023-07-09 21:41:12 -040020set (VERSION ${CMAKE_PROJECT_VERSION})
Adrien Béraud612b55b2023-05-29 10:42:04 -040021
Adrien Béraud370257c2023-08-15 20:53:09 -040022option(DHTNET_PUPNP "Enable UPnP support" ON)
23option(DHTNET_NATPMP "Enable NAT-PMP support" ON)
Adrien Beraudb975dbf2023-08-22 17:33:42 -040024option(DHTNET_TESTABLE "Enable API for tests" ON)
Andreas Traczyk24cc01e2023-08-23 18:55:15 -040025option(BUILD_TOOLS "Build tools" ON)
François-Simon Fauteux-Chapleau67222a72024-03-25 12:24:44 -040026option(BUILD_BENCHMARKS "Build benchmarks" ON)
Amna41d76622023-09-20 11:14:27 -040027option(BUILD_DEPENDENCIES "Build dependencies" ON)
François-Simon Fauteux-Chapleau67222a72024-03-25 12:24:44 -040028option(DNC_SYSTEMD_UNIT_FILE_LOCATION "Where to install systemd unit file")
Amna061ead62024-02-08 16:27:52 -050029option(DNC_SYSTEMD "Enable dnc systemd integration" ON)
Sébastien Blin55be5da2024-02-12 11:29:54 -050030option(CODE_COVERAGE "Enable coverage reporting" OFF)
31
32# Check if testing is enabled
33if(BUILD_TESTING)
34 if(CODE_COVERAGE)
35 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
36 # Add the flags for coverage
37 add_compile_options(-fprofile-arcs -ftest-coverage --coverage -O0)
38 link_libraries(--coverage)
39 endif()
40 endif()
41endif()
Andreas Traczyk24cc01e2023-08-23 18:55:15 -040042
43if (NOT MSVC)
François-Simon Fauteux-Chapleauc3855512024-04-29 11:39:04 -040044 # Check if there's a recent enough version of msgpack installed on the system
45 find_package(msgpack 5.0.0 QUIET CONFIG NAMES msgpack msgpackc-cxx)
46 if (msgpack_FOUND)
47 set(MSGPACK_TARGET "msgpackc-cxx")
48 else()
49 find_package(msgpack 5.0.0 QUIET CONFIG NAMES msgpack-cxx)
50 if (msgpack_FOUND)
51 set(MSGPACK_TARGET "msgpack-cxx")
52 endif()
53 endif()
54 # If no suitable version of msgpack was found, build the one
55 # included as a submodule in the dependencies folder
56 if (NOT msgpack_FOUND)
57 set(DEPENDENCIES_BUILD_ARGS "--build-msgpack")
58 else()
59 set(DEPENDENCIES_BUILD_ARGS "")
60 endif()
61
Adrien Béraudb1bcdec2023-11-23 14:45:54 -050062 set(DEPENDENCIES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/install/${TARGET})
63 message("dependencies path: ${DEPENDENCIES_PATH}")
Amna41d76622023-09-20 11:14:27 -040064 if (BUILD_DEPENDENCIES)
Amnae7711902023-09-28 18:56:36 -040065 find_package(Python3 COMPONENTS Interpreter)
66 execute_process(
François-Simon Fauteux-Chapleauc3855512024-04-29 11:39:04 -040067 COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/build.py ${DEPENDENCIES_BUILD_ARGS}
Amnae7711902023-09-28 18:56:36 -040068 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dependencies
Sébastien Blin55be5da2024-02-12 11:29:54 -050069 RESULT_VARIABLE BUILD_RESULT
Amnae7711902023-09-28 18:56:36 -040070 )
Sébastien Blin55be5da2024-02-12 11:29:54 -050071 if (BUILD_RESULT)
72 message(FATAL_ERROR "Failed to execute build.py script.")
73 endif()
Amna41d76622023-09-20 11:14:27 -040074 endif()
Adrien Béraudb1bcdec2023-11-23 14:45:54 -050075 include (GNUInstallDirs)
76 list(APPEND CMAKE_FIND_ROOT_PATH ${DEPENDENCIES_PATH})
77 set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
78 list(APPEND CMAKE_PREFIX_PATH ${DEPENDENCIES_PATH})
Andreas Traczyk24cc01e2023-08-23 18:55:15 -040079 find_package (PkgConfig REQUIRED)
Amna23158302023-12-04 14:08:19 -050080 if(NOT BUILD_SHARED_LIBS)
Adrien Béraudb1bcdec2023-11-23 14:45:54 -050081 list(APPEND PKG_CONFIG_EXECUTABLE "--static")
82 endif()
Andreas Traczyk24cc01e2023-08-23 18:55:15 -040083
Amna05eb28d2024-01-15 15:43:42 -050084 if (BUILD_TOOLS)
85 find_package(yaml-cpp REQUIRED)
86 endif()
87
Amna4e52b162024-01-14 21:16:57 -050088 include_directories(${YAML_CPP_INCLUDE_DIR})
Andreas Traczyk24cc01e2023-08-23 18:55:15 -040089 find_package(fmt)
Amna41d76622023-09-20 11:14:27 -040090 pkg_search_module (opendht REQUIRED IMPORTED_TARGET opendht)
91 pkg_search_module (pjproject REQUIRED IMPORTED_TARGET libpjproject)
Andreas Traczyk24cc01e2023-08-23 18:55:15 -040092else()
93 set (WIN32_DEP_DIR ${PROJECT_SOURCE_DIR}/../)
94 include_directories(
95 ${WIN32_DEP_DIR}/../msvc/include
96 ${WIN32_DEP_DIR}/msgpack-c/include
97 ${WIN32_DEP_DIR}/asio/asio/include
98 ${WIN32_DEP_DIR}/fmt/include
99 ${WIN32_DEP_DIR}/pjproject/pjlib/include
100 ${WIN32_DEP_DIR}/pjproject/pjlib-util/include
101 ${WIN32_DEP_DIR}/pjproject/pjnath/include
102 ${WIN32_DEP_DIR}/opendht/include
103 ${WIN32_DEP_DIR}/opendht/src/compat/msvc
104 ${WIN32_DEP_DIR}/openssl/include
105 ${WIN32_DEP_DIR}/restinio/dev
106 ${WIN32_DEP_DIR}/http_parser
107 ${WIN32_DEP_DIR}/pupnp/include
108 ${WIN32_DEP_DIR}/natpmp/include
109 )
110 # windirent.h
111 include_directories(include/compat/msvc)
112endif()
113
114if (NOT MSVC)
115 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
116 -DMSGPACK_NO_BOOST \
117 -DMSGPACK_DISABLE_LEGACY_NIL \
118 -DMSGPACK_DISABLE_LEGACY_CONVERT")
119else()
120 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
121 -DGNUTLS_INTERNAL_BUILD \
122 -D_USE_MATH_DEFINES \
123 -D_SCL_SECURE_NO_WARNINGS \
124 -D_CRT_SECURE_NO_WARNINGS \
125 -D_WINSOCK_DEPRECATED_NO_WARNINGS \
126 -DASIO_STANDALONE \
127 -DWIN32_LEAN_AND_MEAN \
128 -D_WIN32_WINNT=0x0601 \
129 -DNATPMP_STATICLIB \
130 -DMSGPACK_NO_BOOST \
131 -DMSGPACK_DISABLE_LEGACY_NIL \
132 -DMSGPACK_DISABLE_LEGACY_CONVERT \
133 -DUNICODE \
Andreas Traczyk9e064bf2024-09-05 16:10:11 -0400134 -D_UNICODE \
135 -DNOMINMAX \
136 ")
Andreas Traczyk24cc01e2023-08-23 18:55:15 -0400137endif()
Adrien Béraud370257c2023-08-15 20:53:09 -0400138
Amna061ead62024-02-08 16:27:52 -0500139if (DNC_SYSTEMD AND BUILD_TOOLS AND NOT MSVC)
Amnaf38fa102024-02-01 16:39:30 -0500140 if (NOT DEFINED DNC_SYSTEMD_UNIT_FILE_LOCATION OR NOT DNC_SYSTEMD_UNIT_FILE_LOCATION)
Amna061ead62024-02-08 16:27:52 -0500141 execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} systemd --variable=systemdsystemunitdir
142 OUTPUT_VARIABLE SYSTEMD_UNIT_INSTALL_DIR)
143 message("-- Using Systemd unit installation directory by pkg-config: " ${SYSTEMD_UNIT_INSTALL_DIR})
144 else()
145 message("-- Using Systemd unit installation directory requested: " ${DNC_SYSTEMD_UNIT_FILE_LOCATION})
146 set(SYSTEMD_UNIT_INSTALL_DIR ${DNC_SYSTEMD_UNIT_FILE_LOCATION})
147 endif()
Amnaf38fa102024-02-01 16:39:30 -0500148
Louis Maillard88a3c8c2024-07-24 16:25:45 -0400149 if (NOT DEFINED DNC_SYSTEMD_PRESET_FILE_LOCATION OR NOT DNC_SYSTEMD_PRESET_FILE_LOCATION)
150 execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} systemd --variable=systemdsystempresetdir
151 OUTPUT_VARIABLE SYSTEMD_PRESET_INSTALL_DIR)
152 message("-- Using Systemd preset installation directory by pkg-config: " ${SYSTEMD_PRESET_INSTALL_DIR})
153 else()
154 message("-- Using Systemd preset installation directory requested: " ${DNC_SYSTEMD_PRESET_FILE_LOCATION})
155 set(SYSTEMD_PRESET_INSTALL_DIR ${DNC_SYSTEMD_PRESET_FILE_LOCATION})
156 endif()
157
Amna061ead62024-02-08 16:27:52 -0500158 configure_file (
159 tools/dnc/systemd/dnc.service.in
160 systemd/dnc.service
161 @ONLY
162 )
163 if (SYSTEMD_UNIT_INSTALL_DIR)
164 string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_UNIT_INSTALL_DIR "${SYSTEMD_UNIT_INSTALL_DIR}")
165 set (systemdunitdir "${SYSTEMD_UNIT_INSTALL_DIR}")
166 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/systemd/dnc.service DESTINATION ${systemdunitdir})
Louis Maillard88a3c8c2024-07-24 16:25:45 -0400167
168 string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_PRESET_INSTALL_DIR "${SYSTEMD_PRESET_INSTALL_DIR}")
169 set (systemdpresetdir "${SYSTEMD_PRESET_INSTALL_DIR}")
170 install (FILES tools/dnc/systemd/dhtnet-dnc.preset DESTINATION ${systemdpresetdir})
171
Amna061ead62024-02-08 16:27:52 -0500172 install (FILES tools/dnc/dnc.yaml DESTINATION ${sysconfdir}/dhtnet/)
173 else()
174 message(WARNING "Systemd unit installation directory not found. The systemd unit won't be installed.")
Amnaf38fa102024-02-01 16:39:30 -0500175 endif()
176endif()
Adrien Béraud612b55b2023-05-29 10:42:04 -0400177# Sources
178list (APPEND dhtnet_SOURCES
179 src/connectionmanager.cpp
180 src/ice_transport.cpp
181 src/multiplexed_socket.cpp
182 src/peer_connection.cpp
183 src/string_utils.cpp
184 src/fileutils.cpp
Adrien Béraud80c14e12023-07-18 16:13:15 -0400185 src/ip_utils.cpp
Adrien Béraud612b55b2023-05-29 10:42:04 -0400186 src/security/tls_session.cpp
187 src/security/certstore.cpp
188 src/security/threadloop.cpp
Adrien Béraud45dfac92023-07-19 00:08:50 -0400189 src/security/diffie-hellman.cpp
Adrien Bérauda1d294f2023-07-17 22:42:13 -0400190 src/turn/turn_cache.cpp
191 src/turn/turn_transport.cpp
Morteza Namvar5f639522023-07-04 17:08:58 -0400192 src/upnp/upnp_context.cpp
193 src/upnp/upnp_control.cpp
194 src/upnp/protocol/mapping.cpp
Adrien Béraud80c14e12023-07-18 16:13:15 -0400195 src/upnp/protocol/igd.cpp
Adrien Béraud612b55b2023-05-29 10:42:04 -0400196)
197
198list (APPEND dhtnet_HEADERS
Adrien Béraud149f29e2023-07-05 14:47:49 -0400199 include/connectionmanager.h
200 include/multiplexed_socket.h
201 include/tls_session.h
202 include/certstore.h
203 include/ice_options.h
Adrien Béraud6de3f882023-07-06 12:56:29 -0400204 include/ice_transport.h
Adrien Béraudcb121f82023-07-08 09:18:39 -0400205 include/ice_transport_factory.h
Adrien Béraudaa8c4422023-07-07 11:40:36 -0400206 include/ice_socket.h
Adrien Béraud149f29e2023-07-05 14:47:49 -0400207 include/fileutils.h
208 include/string_utils.h
209 include/ip_utils.h
210 include/upnp/mapping.h
211 include/upnp/upnp_context.h
212 include/upnp/upnp_control.h
Adrien Béraud612b55b2023-05-29 10:42:04 -0400213)
214
Andreas Traczyk24cc01e2023-08-23 18:55:15 -0400215# Port mapping dependencies - add sources and libraries
216if (DHTNET_PUPNP AND NOT MSVC)
Adrien Béraud370257c2023-08-15 20:53:09 -0400217 pkg_search_module (upnp IMPORTED_TARGET upnp libupnp)
218 if (NOT upnp_FOUND)
219 message("libupnp not found: disabling")
220 set(DHTNET_PUPNP Off)
Adrien Béraud6c6a9622023-08-27 12:49:31 -0400221 else()
François-Simon Fauteux-Chapleau67222a72024-03-25 12:24:44 -0400222 message("libupnp found")
Adrien Béraud6c6a9622023-08-27 12:49:31 -0400223 set(upnp_LIBRARIES PkgConfig::upnp)
Adrien Béraud0e6730e2023-08-29 14:12:52 -0400224 set (requiresprivate "${requiresprivate} libupnp")
Adrien Béraud370257c2023-08-15 20:53:09 -0400225 endif()
226endif()
Andreas Traczyk24cc01e2023-08-23 18:55:15 -0400227if (DHTNET_NATPMP AND NOT MSVC)
Adrien Béraud370257c2023-08-15 20:53:09 -0400228 pkg_search_module (natpmp IMPORTED_TARGET natpmp)
229 if (NOT natpmp_FOUND)
230 find_library(natpmp_LIBRARIES natpmp)
231 if (NOT natpmp_LIBRARIES)
232 message("NAT-PMP not found: disabling")
233 set(DHTNET_NATPMP Off)
234 else()
235 message("NAT-PMP found: ${natpmp_LIBRARIES}")
Adrien Béraud0e6730e2023-08-29 14:12:52 -0400236 set (libsprivate "${libsprivate} -lnatpmp")
Adrien Béraud370257c2023-08-15 20:53:09 -0400237 endif()
Adrien Beraud40673972024-07-22 16:59:25 -0400238 else()
239 message("NAT-PMP found")
240 set(natpmp_LIBRARIES PkgConfig::natpmp)
Adrien Beraudcfe512b2024-07-22 17:16:05 -0400241 set (requiresprivate "${requiresprivate} natpmp")
Adrien Béraud370257c2023-08-15 20:53:09 -0400242 endif()
Andreas Traczyk24cc01e2023-08-23 18:55:15 -0400243endif()
244
245if (DHTNET_PUPNP)
246 list (APPEND dhtnet_PRIVATE_DEFS HAVE_LIBUPNP)
247 list (APPEND dhtnet_SOURCES
248 src/upnp/protocol/pupnp/pupnp.cpp
249 src/upnp/protocol/pupnp/upnp_igd.cpp
250 )
251 list (APPEND dhtnet_PRIVATELIBS ${upnp_LIBRARIES})
252endif()
253if (DHTNET_NATPMP)
254 list (APPEND dhtnet_PRIVATE_DEFS HAVE_LIBNATPMP)
255 list (APPEND dhtnet_SOURCES
256 src/upnp/protocol/natpmp/nat_pmp.cpp
257 src/upnp/protocol/natpmp/pmp_igd.cpp
258 )
259 list (APPEND dhtnet_PRIVATELIBS ${natpmp_LIBRARIES})
Adrien Béraud370257c2023-08-15 20:53:09 -0400260endif()
261
Adrien Béraud612b55b2023-05-29 10:42:04 -0400262add_library(dhtnet ${dhtnet_SOURCES})
Andreas Traczyk24cc01e2023-08-23 18:55:15 -0400263if (NOT MSVC)
264 target_link_libraries(dhtnet PUBLIC PkgConfig::opendht PkgConfig::pjproject fmt::fmt ${MSGPACK_LIB})
265else()
266 target_link_libraries(dhtnet PUBLIC
267 ${WIN32_DEP_DIR}/../msvc/lib/libopendht.lib
268 ${WIN32_DEP_DIR}/../msvc/lib/libpjproject.lib
269 ${WIN32_DEP_DIR}/../msvc/lib/libfmt.lib
270 ${WIN32_DEP_DIR}/../msvc/lib/libmsgpackc-cxx.lib)
271endif()
François-Simon Fauteux-Chapleauc3855512024-04-29 11:39:04 -0400272if (msgpack_FOUND)
Adrien Béraud62aefa62023-10-05 22:30:09 -0400273 target_link_libraries(dhtnet PUBLIC ${MSGPACK_TARGET})
Amna366382f2023-10-02 16:37:02 -0400274endif()
Adrien Béraud06271002023-07-27 15:52:29 -0400275if (APPLE)
Adrien Béraud08548d92023-07-27 16:02:48 -0400276 target_link_libraries(dhtnet PRIVATE "-framework CoreFoundation" "-framework Security" "resolv")
Adrien Béraud06271002023-07-27 15:52:29 -0400277endif()
278
Adrien Béraud665d1112023-06-01 19:03:57 -0400279target_include_directories(dhtnet PUBLIC
280 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
281 $<INSTALL_INTERFACE:include>
282)
Andreas Traczyk24cc01e2023-08-23 18:55:15 -0400283
284target_compile_definitions(dhtnet PRIVATE ${dhtnet_PRIVATE_DEFS})
285target_link_libraries(dhtnet PRIVATE ${dhtnet_PRIVATELIBS})
286if (MSVC)
287 target_compile_definitions(dhtnet PRIVATE
288 _CRT_SECURE_NO_WARNINGS
289 _WINSOCK_DEPRECATED_NO_WARNINGS
290 ASIO_STANDALONE
291 _WIN32_WINNT=0x0601
292 MSGPACK_NO_BOOST
293 MSGPACK_DISABLE_LEGACY_NIL
294 MSGPACK_DISABLE_LEGACY_CONVERT
295 DHTNET_STATIC
296 DHTNET_STATIC_DEFINE
297 DHTNET_EXPORTS
298 DHTNET_BUILDING
299 DHT)
300 target_compile_options(dhtnet PRIVATE
301 /O2; /Oi; ${DEFAULT_CXX_RUNTIME_LIBRARY}; /Gy; /MP; /Oy-; /sdl-; /W0;
302 /FC; /FS; /nologo; /Zi; /wd4996; /wd4503; /wd4180; /wd4244; /wd4267;
303 /Zc:__cplusplus;
304 ${DEFAULT_CXX_EXCEPTION_HANDLING})
305else()
306 target_compile_definitions(dhtnet PUBLIC PJ_AUTOCONF=1)
Adrien Béraud370257c2023-08-15 20:53:09 -0400307endif()
Andreas Traczyk24cc01e2023-08-23 18:55:15 -0400308
309if (BUILD_TESTING AND NOT MSVC)
Adrien Béraud6b6a5d32023-08-15 15:53:33 -0400310 target_compile_definitions(dhtnet PUBLIC DHTNET_TESTABLE)
311endif()
Adrien Bérauda4030cd2023-06-21 09:35:40 -0400312
313configure_file(dhtnet.pc.in dhtnet.pc @ONLY)
314
Adrien Bérauda4030cd2023-06-21 09:35:40 -0400315# Install targets
Adrien Béraud13e33432023-07-18 14:49:35 -0400316install(TARGETS dhtnet)
Adrien Béraud149f29e2023-07-05 14:47:49 -0400317install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dhtnet)
Adrien Béraud13e33432023-07-18 14:49:35 -0400318install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dhtnet.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
Adrien Bérauda4030cd2023-06-21 09:35:40 -0400319
Andreas Traczyk24cc01e2023-08-23 18:55:15 -0400320if (BUILD_TOOLS AND NOT MSVC)
Amna38768302023-08-21 11:51:56 -0400321 add_executable(dnc
322 tools/dnc/main.cpp
323 tools/dnc/dnc.cpp
Amna423b25b2024-02-06 13:21:19 -0500324 tools/common.cpp
325 tools/dhtnet_crtmgr/dhtnet_crtmgr.cpp)
Amna41848a22024-01-22 16:22:57 -0500326 target_link_libraries(dnc PRIVATE dhtnet fmt::fmt yaml-cpp)
Amna38768302023-08-21 11:51:56 -0400327 target_include_directories(dnc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tools)
328 install(TARGETS dnc RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
Adrien Béraudb75ab9d2023-08-23 09:26:58 -0400329
Amna4a70f5c2023-09-14 17:32:05 -0400330 add_executable(dsh
331 tools/dsh/main.cpp
332 tools/dsh/dsh.cpp
Amna423b25b2024-02-06 13:21:19 -0500333 tools/common.cpp
334 tools/dhtnet_crtmgr/dhtnet_crtmgr.cpp)
Amna41848a22024-01-22 16:22:57 -0500335 target_link_libraries(dsh PRIVATE dhtnet fmt::fmt yaml-cpp)
Amna4e52b162024-01-14 21:16:57 -0500336 target_include_directories(dsh PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tools)
Amna4a70f5c2023-09-14 17:32:05 -0400337 install(TARGETS dsh RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
338
Adrien Béraude2c74e22024-02-22 14:12:29 -0500339 # dvpn is a Linux-only tool
340 if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
341 add_executable(dvpn
342 tools/dvpn/main.cpp
343 tools/dvpn/dvpn.cpp
344 tools/common.cpp
345 tools/dhtnet_crtmgr/dhtnet_crtmgr.cpp)
346 target_link_libraries(dvpn PRIVATE dhtnet fmt::fmt yaml-cpp)
347 target_include_directories(dvpn PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tools)
348 install(TARGETS dvpn RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
349 endif()
Amna4e52b162024-01-14 21:16:57 -0500350
Adrien Béraudbd09c992023-09-20 11:55:37 -0400351 find_library(READLINE_LIBRARIES readline)
352 find_path(READLINE_INCLUDE_DIR readline/readline.h)
353 add_library(readline STATIC IMPORTED)
354 set_target_properties(readline PROPERTIES
355 IMPORTED_LOCATION "${READLINE_LIBRARIES}"
356 INTERFACE_INCLUDE_DIRECTORIES "${READLINE_INCLUDE_DIR}")
Adrien Béraudb75ab9d2023-08-23 09:26:58 -0400357 add_executable(upnpctrl
358 tools/upnp/upnpctrl.cpp)
359 target_link_libraries(upnpctrl PRIVATE dhtnet fmt::fmt readline)
360 target_include_directories(upnpctrl PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tools)
361 install(TARGETS upnpctrl RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
Amnab10c6e72023-09-25 11:12:35 -0400362
Amna423b25b2024-02-06 13:21:19 -0500363 add_executable(dhtnet-crtmgr
364 tools/dhtnet_crtmgr/main.cpp
365 tools/dhtnet_crtmgr/dhtnet_crtmgr.cpp)
366 target_link_libraries(dhtnet-crtmgr PRIVATE dhtnet fmt::fmt)
367 target_include_directories(dhtnet-crtmgr PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tools)
368 install(TARGETS dhtnet-crtmgr RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
369
Amnae61e1562024-06-25 09:50:29 -0400370 add_executable(peerDiscovery
371 tools/peerdiscovery/peerDiscovery.cpp)
372 target_link_libraries(peerDiscovery PRIVATE dhtnet fmt::fmt readline)
373 target_include_directories(peerDiscovery PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tools/peerdiscovery)
374 install(TARGETS peerDiscovery RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
375
Amnab10c6e72023-09-25 11:12:35 -0400376 install(FILES
377 tools/dnc/dnc.1
378 tools/dsh/dsh.1
Amna77e27dc2024-07-24 13:09:40 -0400379 tools/dvpn/dvpn.1
380 tools/dhtnet_crtmgr/dhtnet-crtmgr.1
Louis Maillard88389182024-07-23 14:36:38 -0400381 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
382
383 install(FILES README.md DESTINATION ${docdir})
384 install(FILES tools/dnc/README.md RENAME DNC.md DESTINATION ${docdir})
385 install(FILES tools/dsh/README.md RENAME DSH.md DESTINATION ${docdir})
386 install(FILES tools/dvpn/README.md RENAME DVPN.md DESTINATION ${docdir})
387 install(FILES tools/dhtnet_crtmgr/README.md RENAME DHTNET_CRTMGR.md DESTINATION ${docdir})
Amna38768302023-08-21 11:51:56 -0400388endif()
389
Adrien Béraud6c6a9622023-08-27 12:49:31 -0400390if (BUILD_BENCHMARKS)
391 add_executable(bench
392 tools/benchmark/main.cpp
393 tools/common.cpp)
394 target_link_libraries(bench PRIVATE dhtnet fmt::fmt)
395 target_include_directories(bench PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tools)
396 install(TARGETS bench RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
397endif()
398
Adrien Béraudefe27372023-05-27 18:56:29 -0400399if (BUILD_TESTING AND NOT MSVC)
400 pkg_search_module(Cppunit REQUIRED IMPORTED_TARGET cppunit)
401 add_executable(tests_certstore tests/certstore.cpp)
402 target_link_libraries(tests_certstore PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
403 add_test(NAME tests_certstore COMMAND tests_certstore)
404
405 add_executable(tests_connectionManager tests/connectionManager.cpp)
406 target_link_libraries(tests_connectionManager PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
407 add_test(NAME tests_connectionManager COMMAND tests_connectionManager)
408
Adrien Béraud2a4e73d2023-08-27 12:53:55 -0400409 add_executable(tests_fileutils tests/testFileutils.cpp)
410 target_link_libraries(tests_fileutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
411 add_test(NAME tests_fileutils COMMAND tests_fileutils)
Adrien Béraudefe27372023-05-27 18:56:29 -0400412
Amna0b50a032024-02-13 14:42:26 -0500413 add_executable(tests_ice tests/ice.cpp)
414 target_link_libraries(tests_ice PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
415 add_test(NAME tests_ice COMMAND tests_ice)
416
François-Simon Fauteux-Chapleau25693412024-04-10 11:49:18 -0400417 add_executable(tests_turnCache tests/turnCache.cpp)
418 target_link_libraries(tests_turnCache PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
419 add_test(NAME tests_turnCache COMMAND tests_turnCache)
420
Amna4d2942e2024-05-01 18:27:34 -0400421 add_executable(tests_peerDiscovery tests/peerDiscovery.cpp)
422 target_link_libraries(tests_peerDiscovery PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
423 add_test(NAME tests_peerDiscovery COMMAND tests_peerDiscovery)
424
Adrien Béraudefe27372023-05-27 18:56:29 -0400425 #add_executable(tests_stringutils tests/testString_utils.cpp)
426 #target_link_libraries(tests_stringutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
427 #add_test(NAME tests_stringutils COMMAND tests_stringutils)
Amnae61e1562024-06-25 09:50:29 -0400428
Amnaf38fa102024-02-01 16:39:30 -0500429endif()