blob: 3ddea4ece13be233c99128db3ca71edba4bb69a8 [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)
Adrien Bérauda4030cd2023-06-21 09:35:40 -040011set (prefix ${CMAKE_INSTALL_PREFIX})
12set (exec_prefix "\${prefix}")
13set (libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
14set (includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
Adrien Béraudd50178b2023-07-09 21:41:12 -040015set (VERSION ${CMAKE_PROJECT_VERSION})
Adrien Béraud612b55b2023-05-29 10:42:04 -040016
17find_package (PkgConfig REQUIRED)
Adrien Béraud20649b52023-07-14 14:16:31 -040018
19find_package(msgpack-cxx CONFIG)
20if(NOT msgpack-cxx_FOUND)
21 find_package(msgpackc-cxx CONFIG REQUIRED NAMES msgpackc-cxx msgpack)
Adrien Bérauddbb06862023-07-08 09:18:39 -040022 add_library(msgpack-cxx ALIAS msgpackc-cxx)
Adrien Bérauddbb06862023-07-08 09:18:39 -040023endif()
24
Adrien Béraudefe27372023-05-27 18:56:29 -040025find_package(fmt)
Adrien Béraud612b55b2023-05-29 10:42:04 -040026pkg_check_modules (opendht REQUIRED IMPORTED_TARGET opendht>=2.6.0)
27pkg_check_modules (pjproject REQUIRED IMPORTED_TARGET libpjproject)
28
29set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMSGPACK_NO_BOOST -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT")
30
31# Sources
32list (APPEND dhtnet_SOURCES
33 src/connectionmanager.cpp
34 src/ice_transport.cpp
35 src/multiplexed_socket.cpp
36 src/peer_connection.cpp
37 src/string_utils.cpp
38 src/fileutils.cpp
39 src/security/tls_session.cpp
40 src/security/certstore.cpp
41 src/security/threadloop.cpp
Adrien Bérauda1d294f2023-07-17 22:42:13 -040042 src/turn/turn_cache.cpp
43 src/turn/turn_transport.cpp
Morteza Namvar5f639522023-07-04 17:08:58 -040044 src/upnp/upnp_context.cpp
45 src/upnp/upnp_control.cpp
46 src/upnp/protocol/mapping.cpp
47 src/upnp/upnp_context.cpp
48 src/upnp/upnp_control.cpp
49 src/upnp/protocol/igd.cpp
Adrien Béraud612b55b2023-05-29 10:42:04 -040050)
51
52list (APPEND dhtnet_HEADERS
Adrien Béraud149f29e2023-07-05 14:47:49 -040053 include/connectionmanager.h
54 include/multiplexed_socket.h
55 include/tls_session.h
56 include/certstore.h
57 include/ice_options.h
Adrien Béraud6de3f882023-07-06 12:56:29 -040058 include/ice_transport.h
Adrien Béraudcb121f82023-07-08 09:18:39 -040059 include/ice_transport_factory.h
Adrien Béraudaa8c4422023-07-07 11:40:36 -040060 include/ice_socket.h
Adrien Béraud149f29e2023-07-05 14:47:49 -040061 include/fileutils.h
62 include/string_utils.h
63 include/ip_utils.h
64 include/upnp/mapping.h
65 include/upnp/upnp_context.h
66 include/upnp/upnp_control.h
Adrien Béraud612b55b2023-05-29 10:42:04 -040067)
68
69add_library(dhtnet ${dhtnet_SOURCES})
Adrien Bérauddbb06862023-07-08 09:18:39 -040070target_link_libraries(dhtnet PUBLIC PkgConfig::opendht PkgConfig::pjproject fmt::fmt msgpack-cxx)
Adrien Béraud665d1112023-06-01 19:03:57 -040071target_include_directories(dhtnet PUBLIC
72 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
73 $<INSTALL_INTERFACE:include>
74)
75target_compile_definitions(dhtnet PUBLIC PJ_AUTOCONF=1)
Adrien Béraudb96f10f2023-07-05 14:27:14 -040076set_target_properties(dhtnet PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/${dhtnet_HEADERS}")
Adrien Bérauda4030cd2023-06-21 09:35:40 -040077
78configure_file(dhtnet.pc.in dhtnet.pc @ONLY)
79
Adrien Bérauda4030cd2023-06-21 09:35:40 -040080# Install targets
Adrien Béraud149f29e2023-07-05 14:47:49 -040081install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dhtnet)
Adrien Béraudab6b8b12023-06-21 09:46:54 -040082install (FILES ${CMAKE_CURRENT_BINARY_DIR}/dhtnet.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
Adrien Bérauda4030cd2023-06-21 09:35:40 -040083
Adrien Béraudefe27372023-05-27 18:56:29 -040084if (BUILD_TESTING AND NOT MSVC)
85 pkg_search_module(Cppunit REQUIRED IMPORTED_TARGET cppunit)
86 add_executable(tests_certstore tests/certstore.cpp)
87 target_link_libraries(tests_certstore PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
88 add_test(NAME tests_certstore COMMAND tests_certstore)
89
90 add_executable(tests_connectionManager tests/connectionManager.cpp)
91 target_link_libraries(tests_connectionManager PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
92 add_test(NAME tests_connectionManager COMMAND tests_connectionManager)
93
94 #add_executable(tests_fileutils tests/testFileutils.cpp)
95 #target_link_libraries(tests_fileutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
96 #add_test(NAME tests_fileutils COMMAND tests_fileutils)
97
98 #add_executable(tests_stringutils tests/testString_utils.cpp)
99 #target_link_libraries(tests_stringutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
100 #add_test(NAME tests_stringutils COMMAND tests_stringutils)
Adrien Bérauda4030cd2023-06-21 09:35:40 -0400101endif()