From de11d68a48e397b555731be04ba695b2ba1a0ccf Mon Sep 17 00:00:00 2001
From: Roman Tsisyk <roman@tarantool.org>
Date: Fri, 21 Jul 2017 14:08:43 +0300
Subject: [PATCH] CMake: refactor dependencies of internal libraries

Follow up #2507, needed fir unit tests
---
 src/CMakeLists.txt       |  46 +++++++++--------
 src/box/CMakeLists.txt   |  14 ++++--
 test/unit/CMakeLists.txt | 104 ++++++++++++++++++---------------------
 3 files changed, 84 insertions(+), 80 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7e02de070d..2df141024b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -70,19 +70,25 @@ set (core_sources
      diag.c
      say.c
      memory.c
+     clock.c
      fiber.c
      fiber_pool.c
      fiber_cond.c
      fiber_channel.c
+     latch.c
+     sio.cc
+     evio.cc
+     coio.cc
+     coio_task.c
+     coio_file.c
+     coio_buf.cc
+     fio.c
      cbus.c
      exception.cc
      reflection.c
      assoc.c
-     rmean.c
-     latency.c
-     histogram.c
      util.c
-     path_lock.c
+     random.c
  )
 
 if (TARGET_OS_NETBSD)
@@ -96,9 +102,13 @@ add_library(core STATIC ${core_sources})
 target_link_libraries(core
     salad small pthread
     ${LIBEV_LIBRARIES}
+    ${LIBEIO_LIBRARIES}
     ${LIBCORO_LIBRARIES}
 )
 
+add_library(stat STATIC rmean.c latency.c histogram.c)
+target_link_libraries(stat core)
+
 if (CC_HAS_WNO_IMPLICIT_FALLTHROUGH)
     # Suppress noise warnings for autogenerated Ragel code
     set_source_files_properties(uri.c PROPERTIES COMPILE_FLAGS
@@ -106,32 +116,27 @@ if (CC_HAS_WNO_IMPLICIT_FALLTHROUGH)
 endif()
 add_library(uri STATIC uri.c)
 
+add_library(uuid STATIC tt_uuid.c)
+target_link_libraries(uuid core bit)
+
+add_library(scramble STATIC scramble.c)
+target_link_libraries(scramble core misc)
+
+add_library(crc32 STATIC crc32.c cpu_feature.c)
+
 set (server_sources
      find_path.c
-     sio.cc
-     evio.cc
-     coio.cc
-     coio_task.c
-     coio_file.c
      iobuf.cc
      httpc.c
-     coio_buf.cc
      pickle.c
-     latch.c
      errinj.c
-     fio.c
-     crc32.c
-     random.c
-     scramble.c
      opts.c
      cfg.c
      cpu_feature.c
-     tt_uuid.c
-     uri.c
      backtrace.cc
      title.c
      proc_title.c
-     clock.c
+     path_lock.c
      systemd.c
      version.c
      lua/digest.c
@@ -192,7 +197,7 @@ endif()
 
 set_source_files_compile_flags(${server_sources})
 add_library(server STATIC ${server_sources})
-target_link_libraries(server core bit uri)
+target_link_libraries(server core bit uri uuid)
 
 # Rule of thumb: if exporting a symbol from a static library, list the
 # library here.
@@ -201,7 +206,6 @@ set (reexport_libraries server core misc bitset csv
 
 set (common_libraries
     ${reexport_libraries}
-    ${LIBEIO_LIBRARIES}
     ${LIBGOPT_LIBRARIES}
     ${LIBYAML_LIBRARIES}
     ${READLINE_LIBRARIES}
@@ -226,7 +230,7 @@ if (ENABLE_BACKTRACE AND HAVE_BFD)
     set (common_libraries ${common_libraries} ${BFD_LIBRARIES})
 endif()
 
-set (common_libraries ${common_libraries} ${LIBUUID_LIBRARIES})
+set (common_libraries ${common_libraries})
 set (common_libraries ${common_libraries} PARENT_SCOPE)
 
 add_subdirectory(lib)
diff --git a/src/box/CMakeLists.txt b/src/box/CMakeLists.txt
index c1f85ee277..7ee151f26f 100644
--- a/src/box/CMakeLists.txt
+++ b/src/box/CMakeLists.txt
@@ -19,8 +19,15 @@ set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${lua_sources})
 
 include_directories(${ZSTD_INCLUDE_DIRS})
 
-add_library(xrow STATIC xrow.c iproto_constants.c vclock.c errcode.c)
-target_link_libraries(xrow server core small)
+add_library(box_error STATIC error.cc errcode.c)
+target_link_libraries(box_error core stat)
+
+add_library(vclock STATIC vclock.c)
+target_link_libraries(vclock core)
+
+add_library(xrow STATIC xrow.c iproto_constants.c)
+target_link_libraries(xrow server core small vclock misc box_error
+                      scramble ${MSGPUCK_LIBRARIES})
 
 add_library(box STATIC
     iproto.cc
@@ -101,5 +108,6 @@ add_library(box STATIC
     lua/xlog.c
     ${bin_sources})
 
-target_link_libraries(box xrow ${ZSTD_LIBRARIES} ${common_libraries})
+target_link_libraries(box box_error stat xrow vclock crc32 scramble
+                      ${ZSTD_LIBRARIES} ${common_libraries})
 add_dependencies(box build_bundled_libs)
diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index e86f4c980c..3bfe94b9b8 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -8,21 +8,32 @@ set_source_files_compile_flags(${all_sources})
 include_directories(${PROJECT_SOURCE_DIR}/src)
 include_directories(${PROJECT_BINARY_DIR}/src)
 include_directories(${CMAKE_SOURCE_DIR}/third_party)
-add_executable(heap.test heap.c unit.c)
-add_executable(heap_iterator.test heap_iterator.c unit.c)
-add_executable(rlist.test rlist.c unit.c)
-add_executable(stailq.test stailq.c unit.c)
+
+add_library(unit STATIC unit.c)
+
+add_executable(heap.test heap.c)
+target_link_libraries(heap.test unit)
+add_executable(heap_iterator.test heap_iterator.c)
+target_link_libraries(heap_iterator.test unit)
+add_executable(rlist.test rlist.c)
+target_link_libraries(rlist.test unit)
+add_executable(stailq.test stailq.c)
+target_link_libraries(stailq.test unit)
 add_executable(uri.test uri.c unit.c)
-target_link_libraries(uri.test uri)
+target_link_libraries(uri.test uri unit)
 add_executable(queue.test queue.c)
 add_executable(mhash.test mhash.c)
 add_executable(mhash_bytemap.test mhash_bytemap.c)
-add_executable(rope_basic.test rope_basic.c ${CMAKE_SOURCE_DIR}/src/lib/salad/rope.c)
-add_executable(rope_avl.test rope_avl.c ${CMAKE_SOURCE_DIR}/src/lib/salad/rope.c)
-add_executable(rope_stress.test rope_stress.c ${CMAKE_SOURCE_DIR}/src/lib/salad/rope.c)
-add_executable(rope.test rope.c ${CMAKE_SOURCE_DIR}/src/lib/salad/rope.c)
-add_executable(bit.test bit.c bit.c)
+add_executable(rope_basic.test rope_basic.c)
+target_link_libraries(rope_basic.test salad)
+add_executable(rope_avl.test rope_avl.c)
+target_link_libraries(rope_avl.test salad)
+add_executable(rope_stress.test rope_stress.c)
+target_link_libraries(rope_stress.test salad)
+add_executable(rope.test rope.c)
+target_link_libraries(rope.test salad)
 add_executable(int96.test int96.cc)
+add_executable(bit.test bit.c bit.c)
 target_link_libraries(bit.test bit)
 add_executable(bitset_basic.test bitset_basic.c)
 target_link_libraries(bitset_basic.test bitset)
@@ -32,11 +43,8 @@ add_executable(bitset_index.test bitset_index.c)
 target_link_libraries(bitset_index.test bitset)
 add_executable(base64.test base64.c)
 target_link_libraries(base64.test misc)
-
-add_executable(uuid.test uuid.c unit.c
-        ${CMAKE_SOURCE_DIR}/src/tt_uuid.c
-        ${CMAKE_SOURCE_DIR}/src/random.c)
-target_link_libraries(uuid.test bit core)
+add_executable(uuid.test uuid.c)
+target_link_libraries(uuid.test uuid unit)
 
 add_executable(bps_tree.test bps_tree.cc)
 target_link_libraries(bps_tree.test small misc)
@@ -52,23 +60,19 @@ add_executable(light.test light.cc)
 target_link_libraries(light.test small)
 add_executable(bloom.test bloom.cc)
 target_link_libraries(bloom.test salad)
-add_executable(vclock.test vclock.cc unit.c
-    ${CMAKE_SOURCE_DIR}/src/box/error.cc
-    ${CMAKE_SOURCE_DIR}/src/rmean.c
-    ${CMAKE_SOURCE_DIR}/src/histogram.c)
-target_link_libraries(vclock.test xrow core salad small)
-add_executable(xrow.test xrow.cc unit.c
-    ${CMAKE_SOURCE_DIR}/src/box/error.cc)
-target_link_libraries(xrow.test server misc xrow ${MSGPUCK_LIBRARIES})
-
-add_executable(fiber.test fiber.cc unit.c)
+add_executable(vclock.test vclock.cc)
+target_link_libraries(vclock.test vclock unit)
+add_executable(xrow.test xrow.cc)
+target_link_libraries(xrow.test xrow unit)
+
+add_executable(fiber.test fiber.cc)
 set_source_files_properties(fiber.cc PROPERTIES COMPILE_FLAGS -O0)
-target_link_libraries(fiber.test core)
+target_link_libraries(fiber.test core unit)
 
 if (NOT ENABLE_GCOV)
     # This test is known to be broken with GCOV
-    add_executable(guard.test guard.cc unit.c)
-    target_link_libraries(guard.test core)
+    add_executable(guard.test guard.cc)
+    target_link_libraries(guard.test core unit)
 endif ()
 
 add_executable(fiber_stress.test fiber_stress.cc)
@@ -83,14 +87,8 @@ target_link_libraries(fiber_channel.test core)
 add_executable(fiber_channel_stress.test fiber_channel_stress.cc)
 target_link_libraries(fiber_channel_stress.test core)
 
-add_executable(coio.test coio.cc unit.c
-        ${CMAKE_SOURCE_DIR}/src/sio.cc
-        ${CMAKE_SOURCE_DIR}/src/evio.cc
-        ${CMAKE_SOURCE_DIR}/src/coio.cc
-        ${CMAKE_SOURCE_DIR}/src/coio_task.c
-        ${CMAKE_SOURCE_DIR}/src/fio.c
-        ${CMAKE_SOURCE_DIR}/src/iobuf.cc)
-target_link_libraries(coio.test core eio bit uri)
+add_executable(coio.test coio.cc ${CMAKE_SOURCE_DIR}/src/iobuf.cc)
+target_link_libraries(coio.test core eio bit uri unit)
 
 if (ENABLE_BUNDLED_MSGPUCK)
     set(MSGPUCK_DIR ${PROJECT_SOURCE_DIR}/src/lib/msgpuck/)
@@ -106,10 +104,8 @@ if (ENABLE_BUNDLED_MSGPUCK)
     target_link_libraries(msgpack.test ${MSGPUCK_LIBRARIES})
 endif ()
 
-add_executable(scramble.test scramble.c
-    ${CMAKE_SOURCE_DIR}/src/scramble.c
-    ${CMAKE_SOURCE_DIR}/src/random.c)
-target_link_libraries(scramble.test misc core)
+add_executable(scramble.test scramble.c)
+target_link_libraries(scramble.test scramble)
 
 add_executable(guava.test guava.c)
 target_link_libraries(guava.test salad small)
@@ -122,24 +118,20 @@ add_executable(reflection_c.test reflection_c.c unit.c
     ${CMAKE_SOURCE_DIR}/src/reflection.c)
 add_executable(reflection_cxx.test reflection_cxx.cc unit.c
     ${CMAKE_SOURCE_DIR}/src/reflection.c)
-add_executable(csv.test csv.c
-    ${CMAKE_SOURCE_DIR}/src/lib/csv/csv.c
-)
-
-add_executable(rmean.test rmean.cc unit.c
-        ${CMAKE_SOURCE_DIR}/src/rmean.c)
-target_link_libraries(rmean.test core)
+add_executable(csv.test csv.c)
+target_link_libraries(csv.test csv)
 
-add_executable(histogram.test histogram.c unit.c
-        ${CMAKE_SOURCE_DIR}/src/histogram.c)
-target_link_libraries(histogram.test core)
+add_executable(rmean.test rmean.cc)
+target_link_libraries(rmean.test stat unit)
+add_executable(histogram.test histogram.c)
+target_link_libraries(histogram.test stat unit)
 
-add_executable(say.test say.c unit.c)
-target_link_libraries(say.test core)
+add_executable(say.test say.c)
+target_link_libraries(say.test core unit)
 
 include_directories(${PROJECT_SOURCE_DIR}/src/box)
-add_executable(vy_mem.test vy_mem.c unit.c)
-target_link_libraries(vy_mem.test box)
+add_executable(vy_mem.test vy_mem.c)
+target_link_libraries(vy_mem.test box unit)
 
-add_executable(column_mask.test column_mask.c unit.c)
-target_link_libraries(column_mask.test box)
+add_executable(column_mask.test column_mask.c)
+target_link_libraries(column_mask.test box unit)
-- 
GitLab