blob: 7484c99d4bdb108aa8589da77365368bf890632e [file] [log] [blame]
Adrien Béraud665d1112023-06-01 19:03:57 -04001cmake_minimum_required(VERSION 3.22)
Adrien Béraud612b55b2023-05-29 10:42:04 -04002project(dhtnet)
3
4set(CMAKE_CXX_STANDARD 17)
5set(CMAKE_CXX_STANDARD_REQUIRED ON)
Adrien Béraudefe27372023-05-27 18:56:29 -04006include(CTest)
Adrien Béraud665d1112023-06-01 19:03:57 -04007include(GNUInstallDirs)
Adrien Bérauda4030cd2023-06-21 09:35:40 -04008set (prefix ${CMAKE_INSTALL_PREFIX})
9set (exec_prefix "\${prefix}")
10set (libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
11set (includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
Adrien Béraud612b55b2023-05-29 10:42:04 -040012
13find_package (PkgConfig REQUIRED)
Adrien Bérauddbb06862023-07-08 09:18:39 -040014find_package(msgpackc-cxx QUIET CONFIG)
15if(msgpackc-cxx_FOUND)
16 add_library(msgpack-cxx ALIAS msgpackc-cxx)
17else()
18 find_package(msgpack-cxx CONFIG REQUIRED)
19endif()
20
Adrien Béraudefe27372023-05-27 18:56:29 -040021find_package(fmt)
Adrien Béraud612b55b2023-05-29 10:42:04 -040022pkg_check_modules (opendht REQUIRED IMPORTED_TARGET opendht>=2.6.0)
23pkg_check_modules (pjproject REQUIRED IMPORTED_TARGET libpjproject)
24
25set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMSGPACK_NO_BOOST -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT")
26
27# Sources
28list (APPEND dhtnet_SOURCES
29 src/connectionmanager.cpp
30 src/ice_transport.cpp
31 src/multiplexed_socket.cpp
32 src/peer_connection.cpp
33 src/string_utils.cpp
34 src/fileutils.cpp
35 src/security/tls_session.cpp
36 src/security/certstore.cpp
37 src/security/threadloop.cpp
Morteza Namvar5f639522023-07-04 17:08:58 -040038 src/upnp/upnp_context.cpp
39 src/upnp/upnp_control.cpp
40 src/upnp/protocol/mapping.cpp
41 src/upnp/upnp_context.cpp
42 src/upnp/upnp_control.cpp
43 src/upnp/protocol/igd.cpp
Adrien Béraud612b55b2023-05-29 10:42:04 -040044)
45
46list (APPEND dhtnet_HEADERS
Adrien Béraud149f29e2023-07-05 14:47:49 -040047 include/connectionmanager.h
48 include/multiplexed_socket.h
49 include/tls_session.h
50 include/certstore.h
51 include/ice_options.h
Adrien Béraud6de3f882023-07-06 12:56:29 -040052 include/ice_transport.h
Adrien Béraudcb121f82023-07-08 09:18:39 -040053 include/ice_transport_factory.h
Adrien Béraudaa8c4422023-07-07 11:40:36 -040054 include/ice_socket.h
Adrien Béraud149f29e2023-07-05 14:47:49 -040055 include/fileutils.h
56 include/string_utils.h
57 include/ip_utils.h
58 include/upnp/mapping.h
59 include/upnp/upnp_context.h
60 include/upnp/upnp_control.h
Adrien Béraud612b55b2023-05-29 10:42:04 -040061)
62
63add_library(dhtnet ${dhtnet_SOURCES})
Adrien Bérauddbb06862023-07-08 09:18:39 -040064target_link_libraries(dhtnet PUBLIC PkgConfig::opendht PkgConfig::pjproject fmt::fmt msgpack-cxx)
Adrien Béraud665d1112023-06-01 19:03:57 -040065target_include_directories(dhtnet PUBLIC
66 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
67 $<INSTALL_INTERFACE:include>
68)
69target_compile_definitions(dhtnet PUBLIC PJ_AUTOCONF=1)
Adrien Béraudb96f10f2023-07-05 14:27:14 -040070set_target_properties(dhtnet PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/${dhtnet_HEADERS}")
Adrien Bérauda4030cd2023-06-21 09:35:40 -040071
72configure_file(dhtnet.pc.in dhtnet.pc @ONLY)
73
Adrien Bérauda4030cd2023-06-21 09:35:40 -040074# Install targets
Adrien Béraud149f29e2023-07-05 14:47:49 -040075install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dhtnet)
Adrien Béraudab6b8b12023-06-21 09:46:54 -040076install (FILES ${CMAKE_CURRENT_BINARY_DIR}/dhtnet.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
Adrien Bérauda4030cd2023-06-21 09:35:40 -040077
Adrien Béraudefe27372023-05-27 18:56:29 -040078if (BUILD_TESTING AND NOT MSVC)
79 pkg_search_module(Cppunit REQUIRED IMPORTED_TARGET cppunit)
80 add_executable(tests_certstore tests/certstore.cpp)
81 target_link_libraries(tests_certstore PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
82 add_test(NAME tests_certstore COMMAND tests_certstore)
83
84 add_executable(tests_connectionManager tests/connectionManager.cpp)
85 target_link_libraries(tests_connectionManager PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
86 add_test(NAME tests_connectionManager COMMAND tests_connectionManager)
87
88 #add_executable(tests_fileutils tests/testFileutils.cpp)
89 #target_link_libraries(tests_fileutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
90 #add_test(NAME tests_fileutils COMMAND tests_fileutils)
91
92 #add_executable(tests_stringutils tests/testString_utils.cpp)
93 #target_link_libraries(tests_stringutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
94 #add_test(NAME tests_stringutils COMMAND tests_stringutils)
Adrien Bérauda4030cd2023-06-21 09:35:40 -040095endif()