From d1f16e27b8cc543f79e326713b6d40fce5c82acf Mon Sep 17 00:00:00 2001 From: iphydf Date: Sun, 11 Sep 2016 18:49:44 +0100 Subject: Add option to build static libraries. --- CMakeLists.txt | 156 +++++++++++++++++++++------------------------------------ 1 file changed, 56 insertions(+), 100 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e560198..e42527c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ include(CTest) # versions in a synchronised way. set(PROJECT_VERSION "0.0.0") +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) ################################################################################ # @@ -13,12 +14,19 @@ set(PROJECT_VERSION "0.0.0") # ################################################################################ +include(CheckCCompilerFlag) +include(ModulePackage) + 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) + check_c_compiler_flag("-g3" HAVE_G3) + if(HAVE_G3) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3") + endif() endif() option(ASSOC_DHT "Enable module to store currently unused ID <=> IP associations" OFF) @@ -28,76 +36,38 @@ endif() option(ASAN "Enable address-sanitizer to detect invalid memory accesses" OFF) if(ASAN) - include(CheckCCompilerFlag) set(SAFE_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") set(CMAKE_REQUIRED_LIBRARIES "-fsanitize=address") check_c_compiler_flag("-fsanitize=address" HAVE_ASAN) if(HAVE_ASAN) - set(CMAKE_C_FLAGS "-fsanitize=address") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") endif() set(CMAKE_REQUIRED_LIBRARIES "${SAFE_CMAKE_REQUIRED_LIBRARIES}") endif() -find_package(PkgConfig REQUIRED) find_package(Threads REQUIRED) -find_library(UTIL_LIBRARIES util ) -find_library(RT_LIBRARIES rt ) +find_library(NCURSES_LIBRARIES ncurses ) +find_library(UTIL_LIBRARIES util ) +find_library(RT_LIBRARIES rt ) # For toxcore. -pkg_search_module(LIBSODIUM REQUIRED libsodium ) +pkg_use_module(LIBSODIUM REQUIRED libsodium ) # For toxav. -pkg_search_module(OPUS REQUIRED opus ) -pkg_search_module(VPX REQUIRED vpx ) +pkg_use_module(OPUS REQUIRED opus ) +pkg_use_module(VPX REQUIRED vpx ) # For tox-bootstrapd. -pkg_search_module(LIBCONFIG libconfig ) +pkg_use_module(LIBCONFIG libconfig ) # For auto tests. -pkg_search_module(CHECK check ) +pkg_use_module(CHECK check ) # For av_test. -pkg_search_module(OPENCV opencv ) -pkg_search_module(PORTAUDIO portaudio-2.0) -pkg_search_module(SNDFILE sndfile ) - -# TODO(iphydf): fold the pkg_search_module call into this function. -function(pkg_use_module mod) - if(${mod}_FOUND) - link_directories(${${mod}_LIBRARY_DIRS}) - include_directories(${${mod}_INCLUDE_DIRS}) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${mod}_CFLAGS_OTHER}") - endif() -endfunction() - -pkg_use_module(LIBSODIUM) - -pkg_use_module(OPUS) -pkg_use_module(VPX) - -pkg_use_module(LIBCONFIG) - -pkg_use_module(CHECK) - -pkg_use_module(OPENCV) -pkg_use_module(PORTAUDIO) -pkg_use_module(SNDFILE) - - -# 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() +pkg_use_module(OPENCV opencv ) +pkg_use_module(PORTAUDIO portaudio-2.0 ) +pkg_use_module(SNDFILE sndfile ) ################################################################################ @@ -118,46 +88,46 @@ set(toxcore_PKGCONFIG_LIBS) # LAYER 1: Crypto core # -------------------- -add_library(toxcrypto ${LIBTYPE} +add_module(toxcrypto toxcore/crypto_core.c) -target_link_libraries(toxcrypto ${LIBSODIUM_LIBRARIES}) +target_link_modules(toxcrypto ${LIBSODIUM_LIBRARIES}) # LAYER 2: Basic networking # ------------------------- -add_library(toxnetwork ${LIBTYPE} +add_module(toxnetwork toxcore/logger.c toxcore/network.c toxcore/util.c) -target_link_libraries(toxnetwork toxcrypto) +target_link_modules(toxnetwork toxcrypto) if(CMAKE_THREAD_LIBS_INIT) - target_link_libraries(toxnetwork ${CMAKE_THREAD_LIBS_INIT}) + target_link_modules(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}) + target_link_modules(toxnetwork ${RT_LIBRARIES}) set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} "-lrt") endif() if(WIN32) - target_link_libraries(toxnetwork ws2_32 iphlpapi) + target_link_modules(toxnetwork ws2_32 iphlpapi) set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} "-lws2_32 -liphlpapi") endif() # LAYER 3: Distributed Hash Table # ------------------------------- -add_library(toxdht ${LIBTYPE} +add_module(toxdht toxcore/DHT.c toxcore/LAN_discovery.c toxcore/assoc.c toxcore/ping.c toxcore/ping_array.c) -target_link_libraries(toxdht toxnetwork) +target_link_modules(toxdht toxnetwork) # LAYER 4: Onion routing, TCP connections, crypto connections # ----------------------------------------------------------- -add_library(toxnetcrypto ${LIBTYPE} +add_module(toxnetcrypto toxcore/TCP_client.c toxcore/TCP_connection.c toxcore/TCP_server.c @@ -166,33 +136,33 @@ add_library(toxnetcrypto ${LIBTYPE} toxcore/onion.c toxcore/onion_announce.c toxcore/onion_client.c) -target_link_libraries(toxnetcrypto toxdht) +target_link_modules(toxnetcrypto toxdht) # LAYER 5: Friend requests and connections # ---------------------------------------- -add_library(toxfriends ${LIBTYPE} +add_module(toxfriends toxcore/friend_connection.c toxcore/friend_requests.c) -target_link_libraries(toxfriends toxnetcrypto) +target_link_modules(toxfriends toxnetcrypto) # LAYER 6: Tox messenger # ---------------------- -add_library(toxmessenger ${LIBTYPE} +add_module(toxmessenger toxcore/Messenger.c) -target_link_libraries(toxmessenger toxfriends) +target_link_modules(toxmessenger toxfriends) # LAYER 7: Group chats # -------------------- -add_library(toxgroup ${LIBTYPE} +add_module(toxgroup toxcore/group.c) -target_link_libraries(toxgroup toxmessenger) +target_link_modules(toxgroup toxmessenger) # LAYER 8: Public API # ------------------- -add_library(toxcore ${LIBTYPE} +add_module(toxcore toxcore/tox.c toxcore/tox_group.c) -target_link_libraries(toxcore toxgroup) +target_link_modules(toxcore toxgroup) ################################################################################ @@ -201,7 +171,7 @@ target_link_libraries(toxcore toxgroup) # ################################################################################ -add_library(toxav ${LIBTYPE} +add_module(toxav toxav/audio.c toxav/bwcontroller.c toxav/group.c @@ -210,7 +180,7 @@ add_library(toxav ${LIBTYPE} toxav/toxav.c toxav/toxav_old.c toxav/video.c) -target_link_libraries(toxav toxcore ${OPUS_LIBRARIES} ${VPX_LIBRARIES}) +target_link_modules(toxav toxcore ${OPUS_LIBRARIES} ${VPX_LIBRARIES}) ################################################################################ @@ -219,13 +189,13 @@ target_link_libraries(toxav toxcore ${OPUS_LIBRARIES} ${VPX_LIBRARIES}) # ################################################################################ -add_library(toxdns ${LIBTYPE} +add_module(toxdns toxdns/toxdns.c) -target_link_libraries(toxdns toxcore) +target_link_modules(toxdns toxcore) -add_library(toxencryptsave ${LIBTYPE} +add_module(toxencryptsave toxencryptsave/toxencryptsave.c) -target_link_libraries(toxencryptsave toxcore) +target_link_modules(toxencryptsave toxcore) ################################################################################ @@ -240,7 +210,7 @@ add_test(format_test function(auto_test target) if(CHECK_FOUND) add_executable(auto_${target} auto_tests/${target}.c) - target_link_libraries(auto_${target} + target_link_modules(auto_${target} toxcore toxav toxencryptsave @@ -272,7 +242,7 @@ auto_test(toxav_many_test) add_executable(DHT_bootstrap other/DHT_bootstrap.c other/bootstrap_node_packets.c) -target_link_libraries(DHT_bootstrap toxnetcrypto) +target_link_modules(DHT_bootstrap toxnetcrypto) if(LIBCONFIG_FOUND) add_executable(tox-bootstrapd @@ -287,8 +257,7 @@ if(LIBCONFIG_FOUND) other/bootstrap_daemon/src/global.h other/bootstrap_node_packets.c other/bootstrap_node_packets.h) - - target_link_libraries(tox-bootstrapd toxnetcrypto ${LIBCONFIG_LIBRARIES}) + target_link_modules(tox-bootstrapd toxnetcrypto ${LIBCONFIG_LIBRARIES}) endif() @@ -300,7 +269,7 @@ endif() if(NOT WIN32 AND SNDFILE_FOUND AND PORTAUDIO_FOUND AND OPENCV_FOUND) add_executable(av_test testing/av_test.c) - target_link_libraries(av_test + target_link_modules(av_test toxav ${OPENCV_LIBRARIES} ${PORTAUDIO_LIBRARIES} @@ -309,31 +278,31 @@ endif() if(NOT WIN32) add_executable(nTox testing/nTox.c) - target_link_libraries(nTox toxcore ncurses) + target_link_modules(nTox toxcore ${NCURSES_LIBRARIES}) endif() add_executable(DHT_test testing/DHT_test.c) -target_link_libraries(DHT_test toxdht) +target_link_modules(DHT_test toxdht) add_executable(Messenger_test testing/Messenger_test.c) -target_link_libraries(Messenger_test toxmessenger) +target_link_modules(Messenger_test toxmessenger) add_executable(dns3_test testing/dns3_test.c) -target_link_libraries(dns3_test toxdns) +target_link_modules(dns3_test toxdns) if(NOT WIN32) add_executable(tox_sync testing/tox_sync.c) - target_link_libraries(tox_sync toxcore) + target_link_modules(tox_sync toxcore) endif() if(UTIL_LIBRARIES) add_executable(tox_shell testing/tox_shell.c) - target_link_libraries(tox_shell toxcore ${UTIL_LIBRARIES}) + target_link_modules(tox_shell toxcore ${UTIL_LIBRARIES}) endif() if(NOT WIN32) add_executable(irc_syncbot testing/irc_syncbot.c) - target_link_libraries(irc_syncbot toxcore) + target_link_modules(irc_syncbot toxcore) endif() @@ -374,19 +343,6 @@ install(FILES ${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 -- cgit v1.2.3