From: Alexander GQ Gerasiov <gq@cs.msu.su>
Date: Sat, 5 Jan 2019 15:41:09 +0300
Subject: Change libraries hierarchy: links most of them into main .so.

I don't thinks this could be applied upstream as is, but allows me to reduce
target's summary size a lot.
---
 cmake/lib_name.cmake                          |  1 +
 dbms/CMakeLists.txt                           | 12 ++++++++----
 dbms/programs/benchmark/CMakeLists.txt        |  2 +-
 dbms/programs/client/CMakeLists.txt           |  4 +++-
 dbms/programs/copier/CMakeLists.txt           |  2 +-
 dbms/programs/local/CMakeLists.txt            |  2 +-
 dbms/programs/odbc-bridge/CMakeLists.txt      |  2 +-
 dbms/programs/performance-test/CMakeLists.txt |  2 +-
 dbms/programs/server/CMakeLists.txt           |  2 +-
 dbms/src/AggregateFunctions/CMakeLists.txt    |  3 +--
 dbms/src/Functions/CMakeLists.txt             |  8 ++++----
 dbms/src/Storages/System/CMakeLists.txt       |  2 +-
 dbms/src/TableFunctions/CMakeLists.txt        |  4 +++-
 13 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/cmake/lib_name.cmake b/cmake/lib_name.cmake
index 5c919b2..7f1869d 100644
--- a/cmake/lib_name.cmake
+++ b/cmake/lib_name.cmake
@@ -3,3 +3,4 @@ set(COMMON_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/libs/libcommon/include ${ClickHo
 set(DBMS_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/dbms/src ${ClickHouse_BINARY_DIR}/dbms/src)
 set(DOUBLE_CONVERSION_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/double-conversion)
 set(PCG_RANDOM_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libpcg-random/include)
+set(CITYHASH_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/cityhash102/include)
diff --git a/dbms/CMakeLists.txt b/dbms/CMakeLists.txt
index 0e4a36a..0cad596 100644
--- a/dbms/CMakeLists.txt
+++ b/dbms/CMakeLists.txt
@@ -148,11 +148,12 @@ target_link_libraries (clickhouse_common_io
         PRIVATE
     string_utils
     widechar_width
+        PUBLIC
     ${LZ4_LIBRARY}
     ${ZSTD_LIBRARY}
     ${DOUBLE_CONVERSION_LIBRARIES}
-    pocoext
         PUBLIC
+    pocoext
     ${Poco_Net_LIBRARY}
     ${Poco_Util_LIBRARY}
     ${Poco_Foundation_LIBRARY}
@@ -180,14 +181,17 @@ endif ()
 
 target_link_libraries (dbms
         PRIVATE
+	"-Wl,--whole-archive"
     clickhouse_parsers
     clickhouse_common_config
-        PUBLIC
-    clickhouse_common_io
-        PRIVATE
+    clickhouse_functions
+    clickhouse_aggregate_functions
     clickhouse_dictionaries
+    clickhouse_storages_system
     clickhouse_dictionaries_embedded
+	"-Wl,--no-whole-archive"
         PUBLIC
+    clickhouse_common_io
     pocoext
     ${MYSQLXX_LIBRARY}
         PRIVATE
diff --git a/dbms/programs/benchmark/CMakeLists.txt b/dbms/programs/benchmark/CMakeLists.txt
index dc55547..b850c3f 100644
--- a/dbms/programs/benchmark/CMakeLists.txt
+++ b/dbms/programs/benchmark/CMakeLists.txt
@@ -1,5 +1,5 @@
 add_library (clickhouse-benchmark-lib ${LINK_MODE} Benchmark.cpp)
-target_link_libraries (clickhouse-benchmark-lib PRIVATE clickhouse_aggregate_functions clickhouse-client-lib clickhouse_common_config clickhouse_common_io ${Boost_PROGRAM_OPTIONS_LIBRARY})
+target_link_libraries (clickhouse-benchmark-lib PRIVATE dbms clickhouse-client-lib ${Boost_PROGRAM_OPTIONS_LIBRARY})
 target_include_directories (clickhouse-benchmark-lib SYSTEM PRIVATE ${PCG_RANDOM_INCLUDE_DIR})
 
 if (CLICKHOUSE_SPLIT_BINARY)
diff --git a/dbms/programs/client/CMakeLists.txt b/dbms/programs/client/CMakeLists.txt
index 7fed7f7..69f5ab6 100644
--- a/dbms/programs/client/CMakeLists.txt
+++ b/dbms/programs/client/CMakeLists.txt
@@ -1,9 +1,11 @@
 add_library (clickhouse-client-lib ${LINK_MODE} Client.cpp)
-target_link_libraries (clickhouse-client-lib PRIVATE clickhouse_common_io clickhouse_functions clickhouse_aggregate_functions ${LINE_EDITING_LIBS} ${Boost_PROGRAM_OPTIONS_LIBRARY})
+target_link_libraries (clickhouse-client-lib PRIVATE ${LINE_EDITING_LIBS} ${Boost_PROGRAM_OPTIONS_LIBRARY} dbms)
 if (READLINE_INCLUDE_DIR)
     target_include_directories (clickhouse-client-lib SYSTEM PRIVATE ${READLINE_INCLUDE_DIR})
 endif ()
 
+target_include_directories (clickhouse-client-lib SYSTEM PRIVATE ${CITYHASH_INCLUDE_DIR})
+
 if (CLICKHOUSE_SPLIT_BINARY)
     add_executable (clickhouse-client clickhouse-client.cpp)
     target_link_libraries (clickhouse-client PRIVATE clickhouse-client-lib)
diff --git a/dbms/programs/copier/CMakeLists.txt b/dbms/programs/copier/CMakeLists.txt
index 1271b1b..8b28504 100644
--- a/dbms/programs/copier/CMakeLists.txt
+++ b/dbms/programs/copier/CMakeLists.txt
@@ -1,5 +1,5 @@
 add_library (clickhouse-copier-lib ${LINK_MODE} ClusterCopier.cpp)
-target_link_libraries (clickhouse-copier-lib PRIVATE clickhouse-server-lib clickhouse_functions clickhouse_aggregate_functions daemon)
+target_link_libraries (clickhouse-copier-lib PRIVATE clickhouse-server-lib daemon dbms)
 
 if (CLICKHOUSE_SPLIT_BINARY)
     add_executable (clickhouse-copier clickhouse-copier.cpp)
diff --git a/dbms/programs/local/CMakeLists.txt b/dbms/programs/local/CMakeLists.txt
index 07729d6..2bf5e7a 100644
--- a/dbms/programs/local/CMakeLists.txt
+++ b/dbms/programs/local/CMakeLists.txt
@@ -1,5 +1,5 @@
 add_library (clickhouse-local-lib ${LINK_MODE} LocalServer.cpp)
-target_link_libraries (clickhouse-local-lib PRIVATE clickhouse_common_io clickhouse-server-lib clickhouse_functions clickhouse_aggregate_functions clickhouse_table_functions ${Boost_PROGRAM_OPTIONS_LIBRARY})
+target_link_libraries (clickhouse-local-lib PRIVATE clickhouse-server-lib dbms ${Boost_PROGRAM_OPTIONS_LIBRARY})
 
 if (CLICKHOUSE_SPLIT_BINARY)
     add_executable (clickhouse-local clickhouse-local.cpp)
diff --git a/dbms/programs/odbc-bridge/CMakeLists.txt b/dbms/programs/odbc-bridge/CMakeLists.txt
index 02a67fb..1047a59 100644
--- a/dbms/programs/odbc-bridge/CMakeLists.txt
+++ b/dbms/programs/odbc-bridge/CMakeLists.txt
@@ -9,7 +9,7 @@ add_library (clickhouse-odbc-bridge-lib ${LINK_MODE}
     validateODBCConnectionString.cpp
 )
 
-target_link_libraries (clickhouse-odbc-bridge-lib PRIVATE clickhouse_common_io daemon dbms)
+target_link_libraries (clickhouse-odbc-bridge-lib PRIVATE daemon dbms)
 target_include_directories (clickhouse-odbc-bridge-lib PUBLIC ${ClickHouse_SOURCE_DIR}/libs/libdaemon/include)
 
 if (USE_POCO_SQLODBC)
diff --git a/dbms/programs/performance-test/CMakeLists.txt b/dbms/programs/performance-test/CMakeLists.txt
index a8b5f33..3134800 100644
--- a/dbms/programs/performance-test/CMakeLists.txt
+++ b/dbms/programs/performance-test/CMakeLists.txt
@@ -1,5 +1,5 @@
 add_library (clickhouse-performance-test-lib ${LINK_MODE} PerformanceTest.cpp)
-target_link_libraries (clickhouse-performance-test-lib PRIVATE dbms clickhouse_common_io clickhouse_common_config ${Boost_PROGRAM_OPTIONS_LIBRARY})
+target_link_libraries (clickhouse-performance-test-lib PRIVATE dbms ${Boost_PROGRAM_OPTIONS_LIBRARY})
 target_include_directories (clickhouse-performance-test-lib SYSTEM PRIVATE ${PCG_RANDOM_INCLUDE_DIR})
 
 if (CLICKHOUSE_SPLIT_BINARY)
diff --git a/dbms/programs/server/CMakeLists.txt b/dbms/programs/server/CMakeLists.txt
index d8caa07..5ed27e2 100644
--- a/dbms/programs/server/CMakeLists.txt
+++ b/dbms/programs/server/CMakeLists.txt
@@ -10,7 +10,7 @@ add_library (clickhouse-server-lib ${LINK_MODE}
     TCPHandler.cpp
     )
 
-target_link_libraries (clickhouse-server-lib PRIVATE clickhouse_common_io daemon clickhouse_storages_system clickhouse_functions clickhouse_aggregate_functions clickhouse_table_functions ${Poco_Net_LIBRARY})
+target_link_libraries (clickhouse-server-lib PRIVATE daemon dbms clickhouse_table_functions ${Poco_Net_LIBRARY})
 if (USE_POCO_NETSSL)
     target_link_libraries (clickhouse-server-lib PRIVATE ${Poco_NetSSL_LIBRARY} ${Poco_Crypto_LIBRARY})
 endif ()
diff --git a/dbms/src/AggregateFunctions/CMakeLists.txt b/dbms/src/AggregateFunctions/CMakeLists.txt
index 56cc66d..073651e 100644
--- a/dbms/src/AggregateFunctions/CMakeLists.txt
+++ b/dbms/src/AggregateFunctions/CMakeLists.txt
@@ -20,5 +20,4 @@ list(REMOVE_ITEM clickhouse_aggregate_functions_headers
 )
 
 add_library(clickhouse_aggregate_functions ${LINK_MODE} ${clickhouse_aggregate_functions_sources})
-target_link_libraries(clickhouse_aggregate_functions PRIVATE dbms)
-target_include_directories (clickhouse_aggregate_functions BEFORE PRIVATE ${COMMON_INCLUDE_DIR})
+target_include_directories (clickhouse_aggregate_functions BEFORE PRIVATE ${COMMON_INCLUDE_DIR} ${DBMS_INCLUDE_DIR} ${CITYHASH_INCLUDE_DIR} ${PCG_RANDOM_INCLUDE_DIR})
diff --git a/dbms/src/Functions/CMakeLists.txt b/dbms/src/Functions/CMakeLists.txt
index 1307c47..b4163c2 100644
--- a/dbms/src/Functions/CMakeLists.txt
+++ b/dbms/src/Functions/CMakeLists.txt
@@ -11,17 +11,17 @@ list(REMOVE_ITEM clickhouse_functions_headers IFunction.h FunctionFactory.h Func
 add_library(clickhouse_functions ${LINK_MODE} ${clickhouse_functions_sources})
 
 target_link_libraries(clickhouse_functions
-    PUBLIC
-        dbms 
     PRIVATE
-        clickhouse_dictionaries
         ${CONSISTENT_HASHING_LIBRARY}
         consistent-hashing-sumbur
         ${FARMHASH_LIBRARIES}
         ${METROHASH_LIBRARIES}
         murmurhash
         ${BASE64_LIBRARY}
-        ${OPENSSL_CRYPTO_LIBRARY})
+        ${OPENSSL_CRYPTO_LIBRARY}
+	${CITYHASH_LIBRARIES})
+
+target_include_directories (clickhouse_functions SYSTEM BEFORE PUBLIC ${DBMS_INCLUDE_DIR} ${COMMON_INCLUDE_DIR} ${PCG_RANDOM_INCLUDE_DIR})
 
 target_include_directories (clickhouse_functions SYSTEM BEFORE PUBLIC ${DIVIDE_INCLUDE_DIR})
 
diff --git a/dbms/src/Storages/System/CMakeLists.txt b/dbms/src/Storages/System/CMakeLists.txt
index 418c25d..4a763cd 100644
--- a/dbms/src/Storages/System/CMakeLists.txt
+++ b/dbms/src/Storages/System/CMakeLists.txt
@@ -12,4 +12,4 @@ include(${ClickHouse_SOURCE_DIR}/cmake/dbms_glob_sources.cmake)
 add_headers_and_sources(storages_system .)
 list (APPEND storages_system_sources ${CONFIG_BUILD})
 add_library(clickhouse_storages_system ${LINK_MODE} ${storages_system_headers} ${storages_system_sources})
-target_link_libraries(clickhouse_storages_system PRIVATE dbms common string_utils clickhouse_common_zookeeper)
+target_link_libraries(clickhouse_storages_system PRIVATE common string_utils clickhouse_common_zookeeper)
diff --git a/dbms/src/TableFunctions/CMakeLists.txt b/dbms/src/TableFunctions/CMakeLists.txt
index 0ab5ace..f079d5b 100644
--- a/dbms/src/TableFunctions/CMakeLists.txt
+++ b/dbms/src/TableFunctions/CMakeLists.txt
@@ -5,4 +5,6 @@ list(REMOVE_ITEM clickhouse_table_functions_sources ITableFunction.cpp TableFunc
 list(REMOVE_ITEM clickhouse_table_functions_headers ITableFunction.h TableFunctionFactory.h)
 
 add_library(clickhouse_table_functions ${LINK_MODE} ${clickhouse_table_functions_sources})
-target_link_libraries(clickhouse_table_functions PRIVATE clickhouse_storages_system dbms ${Poco_Foundation_LIBRARY})
+target_link_libraries(clickhouse_table_functions PRIVATE ${Poco_Foundation_LIBRARY} ${CITYHASH_LIBRARIES} ${MYSQLXX_LIBRARY})
+
+target_include_directories (clickhouse_table_functions SYSTEM BEFORE PUBLIC ${DBMS_INCLUDE_DIR} ${COMMON_INCLUDE_DIR})
