From 13706de14bce8f8bfd1cb7db226d12cbd927b1b4 Mon Sep 17 00:00:00 2001 From: iphydf Date: Wed, 14 Feb 2018 23:21:57 +0000 Subject: [PATCH] Don't build all the small sub-libraries. This caused us to build everything 2-4 times, now we only build it 1-2 times (depending on selection of static/shared builds). The disadvantage is that now it's more up to the reviewer to ensure modularity (we still catch it in the bazel build, though). --- CMakeLists.txt | 141 ++++++++------------------------------ cmake/CompileGTest.cmake | 9 +++ cmake/ModulePackage.cmake | 10 +-- 3 files changed, 40 insertions(+), 120 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9acb97d2..a16c1220 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,7 +211,7 @@ endif() # LAYER 1: Crypto core # -------------------- apidsl(toxcore/crypto_core.api.h) -add_submodule(toxcore toxcrypto +set(toxcore_SOURCES ${toxcore_SOURCES} toxcore/ccompat.h toxcore/crypto_core.c toxcore/crypto_core.h @@ -219,34 +219,33 @@ add_submodule(toxcore toxcrypto include(CheckFunctionExists) check_function_exists(explicit_bzero HAVE_EXPLICIT_BZERO) check_function_exists(memset_s HAVE_MEMSET_S) -target_link_modules(toxcrypto ${LIBSODIUM_LIBRARIES}) -set(toxcrypto_PKGCONFIG_REQUIRES ${toxcrypto_PKGCONFIG_REQUIRES} libsodium) +set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${LIBSODIUM_LIBRARIES}) +set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} libsodium) # LAYER 2: Basic networking # ------------------------- -add_submodule(toxcore toxnetwork +set(toxcore_SOURCES ${toxcore_SOURCES} toxcore/logger.c toxcore/logger.h toxcore/network.c toxcore/network.h toxcore/util.c toxcore/util.h) -target_link_modules(toxnetwork toxcrypto) message("CMAKE_THREAD_LIBS_INIT: ${CMAKE_THREAD_LIBS_INIT}") if(CMAKE_THREAD_LIBS_INIT) - target_link_modules(toxnetwork ${CMAKE_THREAD_LIBS_INIT}) - set(toxnetwork_PKGCONFIG_LIBS ${toxnetwork_PKGCONFIG_LIBS} ${CMAKE_THREAD_LIBS_INIT}) + set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${CMAKE_THREAD_LIBS_INIT}) + set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} ${CMAKE_THREAD_LIBS_INIT}) endif() if(RT_LIBRARIES) - target_link_modules(toxnetwork ${RT_LIBRARIES}) - set(toxnetwork_PKGCONFIG_LIBS ${toxnetwork_PKGCONFIG_LIBS} "-lrt") + set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${RT_LIBRARIES}) + set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} "-lrt") endif() if(WIN32) - target_link_modules(toxnetwork ws2_32 iphlpapi) - set(toxnetwork_PKGCONFIG_LIBS ${toxnetwork_PKGCONFIG_LIBS} "-lws2_32 -liphlpapi") + set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ws2_32 iphlpapi) + set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} "-lws2_32 -liphlpapi") endif() # LAYER 3: Distributed Hash Table @@ -254,7 +253,7 @@ endif() apidsl(toxcore/LAN_discovery.api.h) apidsl(toxcore/ping.api.h) apidsl(toxcore/ping_array.api.h) -add_submodule(toxcore toxdht +set(toxcore_SOURCES ${toxcore_SOURCES} toxcore/DHT.c toxcore/DHT.h toxcore/LAN_discovery.c @@ -263,11 +262,10 @@ add_submodule(toxcore toxdht toxcore/ping.h toxcore/ping_array.c toxcore/ping_array.h) -target_link_modules(toxdht toxnetwork) # LAYER 4: Onion routing, TCP connections, crypto connections # ----------------------------------------------------------- -add_submodule(toxcore toxnetcrypto +set(toxcore_SOURCES ${toxcore_SOURCES} toxcore/TCP_client.c toxcore/TCP_client.h toxcore/TCP_connection.c @@ -284,40 +282,35 @@ add_submodule(toxcore toxnetcrypto toxcore/onion_announce.h toxcore/onion_client.c toxcore/onion_client.h) -target_link_modules(toxnetcrypto toxdht) # LAYER 5: Friend requests and connections # ---------------------------------------- -add_submodule(toxcore toxfriends +set(toxcore_SOURCES ${toxcore_SOURCES} toxcore/friend_connection.c toxcore/friend_connection.h toxcore/friend_requests.c toxcore/friend_requests.h) -target_link_modules(toxfriends toxnetcrypto) # LAYER 6: Tox messenger # ---------------------- -add_submodule(toxcore toxmessenger +set(toxcore_SOURCES ${toxcore_SOURCES} toxcore/Messenger.c toxcore/Messenger.h) -target_link_modules(toxmessenger toxfriends) # LAYER 7: Group chats # -------------------- -add_submodule(toxcore toxgroup +set(toxcore_SOURCES ${toxcore_SOURCES} toxcore/group.c toxcore/group.h) -target_link_modules(toxgroup toxmessenger) # LAYER 8: Public API # ------------------- apidsl(toxcore/tox.api.h) -add_submodule(toxcore toxapi +set(toxcore_SOURCES ${toxcore_SOURCES} toxcore/tox_api.c toxcore/tox.c toxcore/tox.h) -target_link_modules(toxapi toxgroup) -set(toxapi_API_HEADERS ${toxcore_SOURCE_DIR}/toxcore/tox.h^tox) +set(toxcore_API_HEADERS ${toxcore_API_HEADERS} ${toxcore_SOURCE_DIR}/toxcore/tox.h^tox) ################################################################################ # @@ -327,7 +320,7 @@ set(toxapi_API_HEADERS ${toxcore_SOURCE_DIR}/toxcore/tox.h^tox) if(BUILD_TOXAV) apidsl(toxav/toxav.api.h) - add_submodule(toxcore toxav + set(toxcore_SOURCES ${toxcore_SOURCES} toxav/audio.c toxav/audio.h toxav/bwcontroller.c @@ -345,11 +338,10 @@ if(BUILD_TOXAV) toxav/toxav_old.c toxav/video.c toxav/video.h) - target_link_modules(toxav toxgroup ${OPUS_LIBRARIES} ${VPX_LIBRARIES}) - set(toxav_PKGCONFIG_REQUIRES ${toxav_PKGCONFIG_REQUIRES} opus vpx) + set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${OPUS_LIBRARIES} ${VPX_LIBRARIES}) + set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} opus vpx) - set(toxav_API_HEADERS ${toxcore_SOURCE_DIR}/toxav/toxav.h^toxav) - make_version_script(toxav ${toxav_API_HEADERS}) + set(toxcore_API_HEADERS ${toxcore_API_HEADERS} ${toxcore_SOURCE_DIR}/toxav/toxav.h^toxav) endif() ################################################################################ @@ -359,11 +351,10 @@ endif() ################################################################################ apidsl(toxencryptsave/toxencryptsave.api.h) -add_submodule(toxcore toxencryptsave +set(toxcore_SOURCES ${toxcore_SOURCES} toxencryptsave/toxencryptsave.c toxencryptsave/toxencryptsave.h) -target_link_modules(toxencryptsave toxcrypto) -set(toxencryptsave_API_HEADERS ${toxcore_SOURCE_DIR}/toxencryptsave/toxencryptsave.h^tox) +set(toxcore_API_HEADERS ${toxcore_API_HEADERS} ${toxcore_SOURCE_DIR}/toxencryptsave/toxencryptsave.h^tox) ################################################################################ # @@ -375,26 +366,8 @@ set(toxencryptsave_API_HEADERS ${toxcore_SOURCE_DIR}/toxencryptsave/toxencryptsa add_module(toxcore ${toxcore_SOURCES}) # Link it to all dependencies. -foreach(sublib ${toxcore_SUBLIBS}) - set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${${sublib}_LINK_MODULES}) -endforeach() target_link_modules(toxcore ${toxcore_LINK_MODULES}) -# Concatenate all the pkg-config Libs: lines. -foreach(sublib ${toxcore_SUBLIBS}) - set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} ${${sublib}_PKGCONFIG_LIBS}) -endforeach() - -# Concatenate all the pkg-config Requires: lines. -foreach(sublib ${toxcore_SUBLIBS}) - set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} ${${sublib}_PKGCONFIG_REQUIRES}) -endforeach() - -# Collect all API headers. -foreach(sublib ${toxcore_SUBLIBS}) - set(toxcore_API_HEADERS ${toxcore_API_HEADERS} ${${sublib}_API_HEADERS}) -endforeach() - # Make version script (on systems that support it) to limit symbol visibility. make_version_script(toxcore ${toxcore_API_HEADERS}) @@ -402,44 +375,6 @@ make_version_script(toxcore ${toxcore_API_HEADERS}) # "${CMAKE_INSTALL_INCLUDEDIR}/tox". install_module(toxcore DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tox) -################################################################################ -# -# :: Tox specification tests -# -################################################################################ - -# find_program(SPECTEST NAMES -# tox-spectest -# ../.stack-work/install/x86_64-linux/lts-2.22/7.8.4/bin/tox-spectest) -# -# if(NOT SPECTEST) -# find_program(STACK NAMES stack) -# if(STACK) -# set(SPECTEST -# ${STACK} --stack-yaml ${toxcore_SOURCE_DIR}/../stack.yaml exec -- -# tox-spectest) -# endif() -# endif() -# -# if(MSGPACK_FOUND) -# add_executable(toxcore-sut -# testing/hstox/binary_decode.c -# testing/hstox/binary_encode.c -# testing/hstox/driver.c -# testing/hstox/methods.c -# testing/hstox/packet_kinds.c -# testing/hstox/test_main.c -# testing/hstox/util.c) -# target_link_modules(toxcore-sut -# toxcore -# toxdht -# toxnetcrypto -# ${MSGPACK_LIBRARIES}) -# if(SPECTEST) -# add_test(NAME spectest COMMAND ${SPECTEST} $) -# endif() -# endif() - ################################################################################ # # :: Unit tests: no networking, just pure function calls. @@ -448,15 +383,6 @@ install_module(toxcore DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tox) include(CompileGTest) -function(unit_test subdir target) - if(HAVE_GTEST) - add_executable(unit_${target}_test ${subdir}/${target}_test.cpp) - target_link_modules(unit_${target}_test ${toxcore_SUBLIBS} gtest) - set_target_properties(unit_${target}_test PROPERTIES COMPILE_FLAGS "${TEST_CXX_FLAGS}") - add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} unit_${target}_test) - endif() -endfunction() - # The actual unit tests follow. # unit_test(toxav rtp) @@ -488,11 +414,7 @@ endif() function(auto_test target) if(NOT (MSVC AND ARGV1 STREQUAL "MSVC_DONT_BUILD")) add_executable(auto_${target}_test auto_tests/${target}_test.c) - target_link_modules(auto_${target}_test - toxcore - toxcrypto - toxmessenger - toxnetcrypto) + target_link_modules(auto_${target}_test toxcore) if(NOT ARGV1 STREQUAL "DONT_RUN") add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} auto_${target}_test) set_tests_properties(${target} PROPERTIES TIMEOUT "${TEST_TIMEOUT_SECONDS}") @@ -505,12 +427,7 @@ if(BUILD_TOXAV) add_executable(auto_monolith_test auto_tests/monolith_test.cpp ${ANDROID_CPU_FEATURES}) - target_link_modules(auto_monolith_test - ${LIBSODIUM_LIBRARIES} - ${OPUS_LIBRARIES} - ${VPX_LIBRARIES} - ${toxcore_PKGCONFIG_LIBS} - ) + target_link_libraries(auto_monolith_test ${toxcore_LINK_MODULES}) add_test(NAME monolith COMMAND ${CROSSCOMPILING_EMULATOR} auto_monolith_test) if(ANDROID_CPU_FEATURES) @@ -560,7 +477,7 @@ if(DHT_BOOTSTRAP) add_executable(DHT_bootstrap other/DHT_bootstrap.c other/bootstrap_node_packets.c) - target_link_modules(DHT_bootstrap toxnetcrypto) + target_link_modules(DHT_bootstrap toxcore) endif() option(BOOTSTRAP_DAEMON "Enable building of tox-bootstrapd" ON) @@ -586,7 +503,7 @@ if(BOOTSTRAP_DAEMON) other/bootstrap_daemon/src/tox-bootstrapd.c other/bootstrap_node_packets.c other/bootstrap_node_packets.h) - target_link_modules(tox-bootstrapd toxfriends ${LIBCONFIG_LIBRARIES}) + target_link_modules(tox-bootstrapd toxcore ${LIBCONFIG_LIBRARIES}) install(TARGETS tox-bootstrapd RUNTIME DESTINATION bin) endif() endif() @@ -615,7 +532,7 @@ if(NOT WIN32 endif() add_executable(DHT_test testing/DHT_test.c) -target_link_modules(DHT_test toxdht) +target_link_modules(DHT_test toxcore) add_executable(Messenger_test testing/Messenger_test.c) -target_link_modules(Messenger_test toxmessenger) +target_link_modules(Messenger_test toxcore) diff --git a/cmake/CompileGTest.cmake b/cmake/CompileGTest.cmake index 520ca06a..1974901e 100644 --- a/cmake/CompileGTest.cmake +++ b/cmake/CompileGTest.cmake @@ -47,3 +47,12 @@ if(GTEST_ALL_CC) endif() endif() endif() + +function(unit_test subdir target) + if(HAVE_GTEST) + add_executable(unit_${target}_test ${subdir}/${target}_test.cpp) + target_link_modules(unit_${target}_test toxcore gtest) + set_target_properties(unit_${target}_test PROPERTIES COMPILE_FLAGS "${TEST_CXX_FLAGS}") + add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} unit_${target}_test) + endif() +endfunction() diff --git a/cmake/ModulePackage.cmake b/cmake/ModulePackage.cmake index 8ee8d6d7..f0eef7c9 100644 --- a/cmake/ModulePackage.cmake +++ b/cmake/ModulePackage.cmake @@ -28,12 +28,6 @@ function(pkg_use_module mod pkg) endif() endfunction() -macro(add_submodule super lib) - add_module(${lib} ${ARGN}) - set(${super}_SUBLIBS ${${super}_SUBLIBS} ${lib}) - set(${super}_SOURCES ${${super}_SOURCES} ${${lib}_SOURCES}) -endmacro() - function(add_module lib) set(${lib}_SOURCES ${ARGN} PARENT_SCOPE) @@ -132,8 +126,8 @@ function(target_link_modules target) set(_targets ${_targets} ${target}) # Executables preferably link against static libraries, so they are # standalone and can be shipped without any external dependencies. As a - # frame of reference: tests become roughly 1-1.5M binaries instead of - # 100-200K on x86_64 Linux. + # frame of reference: tests become roughly 600-800K binaries instead of + # 50-100K on x86_64 Linux. set(${target}_primary static) set(${target}_secondary shared) endif()