mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
13ae9e9a93
This removes the global logger (which by the way was deleted when the first tox was killed, so other toxes would then stop logging). Various bits of the code now carry a logger or pass it around. It's a bit less transparent now, but now there is no need to have a global logger, and clients can decide what to log and where.
372 lines
9.9 KiB
CMake
372 lines
9.9 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(DEBUG "Enable assertions and other debugging facilities" OFF)
|
|
if(DEBUG)
|
|
add_definitions(-DTOX_DEBUG=1)
|
|
add_definitions(-DMIN_LOGGER_LEVEL=LOG_TRACE)
|
|
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
|
|
#
|
|
################################################################################
|
|
|
|
add_test(format_test
|
|
${CMAKE_SOURCE_DIR}/other/astyle/format-source "${CMAKE_SOURCE_DIR}")
|
|
|
|
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")
|