mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
b044cfbf15
The threading networking functions (on windows: winsock and friends) need to be linked into the toxnetwork library, not the toxcore library, anymore. On Linux and OSX, there is no winsock. On OSX, there is no need to link against threading libraries, and on Linux, toxnetwork can have unresolved symbols when linking, so this failure wasn't caught before. Tested by building on the iphydf/windows-x86-qt5 docker image.
376 lines
10 KiB
CMake
376 lines
10 KiB
CMake
cmake_minimum_required(VERSION 2.8.6)
|
|
project(toxcore)
|
|
include(CTest)
|
|
|
|
# This version is for the entire project. All libraries (core, av, ...) move in
|
|
# versions in a synchronised way.
|
|
set(PROJECT_VERSION "0.0.0")
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# :: Dependencies and configuration
|
|
#
|
|
################################################################################
|
|
|
|
set(CMAKE_MACOSX_RPATH ON)
|
|
|
|
option(LOGGING "Enable internal library logging" OFF)
|
|
if(LOGGING)
|
|
add_definitions(
|
|
-DTOX_LOGGER=1
|
|
-DLOGGER_LEVEL=LOG_DEBUG
|
|
-DLOGGER_OUTPUT_FILE="libtoxcore.log")
|
|
endif()
|
|
|
|
option(DEBUG "Enable assertions and other debugging facilities" OFF)
|
|
if(DEBUG)
|
|
add_definitions(-DTOX_DEBUG=1)
|
|
endif()
|
|
|
|
option(ASSOC_DHT "Enable module to store currently unused ID <=> IP associations" OFF)
|
|
if(ASSOC_DHT)
|
|
add_definitions(-DENABLE_ASSOC_DHT=1)
|
|
endif()
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
find_package(Threads REQUIRED)
|
|
|
|
find_library(UTIL_LIBRARIES util)
|
|
find_library(RT_LIBRARIES rt)
|
|
|
|
pkg_search_module(CHECK check)
|
|
pkg_search_module(LIBCONFIG libconfig)
|
|
pkg_search_module(LIBSODIUM REQUIRED libsodium)
|
|
pkg_search_module(OPUS REQUIRED opus)
|
|
pkg_search_module(VPX REQUIRED vpx)
|
|
|
|
if(CHECK_FOUND)
|
|
link_directories(${CHECK_LIBRARY_DIRS})
|
|
endif()
|
|
if(LIBCONFIG_FOUND)
|
|
link_directories(${LIBCONFIG_LIBRARY_DIRS})
|
|
endif()
|
|
link_directories(${LIBSODIUM_LIBRARY_DIRS})
|
|
link_directories(${OPUS_LIBRARY_DIRS})
|
|
link_directories(${VPX_LIBRARY_DIRS})
|
|
|
|
if(CHECK_FOUND)
|
|
include_directories(${CHECK_INCLUDE_DIRS})
|
|
endif()
|
|
if(LIBCONFIG_FOUND)
|
|
include_directories(${LIBCONFIG_INCLUDE_DIRS})
|
|
endif()
|
|
include_directories(${LIBSODIUM_INCLUDE_DIRS})
|
|
include_directories(${OPUS_INCLUDE_DIRS})
|
|
include_directories(${VPX_INCLUDE_DIRS})
|
|
|
|
if(CHECK_FOUND)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CHECK_CFLAGS_OTHER}")
|
|
endif()
|
|
if(LIBCONFIG_FOUND)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBCONFIG_CFLAGS_OTHER}")
|
|
endif()
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBSODIUM_CFLAGS_OTHER}")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPUS_CFLAGS_OTHER}")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VPX_CFLAGS_OTHER}")
|
|
|
|
# Users can call cmake -DLIBTYPE=STATIC or -DLIBTYPE=SHARED to override this.
|
|
if(NOT LIBTYPE)
|
|
if(WIN32)
|
|
# Our win32 builds are fully static, since we use the MXE cross compiling
|
|
# environment, which builds everything statically by default. Building
|
|
# shared libraries will result in multiple definition errors, since multiple
|
|
# tox libraries will link against libsodium and other libraries that are
|
|
# built statically in MXE.
|
|
set(LIBTYPE STATIC)
|
|
else()
|
|
set(LIBTYPE SHARED)
|
|
endif()
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# :: Tox Core Library
|
|
#
|
|
################################################################################
|
|
|
|
# toxcore_PKGCONFIG_LIBS is what's added to the Libs: line in toxcore.pc. It
|
|
# needs to contain all the libraries a program using toxcore should link against
|
|
# if it's statically linked. If it's dynamically linked, there is no need to
|
|
# explicitly link against all the dependencies, but it doesn't harm much(*)
|
|
# either.
|
|
#
|
|
# (*) It allows client code to use symbols from our dependencies without
|
|
# explicitly linking against them.
|
|
set(toxcore_PKGCONFIG_LIBS)
|
|
|
|
# LAYER 1: Crypto core
|
|
# --------------------
|
|
add_library(toxcrypto ${LIBTYPE}
|
|
toxcore/crypto_core.c)
|
|
target_link_libraries(toxcrypto ${LIBSODIUM_LIBRARIES})
|
|
|
|
# LAYER 2: Basic networking
|
|
# -------------------------
|
|
add_library(toxnetwork ${LIBTYPE}
|
|
toxcore/logger.c
|
|
toxcore/network.c
|
|
toxcore/util.c)
|
|
target_link_libraries(toxnetwork toxcrypto)
|
|
|
|
if(CMAKE_THREAD_LIBS_INIT)
|
|
target_link_libraries(toxnetwork ${CMAKE_THREAD_LIBS_INIT})
|
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} "-l${CMAKE_THREAD_LIBS_INIT}")
|
|
endif()
|
|
|
|
if(RT_LIBRARIES)
|
|
target_link_libraries(toxnetwork ${RT_LIBRARIES})
|
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} "-lrt")
|
|
endif()
|
|
|
|
if(WIN32)
|
|
target_link_libraries(toxnetwork ws2_32 iphlpapi)
|
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} "-lws2_32 -liphlpapi")
|
|
endif()
|
|
|
|
# LAYER 3: Distributed Hash Table
|
|
# -------------------------------
|
|
add_library(toxdht ${LIBTYPE}
|
|
toxcore/DHT.c
|
|
toxcore/LAN_discovery.c
|
|
toxcore/assoc.c
|
|
toxcore/ping.c
|
|
toxcore/ping_array.c)
|
|
target_link_libraries(toxdht toxnetwork)
|
|
|
|
# LAYER 4: Onion routing, TCP connections, crypto connections
|
|
# -----------------------------------------------------------
|
|
add_library(toxnetcrypto ${LIBTYPE}
|
|
toxcore/TCP_client.c
|
|
toxcore/TCP_connection.c
|
|
toxcore/TCP_server.c
|
|
toxcore/list.c
|
|
toxcore/net_crypto.c
|
|
toxcore/onion.c
|
|
toxcore/onion_announce.c
|
|
toxcore/onion_client.c)
|
|
target_link_libraries(toxnetcrypto toxdht)
|
|
|
|
# LAYER 5: Friend requests and connections
|
|
# ----------------------------------------
|
|
add_library(toxfriends ${LIBTYPE}
|
|
toxcore/friend_connection.c
|
|
toxcore/friend_requests.c)
|
|
target_link_libraries(toxfriends toxnetcrypto)
|
|
|
|
# LAYER 6: Tox messenger
|
|
# ----------------------
|
|
add_library(toxmessenger ${LIBTYPE}
|
|
toxcore/Messenger.c)
|
|
target_link_libraries(toxmessenger toxfriends)
|
|
|
|
# LAYER 7: Group chats
|
|
# --------------------
|
|
add_library(toxgroup ${LIBTYPE}
|
|
toxcore/group.c)
|
|
target_link_libraries(toxgroup toxmessenger)
|
|
|
|
# LAYER 8: Public API
|
|
# -------------------
|
|
add_library(toxcore ${LIBTYPE}
|
|
toxcore/tox.c)
|
|
target_link_libraries(toxcore toxgroup)
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# :: Audio/Video Library
|
|
#
|
|
################################################################################
|
|
|
|
add_library(toxav ${LIBTYPE}
|
|
toxav/audio.c
|
|
toxav/bwcontroller.c
|
|
toxav/group.c
|
|
toxav/msi.c
|
|
toxav/rtp.c
|
|
toxav/toxav.c
|
|
toxav/toxav_old.c
|
|
toxav/video.c)
|
|
target_link_libraries(toxav toxcore ${OPUS_LIBRARIES} ${VPX_LIBRARIES})
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# :: ToxDNS and block encryption libraries
|
|
#
|
|
################################################################################
|
|
|
|
add_library(toxdns ${LIBTYPE}
|
|
toxdns/toxdns.c)
|
|
target_link_libraries(toxdns toxcore)
|
|
|
|
add_library(toxencryptsave ${LIBTYPE}
|
|
toxencryptsave/toxencryptsave.c)
|
|
target_link_libraries(toxencryptsave toxcore)
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# :: Automated regression tests
|
|
#
|
|
################################################################################
|
|
|
|
function(auto_test target)
|
|
if(CHECK_FOUND)
|
|
add_executable(auto_${target} auto_tests/${target}.c)
|
|
target_link_libraries(auto_${target}
|
|
toxcore
|
|
toxav
|
|
toxencryptsave
|
|
${CHECK_LIBRARIES})
|
|
add_test(${target} auto_${target})
|
|
endif()
|
|
endfunction()
|
|
|
|
auto_test(TCP_test)
|
|
auto_test(assoc_test)
|
|
auto_test(crypto_test)
|
|
auto_test(dht_test)
|
|
auto_test(encryptsave_test)
|
|
# This test doesn't link (missing symbol).
|
|
#auto_test(friends_test)
|
|
auto_test(messenger_test)
|
|
auto_test(network_test)
|
|
auto_test(onion_test)
|
|
auto_test(skeleton_test)
|
|
auto_test(tox_test)
|
|
auto_test(toxav_basic_test)
|
|
auto_test(toxav_many_test)
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# :: Bootstrap daemon
|
|
#
|
|
################################################################################
|
|
|
|
add_executable(DHT_bootstrap
|
|
other/DHT_bootstrap.c
|
|
other/bootstrap_node_packets.c)
|
|
target_link_libraries(DHT_bootstrap toxnetcrypto)
|
|
|
|
if(LIBCONFIG_FOUND)
|
|
add_executable(tox-bootstrapd
|
|
other/bootstrap_daemon/src/command_line_arguments.c
|
|
other/bootstrap_daemon/src/command_line_arguments.h
|
|
other/bootstrap_daemon/src/config.c
|
|
other/bootstrap_daemon/src/config_defaults.h
|
|
other/bootstrap_daemon/src/config.h
|
|
other/bootstrap_daemon/src/log.c
|
|
other/bootstrap_daemon/src/log.h
|
|
other/bootstrap_daemon/src/tox-bootstrapd.c
|
|
other/bootstrap_daemon/src/global.h
|
|
other/bootstrap_node_packets.c
|
|
other/bootstrap_node_packets.h)
|
|
|
|
target_link_libraries(tox-bootstrapd toxnetcrypto ${LIBCONFIG_LIBRARIES})
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# :: Test programs
|
|
#
|
|
################################################################################
|
|
|
|
if(NOT WIN32)
|
|
add_executable(nTox testing/nTox.c)
|
|
target_link_libraries(nTox toxcore ncurses)
|
|
endif()
|
|
|
|
add_executable(DHT_test testing/DHT_test.c)
|
|
target_link_libraries(DHT_test toxdht)
|
|
|
|
add_executable(Messenger_test testing/Messenger_test.c)
|
|
target_link_libraries(Messenger_test toxmessenger)
|
|
|
|
add_executable(dns3_test testing/dns3_test.c)
|
|
target_link_libraries(dns3_test toxdns)
|
|
|
|
if(NOT WIN32)
|
|
add_executable(tox_sync testing/tox_sync.c)
|
|
target_link_libraries(tox_sync toxcore)
|
|
endif()
|
|
|
|
if(UTIL_LIBRARIES)
|
|
add_executable(tox_shell testing/tox_shell.c)
|
|
target_link_libraries(tox_shell toxcore ${UTIL_LIBRARIES})
|
|
endif()
|
|
|
|
if(NOT WIN32)
|
|
add_executable(irc_syncbot testing/irc_syncbot.c)
|
|
target_link_libraries(irc_syncbot toxcore)
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# :: Installation and pkg-config
|
|
#
|
|
################################################################################
|
|
|
|
configure_file(
|
|
"${CMAKE_SOURCE_DIR}/other/pkgconfig/toxav.pc.in"
|
|
"${CMAKE_BINARY_DIR}/toxav.pc"
|
|
@ONLY
|
|
)
|
|
|
|
configure_file(
|
|
"${CMAKE_SOURCE_DIR}/other/pkgconfig/toxcore.pc.in"
|
|
"${CMAKE_BINARY_DIR}/toxcore.pc"
|
|
@ONLY
|
|
)
|
|
|
|
configure_file(
|
|
"${CMAKE_SOURCE_DIR}/other/pkgconfig/toxdns.pc.in"
|
|
"${CMAKE_BINARY_DIR}/toxdns.pc"
|
|
@ONLY
|
|
)
|
|
|
|
configure_file(
|
|
"${CMAKE_SOURCE_DIR}/other/pkgconfig/toxencryptsave.pc.in"
|
|
"${CMAKE_BINARY_DIR}/toxencryptsave.pc"
|
|
@ONLY
|
|
)
|
|
|
|
|
|
install(FILES
|
|
${CMAKE_BINARY_DIR}/toxav.pc
|
|
${CMAKE_BINARY_DIR}/toxcore.pc
|
|
${CMAKE_BINARY_DIR}/toxdns.pc
|
|
${CMAKE_BINARY_DIR}/toxencryptsave.pc
|
|
DESTINATION "lib/pkgconfig")
|
|
install(TARGETS
|
|
toxav
|
|
toxcore
|
|
toxcrypto
|
|
toxdht
|
|
toxdns
|
|
toxencryptsave
|
|
toxfriends
|
|
toxgroup
|
|
toxmessenger
|
|
toxnetcrypto
|
|
toxnetwork
|
|
DESTINATION "lib")
|
|
install(FILES
|
|
toxav/toxav.h
|
|
toxcore/tox.h
|
|
toxcore/tox_old.h
|
|
toxdns/toxdns.h
|
|
toxencryptsave/toxencryptsave.h
|
|
DESTINATION "include/tox")
|