blob: 71285032961b78087f1ebde6c8e5029ec3e7f1a2 [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
Amna38768302023-08-21 11:51:56 -04007option(BUILD_TOOLS "Build dnc" ON)
8
Amnae3fd9f52023-08-08 16:56:06 -04009OPTION(LIBJAMI_TESTABLE "Enable API for tests" ON)
10
11IF(LIBJAMI_TESTABLE)
12 ADD_DEFINITIONS(-DLIBJAMI_TESTABLE)
13ENDIF(LIBJAMI_TESTABLE)
14
Adrien Béraud612b55b2023-05-29 10:42:04 -040015set(CMAKE_CXX_STANDARD 17)
16set(CMAKE_CXX_STANDARD_REQUIRED ON)
Adrien Béraudefe27372023-05-27 18:56:29 -040017include(CTest)
Adrien Béraud665d1112023-06-01 19:03:57 -040018include(GNUInstallDirs)
Adrien Bérauda4030cd2023-06-21 09:35:40 -040019set (prefix ${CMAKE_INSTALL_PREFIX})
20set (exec_prefix "\${prefix}")
21set (libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
22set (includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
Adrien Béraudd50178b2023-07-09 21:41:12 -040023set (VERSION ${CMAKE_PROJECT_VERSION})
Adrien Béraud612b55b2023-05-29 10:42:04 -040024
25find_package (PkgConfig REQUIRED)
Adrien Béraud20649b52023-07-14 14:16:31 -040026
27find_package(msgpack-cxx CONFIG)
Adrien Béraud883c7652023-07-21 13:16:11 -040028if(msgpack-cxx_FOUND)
29 set(MSGPACK_LIB msgpack-cxx)
30else()
Adrien Béraud20649b52023-07-14 14:16:31 -040031 find_package(msgpackc-cxx CONFIG REQUIRED NAMES msgpackc-cxx msgpack)
Adrien Béraud883c7652023-07-21 13:16:11 -040032 set(MSGPACK_LIB msgpackc-cxx)
Adrien Bérauddbb06862023-07-08 09:18:39 -040033endif()
34
Adrien Béraudefe27372023-05-27 18:56:29 -040035find_package(fmt)
Adrien Béraud612b55b2023-05-29 10:42:04 -040036pkg_check_modules (opendht REQUIRED IMPORTED_TARGET opendht>=2.6.0)
37pkg_check_modules (pjproject REQUIRED IMPORTED_TARGET libpjproject)
38
39set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMSGPACK_NO_BOOST -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT")
40
Adrien Béraud370257c2023-08-15 20:53:09 -040041option(DHTNET_PUPNP "Enable UPnP support" ON)
42option(DHTNET_NATPMP "Enable NAT-PMP support" ON)
Amnae3fd9f52023-08-08 16:56:06 -040043OPTION(DHTNET_TESTABLE "Enable API for tests" BUILD_TESTING)
Adrien Béraud370257c2023-08-15 20:53:09 -040044
Adrien Béraud612b55b2023-05-29 10:42:04 -040045# Sources
46list (APPEND dhtnet_SOURCES
47 src/connectionmanager.cpp
48 src/ice_transport.cpp
49 src/multiplexed_socket.cpp
50 src/peer_connection.cpp
51 src/string_utils.cpp
52 src/fileutils.cpp
Adrien Béraud80c14e12023-07-18 16:13:15 -040053 src/ip_utils.cpp
Adrien Béraud612b55b2023-05-29 10:42:04 -040054 src/security/tls_session.cpp
55 src/security/certstore.cpp
56 src/security/threadloop.cpp
Adrien Béraud45dfac92023-07-19 00:08:50 -040057 src/security/diffie-hellman.cpp
Adrien Bérauda1d294f2023-07-17 22:42:13 -040058 src/turn/turn_cache.cpp
59 src/turn/turn_transport.cpp
Morteza Namvar5f639522023-07-04 17:08:58 -040060 src/upnp/upnp_context.cpp
61 src/upnp/upnp_control.cpp
62 src/upnp/protocol/mapping.cpp
Adrien Béraud80c14e12023-07-18 16:13:15 -040063 src/upnp/protocol/igd.cpp
Adrien Béraud612b55b2023-05-29 10:42:04 -040064)
65
66list (APPEND dhtnet_HEADERS
Adrien Béraud149f29e2023-07-05 14:47:49 -040067 include/connectionmanager.h
68 include/multiplexed_socket.h
69 include/tls_session.h
70 include/certstore.h
71 include/ice_options.h
Adrien Béraud6de3f882023-07-06 12:56:29 -040072 include/ice_transport.h
Adrien Béraudcb121f82023-07-08 09:18:39 -040073 include/ice_transport_factory.h
Adrien Béraudaa8c4422023-07-07 11:40:36 -040074 include/ice_socket.h
Adrien Béraud149f29e2023-07-05 14:47:49 -040075 include/fileutils.h
76 include/string_utils.h
77 include/ip_utils.h
78 include/upnp/mapping.h
79 include/upnp/upnp_context.h
80 include/upnp/upnp_control.h
Adrien Béraud612b55b2023-05-29 10:42:04 -040081)
82
Adrien Béraud370257c2023-08-15 20:53:09 -040083if (DHTNET_PUPNP)
84 pkg_search_module (upnp IMPORTED_TARGET upnp libupnp)
85 if (NOT upnp_FOUND)
86 message("libupnp not found: disabling")
87 set(DHTNET_PUPNP Off)
88 else()
89 list (APPEND dhtnet_SOURCES
90 src/upnp/protocol/pupnp/pupnp.cpp
91 src/upnp/protocol/pupnp/upnp_igd.cpp
92 )
Adrien Béraudadac7cf2023-08-16 15:28:33 -040093 set (requiresprivate "${requiresprivate} libupnp")
Adrien Béraud370257c2023-08-15 20:53:09 -040094 endif()
95endif()
96if (DHTNET_NATPMP)
97 pkg_search_module (natpmp IMPORTED_TARGET natpmp)
98 if (NOT natpmp_FOUND)
99 find_library(natpmp_LIBRARIES natpmp)
100 if (NOT natpmp_LIBRARIES)
101 message("NAT-PMP not found: disabling")
102 set(DHTNET_NATPMP Off)
103 else()
104 message("NAT-PMP found: ${natpmp_LIBRARIES}")
105 endif()
106 endif()
107 if (DHTNET_NATPMP)
108 list (APPEND dhtnet_SOURCES
109 src/upnp/protocol/natpmp/nat_pmp.cpp
110 src/upnp/protocol/natpmp/pmp_igd.cpp
111 )
Adrien Béraudadac7cf2023-08-16 15:28:33 -0400112 set (libsprivate "${libsprivate} ${natpmp_LIBRARIES}")
Adrien Béraud370257c2023-08-15 20:53:09 -0400113 endif()
114endif()
115
Adrien Béraud612b55b2023-05-29 10:42:04 -0400116add_library(dhtnet ${dhtnet_SOURCES})
Adrien Béraud883c7652023-07-21 13:16:11 -0400117target_link_libraries(dhtnet PUBLIC PkgConfig::opendht PkgConfig::pjproject fmt::fmt ${MSGPACK_LIB})
Adrien Béraud06271002023-07-27 15:52:29 -0400118if (APPLE)
Adrien Béraud08548d92023-07-27 16:02:48 -0400119 target_link_libraries(dhtnet PRIVATE "-framework CoreFoundation" "-framework Security" "resolv")
Adrien Béraud06271002023-07-27 15:52:29 -0400120endif()
121
Adrien Béraud665d1112023-06-01 19:03:57 -0400122target_include_directories(dhtnet PUBLIC
123 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
124 $<INSTALL_INTERFACE:include>
125)
Adrien Béraud370257c2023-08-15 20:53:09 -0400126if (DHTNET_PUPNP)
127 target_compile_definitions(dhtnet PRIVATE HAVE_LIBUPNP)
128 target_link_libraries(dhtnet PRIVATE PkgConfig::upnp)
129endif()
130if (DHTNET_NATPMP)
131 target_compile_definitions(dhtnet PRIVATE HAVE_LIBNATPMP)
132 target_link_libraries(dhtnet PRIVATE ${natpmp_LIBRARIES})
133endif()
Amnae3fd9f52023-08-08 16:56:06 -0400134if (DHTNET_TESTABLE)
Adrien Béraud6b6a5d32023-08-15 15:53:33 -0400135 target_compile_definitions(dhtnet PUBLIC DHTNET_TESTABLE)
136endif()
Adrien Béraud665d1112023-06-01 19:03:57 -0400137target_compile_definitions(dhtnet PUBLIC PJ_AUTOCONF=1)
Adrien Béraudea1e6932023-07-18 15:33:10 -0400138# set_target_properties(dhtnet PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/${dhtnet_HEADERS}")
Adrien Bérauda4030cd2023-06-21 09:35:40 -0400139
140configure_file(dhtnet.pc.in dhtnet.pc @ONLY)
141
Adrien Bérauda4030cd2023-06-21 09:35:40 -0400142# Install targets
Adrien Béraud13e33432023-07-18 14:49:35 -0400143install(TARGETS dhtnet)
Adrien Béraud149f29e2023-07-05 14:47:49 -0400144install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dhtnet)
Adrien Béraud13e33432023-07-18 14:49:35 -0400145install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dhtnet.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
Adrien Bérauda4030cd2023-06-21 09:35:40 -0400146
Amna38768302023-08-21 11:51:56 -0400147if (BUILD_TOOLS)
148 add_executable(dnc
149 tools/dnc/main.cpp
150 tools/dnc/dnc.cpp
151 tools/common.cpp)
152 target_link_libraries(dnc PRIVATE dhtnet fmt::fmt)
153 target_include_directories(dnc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tools)
154 install(TARGETS dnc RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
155endif()
156
Adrien Béraudefe27372023-05-27 18:56:29 -0400157if (BUILD_TESTING AND NOT MSVC)
158 pkg_search_module(Cppunit REQUIRED IMPORTED_TARGET cppunit)
159 add_executable(tests_certstore tests/certstore.cpp)
160 target_link_libraries(tests_certstore PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
161 add_test(NAME tests_certstore COMMAND tests_certstore)
162
163 add_executable(tests_connectionManager tests/connectionManager.cpp)
164 target_link_libraries(tests_connectionManager PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
165 add_test(NAME tests_connectionManager COMMAND tests_connectionManager)
166
167 #add_executable(tests_fileutils tests/testFileutils.cpp)
168 #target_link_libraries(tests_fileutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
169 #add_test(NAME tests_fileutils COMMAND tests_fileutils)
170
171 #add_executable(tests_stringutils tests/testString_utils.cpp)
172 #target_link_libraries(tests_stringutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
173 #add_test(NAME tests_stringutils COMMAND tests_stringutils)
Adrien Bérauda4030cd2023-06-21 09:35:40 -0400174endif()