blob: 7086126295718477b481805a4a3be6fb2a45f18f [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)
14find_package(msgpack REQUIRED QUIET CONFIG NAMES msgpack msgpack-cxx)
Adrien Béraudefe27372023-05-27 18:56:29 -040015find_package(fmt)
Adrien Béraud612b55b2023-05-29 10:42:04 -040016pkg_check_modules (opendht REQUIRED IMPORTED_TARGET opendht>=2.6.0)
17pkg_check_modules (pjproject REQUIRED IMPORTED_TARGET libpjproject)
18
19set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMSGPACK_NO_BOOST -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT")
20
21# Sources
22list (APPEND dhtnet_SOURCES
23 src/connectionmanager.cpp
24 src/ice_transport.cpp
25 src/multiplexed_socket.cpp
26 src/peer_connection.cpp
27 src/string_utils.cpp
28 src/fileutils.cpp
29 src/security/tls_session.cpp
30 src/security/certstore.cpp
31 src/security/threadloop.cpp
Morteza Namvar5f639522023-07-04 17:08:58 -040032 src/upnp/upnp_context.cpp
33 src/upnp/upnp_control.cpp
34 src/upnp/protocol/mapping.cpp
35 src/upnp/upnp_context.cpp
36 src/upnp/upnp_control.cpp
37 src/upnp/protocol/igd.cpp
Adrien Béraud612b55b2023-05-29 10:42:04 -040038)
39
40list (APPEND dhtnet_HEADERS
Adrien Béraud149f29e2023-07-05 14:47:49 -040041 include/connectionmanager.h
42 include/multiplexed_socket.h
43 include/tls_session.h
44 include/certstore.h
45 include/ice_options.h
Adrien Béraud6de3f882023-07-06 12:56:29 -040046 include/ice_transport.h
Adrien Béraud149f29e2023-07-05 14:47:49 -040047 include/fileutils.h
48 include/string_utils.h
49 include/ip_utils.h
50 include/upnp/mapping.h
51 include/upnp/upnp_context.h
52 include/upnp/upnp_control.h
Adrien Béraud612b55b2023-05-29 10:42:04 -040053)
54
55add_library(dhtnet ${dhtnet_SOURCES})
Morteza Namvar5f639522023-07-04 17:08:58 -040056target_link_libraries(dhtnet PUBLIC PkgConfig::opendht PkgConfig::pjproject fmt::fmt msgpackc)
Adrien Béraud665d1112023-06-01 19:03:57 -040057target_include_directories(dhtnet PUBLIC
58 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
59 $<INSTALL_INTERFACE:include>
60)
61target_compile_definitions(dhtnet PUBLIC PJ_AUTOCONF=1)
Adrien Béraudb96f10f2023-07-05 14:27:14 -040062set_target_properties(dhtnet PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/${dhtnet_HEADERS}")
Adrien Bérauda4030cd2023-06-21 09:35:40 -040063
64configure_file(dhtnet.pc.in dhtnet.pc @ONLY)
65
Adrien Bérauda4030cd2023-06-21 09:35:40 -040066# Install targets
Adrien Béraud149f29e2023-07-05 14:47:49 -040067install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dhtnet)
Adrien Béraudab6b8b12023-06-21 09:46:54 -040068install (FILES ${CMAKE_CURRENT_BINARY_DIR}/dhtnet.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
Adrien Bérauda4030cd2023-06-21 09:35:40 -040069
Adrien Béraudefe27372023-05-27 18:56:29 -040070if (BUILD_TESTING AND NOT MSVC)
71 pkg_search_module(Cppunit REQUIRED IMPORTED_TARGET cppunit)
72 add_executable(tests_certstore tests/certstore.cpp)
73 target_link_libraries(tests_certstore PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
74 add_test(NAME tests_certstore COMMAND tests_certstore)
75
76 add_executable(tests_connectionManager tests/connectionManager.cpp)
77 target_link_libraries(tests_connectionManager PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
78 add_test(NAME tests_connectionManager COMMAND tests_connectionManager)
79
80 #add_executable(tests_fileutils tests/testFileutils.cpp)
81 #target_link_libraries(tests_fileutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
82 #add_test(NAME tests_fileutils COMMAND tests_fileutils)
83
84 #add_executable(tests_stringutils tests/testString_utils.cpp)
85 #target_link_libraries(tests_stringutils PRIVATE dhtnet fmt::fmt PkgConfig::Cppunit)
86 #add_test(NAME tests_stringutils COMMAND tests_stringutils)
Adrien Bérauda4030cd2023-06-21 09:35:40 -040087endif()